
📌 세션(Session)이란?
- 세션은 일반적으로 클라이언트가 서버에 접속한 하나의 단위를 의미함.
- 즉, 클라이언트와 서버 간의 연결 상태를 일정 시간 동안 유지하기 위한 수단.
- HTTP는 비연결성(stateless) 프로토콜이기 때문에, 요청이 끝나면 서버는 해당 클라이언트를 잊어버림.
- 그래서 클라이언트를 식별하기 위해 세션을 사용함.
🧠 세션의 동작 방식
- 클라이언트가 로그인 등의 요청을 보냄
- 서버는 이 요청에 대해 세션 저장 공간(메모리) 을 생성함.
- 이때 세션 ID(고유한 값) 를 생성해서 클라이언트에게 쿠키로 전달함.
- 쿠키의 역할
- 쿠키는 클라이언트(Web Browser) 측에 저장됨.
- request를 보낼 때마다 자동으로 쿠키를 서버에 전달함.
- 서버는 쿠키에 담긴 세션 ID를 보고 어떤 사용자인지 판단함 → 인증의 핵심!
- 예시 흐름
- 클라이언트가 로그인 → 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 |