본문 바로가기

Servlet&JSP 프로그래밍

뉴렉처[Servlet/JSP] 강의 복습 28강~33강

웹 서버는 어떻게 각각의 다른 사용자들을 구분할까?

28강 - 웹 서버가 현재 사용자(Session)을 구분하는 방식

1) 처음으로 사용자의 요청이 왔을때 Servlet의 SID(Session ID)가 없다. (저장할 수 있는 회원번호가 없다고 생각하면 된다.)

2) SID가 없기떄문에 Session 저장소는 사용하지 못하고 Application 저장소만 사용가능하다.

3)처음 요청을 응답했을때 SID가 부여되고 응답한다.(저장할 수 있는 회원번호가 생겨서 앞으로 그 번호에 저장할 수 있다.)

4) 두번째로 사용자가 요청시 SID를 동반해서 요청이들어온다.

5) 두번째 요청때는 SID가 있기 떄문에 Session 저장소에 저장할 수 있게 된다.

6) 브라우저를 닫으면 SID는 소멸되고 Session 저장소도 없어진다.

 

*세션 메소드

void setAttribute(String name, Object value); //지정된 이름으로 객체를 설정

Object getAttribute(String name); //지정한 이름의 객체를 반환

void invalidate(); //세션에서 사용되는 객체들을 바로 해제

void setMaxInactiveInterval(int interval); //세션 타임아웃을 정수(초)로 설정

---> 설정한 시간이전에 요청시 타임아웃을 초기화, 설정한 시간이 넘으면 새로운 Session ID로 인식한다.

---> 세션을 무한정으로 유지시키면 저장소가 무한히 증가하게 됨으로 타임아웃을 세팅해줘서 세션 저장소를 관리한다.

 

29강 - Cookie를 이용해 상태 값 유지하기

Session은 휘트니스 센터에 등록하여 사물함에 신발과 세면도구를 두고 다니는 경우고,

Cookie는 휘트니스 센터에 갈때마다 신발과 세면도구를 들고 다니는 경우로 생각하면 쉽다.

즉, 클라이언트가 상태값을 가지고 있다가 웹 서버에 보내고 다시 가져오는것!! (상태값은 유지된다.)

Application 과 Session: 서버에 저장하는 저장소

Cookie: 클라이언트에 저장하는 저장소

 

클라이언트가 서버에 데이터를 요청할때 1.Header 설정, 2.데이터 설정, 3.Cookie 의 데이터를 보낼 수 있다.

웹 서버에서

1. Header 설정 데이터를 가져오려면 getHeader("remote-hose");

2. 데이터를 가져오려면 getParameter("x");

3. Cookie를 가져오려면 getCookies();

로 데이터를 받을 수 있다.

웹 서버에서 다시 클라이언트로 응답할때는 addCookie()를 이용해서 쿠키에 데이터를 담아 클라이언트에게 보낼 수 있다.

 

(클라이언트 -> 웹 서버): 웹 서버에 전달 된 쿠키 가져오기

Cookie[] cookies = request.getCookies(); //클라이언트로부터 전달 받은 쿠키를 저장하는 객체 생성

(쿠키는 여러개라고 가정해서 배열값이다.)

 

Cookie c = cookies[0] //0번째에 있는 cookies값을 쿠키객체 c에 저장

if(c.getName().equals("value")){ //꺼낸 쿠키에 이름(key)값이 value이면 c.getValue();로 값을 가져온다.(반환형 String)

   x = Integer.parseInt(c.getValue());

}

 

*쿠키가 여러개라면 반복문을 활용해서 이름을 찾아 value를 추출한다.
for(Cookie c : cookies){
   if(c.getName().equals("value")){
      x = Integer.parseInt(c.getValue());
      break;
   }
}

 

(웹 서버 -> 클라이언트)

1. 저장하고 클라이언트에게 보낼 쿠키 생성

형식: Cookie cookie = new Cookie("문자열", "문자열")

ex)

Cookie valueCookie = new Cookie("value", String.valueOf(v)); //쿠키 저장시 key와 value로 저장

Cookie opCookie = new Cookie("op", op);

2. 쿠키를 클라이언트에게 전달

response.addCookie(valueCookie);

response.addCookie(opCookie);

 

30강 - Cookie의 path 옵션

서블릿마다 쿠키가 각각 다르다. A서블릿을 요청하는데 B쿠키를 가져가면 안된다.

따라서 A서블릿을 호출할때 A쿠키를 들고가야하는 설정을 해주어야 한다.

(또는 특정 범위의 서블릿을 실행할때 특정 쿠키를 가져가게 설정한다.)

path 설정: cookie.setPath("/uri명");

ex.

valueCookie.setPath("/"); //valueCookie는 모든 페이지를 요청할때마다 쿠키를 가져와라.

opCookie.setPath("/notice/"); //opCookie는 notice가 포함된 uri일때 쿠키를 가져와라.

 

31강 - Cookie의 maxAge 옵션

maxAge를 설정하지 않으면 브라우저가 닫혔을때 Cookie는 없어진다.(브라우저랑 생존주기가 같다.)

maxAge를 설정하면 브라우저가 닫혀도 그 기간내에는 Cookie가 유지된다.

ex. maxAge 사용 예)

valueCookie.setMaxAge(1000); //1000초 설정

opCookie.setMaxAge(24*60*60); //60초 * 60초 = 1시간 * 24 = 24시간(하루동안 쿠키 유지)

 

32강 - Application/Session/Cookie의 차이점 정리

Application 저장소

사용범위: 전역범위에서 사용하는 저장 공간

생명주기: WAS가 시작해서 종료할 때 까지

저장위치: WAS 서버의 메모리

Session 저장소

사용범위: 세션 범위에서 사용하는 저장 공간

생명주기: 세션이 시작해서 종료할 때 까지

저장위치: WAS 서버의 메모리

Cookie

사용범위: Web Browser별 지정한 path 범주 공간

생명주기: Browser에 전달한 시간부터 만료시간까지

저장위치: Web Browser의 메모리 또는 파일

 

기간을 오랫동안 가지고 사용해야한다면 Cookie에 저장하는게 합리적이다.

세션에 두고 사용하게 된다면 브라우저를 끄고 새로 열때마다 새로운 SID를 부여받고 세션 저장소에 저장하게 된다.

==> 매번 새로운 SID값의 저장소를 만들게 되면 웹 서버 자원을 낭비하는 것이기 떄문에 Cookie를 사용

 

33강 - 서버에서 페이지 전환해주기(redirect)

ex. redirect하고자 하는 html 페이지 명을 넣어주면 된다.

response.sendRedirect("calc2.html");

 

 

 

[출처]

뉴렉쳐 
www.youtube.com/watch?v=u6-D8CJbsmo&list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd&index=14