세션(Session), 쿠키(Cookie), 토큰(Token) 비교 정리
세션, 쿠키, 토큰은 모두 웹에서 사용자의 인증을 위해 사용하는 방법이다.
기본적으로 HTTP 연결은 무상태성(Stateless)과 무연결성(Connectionless)라는 특징을 가졌기 때문에 이와 같은 방법들로 상태성과 연결성은 유지한다.
하지만 세션. 쿠키, 토큰 모두 각각의 특징과 장단점이 다르다.
쿠키(Cookie)
쿠키는 사용자의 브라우저에 저장되는 작은 데이터 조각이다.
서버는 응답 헤더에 쿠키를 담아 보내고, 브라우저는 요청 헤더에 쿠키를 담아 보낸다. 쿠키는 사용자의 상태를 유지하거나 선호 설정을 저장하는 등의 용도로 사용된다. 쿠키는 만료 기간을 설정할 수 있고, 도메인별로 구분된다.
클라이언트의 로컬 저장소에 쿠키를 저장하기 때문에 인증 정보와 같은 중요 정보를 쿠키에 저장시, 해킹으로 인해 유출될 수 있다.
세션(Session)
세션은 서버에 저장되는 사용자의 정보이다.
서버는 사용자를 식별할 수 있는 세션 아이디를 생성하고, 이를 쿠키에 저장하여 전달한다. 브라우저는 세션 아이디를 가진 쿠키를 요청 헤더에 담아 보내고, 서버는 세션 아이디를 통해 사용자의 인증을 확인한다. 세션은 로그인 상태를 유지하거나 개인화된 서비스를 제공하는 등의 용도로 사용된다. 세션은 서버의 자원을 소모하고, 서버의 확장성을 저해할 수 있다.
인증정보등을 서버측에서 저장하기 때문에 보안성 측면에서는 쿠키보다 향상되었지만, 세션 정보가 노출될 수 있기 때문에 완벽한 보안을 제공하지는 못한다.
토큰(Token)
토큰은 사용자의 인증 정보를 암호화한 문자열이다.
서버는 로그인 요청에 대해 토큰을 생성하고, 이를 응답 본문에 담아 보낸다. 브라우저는 토큰을 저장하고, 요청 헤더에 토큰을 담아 보낸다. 서버는 토큰을 복호화하여 사용자의 인증을 확인한다. 토큰은 서버의 자원을 절약하고, 다른 인증 시스템과 호환성을 갖는 등의 용도로 사용된다.
토큰은 탈취되거나 만료되기 전까지 유효하므로 탈취에 주의해야한다.