-
Notifications
You must be signed in to change notification settings - Fork 0
JSESSIONID
@janeljs 그럼 한가지 더, 왜 세션 ID 키 값은 spring-session 도 아니고 java-session 도 아니고 jsessionid 가 됐을까요? 원래라면 세션 아이디를 발급하고 관리하는 책임은 누가 지는지, 또 왜 그렇게 됐는지, 잠재적인 장애 유발 요인은 어디에 있을지도 고민해 주세요.
JSESSIONID is a cookie generated by Servlet containers and used for session management in J2EE web applications for HTTP protocol. If a Web server is using a cookie for session management, it creates and sends JSESSIONID cookie to the client and then the client sends it back to the server in subsequent HTTP requests.
스프링이나 자바가 아닌 톰캣에서 발급하기 때문이다. (근데 왜 jsessionid...?)
세션 id를 발급하고 관리하는 책임은 서버에 있습니다.
HTTP는 무상태입니다.
한 사용자의 요청들을 연관짓기 위해서(예를 들면 로그인 상태 유지) 로그인 data를 HTTP 요청들을 저장할 필요가 있다.
이때 쿠키나 URL 파라미터에 저장할 수 있지만 이 방법은 클라이언트에서 로그인 data가 노출된다.
이는 후에 심각한 문제를 초래할 수 있다.
해결책은 서버에 저장하는 것이다.
서버는 "id"(로그인 data를 value로 갖고 있는 key)를 클라이언트에게 보내주고 클라이언트는 오직 "id"만 알고 있고 매 요청마다 로그인 data를 갖고?있는 id를 서버에 보낸다.
이것이 세션이다.
물론 클라이언트를 편리한 원격저장소로 사용해서 로그인 data를 저장할 수 있지만, 만약 클라이언트에서 로그인 data를 쿠키나 URL 파라미터에 갖고 있다고 생각해보자.
-> 생각해보기
결론은 특정 데이터를 서버에 저장해놓고 매 HTTP 요청마다 클라이언트로부터 받은 세션 id를 통해 서버는 올바른 세션 data(서버에 저장되어 있는)를 찾을 수 있다.
https://stackoverflow.com/questions/3804209/what-are-sessions-how-do-they-work
jsessionid에 대해 조사한 결과, 저희가 미션에서 사용하고 있는 jsessionid는 톰캣에 의해 발급, 관리되고 있다는 것을 알 수 있었습니다. 왜 java나 spring이 아닌 톰캣에 의해 세션이 관리되는지 인터넷에 찾아봤지만, 톰캣과 jsessionid의 작동 원리에 대해 설명하는 포스팅만 많고 왜 톰캣을 사용하는지에 대한 명확한 설명은 찾을 수 없었습니다. 이후 파이로에게 도움을 청했고, spring과 java, tomcat을 별개의 프로그램으로 생각하고 각 프로그램이 세션 관리의 주체가 된다면 어떠한 시나리오가 펼쳐질지 상상해보라는 조언을 받았습니다. spring 또는 java가 세션의 관리의 주체가 된다면 세션으로 인한 보안 문제가 생겼을 때 톰캣이 관리하는 경우에 비해 책임 소재가 불명확해진다는 단점이 있지 않을까 생각해 보았습니다. spring 또는 java가 관리하는 경우 보안문제가 발생했을 때 개발자의 책임이 될 수 있는데, 톰캣이 관리하는 경우에는 그 책임을 아파치에게 물을 수 있지 않을까 생각됩니다.