• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

SessionStatus Interface에 대한 고찰입니다.

20.02.09 13:15 작성 조회수 179

1

안녕하세요.

'핸들러 메소드 8부 - @SessionAttributes' 강의를 듣고,

Spring에서 제공하는 @SessionsAttributes 어노테이션, SessionStatus  Interface는 HttpSession을 좀 더 편리하게 사용 할 수 있는 도구라고 생각이 들었습니다.

강의 후반부에 나오는 SessionsStatus Interface에 대해 세 가지 궁금증이 생겨 글을 남깁니다.

첫 번째

만약, 메소드 실행 후

Session에 담긴 특정 객체(Attribute)를 제거해야 할 때 HttpSession이 제공하는 removeAttribute() 또는 invildate() 메소드가 아닌,

SessionStatus의 setComplete()을 사용하는 이유는 Spring이 제공하는 도구를 활용하기 위한 목적이라고 보면 될까요?

(이 두 인터페이스의 공통점은, 사용 전에 메소드 파라미터로 설정이 되어야 한다는 점이겠네요.)

두 번째

SessionsStatus interface는 단지 '메소드 선언'만 되어 있어서 setComplete() 메소드가 어디서 '오버라이드' 되어 동작을 하는 것인지에 대한 궁금증입니다.

내용은 아래와 같습니다.

SessionStatus의 setComplete() 메소드를 호출하게 되면

Session에 담긴 모든 객체가 비워지게 되는 것인지, @SessionAttributes 어노테이션에서 지정한 객체에 대해서만 제거가 되는 것인지 궁금합니다.

(지졍한 객체라 함은, 강의에서는 'event' 객체가 되겠네요.)

세 번째 

기본적인 질문일 수도 있겠습니다.

대게 회원 로그인 처리 후 다른 페이지에서도 회원 정보를 접근 가능 하도록 Session에  회원정보를 담게 됩니다.

가령 개발자의 실수로 '세션에 있는 회원정보를 제거하면 안되는 어느 메소드'에서 회원정보를 지우는 작업을 했을때 

'이 코드(회원정보를 지우는 작업)는 여기서 실행되면 안돼.' 라는 의미로 예외를 발생시키는 코드 패턴이 있을까요?

답변 1

답변을 작성해보세요.

2

첫번째, 그렇지 않습니다. SeesionStatus는 세션에 넣어둔 모델 객체를 정리하는데 쓰는거지 일반적인 세션을 전부 비우는데 사용하는게 아닙니다.
두번째, 스프링 소스 코드와 디버거를 사용해 보세요. SeesionStatus 구현체를 찾아서 디버거를 걸고 언제 사용되는지 살펴보세요.  @SessionAttributes로 지정한 것만 제거됩니다.
세번째, 글쎄요. 테스트와 코드리뷰로 잘 커버해야 하지 않을까 싶네요.

정리해주신 질문들은 대부분 직접 학습을 통해 알아내시거나, 코딩을 통해 검증해 볼 수 있는 내용들입니다. 저에게 질문을 통해 해결하기 보다는 직접 알아보는 노력을 좀 더 하셨으면 좋겠습니다.

감사합니다.