세션(Session)이란?
웹 통신(HTTP)의 가장 큰 특징은 '무상태(Stateless)'입니다. 서버는 요청을 보낸 사용자가 이전에 어떤 요청을 했는지 기억하지 못합니다.
이런 '무상태' 환경에서는 다음과 같은 문제가 발생할 수 있습니다.
- 로그인: 페이지를 이동할 때마다 다시 로그인해야 합니다.
- 장바구니: 상품을 담고 다른 페이지로 가면 장바구니에 담은 물품이 사라집니다.
이러한 문제를 해결하기 위해 세션(Session)을 사용합니다.
세션(Session)은 웹 사이트와 사용자(브라우저) 간의 지속적인 대화 상태를 유지하는 창구와 같은 역할을 합니다.
서버는 각 사용자를 위한 '전용 창구'를 만들어두고, 사이트를 이용하는 동안 특정 사용자를 기억할 수 있게 됩니다. 따라서 서버는 사용자의 로그인 상태, 장바구니 내용 등을 유지할 수 있습니다.
세션의 동작 방식 : 개인 사물함과 열쇠
세션은 보통 세션 ID와 쿠키를 이용해 동작합니다. 이 과정을 '개인 사물함과 열쇠'에 비유하면 쉽게 이해할 수 있습니다.
- 최초 접속 (손님의 첫 방문)
사용자가 웹사이트에 처음 접속합니다. - 세션 생성 및 세션 ID 발급 (개인 사물함과 열쇠 제공)
서버는 이 사용자를 위한 고유한 저장 공간(세션)을 서버 메모리나 데이터베이스에 만듭니다. 이것이 바로 '개인 사물함'입니다.
그리고 서버는 이 '개인 사물함'을 열 수 있는 유일한 '열쇠'인 세션 ID를 생성합니다. - 세션 ID 전달 (열쇠를 사용자에게 전달)
서버는 생성된 세션 ID를 HTTP 응답 헤더에 담아 사용자 브라우저에게 전달합니다. - 쿠키에 저장 (열쇠를 주머니에 보관)
사용자 브라우저는 서버로부터 받은 세션 ID를 쿠키에 저장합니다. 이제 사용자는 사이트를 이용하는 동안 이 '열쇠'를 자신의 주머니에 가지고 다니는 셈입니다. - 재접속 및 인증 (열쇠 확인)
사용자가 같은 웹사이트 내에서 다른 페이지로 이동하거나 다시 요청을 보낼 때, 브라우저는 요청 헤더의 쿠키에 저장된 세션 ID(열쇠)를 자동으로 꺼내어 서버에 보여줍니다. - 상태 유지 (개인 사물함 정보 확인)
서버는 사용자에게 받은 '열쇠'를 보고, 서버에 있는 수많은 개인 사물함 중에서 그 열쇠에 맞는 사물함을 찾아냅니다.
사물함과 열쇠가 일치한다면, 그 안에 저장된 정보(로그인 상태, 장바구니 내용 등)를 바탕으로 응답합니다. - 세션 종료 (개인 사물함 비우기)
사용자가 로그아웃하거나, 브라우저를 닫거나, 서버에서 설정한 일정 시간 동안 아무런 활동이 없으면(세션 만료), 서버는 해당 세션 정보('개인 사물함')를 삭제합니다.
세션과 쿠키의 차이점
| 구분 | 쿠키 (Cookie) | 세션 (Session) |
| 저장 위치 | 사용자 브라우저 (클라이언트 측) | 웹 서버 |
| 저장 내용 | 간단한 텍스트 데이터 (Key-Value) 세션 ID 같은 열쇠를 저장 |
객체를 포함한 모든 유형의 데이터<br>로그인 정보, 장바구니 등 중요한 내용물 |
| 보안 | 상대적으로 낮음 (클라이언트에서 수정 가능) | 상대적으로 높음 (서버에 저장되어 안전) |
| 생명 주기 | 설정한 만료 시간까지 유지 (브라우저를 닫아도 유지 가능) | 브라우저 종료 시 또는 서버 만료 시 삭제됨 |
| 속도/부하 | 서버에 부담을 주지 않음 | 사용자가 많아지면 서버에 부하를 줄 수 있음 |
정리
쿠키는 사용자의 컴퓨터에 남겨진 '열쇠'와 같고, 세션은 그 열쇠를 보고 서버가 관리하는 '개인 사물함'과 같습니다.
중요한 정보는 안전한 사물함(세션)에 보관하고, 그 사물함을 열 수 있는 열쇠(세션 ID)만 사용자(쿠키)에게 맡기는 방식입니다.
이러한 세션 메커니즘을 이용하여 '상태 없는' 웹 환경에서도 편리하게 로그인 상태를 유지합니다.
728x90
'CS' 카테고리의 다른 글
| Prisma ORM에 대하여 (0) | 2025.08.02 |
|---|---|
| 클린 아키텍쳐(Clean Architecture)란? (0) | 2025.07.12 |
| 객체 지향이란? (0) | 2025.06.29 |
| 데이터 정규화(Normalization)란? (0) | 2025.06.26 |
| 동기화와 비동기화 (0) | 2025.06.20 |