Application, Session, Cookie는 HTTP 환경에서 상태를 유지하기 위한 기술이다. HTTP 트랜잭션은 별개의 요청으로 판단하기 때문에 상태를 가질 수 없다. 예를 들어, www.exam.com/page1 & www.exam.com/page2가 있을 때 둘의 요청은 서로 연관성을 가지지 않고 독립적이기 때문에 page1에서 만들어진 데이터는 page2를 요청할 때 유지되지 않는다.
그러나 웹 개발 시 필연적으로 여러 요청(혹은 사이트)에 걸쳐 상태를 유지해야 하는 경우가 있다.
ex1) 최초 페이지에서 로그인 후 여러 페이지에 걸쳐 로그인 상태가 유지되어야 하는 경우
ex2) 쇼핑몰 장바구니에 담긴 물건 정보들이 다른 페이지로 이동하더라도 유지되어야 하는 경우
[ 1 ] Application
Application은 누구나 WAS에 상태값을 저장할 수 있는 공간이다.
- 선언
ServletContext application = request.getServletContext();
- 상태값 저장 (Map 과 유사하다)
application.setAttribute(String string, Object object);
첫 번째 매개변수는 저장할 상태값의 name을, 두 번째 매개변수는 저장할 상태의 실제 값인 value이다.
- 저장한 상태값 사용 (단, return type이 Object 임에 유의)
int x = (Integer)application.getAttribute("value");
저장한 상태값의 name이 "value"이고 실제로 저장한 값의 데이터 타입이 int일 때 위처럼 상태값을 사용할 수 있다.
- 사용 범위 - 전역 범위에서 사용하는 저장 공간
- 생명 주기 - WAS가 시작해서 종료할 때까지
- 저장 위치 - WAS 서버의 메모리
[ 2 ] Session
누구나 WAS에 상태값을 저장할 수 있는 공간이 Application이라면, Session은 개인별로 사물함을 제공한 것이라 할 수 있다. 자세히 설명하자면, Session은 웹 서버가 사용자를 구분하는 방식이며 사용자(브라우저)에 따라 상태값을 저장할 수 있는 저장소가 부여되는 것이다.
- 선언
HttpSession session = request.getSession();
- 상태값 저장 및 사용 방법은 Application과 동일하다. 마찬가지로 setAttribute와 getAttribute(return type이 Object) 메소드를 활용한다.
- 사용 범위 - 세션 범위에서 사용하는 저장 공간
- 생명 주기 - 세션이 시작해서 종료할 때까지
- 저장 위치 - WAS 서버의 메모리
[ 3 ] Cookie
Cookie는 Application과 Session과 달리 서버가 아닌 클라이언트(브라우저)에 상태값을 저장한다. 하지만, 기본적으로 쿠키는 서버(Servlet or jsp)로부터 생성된다.
Cookie가 브라우저에 저장되고 사용되는 과정은 다음과 같다.
(1) 브라우저가 서버에 특정 페이지(Servlet or jsp)를 요청한다.
(2) 서버는 응답헤더에 쿠키를 넣어(쿠키 생성) 전송한다.
(3) 브라우저는 자신만의 공간에 받은 쿠키를 저장한다.
(4) 브라우저는 이후 모든 요청 시 가지고 있는 쿠키들을 요청 헤더에 담아 서버에 전송한다.
(5) 서버는 받은 쿠키를 통해 정보를 얻을 수 있다.
- 쿠키 생성 후 response 객체에 쿠키 추가
Cookie numCookie = new Cookie("num", String.valueOf(num));
Cookie operatorCookie = new Cookie("operator", operator);
response.addCookie(numCookie);
response.addCookie(operatorCookie);
생성자의 첫 번째 매개변수는 저장할 상태값의 name, 두 번째 매개변수는 실제 저장할 값인 value이다. Application과 Session은 실제 저장할 값의 데이터 타입이 Object였던 반면, Cookie는 실제 저장할 값의 데이터 타입이 String이다. 이는 쿠키값으로 보낼 데이터는 url에 사용할 수 있는 형태여야 하기 때문이다.
쿠키 생성 후 response 객체에 생성한 쿠키를 추가(addCookie)해야 브라우저에 쿠키를 전송할 수 있다.
- 쿠키에 저장된 값 사용
Cookie[] cookies = request.getCookies();
Cookie는 request 객체의 getCookies()를 통해 배열로 받을 수 있다.
따라서 위에서 생성했던 numCookie의 값을 int x에 담기 위해서는 다음과 같은 과정을 거쳐야 한다.
for(Cookie c : cookies) {
if(c.getName().equals("num")) {
int x = Integer.parseInt(c.getValue());
break;
}
}
value가 String으로 저장됨에 유의하자.
- 쿠키의 옵션
① path 옵션: 특정 url(path)을 가진 페이지(servlet or jsp)에만 값을 전달하도록 설정할 수 있다. 즉, 사용 범위를 지정하는 것이다.
numCookie.setPath("/");
operatorCookie.setPath("/notice/");
path를 "/"로 지정한다면 어떤 페이지를 요청하든 값을 전달한다.
"/notice/"의 경우 url에 notice가 포함된 페이지에만 값을 전달한다.
② maxAge 옵션: 쿠키의 장점 중 하나는 maxAge로 기간을 설정하면 그 기간동안 상태값을 저장할 수 있다는 것이다. 따로 maxAge를 설정하지 않았다면 생명 주기는 브라우저와 같으므로 브라우저가 닫혔을 때 쿠키가 사라지게 된다.
numCookie.setMaxAge(60);
매개변수는 '초' 단위로 60으로 설정하면 60초동안 상태값을 저장할 수 있음을 의미한다.
쿠키는 path와 maxAge를 설정할 수 있다는 장점이 있으나, 기본적으로 브라우저에 상태값이 저장된다는 점에서 데이터가 너무 쉽게 노출될 수 있다는 단점이 있다. 즉, 개인정보 유출에 취약함을 의미한다. 또한, 데이터 크기에 제한이 있다는 것도 쿠키의 단점이다.
그러므로 Application, Session, Cookie의 각 특성을 파악하고 상황에 맞게 상태값을 저장할 수 있도록 하자.
[참고자료]
https://dololak.tistory.com/535
[HTTP] HTTP 쿠키란(Cookie)? 쿠키 등장 배경 그리고 쿠키와 세션의 차이점.
쿠키란(Cookie)? 쿠키 등장 배경 쿠키는 HTTP 환경(웹환경)에서 상태를 유지하기 위한 기술입니다. HTTP의 특성상 매번 발생하는 HTTP 트랜잭션은 별개의 요청으로 판단하기 때문에 상태를 가질수 없
dololak.tistory.com
https://dololak.tistory.com/534
[서블릿/JSP] Servlet/JSP 환경에서 쿠키(Cookie) 사용 방법
이전글 [HTTP] HTTP 쿠키란(Cookie)? 쿠키 등장 배경 그리고 쿠키와 세션의 차이점. 쿠키의 동작 방식 이전글에서 쿠키의 개념과 쿠키란 어떤것인지 대략적으로 살펴보았습니다. 이번 글에서는 실질
dololak.tistory.com
https://www.youtube.com/watch?v=LNTscUEgcnU&list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd&index=33
'Programming > Servlet&Jsp' 카테고리의 다른 글
[Servlet & Jsp] MVC 패턴, Model 1, Model 2 (1) | 2023.01.12 |
---|---|
[Servlet & Jsp] Jsp 구조, 코드블록 (1) | 2023.01.09 |
[Servlet & Jsp] Servlet 생명주기, service, doGet, doPost (1) | 2023.01.04 |