Spring

쿠키(Cookie)

NellKiM 2024. 11. 19. 14:17
 

웹에서의 쿠키(Cookie)란?

**쿠키(Cookie)**는 웹 브라우저가 사용자 컴퓨터에 저장하는 작은 데이터 파일입니다. 웹 서버와 브라우저 간의 정보를 저장하고 교환하는 데 사용되며, 사용자의 세션 정보를 유지하거나 개인화된 경험을 제공하기 위해 활용됩니다.

1. 쿠키의 특징

  • 클라이언트 측 저장: 쿠키는 클라이언트(브라우저)에 저장됩니다.
  • 작은 데이터 크기: 일반적으로 하나의 쿠키는 4KB 이하의 데이터를 저장할 수 있습니다.
  • 자동 전송: 동일한 도메인에서 서버 요청 시 쿠키가 자동으로 전송됩니다.
  • 만료 시간: 설정된 만료 시간에 따라 쿠키가 삭제되거나 유지됩니다.

2. 쿠키의 구성 요소

쿠키는 다음과 같은 정보를 포함할 수 있습니다:

  1. 이름(Name): 쿠키의 고유 이름.
  2. 값(Value): 쿠키에 저장된 데이터.
  3. 도메인(Domain): 쿠키가 적용될 도메인(예: example.com).
  4. 경로(Path): 쿠키가 적용될 URL 경로(예: /account).
  5. 만료 시간(Expires): 쿠키의 유효 기간.
  6. 보안(Security): HTTPS를 통해서만 쿠키를 전송하도록 설정 가능.

3. 쿠키의 작동 원리

  1. 사용자가 웹사이트에 접속하면 서버가 쿠키를 생성하고, HTTP 응답 헤더를 통해 브라우저에 쿠키를 전송합니다.
  2. 브라우저는 쿠키를 클라이언트 컴퓨터에 저장합니다.
  3. 이후 동일한 도메인에 요청을 보낼 때 브라우저는 저장된 쿠키를 자동으로 서버에 포함시켜 전송합니다.

4. 쿠키의 종류

  1. 세션 쿠키(Session Cookie):
    • 브라우저를 닫으면 삭제되는 임시 쿠키.
    • 사용자의 세션 상태(예: 로그인 상태) 유지에 주로 사용.
  2. 영구 쿠키(Persistent Cookie):
    • 만료 시간이 설정되어 있으며, 설정된 시간까지 클라이언트에 저장됨.
    • 장기적인 사용자 설정 유지(예: 자동 로그인, 사용자 선호도 저장).
  3. 제3자 쿠키(Third-Party Cookie):
    • 사용자가 방문한 도메인이 아닌 다른 도메인에서 생성한 쿠키.
    • 주로 광고 추적 및 분석에 사용.

5. 쿠키 사용 사례

  1. 세션 관리: 로그인 상태 유지, 장바구니 정보 저장.
  2. 사용자 맞춤화: 사용자 선호도(예: 언어 설정) 저장.
  3. 분석 및 추적: 사용자의 행동 패턴 분석 및 광고 제공.

6. 쿠키 설정 방법

1) 서버에서 쿠키 설정 (Java)

// 새로운 쿠키 생성 
Cookie cookie = new Cookie("username", "JohnDoe"); 
// 쿠키 유효 시간 설정 (60초 * 60분 * 24시간 = 1일) 
cookie.setMaxAge(60 * 60 * 24); 
// 클라이언트로 쿠키 전송 
response.addCookie(cookie);
 

2) 클라이언트에서 쿠키 읽기

// 요청에서 쿠키 읽기 
Cookie[] cookies = request.getCookies(); 
if (cookies != null) 
{ 
	for (Cookie cookie : cookies) 
    { 
        if (cookie.getName().equals("username")) { 
        System.out.println("User: " + cookie.getValue()); 
        } 
    } 
 }

7. 쿠키와 보안

  • Secure 속성: HTTPS 연결에서만 쿠키를 전송.
  • HttpOnly 속성: JavaScript로 쿠키를 읽을 수 없게 하여 XSS 공격 방지.
  • SameSite 속성: 제3자 쿠키의 전송을 제한하여 CSRF 공격을 방지.

예시: 보안 쿠키 설정

Cookie secureCookie = new Cookie("sessionId", "12345"); 
secureCookie.setSecure(true); 
// HTTPS에서만 전송 
secureCookie.setHttpOnly(true); // JavaScript 접근 금지 
secureCookie.setMaxAge(3600); // 1시간 유효 
secureCookie.setPath("/"); 
response.addCookie(secureCookie);

8. 쿠키와 세션의 차이점

특징쿠키(Cookie)세션(Session)
저장 위치 클라이언트(브라우저) 서버
데이터 크기 4KB로 제한 제한 없음 (서버 메모리 사용)
유효 기간 설정 가능 (만료 시간으로 관리) 브라우저 종료 시 기본적으로 만료
보안 보안에 취약 (클라이언트에 저장됨) 상대적으로 안전 (서버에서 관리)
속도 빠름 (클라이언트에서 직접 처리) 느림 (서버와의 통신 필요)

9. 쿠키의 장점과 단점

장점:

  1. 클라이언트에서 정보 저장으로 서버 부담 감소.
  2. 상태 유지를 통해 사용자 경험 향상.
  3. 간단하고 구현이 용이.

단점:

  1. 보안 취약점 (XSS, CSRF 등).
  2. 저장 용량 제한(4KB).
  3. 브라우저마다 쿠키 처리 방식의 차이.

결론

쿠키는 웹 애플리케이션에서 중요한 상태 관리 도구로, 세션 유지 및 사용자 개인화를 위해 널리 사용됩니다. 하지만, 보안에 민감하기 때문에 Secure, HttpOnly, SameSite와 같은 속성을 적절히 설정하여 안전하게 사용하는 것이 중요합니다.

 

Cookie 클래스 주요 메서드

1. 생성자

  • Cookie(String name, String value)
    • 쿠키 객체를 생성합니다.
    • 매개변수:
      • name: 쿠키의 이름 (필수).
      • value: 쿠키에 저장할 값 (필수).

2. 쿠키의 이름 및 값 관련 메서드

  • String getName()
    • 쿠키의 이름을 반환합니다.
    • 예제:
      String name = cookie.getName();
  • String getValue()
    • 쿠키의 값을 반환합니다.
    • 예제:
       
      String value = cookie.getValue();
  • void setValue(String value)
    • 쿠키의 값을 변경합니다.
    • 예제:
      cookie.setValue("NewValue");

3. 만료 시간 관련 메서드

  • void setMaxAge(int expiry)
    • 쿠키의 유효 시간을 초 단위로 설정합니다.
    • 매개변수:
      • expiry: 쿠키의 유효 시간 (초 단위).
        • 0: 즉시 삭제.
        • 음수: 브라우저가 닫힐 때 쿠키 삭제.
    • 예제:
      cookie.setMaxAge(3600); // 1시간 동안 유지
  • int getMaxAge()
    • 쿠키의 유효 시간을 반환합니다.
    • 예제:
      int maxAge = cookie.getMaxAge();
  •