기록과 정리

쿠키 vs 세션 vs 토큰 본문

IT/보안

쿠키 vs 세션 vs 토큰

zepetto 2022. 2. 8. 09:55

서문 

HTTP 프로토콜은 매 요청마다 서버 입장에서 클라이언트가 '누구'인지 확인을 해야한다. 

이는 HTTP의 Connectionless (클라이언트 요청&응답 후 연결을 끊는 특징), Stateless(연결이 끊는 순간, 상태 정보를 유지하지 않는 특징)한 특징때문이다. 이를 해결하여 '로그인' 같은 기능이나 지속적으로 자원(Resource) 활용을 하는 방법으로

 

쿠키/세션/토큰 

 

위 세가지 방법이 존재하며 , 세가지 방법에 대한 특징을 알아보려한다.

 

쿠키

HTTP 쿠키(cookie, 먹는 쿠키 아님)는 인터넷 사용자가 웹 사이트를 이용시, 사용자 PC에서 작은 기록 파일을 얻는다. 키와 값으로 이루어져있는 작은 데이터 파일 형태로, 48KB 저장 가능하며 웹 브라우저가 종료되면 삭제된다. 웹 초기에는 쿠키 인증방식을 채택하였지만 클라이언트에 저장되는 특성으로 대부분 세션 방식으로 넘어갔다.


https://ko.wikipedia.org/wiki/HTTP_%EC%BF%A0%ED%82%A4

 

HTTP 쿠키 - 위키백과, 우리 모두의 백과사전

쿠키(영어: cookie)란 하이퍼 텍스트의 기록서(HTTP)의 일종으로서 인터넷 사용자가 어떠한 웹사이트를 방문할 경우 그 사이트가 사용하고 있는 서버를 통해 인터넷 사용자의 컴퓨터에 설치되는 작

ko.wikipedia.org

 

세션

세션(session)은 사전적 의미로 사용자와 서버간 통신을 위한 논리적 연결을 의미한다. 클라이언트 측에 저장되는 쿠키와 달리 세션은 서버에 저장이 되기 때문에 보안상 더 안전한다. ( 쿠키에 비해 )

 

세션 인증 순서

브라우저별로 조금씩 상이할 수 있습니다. 

1. 사용자 로그인 요청

2. 사용자 확인 ( request-header cookie 값으로 포함 )

3. 회원 정보 세션 생성 및 저장소에 저장  ( file, DB, memory ..)

4. Session ID 발급

5. Session 전달

6. 데이터 요청 (+세션 쿠키)

7. 쿠키 확인 및 검증

8. 세션 획득

9. 응답

Network 탭

서버로 부터 JSESSIONID를 키값으로 Session ID를 발급받아서 클라이언트는 해당 세션을 확인한다. 보통 HttpSession 은 Web.xml 설정에 <session-timeout> 에 지정된 값까지 살아 있으며 기본 30분이다. 해당 시간이상 지속이 된다면 서블릿 컨테이너가 session을 삭제하고 Time out이 발생한다.

 

Session은 쿠키 방식과 달리 서버에 저장하는 방식이기 때문에 Resource 낭비가 큰 방식이라고 한다. 이를 보완 할 수 있는 방식이 Token 방식이라고 할 수 있다. 

 

토큰

토큰(Token)은 사용자 인증을 위한 정보를 서버에 저장하지 않고 , 암호화를 이용하여 데이터를 서버 내에서 검증하여 클라이언트로 전달하는 방식이다.

 저장소를 이용하지 않기 때문에 서버에 대한 부담이 적고 세션 방식과 달리 클라이언트의 정보를 서버에 저장하지 않기 때문에 (무상태성) 서버 확장에 유리하다. 토큰 검증만 된다면 다른 플랫폼 , 서비스 간에 사용이 편리하다.

 

단순 웹 토큰 (SWT)와 SAML(Security Accertion Markup Language) 외 근래에는 JWT(JSON Web Token)을 주로 사용한다. 

(JWT에 대한 내용은 따로 포스팅 진행하여 정리하도록 하겠습니다.)

 

-> 쿠키/세션/토큰 방식이든 정답은 없으며 상황에 따라 적절히 사용하시면 될 것 같습니다.

'IT > 보안' 카테고리의 다른 글

OAuth2.0 이란?  (0) 2022.01.21