중앙정보기술인재개발원/Spring

[Spring] | 세션,쿠키,Session,Cookie

soidev 2025. 5. 2. 10:54

gpt 출처

 

 

📌 세션(Session)이란?

 

  • 세션은 일반적으로 클라이언트가 서버에 접속한 하나의 단위를 의미함.
  • 즉, 클라이언트와 서버 간의 연결 상태를 일정 시간 동안 유지하기 위한 수단.
  • HTTP는 비연결성(stateless) 프로토콜이기 때문에, 요청이 끝나면 서버는 해당 클라이언트를 잊어버림.
  • 그래서 클라이언트를 식별하기 위해 세션을 사용함.

🧠 세션의 동작 방식

  1. 클라이언트가 로그인 등의 요청을 보냄
    • 서버는 이 요청에 대해 세션 저장 공간(메모리) 을 생성함.
    • 이때 세션 ID(고유한 값) 를 생성해서 클라이언트에게 쿠키로 전달함.
  2. 쿠키의 역할
    • 쿠키는 클라이언트(Web Browser) 측에 저장됨.
    • request를 보낼 때마다 자동으로 쿠키를 서버에 전달함.
    • 서버는 쿠키에 담긴 세션 ID를 보고 어떤 사용자인지 판단함 → 인증의 핵심!
  3. 예시 흐름
    • 클라이언트가 로그인 → session.setAttribute()로 서버에 사용자 정보 저장
    • 서버는 세션 ID를 클라이언트에게 쿠키로 전달
    • 이후 요청마다 쿠키에 담긴 세션 ID로 서버는 클라이언트를 식별함

🍪 쿠키 vs 세션

저장 위치 클라이언트(브라우저) 서버(메모리)
보안 낮음 (브라우저에서 접근 가능) 상대적으로 높음
생명 주기 브라우저가 종료될 때까지 or 설정한 만료 시간까지 기본 30분 (설정 가능)
용도 사용자 정보 저장 (간단한 내용) 로그인 상태 등 서버에 보관할 중요한 정보

 


🔄 세션 관련 특징

  • 같은 브라우저 내에서는 쿠키를 공유함 (같은 사용자로 간주됨)
  • 브라우저를 새로 열면 쿠키가 없을 수도 있음 → 세션도 새로 생성
  • 로그아웃하면 서버 메모리에서 세션 공간 자체를 제거
  • 하지만 쿠키는 클라이언트에 그대로 남아있을 수 있음
  • 세션은 기본적으로 30분간 유지됨 (서버 설정으로 변경 가능)

  • 로그아웃을 하면 램에 저장했던 것을 아예 그 공간자체를 날려버림
  • 근데 쿠키 쪽에선 살아있으 서버쪽에서 이 메모리는 어떻게 되는지 아냐? 
  • 저 세션은 타임라인이 정해져있음 디폴트가 30분임
  • 저 파일명으로 설정시간은 바꿀 수 있음

⚠️ 시스템 규모에 따른 고려사항

  • 소규모 또는 모노리식(Monolithic) 시스템에서는 세션 방식이 적합함
  • 하지만 중대형 시스템이나 분산 시스템에서는 세션 방식이 부적합할 수 있음
    • 이유: 세션은 서버 메모리에 저장되므로 서버 간 정보 공유가 어려움
    • 대안: JWT 토큰 기반 인증 방식 등 사용

  • 서버쪽에서 session과 관련된 코드가 실행되면
  • loginProcess실행될때, spring에서는 이때 세션의 쿠키가 안 날라오면 새로운 세션 저장공간을 생성함.
  • id값을 서버 램쪽에다 부여함 ex- value값, 이 세션을 클라이언트에다가 '이걸 쿠키로 저장해'라고 넘김
  • 이 클라이언트는 저 밸류값 저것을 요청을 할 때마다 여기에 있는 쿠키 값을 무조건 넘기게 되어있음
  • 그럴때마다 이것은 인증의 핵심!!! 요청할때마다 클라이언트에 있는 쿠키를 서버에게 전달을 하면 인식을 한다 (session.setAttribute)
  • f5은 메인페이지 계속 요청하는 것..

 

 

 

 

  • 똑같은 웹브라우저가 두세명 있어도 쿠키가 아예 없는 것들도 있음 그럴땐 그냥 널값이 뜬다?
  • 하나의 웹브라우저는 쿠키를 공유해
  • 즉 계속 새로고침해도 http프로토콜은 요청하고 끊어버리는 순간 값을 알 수 없음

 

 

'중앙정보기술인재개발원 > Spring' 카테고리의 다른 글

[Spring] final project_3차  (0) 2025.05.12
[Spring] final project_2차  (0) 2025.05.12
[Spring] final project_4  (0) 2025.05.02
[Spring] | final project_3  (1) 2025.05.01
[Spring] | final projcet_2  (0) 2025.04.29