국비교육

국비지원 68일차(스프링 - cookie,session )

재밌는개발러 2023. 10. 30. 22:44

※복습하기

1) Bean이란? 

-> 빈(Bean)은 스프링 컨테이너에 의해 관리되는 재사용 가능한 소프트웨어 컴포넌트이다.

즉, 스프링 컨테이너가 관리하는 자바 객체를 뜻하며, 하나 이상의 빈(Bean)을 관리한다

 

2) VO , DTO 란?

-> DTO

DTO는 계층 간의 데이터를 전송하기 위한 객체로써, getter/setter를 사용하여 보내는 사람은 setter를 사용하여 값을 담고, 받는 사람은 getter를 사용하여 값을 꺼내 쓴다. 이때 값의 변조를 막고 싶다면 생성자로 불변 객체로 만들어 버리면 된다. 또한 DTO의 특성상 데이터 전달만은 목적으로 사용하기 때문에 getter/setter를 제외한 다른 로직이 필요가 없다.

-> VO

VO의 경우 값 그 자체를 나타내는 객체로써, 핵심은 필드 값이 같다면 두 객체를 같은 객체로 본다는 것이다. 이때 당연하게도 주소값을 비교하는 경우의 문제점을 위해서 hashcode()와 equals()를 재정의하여 필드 값이 같다면 같은 객체로 인식될 수 있도록 해주어야 한다.

 

3) GET ,POST 맵핑사용 시?

-> pom.xml 이 가서 스프링버전 , 5.2.0 or 5.0.7로 바꿔야지 사용가능하다.

 

4) MVC 패턴 동작 순서

 1. 클라이언트가 서버에 요청을 하면 DisoatcherServlet 클래스가 요청을 받습니다.

 2. DispatcherSelvet 은 프로젝트를 파일 내의  servlet-context.xml 파일의 @Controller 인자를 통해 등록 한 요청 위임 컨틀로러를 찾아 맵핑된 컨트롤러가 존재하면 @RequestMapping을 통해 요청을 처리할 메서드로 이동한다

 3. 컨트롤러는 해당요철을 처리한 서비스를 받아 비즈니스 로직을 서비스에게 위임한다.

 4. 서비스는 요청에 필요한 작업을 수행하고, 요청에 대해 DB에 접근해야 한다면 DAO에 요청하여 처리를 위임한다.

 5. DAO는 DB정보를 DTO를 통해 받아 서비스에게 전달한다.

 6. 서비스는 전달받은 데이터를 컨트롤러에게 전달한다.

 7. 컨트롤러는 MOodel 객체에게 요청을 맡는 view 정보를 담아 DispatcherServlet에게 전송한다.

 8. DispatcherServlet은 ViewResolver에게 전달받은 View 정보를 전달한ㄷ.

 9. ViewResolver는 응답할 View에 대한 JSP를 찾아 DispatcherServlet에게 전달한다.

 10. DispatcherServlet은 응답할 뷰의 Render를 지시하고 뷰는 로직을 처리한다.

 11. DispatcherServlet은 클라이언트에게 Rending 된 뷰를 응답하며 요청을 마친다.

 

※ 스프링 -  cookie , ssssio

1. 쿠키

- 사용자 컴퓨터에 저장
- 저장된 정보를 다른 사람 또는 시스템이 볼 수 있는 단점
- 유효시간이 지나면 사라짐

- 브라우저가 종료돼도 쿠기의 유효시간이 남아있으면 쿠키가 남아있습니다.

 

@쿠키 동작방식

@쿠키 이용방법

1) 서버에서 클라이언트의 브라우저로 전송되어 사용자의 컴퓨터에 저장합니다.

2) 저장된 쿠키는 다시 해당하는 웹 페이지에 접속할 때, 브라우저에서 서버로 쿠키를 전송합니다.

3) 쿠키는 이름(name)과 값(value) 쌍으로 정보를 저장합니다.
- 이름-값 쌍 외에도 도메인(Domain), 경로(Path), 유효기간(Max-Age, Expires), 보안(Secure), HttpOnly 속성을 저장할 수 있습니다.

 

@javax. servlet.http.Cookie

서버에서 쿠키 생성, Reponse의 addCookie메서드를 이용해 클라이언트에게 전송

@클라이언트가 보낸 쿠키 정보 읽기

@ 클라이언트에게 쿠키 삭제 요청

-> 쿠키를 삭제하는 명령은 없고, maxAge가 0인 같은 이름의 쿠키를 전송합니다.

@ 쿠키의 유효기간 설정

1) 메서드 setMaxAge()
- 인자는 유효기간을 나타내는 초 단위의 정수형
- 만일 유효기간을 0으로 지정하면 쿠키의 삭제
- 음수를 지정하면 브라우저가 종료될 때 쿠키가 삭제

 

2) 유효기간을 10분으로 지정하려면
- cookie.setMaxAge(10 * 60); //초 단위 : 10분
- 1주일로 지정하려면 (7*24*60*60)로 설정합니다.

 

 

2. 세션

- 서버에 저장
- 서버가 종료되거나 유효시간이 지나거나 브라우저가 종료돼도 사라집니다.

 

@세션 생성 및 얻기

1) request의 getSession() 메서드는 서버에 생성된 세션이 있다면 세션을 반환하고 없다면 "새롭게 세션을 생성"하여 반환합니다.

2) 새롭게 생성된 세션인지는 HttpSession이 가지고 있는 isNew() 메서드를 통해 알 수 있습니다.

3) request의 getSession() 메서드에 파라미터로 false를 전달하면, 이미 생성된 세션이 있다면 반환하고 없으면 "null"을 반환합니다.

@ 세션에 값 저장

1) name과 value의 쌍으로 객체 Object를 저장하는 메서드입니다.

2) string, object 쌍임

3) 세션이 유지되는 동안 저장할 자료를 저장합니다.

 

@ 세션에 값 조회

-> getAttribute(String name) 메서드

1) 세션에 저장된 자료는 다시 getAttribute(String name) 메서드를 이용해 조회합니다.

2) 반환 값은 Object 유형이므로 저장된 객체로 자료유형 변환이 필요합니다.

3) 메소드 setAttribute()에 이용한 name인 “id”를 알고 있다면 바로 다음과 같이 바로 조회합니다.

@ 세션에 값 삭제

1) removeAttribute(String name)
- name값에 해당하는 세션 정보를 삭제합니다.

2) invalidate()
- 모든 세션 정보를 삭제합니다.

@세션은 클라이언트가 서버에 접속하는 순간 생성

1) 특별히 지정하지 않으면 세션의 유지 시간은 기본 값으로 30분 설정합니다.

2) 세션의 유지 시간이란 서버에 접속한 후 서버에 요청을 하지 않는 최대 시간입니다.

3) 30분 이상 서버에 전혀 반응을 보이지 않으면 세션이 자동으로 끊어집니다.

4)이 세션 유지 시간은 web.xml파일에서 설정 가능합니다.