SPRING

[SPRING] 쿠키(Cookie)

도원좀비 2025. 4. 25. 19:54

1️⃣ 쿠키란?

쿠키는 클라이언트(브라우저) 측에 저장되는 작은 데이터 조각
HTTP는 기본적으로 Stateless(무상태) 이기 때문에, 사용자의 로그인 정보나 장바구니 상태 등을 유지하기 위해 쿠키를 사용

쿠키는 서버가 클라이언트에 저장을 요청하고, 클라이언트는 이후 모든 요청에 해당 쿠키를 자동으로 포함시켜 보냄

 


2️⃣ 쿠키의 저장 위치

  • 브라우저 로컬 저장소에 저장
    • 각 도메인별로 저장됩
    • 브라우저마다 별도로 관리됨 (Chrome, Firefox, Edge 등)
  • 저장 위치 확인 (예: Chrome DevTools)
    • Application 탭 → Cookies → 해당 도메인 선택

3️⃣ 쿠키의 구조

필드 설명
Name 쿠키의 이름
Value 쿠키의 값
Domain 쿠키를 전송할 도메인
Path 쿠키가 전송될 경로
Expires/Max-Age 쿠키의 만료 시점 (지정하지 않으면 세션 쿠키)
Secure HTTPS 연결에서만 전송됨
HttpOnly JavaScript 접근 불가능 (XSS 방어)
SameSite CSRF 방어 (Lax, Strict, None)

 


4️⃣ 쿠키 흐름

🔄 서버 → 클라이언트 (Set-Cookie)

Set-Cookie: token=abc123; Path=/; HttpOnly; Secure; SameSite=Lax

🔄 클라이언트 → 서버 (Request 시 자동 포함)

Cookie: token=abc123

 


5️⃣ 쿠키 vs 세션 vs 토큰 (간단 비교)

항목 쿠키 세션 토큰 (JWT 등)
저장 위치 클라이언트 서버 클라이언트
인증 방식 상태 기반 상태 기반 무상태(Stateless)
확장성 낮음 낮음 높음
보안 HttpOnly/Secure로 보완 서버 보안 필요 토큰 자체에 서명

 

6️⃣ 쿠키 관련 보안 이슈

  1. XSS (Cross-Site Scripting)
    → HttpOnly 설정으로 방지
  2. CSRF (Cross-Site Request Forgery)
    → SameSite 설정으로 방지 (Lax, Strict)
  3. 탈취 위험
    → HTTPS + Secure + 짧은 유효기간 설정 권장

7️⃣ 실전 예시 (Spring Boot)

// 쿠키 생성
ResponseCookie cookie = ResponseCookie.from("token", "abc123")
    .httpOnly(true)
    .secure(true)
    .path("/")
    .maxAge(Duration.ofDays(1))
    .sameSite("Lax")
    .build();

response.setHeader("Set-Cookie", cookie.toString());

 


8️⃣ 쿠키를 사용하면 좋은 때

  • 간단한 사용자 식별 (ex. 로그인 유지)
  • 테마 설정, 언어 설정
  • 자동 로그인 기능
  • 로그인 시 발급한 세션 ID 혹은 토큰 저장 용도

9️⃣ 쿠키 삭제 방법

Set-Cookie: token=; Max-Age=0; Path=/;

브라우저가 해당 쿠키를 즉시 삭제합니다.


📌 정리

항목 핵심 요약
쿠키란? 클라이언트에 저장되는 작은 데이터
저장 위치 브라우저(도메인별로 분리)
사용 목적 로그인 유지, 사용자 상태 추적
보안 설정 HttpOnly, Secure, SameSite
주의사항 XSS, CSRF 방지 설정 필수

 

'SPRING' 카테고리의 다른 글

[SPRING] 파티셔닝(Partitioning)  (1) 2025.05.02
[SPRING] JPA로 테이블 객체 다루기  (2) 2025.04.30
[SPRING] SSE(Sever-sent-event)  (1) 2025.04.25
[SPRING] JPA Proxy  (3) 2025.04.21
[SPRING] 조인(JOINED) 전략  (2) 2025.04.19