20.1 세션(Session)과 쿠키(Cookie)
Connectionless Protocol : 클라이언트의 요청에 서버가 응답을 하고나서 바로 연결을 끊는다. -> 서버의 자원을 효율적으로 관리하기 위해서.
웹 서비스는 HTTP 프로토콜을 기반으로 하는데, HTTP 프로토콜은 클라이언트와 서버의 관계를 유지하지 않는 특징이 있다.
서버의 부하를 줄일 수 있는 장점은 있으나, 클라이언트의 요청마다 서버와 새로운 연결이 생성되기 때문에 일반적인 로그인 상태 유지, 장바구니 등의 기능을 구현하기 어렵다.
이런 Connectionless Protocol의 불편함을 해결하기 위해서 세션과 쿠키를 이용한다.
세션과 쿠키는 클라이언트와 서버의 연결 상태를 유지해주는 방법으로, 세션은 서버에서 연결 정보를 관리하고, 쿠키는 클라이언트에서 연결 정보를 관리한다.
세션이 서버에 저장되기 때문에 보안이 더 좋아서 세션을 더 사용하지만, 쿠키도 사용한다.
20.2 HttpServletRequest를 이용한 세션 사용
회원정보 수정 또는 삭제 요청시 서버에 세션이 있다면 처리하는 응답을 하고 없다면 예외 처리를 해야 한다.
스프링 MVC에서 HttpServletRequest를 이용해서 세션을 이용하려면 컨트롤러의 메소드에서 파라미터로 HttpServletRequest를 받으면 된다.
20.3 HttpSession을 이용한 세션 사용
HttpServletRequest와 차이는 거의 없고 세션 객체를 얻는 방법이 차이있을 뿐이다.
HttpServletRequest를 받은 후 getSession()으로 세션을 얻어야 하는 반면
HttpSession은 바로 세션을 얻을 수 있다.
20.4 세션 삭제
세션을 삭제하는 방법은 session.invalidate()를 사용하면 된다. 주로 로그아웃이나 회원탈퇴에 사용한다.
20.5 세션 주요 메소드 및 플로어
getId() : 세션 ID를 반환한다.
setAttribute() : 세션 객체에 속성을 저장한다.
getAttribute() : 세션 객체에 저장된 속성을 반환한다.
removeAttribute() : 세션 객체에 저장된 속성을 제거한다.
setMaxInactivaInterval() : 세션 객체의 유지시간을 설정한다.
getMaxInactivaInterval() : 세션 객체의 유지시간을 반환한다.
invalidate() : 세션 객체의 모든 정보를 삭제한다.
20.6 쿠키(Cookie)
쿠키는 클라이언트에 정보가 저장되는 차이가 있다. HttpServletResponse에 쿠키를 담는다.
쿠키를 생성할 땐 생성자에 두개의 파라미터를 넣어주는데 첫번째는 쿠키의 이름, 두번째는 쿠키의 값을 넣어준다.
쿠키를 사용할 땐 @CookieValue 어노테이션을 사용한다. 속성으로 value와 required를 지정한다.
value는 쿠키 이름이고 required는 value에 해당하는 이름이 없을시 익셉션이 발생할 지 안할 지를 지정하는 속성이다. true일 경우 예외가 발생하고 false일 경우 발생하지 않는다. false로 지정해서 예외가 발생하지 않게 하자.
'프로그래밍 > Spring' 카테고리의 다른 글
[Spring] Jdbc & JdbcTemplate & ConnectionPool (0) | 2020.03.25 |
---|---|
[Spring] 리다이렉트, 인터셉트 (0) | 2020.03.24 |
[Spring] Controller (0) | 2020.03.23 |
[Spring] Service & DAO 객체 구현 (0) | 2020.03.23 |
[Spring] 스프링 MVC 웹 서비스 (0) | 2020.03.23 |