본문 바로가기
Framework & Library/Spring Boot

[Spring Boot] : Session TimeOut 설정하기

by 오주현 2022. 2. 22.
반응형

세션이 제공하는 정보들을 로그를 찍어 확인해 본다.

 

log.info("sessionId={}", session.getId());
log.info("maxInactiveInterval={}", session.getMaxInactiveInterval());
log.info("creationTime={}", new Date(session.getCreationTime()));
log.info("lastAccessedTime={}", new Date(session.getLastAccessedTime()));
log.info("isNew={}", session.isNew());

위에서 부터

  • 세션 ID, JESSIONID의 값
  • 세션의 유효 시간 , 1800초 (30분)
  • 세션 생성 일시
  • 세션과 연결된 사용자가 최근에 서버에 접근한 시간, 클라이언트에서 서버로 sessionId(JESSIONID)를 요청한 경우 갱신
  • 새로 생성된 세션인지 과거에 이미 만들어졌고 클라이언트에서 서버로 sessionID(JESSIONID)를 요청해서 조회된 세션인지 여부

이렇게 된다.

 

강의에서 타임아웃에 대해 설명을 해주었다. 해커에게 정보가 탈취 당했을 때 삭제되도록 설정하기 위함인데 세션은 사용자가 로그아웃을 눌러 session.invalidate()가 호출되게 하여 삭제한다. 하지만 강의에서는 여기에서 문제점을 알려주었다.

 

대부분 사용자는 로그아웃을 누르지 않는다는 것이다. 즉, HTTP가 비 연결성이라 서버는 사용자가 웹 브라우저를 종료했는지 여부를 파악할 수 없다는 것이다.

 

그럼 어떻게 설정하는 게 좋을까? 보통은 시간을 정해둔다고 한다. 30분 정도를 정해두는데 문제는 그냥 30분 딱 설정해 두면 게임을 하는 도중 30분이 지나면 세션이 종료되는 문제가 발생하게 되고 이런 것을 방지하기 위해 마지막 요청을 기준으로 카운팅이 시작되도록 한다. 즉, 요청이 들어오면 카운팅 시간을 계속 리셋 시켜주는 것이다.

 

server.servlet.session.timeout=60

application.properties에서 설정을 해줄 수 있다. 60초가 미니멈이라고 한다. 기본은 1800으로 30분이고 글로벌 설정은 분 단위로 설정해야 한다고 하니 기억해두자.


스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 참고하여 공부하였습니다.

반응형

댓글