본문 바로가기

Language/Java

[Java] 자바에서 Cookie 사용법(생성,조회,수정,삭제)

반응형

Intro

지난 포스팅에서 javascript로 Cookie를 저장하고 조회하는 등의 사용법에 대해서 알아보았습니다.

이번에는 java back단에서 Cookie를 제어하고 사용하는 방법에 대해서 공유해드리겠습니다.

 

Cookie란?

  • 쿠키는 클라이언트와 서버 간의 상태 정보를 유지하기 위해 사용되는 작은 데이터 조각입니다.
  • 웹 애플리케이션은 클라이언트에 쿠키를 보내고, 클라이언트는 이 쿠키를 저장하고 필요할 때마다 서버에 다시 전송합니다. 이를 통해 세션 관리, 사용자 추적, 사용자 설정 등 다양한 기능을 구현할 수 있습니다.

  • 네트워크에서 쿠키는 HTTP 헤더를 통해 클라이언트와 서버 간에 전송됩니다. 
  • 쿠키는 일반적으로 서버에서 클라이언트로 전송되며, 클라이언트는 이를 저장하고 나중에 동일한 서버로 요청을 보낼 때마다 해당 쿠키를 서버에 다시 전송합니다.

  • 쿠키는 주로 세션 관리를 위해 사용됩니다. 세션은 일정 기간 동안 유지되는 클라이언트와 서버 간의 연결을 나타냅니다. 클라이언트가 웹 사이트에 접속하면, 서버는 클라이언트에게 고유한 세션 ID를 포함한 쿠키를 제공합니다. 클라이언트는 이 쿠키를 저장하고, 이후 요청에서는 세션 ID를 서버에 함께 전송하여 서버가 해당 클라이언트의 세션을 식별하고 유지할 수 있게 됩니다.

 

Cookie의 속성

  1. 이름: 쿠키의 이름을 식별하는 문자열입니다.
  2. 값: 쿠키에 저장되는 데이터입니다.
  3. 도메인: 쿠키가 전송되는 도메인을 지정합니다. 기본적으로 현재 도메인에 대해서만 전송됩니다.
  4. 경로: 쿠키의 유효한 경로를 지정합니다. 기본적으로 쿠키를 설정한 경로와 하위 경로에 대해서만 전송됩니다.
  5. 유효기간: 쿠키의 유효기간을 지정합니다. 유효기간이 지나면 클라이언트에서 해당 쿠키를 삭제합니다.
  6. 보안: 보안을 위해 쿠키를 HTTPS 연결에서만 전송하도록 지정할 수 있습니다.

Cookie 사용처

쿠키는 다음과 같은 상황에서 사용됩니다:

  1. 세션 관리: 서버는 클라이언트에게 고유한 세션 ID를 부여하고, 이를 쿠키로 전달합니다. 클라이언트는 이 쿠키를 저장하여 세션 ID를 유지하며, 이후 요청에서 서버에 전송합니다. 서버는 세션 ID를 사용하여 클라이언트의 세션 상태를 식별하고 유지합니다.

  2. 사용자 추적: 쿠키는 사용자의 행동을 추적하는 데 사용될 수 있습니다. 예를 들어, 웹 사이트가 특정 사용자의 방문 기록이나 활동을 추적하고, 이를 바탕으로 맞춤형 경험을 제공하거나 분석에 활용할 수 있습니다.

  3. 사용자 설정 유지: 사용자의 설정 정보를 쿠키에 저장하여 유지할 수 있습니다. 예를 들어, 언어, 테마, 로그인 상태 등의 사용자 설정을 쿠키에 저장하여 다음 방문 시에도 유지할 수 있습니다.

Java Cookie 사용법

  • Java에서 쿠키를 다루기 위해서는 javax.servlet.http 패키지의 Cookie 클래스를 사용합니다. 이 클래스를 사용하여 쿠키를 생성하고, 읽고, 수정하고, 삭제할 수 있습니다.

Cookie 생성

