본문 바로가기
Skills/Mobile App

모바일 앱에서 세션을 사용하지 않는 이유

by Hoseok 2023. 11. 10.
728x90
반응형

 

1. 웹에서의 세션을 이용한 인증 방식

 

웹에서는 세션을 이용한 사용자 인증을 사용한다.

 

아래 그림을 보자.

 

1. 클라이언트가 username, password로 로그인

2. 서버에서 세션 저장 공간에 session_id를 생성, 저장 후 클라이언트로 보냄

3. 클라이언트는 session_id를 쿠키에 저장

4. 클라이언트는 요청 시, session_id를 header에 담아서 요청

5. 서버는 session_id가 유효한 지 검증 후, 맞다면 데이터 반환

 

이런 방식을 취한다.

 

물론, 트래픽이 커지고, 서버가 많아지며, 스케일 아웃을 하게 되면, 세션도 Redis 세션을 사용하는 등,

 

여러 변화가 생기게 되지만, 기본적인 인증 방식은 이런 식이다.

 

그렇다면 모바일 앱은 어떨까?

 

2. 모바일 앱에서의 토큰 기반 인증 방식

 

우리 핸드폰에는 브라우저처럼 쿠키라는 저장 공간이 존재하지 않는다.

 

그렇기 때문에, 모바일 앱에서는 주로 토큰 기반 인증 방식을 사용한다.

 

크게 OAuth 2.0 또는 JWT가 있다.

 

OAuth 2.0은 네이버, 카카오, 구글 로그인 같은 것이다.

 

대략 아래 그림과 같다.

 

출처: https://cloudsundial.com/salesforce-oauth-flows

 

 

JWT는 특이한 형태의 토큰을 이용한 인증 방식이다.

 

 

 

OAuth는 신뢰할 수 있는 기관에 인증을 대행한다는 것이고, JWT는 SecretKey를 기반으로 암호화된 토큰을 방식으로 인증하는 것이다. JWT의 Refresh token, 유효시간을 얼마나 줄 것인지, 장점, 단점 등등 자세한 설명은 생략하겠다.

 

어쨌든 간에, 

 

모바일 앱에서는 이러한 방식을 이용하여, iOS에서는 Keychain을, Android에서는 SharedPreferences 같은 저장소에 토큰을 저장하여 인증을 처리하게 된다.

 

3. 왜 모바일 앱에서는 세션을 사용하지 않을까?

 

내가 내린 결론은,

 

모바일 앱에서도 세션 기반 인증을 사용할 수는 있지만, 웹 브라우저와 달리 모바일 앱에서는 세션 쿠키를 관리하는 내장된 메커니즘이 없기 때문에 개발자가 직접 세션을 관리해야 한다는 것이다.

 

이는 상대적으로 복잡하고 오류가 발생하기 쉬워, 모바일 앱에서는 세션보다는 토큰 기반 인증이 선호되는 것 같다.

또한 토큰 기반 인증은 서버와 클라이언트 간에 상태를 유지할 필요가 없으므로, 상태가 없는(stateless) RESTful API와도 더 적합하다.

 

정말 세션을 사용해야겠다 하는 경우,

 

모바일 앱에서는 세션 아이디를 안전하게 저장하고 필요할 때마다 네트워크 요청에 포함시켜야 한다.

 

이 방식을 통해 웹에서의 쿠키 기반 세션 관리와 유사하게 만들어낼 수 있지만, 추가적인 코드 작성과 관리가 필요하게 된다.

728x90
반응형