쿠키란?
쿠키는 name-value로 저장되는 데이터 조각이다. 서버가 쿠키를 생성해 클라이언트에게 전달하면 클라이언트는 같은 도메인에 http요청을 보낼때 이 정보를 헤더에 담아 전달한다.
용도
쿠키가 서버와 http 통신간에 서버의 개발자가 의도적으로 만든 데이터 조각이다. 하지만 왜 만드는것이며 어디에 쓰이는지 알아보자
세션관리
- 사이트에 들어가면 자동 로그인 설정을 한경우, 다시 방문해도 로그인이 유지되는 경험을 해본적이 있을 것이다. 쿠키는 여기서도 사용된다. 사용자의 로그인을 유지하거나, 쇼핑몰의 장바구니, 최근 본 상품 등이 쿠키에 저장되어 처리되는 것이다.
개인화, 분석
- 쇼핑몰을 돌아다니다 보면 내가 구매했거나 최근 검색한 상품과 관련하여 광고가 나오는 것을 경험해본적 있을 것이다. 쿠키에 저장된 나의 기록이 분석 과정을 거쳐 광고를 제공한 것인데, 쿠키는 이와 같이 개인화 서비스 제공을 위해 이용되기도 한다.
주의할점
- 쿠키는 클라이언트에 저장되기 때문에 사이트를 벗어나도 설정된 시간만큼 남아있게된다. 중요한 데이터가 저장될 경우 보안에 문제가 발생할 수 있다.
- 쿠키에 민감한 정보(이름, 나이, 전화번호 등) 암호화하지 않고 저장할 경우 개인정보 유출의 위험이 있다.
이와 같이 편리한 기능을 제공하지만 개인정보 유출 등의 위험이 있기 때문에 암호화 등 개인정보 보호에 신경을 써야만 한다.
쿠키 생성
쿠키는 자바 코드를 통해 쉽게 생성할 수 있다. post로 요청을 받았을 때 쿠키를 넣어서 응답하는 코드를 작성해 보겠다.
@WebServlet("/cookiemaker")
public class PostServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 쿠키 생성
Cookie cookie = new Cookie("uuid", "hwajeong");
// 설정(선택 사항)
cookie.setMaxAge(60 * 60); // 쿠키의 수명, 초단위 이며 예시는 한시간이다.
cookie.setPath("/"); // 쿠키가 적용될 경로('/'는 도메인의 모든 경로)
cookie.setSecure(true); // HTTPS 연결에서만 쿠키 전송
// 응답에 쿠키 추가
response.addCookie(cookie);
}
}
쿠키 읽기
그렇다면 사이트에 접속을 했는데 쿠키가 있다면 어떻게 될지 쿠키를 읽어와 자동 로그인을 처리하는 예시를 통해 알아보겠다. 원래는 DB와 연결하여 회원 여부를 확인해야 하지만 화정누리마을에는 hwajeong만 회원이라고 가정하겠다.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 클라이언트로부터 쿠키 가져오기
Cookie[] cookies = request.getCookies();
boolean loggedIn = false;
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("uuid") && cookie.getValue().equals("hwajeong")) {
loggedIn = true;
break;
}
}
}
if (loggedIn) {
// 쿠키가 있는 경우 로그인 완료 페이지로 리다이렉트
response.sendRedirect("/loginSuccess");
} else {
// 쿠키가 없는 경우 로그인 페이지로 리다이렉트
response.sendRedirect("/login");
}
}
쿠키 삭제
로그아웃을 했는데도 계속 로그인이 되면 안되므로 로그아웃 버튼을 누르면 uuid가 포함된 쿠키도 삭제하는 법을 예시코드를 통해 알아보겠다.
@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 모든 쿠키 가져오기
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("hwajeong")) {
// 쿠키 삭제를 위해 수명을 0초로 설정
cookie.setValue("");
cookie.setPath("/");
cookie.setMaxAge(0);
response.addCookie(cookie);
break;
}
}
}
// 로그아웃 후 로그인 페이지로 리다이렉트
response.sendRedirect("/login");
}
}
이번 포스팅에서는 자바에서 사용하는 쿠키가 무엇인지 어떤 용도로 사용되는지 어떻게 만들고 읽고, 삭제하는지에 대해 알아봤습니다.
'Back-end > WEB' 카테고리의 다른 글
[WEB] PRG(Post-Redirect-Get) 패턴이란? (0) | 2024.07.02 |
---|---|
[Web] forward, redirect 방식의 의미와 차이 (0) | 2024.07.01 |
[Web] Servlet, Jsp란? (0) | 2024.06.25 |