웹사이트에 로그인한 뒤 페이지를 이동해도 로그인 상태가 유지되는 것은 당연해 보입니다. 하지만 웹의 기본 구조를 보면 사실 이 과정은 생각보다 특별합니다. 왜냐하면 HTTP는 기본적으로 이전 요청을 기억하지 않기 때문입니다.
예를 들어 우리가 쇼핑몰에 로그인한 뒤 장바구니 페이지로 이동한다고 해보겠습니다. 서버 입장에서는 매번 새로운 요청이 들어오는 것이기 때문에, 별도 장치가 없다면 “방금 로그인한 사용자”인지 알 수 없습니다. 이 문제를 해결하기 위해 등장한 개념이 바로 쿠키와 세션입니다.
이번 글에서는 Cookie란 무엇인지, Session이란 무엇인지, 쿠키와 세션 차이, 로그인 유지 원리, 그리고 JWT와 Session 방식 차이까지 초보자 기준으로 쉽게 정리해보겠습니다.
HTTP는 왜 로그인 상태를 기억하지 못할까?
웹사이트는 브라우저와 서버가 HTTP 요청과 응답을 주고받으며 동작합니다. 문제는 HTTP가 기본적으로 Stateless, 즉 상태를 저장하지 않는 구조라는 점입니다.
쉽게 말하면,
HTTP는 요청 하나하나를 독립적으로 처리합니다. 서버는 이전 요청을 자동으로 기억하지 않습니다.
예를 들어 사용자가 다음 순서로 요청한다고 해보겠습니다.
로그인 페이지 접속
아이디와 비밀번호 입력
마이페이지 접속
장바구니 접속
사람 입장에서는 같은 사용자가 계속 이동하는 것처럼 보이지만, 서버 입장에서는 매번 독립적인 요청입니다. 그래서 서버가 사용자를 구분하려면 “이 요청은 아까 로그인한 사용자입니다”라는 표시가 필요합니다. 바로 이때 쿠키와 세션이 사용됩니다.
TIP
HTTP Header 글에서 다룬 것처럼 브라우저는 요청을 보낼 때 Cookie Header를 함께 보낼 수 있습니다. 이 Cookie 안에 세션 식별 정보가 들어가면 서버가 사용자를 구분할 수 있습니다.
Cookie란?
Cookie는 브라우저에 저장되는 작은 데이터입니다.
쉽게 말하면, 쿠키 = 사용자의 브라우저에 붙어 있는 작은 메모지 입니다.
예를 들어 서버가 로그인 후 브라우저에 이런 쿠키를 저장하라고 응답할 수 있습니다.
Set-Cookie: sessionid=abc123; Path=/; HttpOnly
그러면 브라우저는 이후 같은 사이트에 요청할 때 자동으로 쿠키를 함께 보냅니다.
Cookie: sessionid=abc123
이 쿠키를 보고 서버는 사용자를 구분할 수 있습니다.
쿠키는 어디에 사용될까?
쿠키는 로그인뿐 아니라 다양한 곳에 사용됩니다.
사용 예시
설명
로그인 유지
세션 ID 저장
장바구니
비회원 장바구니 정보 저장
팝업 숨김
“오늘 하루 보지 않기” 저장
언어 설정
한국어, 영어 선택 저장
추적/분석
방문자 식별
쿠키는 브라우저에 저장되기 때문에 사용자가 직접 삭제할 수도 있습니다. 또 브라우저 설정에 따라 차단될 수도 있습니다.
Session이란?
Session은 서버에 저장되는 사용자 상태 정보입니다. 쉽게 말하면, 세션 = 서버가 들고 있는 로그인 출입명부 입니다.
비유하면 이렇게 볼 수 있습니다.
쿠키 = 학생증
세션 = 학교 출입명부
학생이 학교에 들어갈 때 학생증을 보여주면, 학교는 출입명부에서 해당 학생 정보를 확인합니다. 웹에서도 비슷합니다.
브라우저는 쿠키에 저장된 Session ID를 서버에 보냅니다. 서버는 그 Session ID를 보고 서버에 저장된 세션 데이터를 찾습니다.
예:
Session ID: abc123
User: wing
Login: true
즉, 실제 로그인 정보는 서버에 있고, 브라우저는 그 정보를 찾기 위한 Session ID만 가지고 있는 구조입니다.
서버는 어떻게 사용자를 구분하는가?
서버는 보통 Session ID로 사용자를 구분합니다.
로그인 흐름은 다음과 같습니다.
사용자가 로그인 성공
서버가 세션 생성
서버가 고유한 Session ID 발급
브라우저 쿠키에 Session ID 저장
이후 요청마다 쿠키로 Session ID 전송
서버가 Session ID를 보고 사용자 확인
여기서 중요한 점은, 브라우저에 사용자의 비밀번호가 저장되는 것이 아니라는 점입니다. 브라우저에는 보통 Session ID만 저장되고, 실제 사용자 정보는 서버에 저장됩니다.
로그인 유지 구조 Step-by-Step
1. 로그인 요청
사용자가 아이디와 비밀번호를 입력합니다.
{
"username": "wing",
"password": "1234"
}
2. 서버 인증
서버는 입력한 아이디와 비밀번호가 맞는지 확인합니다.
3. Session 생성
로그인이 성공하면 서버는 사용자 정보를 세션 저장소에 기록합니다.
abc123 → user_id: 1
4. Session ID 발급
서버는 고유한 Session ID를 생성합니다.
sessionid=abc123
5. Cookie 저장
서버는 응답 Header에 Set-Cookie를 포함합니다.
Set-Cookie: sessionid=abc123; HttpOnly; Path=/
브라우저는 이 쿠키를 저장합니다.
6. 이후 요청 시 인증
브라우저는 이후 요청마다 쿠키를 자동으로 보냅니다.
Cookie: sessionid=abc123
서버는 Session ID를 확인하고 로그인 사용자인지 판단합니다.
Cookie vs Session 비교표
구분
Cookie
Session
저장 위치
브라우저
서버
보안성
상대적으로 낮음
상대적으로 높음
서버 부담
낮음
있음
확장성
좋음
서버 구성에 따라 관리 필요
저장 데이터
간단한 값
사용자 상태 정보
대표 사용
언어 설정, 팝업 숨김, Session
ID
로그인 상태, 사용자 인증
삭제 주체
사용자/브라우저
서버
정리하면, 쿠키는 브라우저에 저장되는 데이터이고 세션은 서버에 저장되는 사용자 상태 정보입니다. 로그인 유지에서는 보통 쿠키에 Session ID를 저장하고, 서버는 그 Session ID로 세션을 찾습니다.
첫 댓글을 남겨보세요.