오늘의 질문
쿠키와 세션의 차이에 대해서 설명해주세요.

쿠키

클라이언트에 저장되며, 키와 값으로 이루어진 작은 데이터 파일이다. 보통 클라이언트와 서버는 HTTP 프로토콜을 이용해 통신을 하는데, 이러한 HTTP 는 비연결성, 무상태성이라는 특징을 가지기 때문에 쿠키가 주로 사용된다.

클라이언트가 로그인을 완료하고 첫 페이지는 welcome 페이지에 접근한다고 가정하자. 이 때 클라이언트는 쿠키 저장소에서 쿠키를 꺼내 HTTP 요청에 쿠키를 담아 전송한다. 그러면 서버는 쿠키를 읽어 클라이언트를 식별할 수 있다. 만약 쿠키가 없다면 무상태성인 HTTP 프로토콜의 특징에 따라 로그인을 다시 해야 할 것이다.


세션

일정 기간 동안 같은 사용자(클라이언트)로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 유지시키는 기술이다. 쿠키를 기반으로 하긴 하지만 서버 측에서 저장하고 관리한다는 차이점이 있다.

이번엔 클라이언트가 서버에 로그인을 요청한다고 생각해 보자. 서버는 로그인 요청을 처리하고 클라이언트의 정보를 담은 세션을 생성한다. 이후 세션 ID 를 담은 쿠키를 생성하고 HTTP 헤더에 set-Cookie 옵션으로 쿠키를 포함한 응답을 보낸다. 클라이언트는 해당 쿠키를 쿠키 저장소에 저장해둔다. 그 다음 welcome 페이지에 접근할 때, 클라이언트는 해당 쿠키를 HTTP 요청에 담아 전송하고, 서버는 쿠키에서 세션 ID 를 읽어 클라이언트를 식별할 수 있게 된다.


JWT 와의 차이점은?

위와 같은 쿠키/세션 방식의 로그인과 JWT 방식의 로그인의 차이는 무엇일까? 정리해 보았다.

항목쿠키/세션 기반JWT 기반
상태 유지서버가 세션의 상태를 유지클라이언트가 토큰을 저장, 서버는 무상태
저장 위치세션은 서버, 세션 ID 는 클라이언트 쿠키로 저장토큰 자체가 클라이언트에 저장
확장성낮음(세션 동기화 필요)높음(서버 확장 쉬움)
무효화 처리(로그아웃)쉬움(세션 삭제)어려움(블랙리스트 구현 필요)
보안쿠키 관리에 따라 안전XSS/CORS 등 보안 고려 필요
클라이언트 부담낮음높음(토큰 보관 및 전송 필요)


📎 참고자료

쿠키와 세션의 차이, 쿠키란? 세션이란?