CS

쿠키 VS 세션

seung_ho_choi.s 2025. 5. 4. 17:42
728x90

오늘은 기술면접 단골 질문인 쿠키vs 세션에 관해서 정확한 포스팅을 하겠습니다.

https://balhae.tistory.com/65

 

HTTP(CH7)

최코딩의 개발 HTTP(CH7) 본문 스프링/HTTP HTTP(CH7) seung_ho_choi.s 2023. 5. 28. 19:39

balhae.tistory.com

https://balhae.tistory.com/105

 

섹션6 로그인 처리1 - 쿠키, 세션

최코딩의 개발 섹션6 로그인 처리1 - 쿠키, 세션 본문 스프링/스프링 MVC(2) 섹션6 로그인 처리1 - 쿠키, 세션 seung_ho_choi.s 2023. 9. 23. 21:31

balhae.tistory.com

 

약 2년전에 포스팅한게 있지만.. ㅎㅎㅎ 그 당시에는 생초보 개발자가 쓴거 같은 내용이라서 다시 정리해서 작성하겠습니다!

 

 

HTTP는 무상태(Stateless) 프로토콜입니다. 이것이 무엇을 의미할까요?

  • 클라이언트와 서버가 요청과 응답을 주고받으면 연결이 끊어집니다.
  • 클라이언트가 다시 요청하면 서버는 이전 요청을 기억하지 못합니다.
  • 클라이언트와 서버는 서로 상태를 유지하지 않습니다.

이러한 특성 때문에 다음과 같은 문제가 발생합니다.

  • 로그인한 사용자의 정보를 구분할 수 없음
  • 모든 요청에 사용자 정보를 포함해야 함
  • 브라우저를 완전히 종료하고 다시 열면 모든 상태가 초기화됨

예를 들어, 쇼핑몰에서 장바구니에 상품을 담았는데 페이지를 이동할 때마다 장바구니가 비워진다면? 로그인했는데 페이지를 이동할 때마다 다시 로그인해야 한다면? 매우 불편할 것입니다.

이러한 문제를 해결하기 위해 쿠키(Cookie)가 등장했습니다!

☑️쿠키(Cookie)

✔️정의

쿠키는 서버가 클라이언트(브라우저)에 저장하는 작은 데이터 조각입니다. 클라이언트는 이 쿠키를 저장했다가 동일한 서버에 재요청시 저장된 데이터를 함께 전송합니다.

✔️동작 방식

1. 클라이언트 → 서버: 로그인 요청
2. 서버 → 클라이언트: 로그인 성공 + Set-Cookie: user=홍길동
3. 클라이언트가 쿠키 저장
4. 클라이언트 → 서버: 다음 요청시 Cookie: user=홍길동 자동 포함
5. 서버는 쿠키를 읽어 사용자 식별

✔️쿠키의 특징

  • 클라이언트에 저장: 브라우저가 쿠키를 관리하고 저장합니다.
  • 도메인별로 관리: 각 도메인의 쿠키는 해당 도메인에만 전송됩니다.
  • 자동 전송: 해당 도메인 요청시 브라우저가 자동으로 쿠키를 포함합니다.
  • 용량 제한: 쿠키 하나당 4KB, 도메인당 20개 정도로 제한됩니다.
  • 보안 취약: 클라이언트에 저장되므로 탈취나 조작의 위험이 있습니다.
  • 유효기간 설정 가능: 만료 시간을 설정하여 영구/임시 쿠키로 사용 가능합니다.

☑️세션(Session)의 등장 배경

쿠키만으로도 상태 유지는 가능하지만, 다음과 같은 한계점이 있었습니다.

  1. 보안 문제: 중요한 정보(비밀번호, 개인정보)를 클라이언트에 저장하는 것은 위험합니다.
  2. 용량 제한: 4KB의 작은 용량으로는 많은 정보를 저장할 수 없습니다.
  3. 조작 가능성: 클라이언트가 쿠키를 임의로 변경할 수 있습니다.

