Yebali

쿠키, 세션 그리고 토큰 본문

Backend Common

쿠키, 세션 그리고 토큰

예발이 2022. 1. 21. 22:56

백엔드 개발자라면 알아야 하는 상식이지만... 누군가의 물음에 답하지 못한 슬픈 일이 있어서 정리한다.

 

쿠키와 세션의 필요성

HTTP은 요청과 응답이 끝나면 연결을 끊어버리는 비연결 지향의 통신이며,
동시에 상태를 저장하지 않는 Stateless방식의 통신이다.

 

그래서 로그인과 같은 일을 할 때, '누가' 로그인 한 '상태'인지를 기억하기 위해 쿠키, 세션, 토큰을 사용한다.

 

쿠키(Cookie)란?

HTTP의 일종으로 사용자가 어떤 웹 사이트를 방문할 경우 그 사이트의 서버를 통해 사용자 쪽에 설치되는 작은 기록 정보를 말한다.
주로 사용자의 웹 페이지의 방문 기록, 서버에서 발급된 세션을 열기 위한 키 값 등의 정보를 저장한다. (일반적으로 브라우저에 저장)

 

세션(Session)이란?

세션은 쿠키를 기반하고 있지만, 사용자와 관련된 정보를 서버 측에 저장한다.

 

쿠키와 세션의 차이점

쿠키와 세션은 비슷한 역할을 하며 동작 도 비슷합니다. (세션은 결국 쿠키를 사용함)

카장 큰 차이는 사용자의 정보가 저정되는 위치입니다. 쿠키는 모든 정보를 사용자 쪽에 저장하며 세션은 서버의 자원도 함께 사용합니다.

 

쿠키만으로 인증할 경우 해커가 HTTP Request를 탈취해 경우 모든 정보가 유출될 수 있어 보안면에서는 세션이 우수합니다.

반면, 세션을 사용 할 경우 서버의 처리가 필요하기 때문에 로직 처리 속도는 쿠키가 더 빠릅니다.

 

그리고 세션은 서버의 자원을 사용하기 때문에 무분별하게 사용된다면 서버의 메모리가 감당하지 못할 수 있어 쿠키가 유리한 면도 있다.

 

토큰(Token)이란?

인증에 필요한 정보들을 암호화시킨 토큰을 의미합니다. 쿠키/세션과 유사하게 사용자는 Token을 HTTP 헤더에 담아 서버에 전송합니다. 토큰은 임의로 생성된 비밀번호같이 동작합니다. 제한된 수명을 가지고, 새로운 토큰은 한 번 만료되면 새로 생성되어야 합니다.

'Backend Common' 카테고리의 다른 글

Time zone과 표준시  (0) 2022.11.27
[WebSocket] WebSocket이란?  (0) 2022.09.27
[JAVA] Garbage Collection의 개념과 동작  (0) 2022.09.25
[JAVA] JVM의 구조  (0) 2022.09.25
[Java] Java 컴파일과 실행 순서  (1) 2022.09.25