로그인 할때 자주 사용하게되는 HttpSession에 대해 조금 더 공부해보려고 한다.
우리가 웹어플리케이션을 개발할 때 사용한 HttpSession은 Servlet Container가 생성한 인스턴스이다.
Spring MVC를 사용할 때도 Spring은 Servlet Container가 만들어준 HttpSession을 주입해서 사용한다.
HttpSession은 왜? 언제만들어지는것일까??
http통신은 연결 이라는 것이 없는 Stateless 통신이다.
그렇기 때문에 , 한번 요청을 하고 응답을 하면 그 이후에는 아무것도 남는것이 없는 통신이다.
이러한 특징때문에 서버는 클라이언트를 구분할 수가 없어지고, 그 부분을 해결하기 위한 방안이 httpSesion이다.
httpSession을 생성, sessionId(키)를 서버에서 보관하고, 해당 sessionId를 클라이언트에게 쿠키로 전달하여, 서버와 클라이언트의 유지할수 있는 관계를 만들수 있어진것이다.
그렇다면 모든요청마다 Session을 만드는것인가? => 아니다. 아래 생성 순서를 확인해 보자.
<생성 순서>
1). 웹 클라이언트가 -> 서버로 요청을 보낸다.
2). WAS에서는 세션키(Tomcat 기준 JSESSIONID)를 생성하고, 세션키를 저장할 저장소를 생성하고, 세션키를 해당 저장소에 보관한뒤, 세션키를 담은 Cookie를 생성한다.
3). 세션키를 담은 쿠키를 포함하여 클라이언트의 요청에 응답한다.
그다음부터, 세션이 이미 생성되어있을때의 순서를 보자.
1).웹클라이언트가 -> 서버로 요청을 보내는데, 이전에 응답받았던 쿠키(세션키를 포함한)를 함께 서버에 보내어 요청한다.
2). WAS에서는 쿠키의 세션키를 꺼내, 세션키를 보관해두었던 저장소를 활용하여 유효한 세션키인지 확인 및 구분하여 응답 한다.
<세션소멸>
그렇다면 세션은 언제 소멸할까?
1). 클라이언트에서의 세션소멸 (쿠키가 소멸될때)
2). 서버에서의 세션 소멸 (서버에서 지정한 세션 타임아웃 시간이 초과되었을때 등)
<!-- 세션 타임아웃 시간 설정 -->
<session-config>
<session-timeout>120</session-timeout>
</session-config>
다른곳에 정리해 두었지만 세션과 쿠이의 차이점에 대해 다시한번 짚고 넘어가보자.
1. 쿠키는 브라우저가 종료되도 유지될 가능성이 있다. 세션은 브라우저가 종료되면 같이 삭제
2. 쿠키는 클라이언트에 저장. 세션은 서버에 저장.
3. 쿠키는 클라이언트에 있으므로 위변조가 가능, 세션은 서버쪽이므로 뚫으려면 서버를 뚫어야한다.
4. 쿠키는 클라이언트만 사용하므로 서버에 부담을 주지않는다. 세션은 서버에서 처리하므로 사용자가 많고 담는 객체가 커질수록 부하가 매우 커진다.
오늘도 화이팅!!
'Knowledge' 카테고리의 다른 글
[Knowledge] 데드락이란? 데드락 해결방안 이론... (0) | 2021.08.23 |
---|---|
[Knowledge] GitHub 프로젝트 올리기(윈도우) (0) | 2021.07.08 |
[Knowledge] Oauth란? Oauth 기본 개념 (0) | 2021.03.18 |
[Knowledge] JVM 실행옵션을 사용하여 운영/개발 Properties 분리 실행하기 (0) | 2021.03.17 |
[Knowledge] Modal사용시 외부 클릭했을때 Modal 닫힘 방지 (0) | 2021.03.12 |