세션과 쿠키
세션과 쿠키의 개념과 차이점
2025-05-13
세션과 쿠키의 개념
세션(session)
세션은 서버가 사용자(클라이언트)마다 정보를 유지하기 위해 서버측에서 관리하는 데이터 저장소다. 세션 데이터 자체는 서버 메모리나 별도 저장소(DB, Redis 등)에 저장하고, 클라이언트에게는 세션을 구분할 수 있는 고유 ID(session ID)를 발급한다. 세션 ID는 클라이언트가 서버에 요청할 때마다 함께 전송되며, 서버는 이 ID를 통해 해당 클라이언트의 세션 데이터를 조회한다.
- 서버 측에서 관리, 저장 : 데이터는 서버에 있으므로 보안성이 높다.
- 임시 : 브라우저를 종료하거나 세션 타임아웃이 발생하면 세션 데이터는 삭제된다.
- 서버 리소스 : 사용자가 많아지면 서버 메모리나 저장소에 부담이 될 수 있다.
쿠키(cookie)
쿠키는 사용자(클라이언트)의 브라우저에 저장되는 작은 데이터 조각이다. 서버가 클라이언트에게 쿠키를 보내면 클라이언트는 이를 저장하고, 이후 서버에 요청할 때마다 해당 쿠키를 서버에 전달한다. 이를 통해 서버는 사용자 정보를 지속적으로 식별하거나 상태를 유지할 수 있다.
- 클라이언트 측에서 관리, 저장 : 쿠키는 클라이언트의 브라우저에 저장되므로 서버에 부담이 적다.
- 지속성 : 만료 기간을 설정할 수 있어, 사용자가 브라우저를 종료해도 쿠키는 남아있을 수 있다.
- 크기 제한 : 쿠키는 일반적으로 4KB 이하로 제한된다.
- 보안성 : 쿠키는 클라이언트에 저장되므로 보안성이 낮다. 민감한 정보는 쿠키에 저장하지 않는 것이 좋다.
세션과 쿠키의 차이점
구분 | 세션(session) | 쿠키(cookie) |
---|---|---|
저장 위치 | 서버 측 | 클라이언트 측 |
데이터 크기 | 서버 메모리나 저장소에 저장 | 클라이언트의 브라우저에 저장 |
만료 기간 | 세션 타임아웃 또는 브라우저 종료 시 삭제 | 만료 기간 설정 가능 |
보안성 | 상대적으로 높음 | 상대적으로 낮음 |
사용 용도 | 사용자 인증, 장바구니 등 상태 유지 | 사용자 설정, 로그인 정보 등 지속적 저장 |
서버 리소스 | 사용자가 많아지면 부담이 될 수 있음 | 서버에 부담이 적음 |
크기 제한 | 없음 | 일반적으로 4KB 이하 |
HTTP 전송 | 세션 ID를 통해 서버와 클라이언트 간에 전송 | 쿠키를 통해 서버와 클라이언트 간에 전송 |
보안 설정 | HTTPS 전송 시 보안 설정 가능 | HttpOnly, Secure 속성으로 보안 설정 가능 |
만료 설정 | 서버에서 관리 | 클라이언트에서 관리 |
사용 예시 | 로그인 상태 유지, 장바구니 정보 저장 | 사용자 설정, 로그인 정보 저장 |
삭제 방법 | 서버에서 세션 삭제 | 클라이언트에서 쿠키 삭제 |
세션과 쿠키의 사용 예시
세션 사용 예시
- 로그인 상태 유지 : 사용자가 로그인하면 서버는 세션을 생성하고, 세션 ID를 클라이언트에게 전달한다. 이후 클라이언트는 이 세션 ID를 사용하여 서버에 요청할 때마다 로그인 상태를 유지할 수 있다.
- 장바구니 정보 : 사용자가 쇼핑몰에서 장바구니에 상품을 담으면, 서버는 세션에 장바구니 정보를 저장한다. 사용자가 페이지를 이동하더라도 장바구니 정보는 유지된다.
- 사용자 맞춤형 정보 : 사용자가 웹사이트에서 설정한 개인화된 정보를 세션에 저장하여, 사용자가 페이지를 이동하더라도 해당 정보를 유지할 수 있다.
const session = require('express-session');
app.use(session({
secret: 'secret-key', // 암호화용 키
resave: false,
saveUninitialized: true,
cookie: { secure: true }
}));
app.post('/login', (req, res) => {
req.session.user = { id: 'user123', name: 'john' };
});
쿠키 사용 예시
- 로그인 정보 : 사용자가 로그인하면 서버는 쿠키에 로그인 정보를 저장하고, 이후 클라이언트는 이 쿠키를 사용하여 자동으로 로그인할 수 있다.
- 사용자 설정 : 사용자가 웹사이트에서 설정한 언어, 테마 등을 쿠키에 저장하여, 사용자가 페이지를 이동하더라도 해당 설정을 유지할 수 있다.
- 광고 추적 : 광고 네트워크는 쿠키를 사용하여 사용자의 행동을 추적하고, 맞춤형 광고를 제공할 수 있다.
// Cookie 생성 예시
document.cookie = "username=john; expires=Fri, 31 Dec 2024 23:59:59 GMT; path=/";
// 서버에서 쿠키 설정 (Express 예시)
res.cookie('username', 'john', { maxAge: 900000, httpOnly: true });
정리
결국, 둘의 핵심적인 차이는 저장 위치(서버 vs 클라이언트)와 지속성, 보안성에 있다.
- 세션(Session): 민감한 데이터나 일시적으로 관리해야 하는 데이터, 서버에서 관리가 필요한 데이터를 저장.
- 쿠키(Cookie): 사용자의 브라우저에서 저장하는 간단하고 가벼운 데이터를 저장, 사용자의 설정 값, 지속적인 추적, 개인화 데이터에 적합.