본문 바로가기
멀티캠퍼스/Spring

230904 (월)

by 세크레투스 2023. 9. 4.
반응형
SMALL

<세션관리>

1. 세션 (접속시작 -> 접속 끊을 때 까지)

- 서버와 클라이언트 간의 지속적인 연결 상태를 가짐

- HTTP는 기본적으로 하나의 요청과 응답으로 처리

* connectionless/stateless

- 로그인, 장바구니 구현과 가은 세션 관리 기능 필요

* HttpSession 클래스를 이용한 세션 관리

* Cookie 클래스를 이용한 세션 처리

 

2. HttpSession 클래스를 이용한 세션 처리 방법 (세션은 정보가 서버에 있고, 쿠키는 정보가 클라이언트에 있다.)

- 세션

* 사용자의 상태 정보를 "서버에서 관리"하는 메커니즘

- 브라우저가 서버에 접속하면 세션 생성

- 브라우저가 종료할 때 세션 제거(?-> 사실은 알 수 없음.)

- Time-out을 정하고 이 기간동안 요청이 없으면 세션 제거(기본 30분)

세션은 브라우저에서 식별하는 정보이다.

3. 세션의 생성

- 세션은 브라우저가 접속할 때 자동으로 생성됨

 

4. 세션의 제거방법

- time-out을 지정하여 제거

* setMaxInactiventerval(second)

Session.setMaxInactiveInterval(60*60*24); //24시간

** 브라우저별로 다르게 설정 가능

* web.xml로 지정

** 모든 브라우저가 동일한 값이 설정됨

 

5. 세션의 제거방법

- 즉시 제거하는 방법

* invalidate() 메서드 사용 (예전에 썼던 세션은 버리고, 새로운 세션을 만들어서 사용하겠다는 의미)

** session.invalidate(); //즉시 제거

- 세션에 저장된 특정 속성 값을 제거하는 방법

* removeAttribute(name) 메서드 사용

** session.removeAttribute(name); //name 값에 해당되는 속성값만 제거

 

6. 실습 : 세션을 이용한 장바구니 실습

- HttpSession 클래스를 이용한 간단한 장바구니 기능 구현

product.html

CartSaveServlet.java

 

- 세션이 사라지는 경우 : 명시적으로 종료시키고 재시작했을때(?)

 

- 로그인 시, 유저네임과 패스워드가 세션 값으로 전송되면 패스워드 검사 후, 널 에러 처리 해주고, 이후에 로그아웃 할 때 세션 값을 삭제 해주면 됨. => 이때 사용하는 것이 session.invalidate(); 임.

 

쿠키의 발급은 서버가 함.

세션 아이디는 응답헤더파트에 담김

다음에 요청 시 요청 헤더에 쿠키헤더라는 곳에 여러 쿠키들이 담겨서 자동으로 서버로 전달됨.

=> 쿠키에는 보안정보를 저장해서는 안된다. 노출되는 정보이기 때문에 보안에 취약하기 때문이다.

==> 웹 사이트 당 300개까지 저장 가능하다.

===> 클라이언트에서 쿠키 사용 금지 설정 가능하다.

 

7. Cookie 

- 쿠키

* 사용자의 상태 정보를 클라이언트에서 관리하는 메커니즘

* 서버의 부하는 줄이나 보안에 매우 취약

* 웹 사이트당 300개까지 저장 가능

* 클라이언트에서 쿠키 사용 금지 설정 가능

* 클라이언트의 브라우저 메모리나 OS 파일에 저장 가능 (timeout값을 운영해서 정해진 시간 내에는 쿠키정보가 남아있다.)

* 기본 저장은 브라우저 메모리 - 브라우저가 종료하면 자동으로 쿠키 제거

* 만료시간을 setMaxAge(age)로 설정하면, 지정된 시간까지 OS 파일에 저장

- JSessionID : 기본 메모리에 저장됨. 브라우저 종료시 사라지면서 로그아웃됨.

 

- 쿠키 메서드

* Cookie 클래스가 있음.

* response.addCookie(cookie) 를 통해서 응답 헤더로 설정됨.

* maxAge(만료시간)을 호출 안하면 default로 메모리에 저장됨. : 브라우저가 종료될때까지 살아있음.

* setMaxAge(second)를 호출하면 파일에 기록되며, 지정한 시간까지 살아있음.

* 쿠키발급은 응답에서 이뤄짐.

* 다음 요청 시, 쿠키는 request header에 담겨있음.

* 그 쿠키의 값을 얻을 때는 request.getCookies() 를 사용하면 됨. -> 복수형? : 목록을 얻는 것임. 값 하나를 얻으려면 루프를 돌려서 찾아야 함. -> 스프링에서는 쉽게 찾을 수 있도록 메커니즘이 되어있음.

 

- URL 전송 시, href나 src에 한글이 있는 경우에 그냥 바로 한글로는 못보낸다.  -> 웹사이트에서 검색을 해봐도 검색어에 들어갈 한글부분이 아스키코드로 16진수로 변환된 것을 볼 수 있다. => 이것을 URL Encoding 이라고 부른다.

 

- 쿠키는 문자열 타입이다.

- 쿠키의 응답시간을 1초로 주면 받자마자 바로 버리는 의미가 됨. : c.setMaxAge(1);

 

- 세션은 서버에 저장, 쿠키는 브라우저(클라이언트)에 저장되는 문자열 정보이다.

 

<FrontCotroller 패턴과 Command 패턴>

1. FrontController 패턴

- 우리가 지향하는 모델 : 모델2 -> 요청을 서블릿에서 받아서 로직처리 후 결과데이터를 만들어냄.

- 사용자의 요청을 처리하기 위한 최초 진입점 정의

- 모든 사용자 요청을 한 개의 서블릿에 집중

* URL 맵핑 관리 단순화

* 모든 요청에 대해 일관된 방법으로 관리 가능

* FrntController 패턴 미적용 아키텍처

2. FrontController 적용 아키텍처

3. FrontController 패턴 고려사항

- 사용자 요청 식별 방법

http://서버IP번호: 포트번호/context명/식별값

http:localhost:8090/context명/식별값

*String requestURI

 

/detail.do

DetailCommand

detail.jsp

만들기~

 

ip주소 연결문제

172.30.x.xx -> 같은 공유기를 사용하는 전자기기로 모두 접속 가능

데이터로 접속 -> 통신사 데이터망이기 때문에 접속 불가능

 

Model2의 MVC(Model-데이터처리 View-결과출력 Controller-흐름제어, 비즈니스 제어 로직) 패턴

 

지금까지는 Get 요청에 대해서만 맛만 본 것일 뿐임.

 

 

반응형
LIST

'멀티캠퍼스 > Spring' 카테고리의 다른 글

230906 (수)  (0) 2023.09.07
230905 (화)  (0) 2023.09.05
230901 (금)  (0) 2023.09.01
230831(목)  (0) 2023.09.01
20230830 (수)  (0) 2023.08.30