이러한 문제를 해결하기 위해 세션이 등장했습니다!

☑️세션(Session)

✔️정의

세션은 서버에서 클라이언트의 상태 정보를 저장하는 기술입니다. 클라이언트에는 세션 ID만 쿠키로 저장하고, 실제 데이터는 서버에 보관합니다.

✔️동작 방식

1. 클라이언트 → 서버: 로그인 요청
2. 서버에서 세션 생성 (세션ID: ABC123, 데이터: {user: "홍길동", role: "admin"})
3. 서버 → 클라이언트: Set-Cookie: JSESSIONID=ABC123
4. 클라이언트가 세션ID 쿠키 저장
5. 클라이언트 → 서버: 다음 요청시 Cookie: JSESSIONID=ABC123
6. 서버는 세션ID로 세션 저장소에서 사용자 정보 조회

✔️세션의 특징

  • 서버에 저장: 중요한 정보를 서버에 안전하게 보관합니다.
  • 보안성 향상: 클라이언트는 세션 ID만 가지고 있어 정보 탈취 위험이 적습니다.
  • 용량 제한 없음: 서버 저장소 한계까지 많은 정보를 저장할 수 있습니다.
  • 서버 리소스 사용: 동시 접속자가 많으면 서버 메모리 부담이 증가합니다.
  • 분산 환경에서 복잡: 여러 서버 운영시 세션 공유를 위한 추가 구현이 필요합니다.
  • 유효기간 설정 가능: 애플리케이션에서 따로 세션 만료 시간을 설정하지 않으면, 브라우저를 완전히 종료할 때 세션이 끝납니다.

☑️쿠키 vs 세션: 언제 무엇을 사용할까?

✔️쿠키 사용이 적합한 경우

  • 장바구니 정보 (보안이 중요하지 않은 경우)
  • 사용자 선호 설정 (다크모드, 언어 설정 등)
  • 자동 로그인 정보
  • 광고 추적 정보

✔️세션 사용이 적합한 경우

  • 로그인 정보
  • 중요한 사용자 데이터
  • 결제 정보
  • 권한 관리

☑️쿠키와 세션 비교표

구분 쿠키(Cookie) 세션(Session)
저장위치 클라이언트 로컬 (브라우저/개인컴퓨터) 서버 (웹서버)
보안 취약 강함
라이프 사이클 브라우저 종료해도 만료시점 지나지 않으면 삭제X 브라우저 종료와 무관하게 서버에서 타임아웃 관리
속도 빠름 느림
저장형식 Text Object
용량 제한 있음(총 300개 하나의 도메인 당 20개 하나의 쿠키당 4KB) 서버가 허용하는 한 제한 없음

 

☑️라이프사이클

✔️쿠키

  1. 생성 시점: 서버가 Set-Cookie 헤더로 생성하거나 클라이언트에서 JavaScript로 생성
  2. 유효 기간:
    • Persistent Cookie: Expires/Max-Age 속성에 지정된 날짜까지 유지
  3. 삭제 시점:
    • 만료 시간 도달
    • 브라우저에서 수동 삭제
    • 서버에서 만료 시간을 과거로 설정하여 삭제

✔️세션

  1. 생성 시점: 클라이언트가 처음 서버에 접속할 때 생성
  2. 유효 기간:
    • 서버에서 설정한 세션 타임아웃 시간
    • 일반적으로 20-30분의 비활성 시간 후 만료
  3. 삭제 시점:
    • 세션 타임아웃
    • 서버 재시작
    • 명시적인 세션 무효화(logout)

세션은 보통 세션 ID를 쿠키에 저장하지만, 세션 데이터 자체는 서버에 있어서 라이프사이클이 다르게 관리됩니다.

 

 

☑️속도

  • 쿠키는 클라이언트에 저장되어 서버 조회 없이 바로 접근 가능
  • 세션은 서버에 저장되어 매번 서버 메모리/DB 조회가 필요해 상대적으로 느림

 

728x90