스프링 시큐리티 개발 직무로 이직을 하게 되면서 기존 회사를 퇴사하고 2주일 정도 시간이 좀 남게되었다. 새로 입사하기전 시간동안 시큐리티에 대한 내 얄팍한 지식들을 더 깊게 공부해보고 정리 해보려한다 !
세션과 쿠키의 개념 그리고 JWT를 더도말고 덜도말고 딱 한스푼 얹어서 포스팅 해보려 한다 ! ! !
잠시만 !!!!!!!! 세션과 쿠키를 알아보기전에 왜 사용할까 ?
이를 알기 위해서는 HTTP의 특징부터 세션과 쿠키의 필요성, 그리고 본론으로 들어가보자 !
HTTP는 무상태(Stateless) 프로토콜이다. 즉, 클라이언트와 서버 간의 요청과 응답이 독립적으로 처리되며, 서버는 이전 요청에 대한 정보를 유지하지 않는다. 이러한 특성 때문에 매 요청마다 사용자 정보를 다시 확인해야 하는 번거로움이 생다.
세션과 쿠키는 HTTP의 무상태성을 보완하기 위해 사용된다.
이로써 세션과 쿠키를 함께 사용하면 보안과 성능을 모두 확보할 수 있다. 예를 들어, 세션 ID는 쿠키에 저장해 사용자가 로그인할 때마다 서버에서 세션을 참조할 수 있다.
세션은 서버에 저장되는 사용자 정보이다. 사용자가 웹사이트에 접속할 때 서버는 해당 사용자에게 고유한 세션 ID를 생성하고, 이 세션 ID를 통해 사용자를 식별한다. 사용자가 서버와의 상호작용을 유지하는 동안 세션은 사용자의 상태와 데이터를 서버에 저장하게된다.
예시:
- 쇼핑몰에서 상품을 장바구니에 담으면, 그 정보는 서버의 세션에 저장된다. 페이지를 이동하거나 로그아웃하지 않는 이상, 이 정보는 유지된다.
쿠키는 사용자 측(브라우저)에 저장되는 데이터이다. 서버는 쿠키를 브라우저에 저장하도록 명령하고, 브라우저는 다음 요청마다 해당 쿠키를 서버로 전달한다. 이를 통해 서버는 사용자를 인식하고, 세션과의 연계 등 다양한 작업을 수행한다.
예시:
- 웹사이트에 로그인할 때 "로그인 상태 유지"를 체크하면 브라우저에 쿠키가 저장되고, 다음에 방문할 때 자동으로 로그인
| 항목 | 세션(Session) | 쿠키(Cookie) |
|---|---|---|
| 저장 위치 | 서버 | 클라이언트(브라우저) |
| 보안성 | 서버에 저장되어 안전 | 클라이언트에 저장되어 취약 |
| 유지 시간 | 서버 설정에 따라 만료 | 설정된 만료 시간에 따라 달라짐 |
| 데이터 용량 | 제한 없음 | 최대 4KB 제한 |
| 전송 방식 | 세션 ID만 전송 | 쿠키가 자동으로 포함 |

현재 이미지에 설명이 충분히 잘 돼있어서 따로 설명 하지않겠다.
JWT와 비교했을때, 세션+쿠키 방식은 서버가 세션을 관리한다는 점, JWT 방식은 서버는 상태를 관리하지않고 클라이언트가 토큰을 보관해 매 요청마다 전달한다는 점이다 !
JWT는 세션을 대체하거나 쿠키와 함께 사용되는 방식으로 인증에 활용된다.
JWT는 쿠키에 저장될 수도 있으며, 특히 OAuth2.0과 같은 시스템에서 세션 대신 사용된다. 쿠키에 저장된 JWT는 서버가 매 요청마다 쿠키를 읽어 사용자를 인증하는 데 사용된다.
세션과 쿠키는 오랫동안 사용된 인증 방법이지만, JWT는 최신 애플리케이션 환경에서 더 나은 성능과 확장성을 제공한다. 하지만 중요한 데이터는 쿠키의 보안 문제를 고려해 HttpOnly 속성을 사용해 저장하는 것이 권장된다.