세션과 쿠키 그리고 JWT...

임채령·2024년 10월 28일

스프링 시큐리티 개발 직무로 이직을 하게 되면서 기존 회사를 퇴사하고 2주일 정도 시간이 좀 남게되었다. 새로 입사하기전 시간동안 시큐리티에 대한 내 얄팍한 지식들을 더 깊게 공부해보고 정리 해보려한다 !

세션과 쿠키의 개념 그리고 JWT를 더도말고 덜도말고 딱 한스푼 얹어서 포스팅 해보려 한다 ! ! !

잠시만 !!!!!!!! 세션과 쿠키를 알아보기전에 왜 사용할까 ?

이를 알기 위해서는 HTTP의 특징부터 세션과 쿠키의 필요성, 그리고 본론으로 들어가보자 !

HTTP의 특징

HTTP는 무상태(Stateless) 프로토콜이다. 즉, 클라이언트와 서버 간의 요청과 응답이 독립적으로 처리되며, 서버는 이전 요청에 대한 정보를 유지하지 않는다. 이러한 특성 때문에 매 요청마다 사용자 정보를 다시 확인해야 하는 번거로움이 생다.

세션과 쿠키를 사용하는 이유

세션쿠키는 HTTP의 무상태성을 보완하기 위해 사용된다.

  • 쿠키: 클라이언트(브라우저)에 작은 데이터를 저장해 사용자를 식별한다. 자동 로그인, 로그인 상태 유지, 장바구니 등 사용자 정보 추적에 유용하다.
  • 세션: 서버 측에 사용자 정보를 저장하고, 클라이언트에 해당 세션을 식별하는 세션 ID를 쿠키에 저장한다. 민감한 정보를 직접 쿠키에 담지 않고 서버에 보관함으로써 보안성이 높다.

이로써 세션과 쿠키를 함께 사용하면 보안과 성능을 모두 확보할 수 있다. 예를 들어, 세션 ID는 쿠키에 저장해 사용자가 로그인할 때마다 서버에서 세션을 참조할 수 있다.

세션(Session)이란?

세션은 서버에 저장되는 사용자 정보이다. 사용자가 웹사이트에 접속할 때 서버는 해당 사용자에게 고유한 세션 ID를 생성하고, 이 세션 ID를 통해 사용자를 식별한다. 사용자가 서버와의 상호작용을 유지하는 동안 세션은 사용자의 상태와 데이터를 서버에 저장하게된다.

세션의 특징

  • 서버 측에 저장: 사용자 데이터는 서버에 저장
  • 세션 ID: 서버가 사용자를 구별하기 위해 고유한 ID를 발급
  • 유효 기간: 일정 시간 동안 사용자가 활동하지 않으면 세션이 만료
  • 보안성: 서버에서 관리되기 때문에 비교적 안전

예시:

  • 쇼핑몰에서 상품을 장바구니에 담으면, 그 정보는 서버의 세션에 저장된다. 페이지를 이동하거나 로그아웃하지 않는 이상, 이 정보는 유지된다.

쿠키(Cookie)란?

쿠키는 사용자 측(브라우저)에 저장되는 데이터이다. 서버는 쿠키를 브라우저에 저장하도록 명령하고, 브라우저는 다음 요청마다 해당 쿠키를 서버로 전달한다. 이를 통해 서버는 사용자를 인식하고, 세션과의 연계 등 다양한 작업을 수행한다.

쿠키의 특징

  • 클라이언트 측 저장: 사용자의 브라우저에 데이터가 저장
  • 자동 전송: 동일한 도메인으로 요청이 발생할 때마다 쿠키가 자동으로 포함
  • 만료 기간: 쿠키는 지정된 만료 시간까지 유지 (단기 또는 장기 보관 가능)
  • 보안 취약점: 쿠키는 클라이언트에 저장되기 때문에 XSS쿠키 탈취와 같은 공격에 취약

예시:

  • 웹사이트에 로그인할 때 "로그인 상태 유지"를 체크하면 브라우저에 쿠키가 저장되고, 다음에 방문할 때 자동으로 로그인

세션과 쿠키의 차이점

항목세션(Session)쿠키(Cookie)
저장 위치서버클라이언트(브라우저)
보안성서버에 저장되어 안전클라이언트에 저장되어 취약
유지 시간서버 설정에 따라 만료설정된 만료 시간에 따라 달라짐
데이터 용량제한 없음최대 4KB 제한
전송 방식세션 ID만 전송쿠키가 자동으로 포함

세션과 쿠키를 이요한 인증 플로우

현재 이미지에 설명이 충분히 잘 돼있어서 따로 설명 하지않겠다.

JWT와 비교했을때, 세션+쿠키 방식은 서버가 세션을 관리한다는 점, JWT 방식은 서버는 상태를 관리하지않고 클라이언트가 토큰을 보관해 매 요청마다 전달한다는 점이다 !

JWT와 세션/쿠키의 연관성

JWT는 세션을 대체하거나 쿠키와 함께 사용되는 방식으로 인증에 활용된다.

  • 세션 기반 인증에서는 서버가 사용자 정보를 관리해야 하기 때문에 서버에 부하가 발생할 수 있다.
  • 반면, JWT는 사용자의 인증 정보를 서버가 아닌 클라이언트 측에서 유지하기 때문에 서버 부하를 줄인다.

JWT는 쿠키에 저장될 수도 있으며, 특히 OAuth2.0과 같은 시스템에서 세션 대신 사용된다. 쿠키에 저장된 JWT는 서버가 매 요청마다 쿠키를 읽어 사용자를 인증하는 데 사용된다.

JWT를 사용하는 이유

  • 서버 상태를 유지할 필요 없음: 서버가 사용자의 세션을 유지할 필요가 없으므로 확장성이 좋다.
  • 보안 강화: JWT는 서명된 토큰이기 때문에 조작 여부를 쉽게 검증할 수 있다.
  • 분산 시스템에 적합: 여러 서버가 있는 MSA 구조에서 각 서버가 독립적으로 사용자 인증을 처리할 수 있다.

세션과 쿠키는 오랫동안 사용된 인증 방법이지만, JWT는 최신 애플리케이션 환경에서 더 나은 성능과 확장성을 제공한다. 하지만 중요한 데이터는 쿠키의 보안 문제를 고려해 HttpOnly 속성을 사용해 저장하는 것이 권장된다.

0개의 댓글