스프링/4. 스프링 MVC-2

53. 세션 정보 확인과 타임아웃 설정

sdafdq 2023. 9. 7. 02:12

세션 정보 확인

@Slf4j
@RestController
public class SessionInfoController {
    @GetMapping("/session-info")
    public String sessionInfo(HttpServletRequest request){
        HttpSession session = request.getSession(false);
        if(session == null){
            return "세션이 없습니다.";
        }

        session.getAttributeNames().asIterator()
                .forEachRemaining( name -> log.info("session name = {}, value = {}", name, session.getAttribute(name)));

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

        return "세션 출력";
    }
}

먼저, getSession(false)로 받아와 있으면 세션을 뽑아오고, 없으면 null이 반환됨.

 

session.getAttributeNames()해서 세션의 모든 key 받아올 수 있음.

그 콜렉션 이터레이터로 바꿔서 forEach로 돌려 봄.

session.getAttribute(key) 해서 함께 출력해 봄.

 

이러면 그 key로 넣어 둔 객체를 출력해 줌.

 

sessionId는 그 우리가 처음에 UUID로 썼었던 경험이 있는 그거와 비슷한 기능을 하는 임의의 문자열임. session에서 알아서 자동으로 만들어 줌. 세션 생성할 때.

 

getMaxInactiveInterval은 최대 비활성 시간. 을 얻어오는건데 왜 MaxActiveInterval이 아니지? 직역하면 최대 비활성 시간인데. 최대 활성시간이 맞지 않나? 여튼 초 단위로 얼마 뒤에 비활성화(아마 invalidate()될려나?) 되는 지 알려줌.

 

1800 나오는 거 보니 기본이 30분이고, 접근 할 때마다 다시 30분으로 갱신되는 듯? 

 

creationTime()은 세션 생성 시간,

lastAccessedTime()은 마지막 접근 시간,

isNew()는 지금 막 만든건지. boolean을 반환.

isNew() 판단은 request 수명이 아닐까 함.

 

앞으로 할 일은 타임아웃을 설정할 일인데,

아마 lastAccessedTime()과 getMaxInactiveInterval 이게 관계가 있을 듯.

 

 

 

.. 엄청 간단 함.

아니 간단하다기 보다는. 스프링에서 알아서 제공해 줌.

어떻게 하냐면, 그냥 application.properties에

server.servlet.session.timeout=1800

이렇게 해주면 된다고 함.

서버의 세션 타임아웃은 1800초. 라고

 

글로벌 설정은 분 단위로 해야 한다고 하는데(60초, 120초 등)

분마다 검사하나 봄.. 결국 누군가는 검사를 해야 하고 매초 할 수는 없는 일 이니까.

 

여튼 아까 말 했던데로 기본값은 1800초, 30분이고, 세션에 접근할 때마다 갱신됨.

 

 

 

세션은 기본적으로 서버의 메모리를 이용한다. 그러므로 정말정말 최소한의 정보만 담아야 한다.

id 등 우리가 멤버 저장소로부터 멤버를 가져올 수 있는 최소한의 정보만 가지고 있어야 하는 듯 하다.

 

이 세션을 DB에 저장하는 방법도 있다고 한다. 아마 나중에 이걸로 할 것 같다. 서버 메모리에 무언가 저장하는 것은 너무 비효율 적이다.

 

우리 서버 개발자가 해야 할 역할은 DB와 사용자의 연결을 해주는 일이다.

 

서버의 메모리는 마치 프린터 처럼, 할 일을 끝내면 비워버려야 한다. 뭘 담아두면 안된다.

 

 

'스프링 > 4. 스프링 MVC-2' 카테고리의 다른 글

55. 필터 구현  (0) 2023.09.09
54. 필터, 인터셉터  (0) 2023.09.08
52. 스프링 세션 업그레이드  (0) 2023.09.07
51. 스프링의 Http 세션  (0) 2023.09.07
50. 서버세션 적용  (0) 2023.09.06