예를 들면 아래와 같다.
@AutoWired
HttpSession session;
@PostMapping("/")
public void create(User user) {
session.setAttribute("createdUser", user);
}
위와 같이 createdUser
라는 하나의 문자열을 key로 이용하여 Servlet Container
는 Http client
와 Http server
간의 세션을 생성한다.
A라는 유저가 세션 값을 저장한다고 하면 createdUser
라는 문자열을 key로 이용하여 세션 값을 저장할 것이다. 그렇다면 또 다른 B라는 유저가 있다고 가정하면 어떨까? B라는 유저도 똑같은 createdUser
라는 문자열을 key로 이용하여 세션 값을 저장할 것이다.
즉, 이럴 경우 어떻게 사용자마다 구분 된 세션을 가져올 수 있는지에 대한 의문인 것이다.
각 클라이언트의 요청마다 Session은 다르게 생성되기 때문에, 같은 문자열 key를 이용하여 session.getAttribute("createdUser");
를 호출하더라도, 각 사용자의 정보가 저장된 다른 세션 값이 보이게 되는 것이다.
서버간의 연결이 지속적으로 유지되는 상태
클라이언트에서 상태 정보를 유지하는 기술은 쿠키(Cookie)라고 한다. 쿠키는 클라이언트 측 또는 사용자의 브라우저에 저장되는 것이다. 반대로 서버에서 상태 정보를 유지하는 기술을 세션(Session)이라고 한다.
즉, 세션은 클라이언트 별로 각각의 상태 정보를 서버에서 저장하는 기술이다. 이는 브라우저가 종료될 때까지 유지 된다.
HTTP의 특성과도 관련이 있다. 다음의 HTTP 특성을 보자
HTTP 특성
그리고 이제 Session의 특성을 알아보자
Session의 특성
setAttribute
)을 하면 하나의 session id가 생성된다.