Spring
쿠키(Cookie)
NellKiM
2024. 11. 19. 14:17
웹에서의 쿠키(Cookie)란?
**쿠키(Cookie)**는 웹 브라우저가 사용자 컴퓨터에 저장하는 작은 데이터 파일입니다. 웹 서버와 브라우저 간의 정보를 저장하고 교환하는 데 사용되며, 사용자의 세션 정보를 유지하거나 개인화된 경험을 제공하기 위해 활용됩니다.
1. 쿠키의 특징
- 클라이언트 측 저장: 쿠키는 클라이언트(브라우저)에 저장됩니다.
- 작은 데이터 크기: 일반적으로 하나의 쿠키는 4KB 이하의 데이터를 저장할 수 있습니다.
- 자동 전송: 동일한 도메인에서 서버 요청 시 쿠키가 자동으로 전송됩니다.
- 만료 시간: 설정된 만료 시간에 따라 쿠키가 삭제되거나 유지됩니다.
2. 쿠키의 구성 요소
쿠키는 다음과 같은 정보를 포함할 수 있습니다:
- 이름(Name): 쿠키의 고유 이름.
- 값(Value): 쿠키에 저장된 데이터.
- 도메인(Domain): 쿠키가 적용될 도메인(예: example.com).
- 경로(Path): 쿠키가 적용될 URL 경로(예: /account).
- 만료 시간(Expires): 쿠키의 유효 기간.
- 보안(Security): HTTPS를 통해서만 쿠키를 전송하도록 설정 가능.
3. 쿠키의 작동 원리
- 사용자가 웹사이트에 접속하면 서버가 쿠키를 생성하고, HTTP 응답 헤더를 통해 브라우저에 쿠키를 전송합니다.
- 브라우저는 쿠키를 클라이언트 컴퓨터에 저장합니다.
- 이후 동일한 도메인에 요청을 보낼 때 브라우저는 저장된 쿠키를 자동으로 서버에 포함시켜 전송합니다.
4. 쿠키의 종류
- 세션 쿠키(Session Cookie):
- 브라우저를 닫으면 삭제되는 임시 쿠키.
- 사용자의 세션 상태(예: 로그인 상태) 유지에 주로 사용.
- 영구 쿠키(Persistent Cookie):
- 만료 시간이 설정되어 있으며, 설정된 시간까지 클라이언트에 저장됨.
- 장기적인 사용자 설정 유지(예: 자동 로그인, 사용자 선호도 저장).
- 제3자 쿠키(Third-Party Cookie):
- 사용자가 방문한 도메인이 아닌 다른 도메인에서 생성한 쿠키.
- 주로 광고 추적 및 분석에 사용.
5. 쿠키 사용 사례
- 세션 관리: 로그인 상태 유지, 장바구니 정보 저장.
- 사용자 맞춤화: 사용자 선호도(예: 언어 설정) 저장.
- 분석 및 추적: 사용자의 행동 패턴 분석 및 광고 제공.
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. 쿠키의 장점과 단점
장점:
- 클라이언트에서 정보 저장으로 서버 부담 감소.
- 상태 유지를 통해 사용자 경험 향상.
- 간단하고 구현이 용이.
단점:
- 보안 취약점 (XSS, CSRF 등).
- 저장 용량 제한(4KB).
- 브라우저마다 쿠키 처리 방식의 차이.
결론
쿠키는 웹 애플리케이션에서 중요한 상태 관리 도구로, 세션 유지 및 사용자 개인화를 위해 널리 사용됩니다. 하지만, 보안에 민감하기 때문에 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: 즉시 삭제.
- 음수: 브라우저가 닫힐 때 쿠키 삭제.
- expiry: 쿠키의 유효 시간 (초 단위).
- 예제:
cookie.setMaxAge(3600); // 1시간 동안 유지
- int getMaxAge()
- 쿠키의 유효 시간을 반환합니다.
- 예제:
int maxAge = cookie.getMaxAge();