Cookie cookie = new Cookie("이름", "값");
  • 여기서 "이름"은 쿠키의 이름이고, "값"은 쿠키에 저장할 데이터입니다. 이후에 추가적인 설정을 하고 싶다면 Cookie 클래스의 다른 메서드를 사용할 수 있습니다. 예를 들면, setMaxAge(int seconds) 메서드를 사용하여 쿠키의 유효기간을 설정할 수 있습니다.
Cookie cookie = new Cookie("이름", "값");
cookie.setMaxAge(3600); // 유효기간 설정 (초 단위)
cookie.setPath("/"); // 쿠키의 유효 경로 설정
response.addCookie(cookie); // 쿠키를 응답에 추가

 

  • 위의 예시에서는 setMaxAge() 메서드를 사용하여 쿠키의 유효기간을 1시간(3600초)로 설정하였고, setPath() 메서드를 사용하여 쿠키의 유효 경로를 "/"로 설정하였습니다. 이렇게 설정된 쿠키는 현재 도메인에서 유효하며, 모든 경로에서 사용할 수 있습니다.

Cookie 조회

  • 쿠키를 읽을 때는 HttpServletRequest 객체의 getCookies() 메서드를 사용합니다. 이 메서드는 클라이언트로부터 전송된 모든 쿠키를 배열로 반환합니다. 다음은 쿠키를 읽는 예시입니다:쿠키를 읽을 때는 HttpServletRequest 객체의 getCookies() 메서드를 사용합니다. 이 메서드는 클라이언트로부터 전송된 모든 쿠키를 배열로 반환합니다.
Cookie[] cookies = request.getCookies();
if (cookies != null) {
    for (Cookie cookie : cookies) {
        String name = cookie.getName();
        String value = cookie.getValue();
        // 쿠키의 이름과 값 사용
    }
}
  • 위의 예시에서는 getCookies() 메서드를 사용하여 클라이언트로부터 전송된 모든 쿠키를 배열로 가져왔습니다. 이후 for 루프를 통해 각 쿠키의 이름과 값을 읽어올 수 있습니다.

Cookie 수정

  • 쿠키를 수정하거나 삭제하기 위해서는 쿠키를 읽은 후 값을 변경하고, 동일한 쿠키를 다시 추가하면 됩니다. 
  • 쿠키의 값을 변경하고자 할 때는 해당 쿠키의 setValue() 메서드를 사용하여 새로운 값을 설정하고, 수정된 쿠키를 response.addCookie()를 사용하여 응답에 추가합니다.
Cookie[] cookies = request.getCookies();
if (cookies != null) {
    for (Cookie cookie : cookies) {
        if (cookie.getName().equals("이름")) {
            cookie.setValue("새로운 값");
            response.addCookie(cookie); // 쿠키 수정
            break;
        }
    }
}

 

Cookie 삭제

  • 쿠키를 삭제하려면 쿠키의 값을 비워두고, 유효기간을 0으로 설정하여 쿠키를 무효화시킵니다.
Cookie[] cookies = request.getCookies();
if (cookies != null) {
    for (Cookie cookie : cookies) {
        if (cookie.getName().equals("이름")) {
            cookie.setValue("");
            cookie.setMaxAge(0);
            response.addCookie(cookie);
            break;
        }
    }
}

 

주의점

  • 쿠키는 클라이언트에서도 수정될 수 있습니다. 클라이언트는 쿠키를 저장하고, 쿠키의 값을 변경하거나 삭제할 수 있습니다. 그러나 클라이언트가 쿠키의 값을 수정하더라도 서버는 클라이언트가 보낸 쿠키의 값을 믿지 않고 항상 서버에서 유효성을 확인해야 합니다.

  • 쿠키는 클라이언트의 로컬에 저장되며, 서버는 이를 읽거나 수정할 수 없습니다. 쿠키는 클라이언트가 지정한 도메인과 경로에서만 사용되며, 동일한 도메인과 경로에 대한 요청에서만 해당 쿠키를 서버로 전송합니다. 또한, 쿠키는 보안을 위해 암호화되지 않으므로 민감한 정보를 저장하는 데는 적합하지 않습니다.
반응형