쿠키 / 세션

원승현·2024년 7월 10일

Spring Security

목록 보기
1/17
post-thumbnail

서버와 클라이언트의 통신 프로토콜인 HTTP의 비연결성, 비상태성이라는 특징으로 인해 쿠키와 세션을 이용한다.
클라이언트가 서버에게 request를 보냈을 때 그 request에 맞는 response를 보낸 후에는 클라이언에 대해 알 수 없게 된다.

만약 쿠키와 세션을 사용하지 않는다면 웹 사이트에 로그인을 했음에도 페이지를 이동할 때마다 계속 로그인을 해야한다.
이러한 비연결성(요청에 대한 응답을 보내고 연결을 끊음), 비상태성(클라이언트의 정보를 유지하지 않음) 때문에 쿠키와 세션을 사용해서 사용자를 인증한다.

쿠키

브라우저에 key-value 쌍으로 로컬에 저장되는 데이터 파일이며, 유효시간 내에서는 브라우저가 종료되어도 계속 유지된다.

  • 세션 쿠키: 사용자가 사이트 탐색 시에 관련한 설정들과 선호사항을 저장하는 임시 쿠키. 브라우저를 닫는 순간 삭제된다. (유효기간 설정 X)

  • 지속 쿠키: 지속쿠키는 세션쿠키와 다르게 삭제되지 않고 더 길게 유지가 가능하다. 지속쿠키는 디스크에 저장되며, 브라우저를 닫거나 컴퓨터를 재시작해도 남아닜다. 사용자 로그인 항상 유지와 같은 곳에 사용한다. (유효기간 설정 O)

쿠키의 동작 방식

  1. 서버가 클라이언트로부터 요청을 받았을 때, 클라이언트에 대한 정보를 바탕으로 set-cookie 속성을 사용해 쿠키를 만든다.
  2. 서버는 클라이언트에게 해당 요청에 대한 응답을 보낼 때 응답의 Header 부분에 쿠키를 담아서 보낸다.
  3. 클라이언트가 응답을 받으면 브라우저는 쿠키를 쿠키 디렉터리에 저장 후 또 다시 서버에 요청을 할 때 사용자가 가만히 있어도 브라우저가 request header에 쿠키를 담아서 서버에 전송한다.
  4. 서버는 또 다시 response에 쿠키 정보를 참조(ex: 로그인 상태 유지)하여 응답한다.

사용예시

  • 방문했던 사이트에 다시 방문 하였을 때 아이디/비밀번호 자동 입력 및 자동 로그인
  • 팝업창을 통해 "오늘 이 창을 다시 보지 않기" 등 사용자의 편의를 위한 기능
  • 쇼핑몰 장바구니 기능

세션

세션은 쿠키를 이용하여 구현된다(새로운 세션이 생성되면, Spring은 Set-Cookie 헤더를 통해 클라이언트에게 세션 ID를 전달). 서버가 클라이언트를 구분하기 위해 응답에 쿠키를 포함할 때 sessionId를 부여하고 클라이언트는 쿠키에 sessionId를 저장해둔다.
클라이언트(사용자)의 정보를 브라우저에 저장하는 쿠키와 달리 세션은 클라이언트의 정보를 서버에 저장한다.

세션에는 유효기간이 있어 일정 시간 응답이 없다면 끊을 수 있고, 브라우저가 종료될 때 까지 인증상태를 유지할 수 있다.
사용자 정보를 서버에 두기 때문에 쿠키에 비하면 보안이 더 좋지만 서버에 저장하는 만큼 서버에 과부하를 줄 수 있고 성능저하의 요인이 된다.

쿠키와 세션의 차이

  • 사용자 정보가 저장되는 위치
    • 쿠키는 서버의 자원을 전혀 사용하지 않으며, 세션은 서버의 자원을 사용한다.
  • 보안
    • 쿠키는 클라이언트 로컬에 저장되기 때문에 변질되거나 request에서 스니핑 당할 우려가 있어 보안에 취약하지만 세션은 쿠키를 이용해서 session-id만 저장하고 그것으로 구분하여 서버에서 처리하기 때문에 비교적 보안성이 높다.
  • 라이프 사이클
    • 쿠키는 브라우저를 종료해도 정보가 유지될 수 있으며 만료기간을 따로 지정해 쿠키를 삭제할 때까지 유지할 수도 있다.
    • 세션은 만료기간을 정할 수 있긴 하지만 브라우저가 종료되면 만료기간에 상관없이 삭제된다.
  • 속도
    • 쿠키는 정보가 클라이언트에 있기 때문에 서버에 요청시 속도가 빠르다.
    • 세션은 정보가 있기 때문에 처리가 요구되어 비교적 속도가 느리다.

참고자료: https://judahhh.tistory.com/46

0개의 댓글