인프런 커뮤니티 질문&답변

ger_fran님의 프로필 이미지
ger_fran

작성한 질문수

모든 개발자를 위한 HTTP 웹 기본 지식

쿠키

세션 쿠키 질문 있습니다^^

작성

·

2K

0

쿠키의 생명 주기 설명에서 세션 쿠키: 만료 날짜를 생략하면 브라우저 종료시까지만 유지된다고 하셨는데,
 
웹서버 입장에서는 웹 브라우저가 종료되었다는 사실을 모를텐데 그럼 서버는 세션을 언제까지 보관하고 있나요?

답변 1

1

안녕하세요, 지나가다가 발견해서 다시 공부할 겸 댓글을 달았습니다.

혹시라도 잘못된 부분이 있다면, 다른 분들이 보완해주실 거라 믿습니다! :)

 

쿠키의 생명 주기 설명에서 세션 쿠키: 만료 날짜를 생략하면 브라우저 종료시까지만 유지된다는 이야기에 대해서,

제가 이해한 바로는 쿠키는 브라우저(클라이언트)측에서 관리하는 정보이기 때문에, 쿠키의 만료 날짜를 설정하지 않을 시 브라우저를 닫으면 브라우저(클라이언트)에 저장한 해당 쿠키(만료 날짜를 설정하지 않은)를 날려버린다는 이야기입니다.

 

쿠키 - 세션은 별도의 것이라고 이해하시는게 좋을 것 같습니다. 위에 말씀드린 것처럼 쿠키는 브라우저(클라이언트), 세션은 서버에서 관리하는 정보입니다. 다만 서버가 특정 클라이언트에 대한 정보를 기억하기 위해 쿠키 값을 매번 받아서 내부에 있는 세션 값과 비교하는 방식으로 사용하는 것입니다.

웹서버를 사용하는 프레임워크에 따라, 또 개발자에 따라 세션은 다르게 설정될 것입니다. 영한님께서 가르치시는 Spring boot의 경우는 기본적으로 1800s(초)로 세션이 지속됩니다. 따로 특성을 관리하는 파일에서 다르게 설정해주면, 해당 시간을 늘리는 것도 줄이는 것도 가능합니다. 보통 세션의 지속시간은 그 시간이 지나면 바로 삭제되는 것이 아니라, maxIntervalTimout 이라고 해서 세션을 사용하지 않은 시간, 즉 특정 세션값을 마지막으로 사용한 시점으로 부터 어느정도 지나면 지운다는 의미입니다.

 

저는 이렇게 이해하고 있습니다. 잘못된 내용이 있을 수도 있으니, 개인적으로도 많이 찾아보시면 좋을 것 같아요 ㅎㅎ

 

답변 끝!

------------------------------------------------------------------------

+  이 글을 보실 지 모르겠지만 영한님께 또 다른 질문이 있습니다. 😅

 

Spring에서의 Session 관련한 질문인데,

위 내용 관련해서 공부하다 보니, 문득 Controller 단에서 인자로 받는 HttpServletRequest 인스턴스를 통해 사용하는 request.getSession(true)  메서드 로직이 어떻게 이루어져 있는지 궁금하더라구요.

request.getClass() 를 통해 클래스를 조회해보고, 안에 로직을 살펴보려고 시도했는데 현재까지 알아낸 정보는 

Servlet3SecurityContextHolderAwareRequestWrapper 클래스가 인자로 들어오고, 이와 상속 관계에 있는 ServletRequestWrapper  클래스에서 getSession(boolean create) 메서드를 구현하고 있습니다.

그런데, 이 메서드에서 결국 HttpServletRequest 인스턴스를 통해 getSession(boolean create) 를 호출하더군요!

구현하는 메서드들을 여기저기 찾아보다가 org.apache.catalina.connector.Request 클래스에서 구현하고 있는 메서드가 가장 일반적으로 사용하고 있는 기능과 비슷해보였습니다.

 

여기서 결국 드리고 싶은 질문들은,

1. request.getSession(true) 메서드는 결국 어떤 클래스에서 구현한 메서드를 사용하게 되는 것인가요?

  - 1번 질문의 답에서 나온 클래스는 어떻게 Controller 단에서 인자로서 주입되는 건가요?

  - 1번 질문의 답에서 많은 구현체의 메서드 중 Spring이 선택하는 기준이나 로직은 어떻게 되는지, 혹은 어디서 알 수 있는지 궁금합니다.

 

항상 감사합니다 :)

 

ger_fran님의 프로필 이미지
ger_fran
질문자

안녕하세요! 답변 너무 감사합니다. 서버 측, 즉 개발자가 개발한 프레임워크에서의 세션 유지 시간이 궁금했는데 maxIntervalTimout 등의 설명을 같이 해주셔서 이해가 바로 되었답니다.

주말에 답변 달아주셔서 감사합니다^^ 좋은 하루 보내세요!

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. hash_t님

결과적으로 톰켓이 제공하는 org.apache.catalina.connector.Request를 사용하게 됩니다.

관련해서 MVC1 강의를 들어보시면 도움이 되실거에요^^

감사합니다.

이미 완강했는데 기억이 안나는걸 보면, 해당 내용이 있는데 제가 제대로 학습하지 못했나보군요ㅠㅠ
다시 한번 강의 내용 참고해서 확인해보도록 하겠습니다!

ger_fran님의 프로필 이미지
ger_fran

작성한 질문수

질문하기