Skip to content

JSESSIONID

JiSun Lim edited this page Apr 2, 2021 · 3 revisions

@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.

1. 왜 세션 ID 키 값은 jsessionid인가?

스프링이나 자바가 아닌 톰캣에서 발급하기 때문이다. (근데 왜 jsessionid...?)

2. 원래라면 세션 아이디를 발급하고 관리하는 책임은 누구?

세션 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

3. 왜 그렇게 됐을까. 잠재적인 장애유발 요인은?

jsessionid에 대해 조사한 결과, 저희가 미션에서 사용하고 있는 jsessionid는 톰캣에 의해 발급, 관리되고 있다는 것을 알 수 있었습니다. 왜 java나 spring이 아닌 톰캣에 의해 세션이 관리되는지 인터넷에 찾아봤지만, 톰캣과 jsessionid의 작동 원리에 대해 설명하는 포스팅만 많고 왜 톰캣을 사용하는지에 대한 명확한 설명은 찾을 수 없었습니다. 이후 파이로에게 도움을 청했고, spring과 java, tomcat을 별개의 프로그램으로 생각하고 각 프로그램이 세션 관리의 주체가 된다면 어떠한 시나리오가 펼쳐질지 상상해보라는 조언을 받았습니다. spring 또는 java가 세션의 관리의 주체가 된다면 세션으로 인한 보안 문제가 생겼을 때 톰캣이 관리하는 경우에 비해 책임 소재가 불명확해진다는 단점이 있지 않을까 생각해 보았습니다. spring 또는 java가 관리하는 경우 보안문제가 발생했을 때 개발자의 책임이 될 수 있는데, 톰캣이 관리하는 경우에는 그 책임을 아파치에게 물을 수 있지 않을까 생각됩니다.

Clone this wiki locally