[Spring MVC] Spring MVC에서 쿠키(Cookie) 사용하기
쿠키란 클라이언트 측 즉, 웹 브라우저에 저장되는 데이터로서 팝업창에 체크하는 "오늘은 더 이상 안 보기" 등 여러 상황에서 사용된다.
비슷한 개념으로 세션 데이터가 있지만 세션은 서버 측에 저장되며, 쿠키는 클라이언트 측에 저장된다는 차이가 있다.
쿠키는 서버측에서 저장할 방법이 없고 서버 측에서 클라이언트에 요청을 처리하고 난 후에 보내주는 응답 결과에 쿠키에 저장할 데이터를 담아 보내주면 클라이언트 측에서 저장하게 된다.
Spring MVC에서 쿠키를 저장하는 방법은 Servlet/JSP와 동일하지만 쿠키의 정보를 가져와 사용하는 방법은 Servelt/JSP와 Spring MVC의 방법이 각각 다르며 Spring MVC에서는 쿠키 정보를 쉽게 주입받아 사용할 수 있다.
Servlet/JSP에서는 쿠키 정보를 받을 때 원하는 쿠키 정보만을 받을 수 없고 모든 쿠키 정보가 배열로 넘어오기 때문에 반복문과 조건문을 통해 원하는 정보를 얻어와야 하지만 Spring MVC에서는 파라미터 데이터를 주입받듯 매개변수에 @CookieValue 어노테이션을 이용하여 원하는 쿠키 정보를 쉽게 주입받아 사용할 수 있다.
쿠키(Cookie) 정보 저장
@Controller
public class TestController {
@GetMapping("/save_cookie")
public String save_cookie(HttpServletResponse response) {
try {
// 한글 사용을 위한 인코더
String data1 = URLEncoder.encode("문자열1", "UTF-8");
String data2 = URLEncoder.encode("문자열2", "UTF-8");
Cookie cookie1 = new Cookie("cookie1", data1);
Cookie cookie2 = new Cookie("cookie2", data2);
// 쿠키 유효시간 설정 (1년)
cookie1.setMaxAge(365*24*60*60);
cookie2.setMaxAge(365*24*60*60);
// 쿠키정보를 응답결과에 추가
response.addCookie(cookie1);
response.addCookie(cookie2);
} catch (Exception e) {
e.printStackTrace();
}
return "save_cookie";
}
}
쿠키를 저장하는 방법은 Servlet/JSP와 Spring MVC 상관없이 동일하게 HttpServletResponse 객체에 쿠키를 정보를 추가하여 응답 결과를 클라이언트에게 보내는 것으로 저장한다.
쿠키(Cookie) 정보 불러오기(Servlet/JSP)
@Controller
public class TestController {
// 쿠키 정보 저장
@GetMapping("/save_cookie")
public String save_cookie(HttpServletResponse response) {
try {
String data1 = URLEncoder.encode("문자열1", "UTF-8");
String data2 = URLEncoder.encode("문자열2", "UTF-8");
Cookie cookie1 = new Cookie("cookie1", data1);
Cookie cookie2 = new Cookie("cookie2", data2);
cookie1.setMaxAge(365*24*60*60);
cookie2.setMaxAge(365*24*60*60);
response.addCookie(cookie1);
response.addCookie(cookie2);
} catch (Exception e) {
e.printStackTrace();
}
return "save_cookie";
}
// 쿠키 정보 불러오기(Servlet/JSP)
@GetMapping("/load_cookie")
public String load_cookie(HttpServletRequest request) {
try {
Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies) {
String str = URLDecoder.decode(cookie.getValue(), "UTF-8");
if(cookie.getName().equals("cookie1")) {
System.out.println("cookie1 : " + str);
} else if(cookie.getName().equals("cookie2")) {
System.out.println("cookie2 : " + str);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return "load_cookie";
}
Servlet/JSP에서는 쿠키 정보를 불러올 때 모든 쿠키 정보가 배열로 한 번에 넘어오기 때문에 쿠키 배열 객체로 쿠키 정보를 HttpServletRequest 객체에서 받아와야 한다.
또 한 원하는 쿠키 정보를 사용하기 위해서는 반복문과 조건문을 통하여 쿠키 정보를 얻어올 수 있다.
쿠키(Cookie) 정보 불러오기(Spring MVC)
@Controller
public class TestController {
// 쿠키 정보 저장
@GetMapping("/save_cookie")
public String save_cookie(HttpServletResponse response) {
try {
String data1 = URLEncoder.encode("문자열1", "UTF-8");
String data2 = URLEncoder.encode("문자열2", "UTF-8");
Cookie cookie1 = new Cookie("cookie1", data1);
Cookie cookie2 = new Cookie("cookie2", data2);
cookie1.setMaxAge(365*24*60*60);
cookie2.setMaxAge(365*24*60*60);
response.addCookie(cookie1);
response.addCookie(cookie2);
} catch (Exception e) {
e.printStackTrace();
}
return "save_cookie";
}
// 쿠키 정보 불러오기(Spring MVC)
@GetMapping("/load_cookie2")
public String load_cookie2(@CookieValue("cookie1") String cookie1,
@CookieValue("cookie2") String cookie2) {
System.out.println("cookie1 : " + cookie1);
System.out.println("cookie2 : " + cookie2);
return "load_cookie2";
}
}
Spring MVC에서는 쿠키 정보를 메서드의 매개변수에 @CookieValue 어노테이션을 통해 쉽게 주입받을 수 있다.
Servlet/JSP 방식과 비교해보면 코드가 훨씬 간결하다는 것을 알 수 있으며 주입 방식은 @RequestParam 혹은 @ModelAttribute와 동일하다.
@CookieValue 어노테이션의 매개변수로는 쿠키를 저장할 때 사용한 이름을 작성해주면 되고, 인코딩을 한 경우 디코딩도 자동으로 해주므로 편리하게 사용할 수 있다.
본 포스팅은 필자가 공부한 내용을 정리한 포스팅으로 오류가 존재할 수 있습니다.
참고 : 인프런 - 만들면서 배우는 Spring MVC5