• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

httpSession 관련 질문드립니다.

24.01.04 21:07 작성 24.01.04 21:47 수정 조회수 198

0

  1. request.getSession() 으로 생성된 httpsession은 sessionStore 인지 아니면 session 인지 궁금합니다.
    제 생각에는 sessionStore가 아니라 그냥 sessionStore에서 session을 검색해서 가져오거나, 없으면 session을 생성한 것이라고 생각합니다.
    이렇게 생각하게 된 이유는, /session-info url로 크롬과 사파리로 브라우저를 다르게 하여 접속한 결과,

     

    크롬에서 로그인을 했더라도, 사라피로 로그인하지 않고 session-info 로 접속한다면 session 이 없다고 떴기 때문입니다.

 

  1. 그렇기 때문에, request.getSession() 으로 생성된 session 에서 session.setAttribute("member", member) 이런식으로 attribute를 추가하는 것은 그냥 그 세션자체에 member라는 것을 추가하는 것으로 짐작됩니다.
    따라서 직접 만들어본 SessionManager 의 createSession 과는 다르다고 생각하는게, createSession은 sessionStore에 직접 sessionId 와 member를 묶어서 직접 put을 해준것이고
    httpsession.setAttribute는 그저 session에 attribute를 추가해준 것이라고 생각하기 때문입니다.



    그리고 httpSession 은 어딘가에 있을 sessionStore에 저장되겠죠 << 사실 이 부분이 의문입니다. 어느시점에 session이 sessionStore에 저장되는지, 그 sessionStore는 어디있는지 궁금합니다.
    대충 시점은 getSession() 하는 순간 sesstionStroe를 탐색해서 없다면 sessionStore에 저장하면서 해당 session을 가져오고 그 세션에 setAttribute로 속성을 추가해주는 것 같다고 예상되긴 합니다.

 

  1. 그래서 궁금한 점은 httpSession의 sessionStore은 어디있는지 궁금합니다. 그리고 만약 존재한다면 어느시점에 생성되는건지 궁금합니다. 그리고 직접 확인이 가능한지도 궁금합니다.
    분명 여러유저가 접속한다면 sessionStore에 session이 쌓일텐데 그 쌓이는게 어떻게 쌓이는지 보고싶습니다.

 

  1. 그와 동시에 궁금해지는 점은 session.getAttribute("loginMember") 이런식으로 한번더 세션에 멤버 어트리뷰트가 존재하는지 확인하는 이유도 궁금합니다. 세션을 만들때 무조건 loginMember를 설정해줄것이고, 만약 세션자체가 사라진다면 그냥 사라질텐데, 세션을 만들때 session.setAttribute("loginMember", loginMember) 를 하지 않는 경우가 있나요??



  2. 제 가정이 다 맞다고 가정하에, 그리고 브라우저 종료시에 쿠키가 즉시 브라우저에서 삭제된다고 가정할때, 로그아웃 하지 않고 바로 브라우저를 종료하고 로그인 하는 식으로 똑같은 사용자가 여러번 로그인을 한다면, 그때마다 브라우저는 항상 쿠키가 존재하지 않으니까, getSession으로 sessionStore에서 session을 찾지 못할 것이고 그렇다면 새로운 jsessionid 값에 똑같은 사용자를 가진 session을 게속 생성해서 sessionStore에 저장하게 되는 것이 아닌가요??
    그렇다면 세션이 시간이 만료되어서 자동으로 삭제 되기전까지 똑같은 사용자를 포함한 여러개의 세션이 세션스토어에 게속 쌓일것이라고 예상되는데, 그럼 여러가지 jsessionId로 하나의 계정에 접속이 가능한 것인지 궁금합니다.



     

혹시 제 예측이 틀린것이라면 어떻게 틀렸는지 설명해주시면 감사드리겠습니다.
https://www.inflearn.com/questions/989189/request-getsession-%EA%B3%BC-sessionstore
위 링크의 질문도 봤는데 아무리 생각해도 sessionStore를 여러개 생성한다는 개념은 뭔가 이상하다고 생각해서 의문이 해결되지 않습니다.

답변 2

·

답변을 작성해보세요.

2

안녕하세요. 일잘딱님

1. request.getSession() 으로 생성된 httpsession은 서버에서 관리되는 session 입니다.

2,3: httpSession은 우리가 사용하는 톰캣 라이브러리 내부에서 제공됩니다. Map과 같은 형태라고 이해하시면 됩니다.

예를 들면 다음과 같은 식으로 구성되어 있습니다.

[사용자1-세션키, 사용자1-Session]

[사용자2-세션키, 사용자2-Session]

[사용자3-세션키, 사용자3-Session]

사용자1의 세션키를 입력하면 사용자1의 Session 객체가 반환됩니다. 이 Session 객체 안에 setAttribute로 원하는 값들을 보관합니다.

4. session.getAttribute("loginMember")와 같은 호출은 세션에 특정 속성이 존재하는지 확인하는 것입니다. 이는 세션 생성 시 모든 속성이 설정되어 있다고 가정할 수 없기 때문에 필요합니다. 예를 들어, 사용자가 로그인하지 않았다면, "loginMember" 속성은 존재하지 않을 것입니다.

5. 네 맞습니다. 참고로 세션은 로그인과는 무관하게 생성될 수 있습니다. 여러가지 jsessionid로 하나의 계정에 접속할 수 있습니다.

감사합니다.

한현진님의 프로필

한현진

질문자

2024.01.05

접속자가 매우많아서 세션이 무한정 생성된다면 세션저장소 메모리가 부족해서 터지는 경우도 있나요?? 이게 디도스같은거랑 비슷한건가,,, 아무튼 질문에 관한 답변은 다 해주셔서 감사합니다!

네 세션저장소 메모리가 부족해서 장애가 날 수 있습니다!

세션 저장소에는 그래서 꼭 필요한 데이터만 저장해야 합니다 🙂

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.04

안녕하세요, 인프런 AI 인턴입니다.

강의 수강생분의 질문은 request.getSession() 메서드를 통해 얻는 HttpSession 객체가 세션 스토어에 접근하는 것인지, 세션 자체인지에 대한 이해와 관련이 있습니다. 또한, 세션 스토어의 위치와 생성 시점, 직접 확인 방법 등에 대한 궁금증을 가지고 계신 것으로 보입니다.

이와 관련하여 유사한 질문에 대한 답변이 이미 제공되어 있습니다. 해당 답변에서는 request.getSession()을 호출할 때 세션 객체를 얻고, 세션에 정보를 저장하는 방식과 세션 스토어의 역할에 대해 설명하고 있습니다.

자세한 내용은 아래 링크에서 확인하실 수 있습니다.

강의와 관련된 궁금증이 해소되기를 바라며, 추가적인 질문이 있으시면 위 링크를 통해 더 깊이 있는 답변을 얻으실 수 있습니다.