Session과 Cookie의 로그인 유지
✒️ 2025-07-02 18:18 내용 수정
- 수업시간에 Session과 Cookie를 사용한 로그인 유지 방법에 대해 궁금한 점이 생겼고, 멘토님과의 질의응답 후 내용을 간단하게 정리했다.
- 정리한 내용을 이후에 다시 수정하거나 보충할 수도 있다.
- 정리한 내용이 정확하지 않을 수 있다.
로그인 유지 방법의 차이
질문
- Spring boot 수업을 들으며 지금까지는 서버 Session으로 사용자 정보를 저장하고, 클라이언트로 Session에 저장된 정보를 전송하는 식으로 로그인을 유지했다.
- Cookie로 사용자 정보를 저장하는 경우엔 클라이언트에 Cookie를 저장하고 매 요청마다 요청에 포함된 Cookie를 Spring Security가 검증하는 식으로 로그인을 유지하는 걸까.
1. Session 기반으로 로그인 유지
- Spring Security가 SecurityContext에 사용자 정보를 저장하고, Cookie에 JSSESIONID를 담아서 클라이언트에 전송
- 클라이언트는 JSESSIONID가 포함된 Cookie를 요청마다 포함하여 전송
- 서버에서 JSESSIONID를 사용하여 Session을 식별할 때 사용할 수 있음
2. Cookie 기반으로 로그인 유지
- JWT Token을 주로 사용하며, Session을 사용하지 않는 Stateless일 때 사용
- 로그인 시 사용자 정보를 기반으로 JWT 토큰 발급
- 사용자 정보, 서명을 포함한 문자열 생성
- Cookie에 JWT 토큰을 저장하거나 LocalStorage에 저장
- Cookie에 저장하는 경우엔 JWT 토큰을 클라이언트도 Cookie에 JWT Token을 자동으로 포함하여 전송
- LocalStorage에 저장하는 경우엔 JWT 토큰을 따로 요청 Cookie에 포함시켜야 함
- Spring Security가 수신한 JWT Token을 검증하여 이후 요청을 처리
Session으로 로그인 정보를 저장하지 않는 경우
질문
- Session을 사용하지 않는 경우라면 REST API 서버용으로 제작할 때만 있는 것 같았다.
Session 저장을 사용하지 않는 경우
- REST API용으로만 사용하는 것은 아니고, 다음과 같은 경우에 Session 대신 Cookie로 로그인을 유지한다.
- SPA와 같은 클라이언트와 서버가 완전히 분리된 경우
- 클라이언트가 HTTP 요청을 직접 넣어야 하는 경우(Bear Token 등)
- Stateless로 설계해야 하는 경우
- 서버 확장을 크게 하는 경우
- 하나의 프로그램에 여러 서버를 가지는 경우(Load balancer 등)