개발일기
HTTP 쿠키 vs 세션 완전 정리: 개념, 차이점, 보안까지
뱅우
2025. 5. 29. 10:22
반응형
HTTP 쿠키 vs 세션 완전 정리: 개념, 차이점, 보안까지
웹 개발을 하다 보면 쿠키(Cookie)와 세션(Session)은 반드시 마주치게 됩니다.
"이게 뭐가 다르지?" "로그인 기능 만들 땐 뭘 써야 해?"
이 포스팅에서 깔끔하게 정리해드릴게요!
🍪 쿠키(Cookie)란?
쿠키는 클라이언트(브라우저)에 저장되는 작은 데이터입니다.
서버가 HTTP 응답 시 Set-Cookie
헤더를 통해 쿠키를 설정하고, 이후 요청마다 자동으로 서버에 전송됩니다.
- 저장 위치: 클라이언트(브라우저)
- 유지 방식: 브라우저가 자동 포함해서 전송
- 보안: 노출 위험 있음 (JS 접근 가능, 탈취 우려)
- 예: 자동 로그인, 장바구니 저장
📦 세션(Session)란?
세션은 서버에서 사용자 정보를 관리하는 방식입니다.
사용자가 로그인하면 서버는 세션 ID를 생성하고, 해당 ID를 쿠키에 담아 클라이언트에게 전달합니다.
- 저장 위치: 서버
- 클라이언트는 세션 ID만 저장 (보통 쿠키로 전달)
- 보안: 쿠키보다 안전하지만 여전히 탈취 가능성 존재
- 예: 로그인 상태 유지, 사용자 인증
🔍 쿠키 vs 세션 차이
구분 | 쿠키 | 세션 |
---|---|---|
저장 위치 | 클라이언트 (브라우저) | 서버 |
속도 | 빠름 | 느림 (서버 부하 있음) |
보안 | 낮음 (노출 가능) | 높음 (서버에 저장) |
유지 시간 | 브라우저에 설정된 만료 시간까지 | 서버 설정된 시간 또는 브라우저 종료 시 |
예시 | 자동 로그인, 마케팅 추적 | 로그인 인증, 장바구니 관리 |
🛡️ 보안 이슈
- 쿠키 탈취 (Cookie Hijacking): JS로 접근 가능한 쿠키가 노출되면 위험
- 세션 하이재킹: 세션 ID가 탈취되면 로그인된 것처럼 행동 가능
- 대응 방법: HttpOnly, Secure 속성 설정, 세션 만료 짧게 설정
💻 실무 예시
✅ Spring Boot: 세션 로그인 예제
// 로그인 시
HttpSession session = request.getSession();
session.setAttribute("userId", user.getId());
// 인증 체크
Object userId = request.getSession().getAttribute("userId");
✅ JavaScript: 쿠키 직접 설정
// 쿠키 설정
document.cookie = "userToken=abc123; path=/; max-age=3600";
// 쿠키 읽기
console.log(document.cookie);
📝 결론
✅ 쿠키는 클라이언트 저장, 세션은 서버 저장
✅ 보안이 중요한 정보는 세션, 간단한 설정 값은 쿠키 사용
✅ 최근에는 JWT로 인증을 구현하는 경우도 많음
반응형