세션과 쿠키는 클라이언트와 연결을 유지하는 방법이다
세션과 쿠키를 이용하여 클라이언트와 서버가 연결을 유지할 수 있다.
# Connectionless Protocol
웹 서비스는 HTTP프로토콜을 기반으로 하는데, HTTP프로토콜은 클라이언트와 서버의 관계를 유지 하지 않는 특징이 있다.
(사람과 사람이 통신할때 서로 이해할 수 있는 언어, 공용된 언어를 사용해 전세계 모든 사람과 대화 할수 있다라고
하면, 컴퓨터와 컴퓨터도 서로 이해 할 수 있는 언어, 공용된 언어를 사용 해야 한다는 것인데
이 것을 바로 프로토콜 이라고 한다)
클라이언트가 서버에 무언가를 요청하면 순간적으로 클라이언트와 서버가 연결이되어진다
연결된 순간에 요청한 무언가를 응답해주고 바로 연결을 해제한다.
(이렇게 하는 이유는 서버에 무언가를 요청하는 클라이언트가 하나만 있는게 아니라 굉장히 많기때문에
모두가 서버에 연결한다면 서버에 굉장한 부담이되기때문에 효율적으로 관리하기 위해 이런 방식으로 처리한다고 한다)
만약 로그인을 했을때는 어떻게하는가?
로그인을 요청했을때에는 서버와 연결할때마다 로그인을 확인해야할까...?
이렇게 된다면 효율적이지 못하기에 이 문제를 해결하기 위해 세션(Session)과 쿠키(Cookie)를 이용한다!
# 세션과 쿠키
세션과 쿠키는 클라이언트와 연결을 유지하는 방법으로, 세션은 서버에서 연결
정보를 관리하는 반면 쿠키는 클라이언트에서 연결 정보를 관리하는데 차이가 있다.
# HttpServletRequest와 HttpSession을 이용한 세션 사용
HttpServletRequest와 HttpSession의 차이점은 거의 없으며, 단지 세션 객체를 얻는 방법에 차이가 있을 뿐이다
HttpServletRequest : 매개변수로 HttpServletRequest를 받은 후 getSession()으로 세션을 얻는다.
HttpSession : 매개변수로 HttpSession을 받아 세션 사용
HttpSession가 더 간단하다.
# 세션 삭제
세션을 삭제하는 경우는 세션에 저장된 속성이 더 이상 필요 없을 때 이루어지는 과정으로
주로 로그아웃 또는 회원 탈퇴 등에 사용된다.
invalidate(); 메서드를 이용하면 세션을 삭제할 수 있다.
#세션의 주요 메서드
getId() 세션 ID를 반환다.
setAttribute() 세션 객체에 속성을 저장한다.
getAttribute() 세션 객체에 저장된 속성을 반환한다.
removeAttribute() 세션 객체에 저장된 속성을 제거한다.
setMaxInactiveInterval() 세션 객체의 유지시간을 설정한다.
getMaxInactiveInterval() 세션 객체의 유지시간을 반환한다.
invalidate() 세션 객체의 모든 정보를 삭제한다
# 쿠키
mallMain()에서 쿠키를 생성하고, 파라미터로 받은 HttpServletRespnse에 쿠키를 담고있다.
쿠키를 생성할 때는 생성자에 두 개의 파라미터를 넣어주는데 첫 번째는 쿠키이름을 넣어 주고 두 번째는 쿠기값을 넣어 준다.
쿠키를 생성할때는 쿠키 생성의 시간(유지시간)을 정해준다.
@CookieValue 어노테이션의 value속성은 쿠키 이름을 나타내는데, 만약 value에 명시한 쿠키가 없을 경우 익셉션이 발생한다.
익셉션을 막는 방법이 있는데, 바로 required속성이다. Required속성은 기본값으로 true를 가지고 있는데 required가 true
인 경우 value값에 해당하는 쿠키가 없으면 익셉션이 발생한다. 따라서 required속성값을 false로 설정해서 value값에 해당하는
쿠키가 없어도 익셉션이 발생하지 않도록 한다.
실재로 실무에서는 세션을 많이 사용한다고 한다
그 이유는 세션이 서버에 저장이되면서 보안에 좀 더 강하고
쿠키는 내 컴퓨터에 로그가 남기때문에 해킹에 우려가 있어서 세션을 사용하고
간단하고 중요한 정보가 아닌것일때에는 쿠키를 사용한다고 한다.
'공부 > Spring 복습' 카테고리의 다른 글
Employees 테이블을 출력해보기(mybatis사용 전, 후) (0) | 2021.10.05 |
---|---|
리다이렉트, 인터셉트 (0) | 2021.09.01 |
Controller 객체 구현 2. (0) | 2021.08.31 |
Controller의 여러가지 기능들 (0) | 2021.08.30 |
Service & Dao 객체 구현 (0) | 2021.08.30 |