Set-Cookie
필드에 정보를 담아 보냅니다. (예: Set-Cookie: userId=123
)Cookie
필드에 저장해 둔 쿠키를 자동으로 실어 보냅니다.Set-Cookie: sessionId=xyz-abc-123
)가장 큰 차이점은데이터의 저장 위치입니다. 쿠키는 클라이언트의 브라우저에 저장되는 반면, 세션은 서버 측에서 데이터를 관리합니다. 이로 인해보안면에서는 중요한 정보를 서버에 보관하는 세션이 더 유리하며, 저장할 수 있는데이터의 형식이나 용량에도 차이가 있습니다. 세션 방식에서는 클라이언트 식별을 위한 세션 ID만을 쿠키를 통해 주고받습니다."
세션은 기본적으로 서버의 메모리에 저장되기 때문에, 서버가 여러 대로 늘어나는스케일 아웃 환경에서 세션 불일치 문제가 발생할 수 있습니다. 예를 들어, 첫 요청을 처리한 A 서버에 세션이 생성되었는데 다음 요청이 B 서버로 가면, B 서버는 해당 세션 정보를 모르기 때문에 사용자의 로그인 상태가 유실될 수 있습니다. 이를 해결하기 위해 모든 요청을 같은 서버로만 보내는스티키 세션, 또는 Redis와 같은별도의 세션 스토어를 두어 모든 서버가 세션 정보를 공유하는 방법을 사용할 수 있습니다.
JWT는 인증에 필요한 모든 정보를 토큰 자체에 담고 암호화 서명을 통해 유효성을 검증하는상태 비저장(Stateless) 방식입니다.장점으로는, 서버에 세션 저장소가 필요 없으므로확장성이 매우 뛰어나고다른 도메인 간의 인증 처리도 간편하다는 점이 있습니다. 반면단점으로는, 한번 발급된 토큰은 유효 기간이 만료될 때까지 계속 유효하기 때문에강제 로그아웃이나 즉각적인 비활성화가 어렵습니다.또한, 세션 방식보다 더 많은 정보를 담고 있어 토큰의 길이가 길어질 수 있다는 특징이 있습니다.