본문 바로가기

Programming/Java & JSP & Spring

[Spring] HttpSession과 인터셉터

웹에서 로그인의 가장 기본적인 방식은 HttpSession 객체를 이용해서 사용자의 정보를 보관하고

필요한 경우 사용하거나 수정하는 방식이다.


HttpSession의 동작은 실제로는 세션 쿠키(Session Cookie)를 통해서 이뤄지는데,

서버는 필요한 경우 접속한 브라우저에게 세션 쿠키를 전달하고,

브라우저에서 서버를 호출할 때마다 세션 쿠키를 같이 가지고 다니기 때문에,

이를 마치 열쇠처럼 사용해서 필요한 데이터를 보관한다.


세션 쿠키가 열쇠라면 HttpSession은 열쇠가 필요한 상자 볼 수 있다.

이 상자들이 모여있는 공간을 세션 저장소(Session Repository)라고 한다.

너무나 많은 세션이 존재하면 서버의 성능에 영향을 미치기 때문에,

서버에는 일정시간 이상 사용되지 않는 상자들을 정리하는 기능이 있다.


세션을 이용하는 방식의 핵심은 HttpSession을 이용해서 원하는 객체를 보관할 수 있다는 점이다.

사용자는 항상 열쇠에 해당하는 세션 쿠키를 가지고 접근하고,

서버의 내부에 상자를 보관하기 때문에 안전하다는 장점이 있다.


세션에 보관된 객체는 JSP에서 EL을 통해서 page → request → session → application의 순서대로

원하는 데이터를 자동으로 추적하는 방식을 사용한다.


이러한 세션을 인터셉터를 이용해서 사용할 수 있다.

인터셉터 (Interceptor)는 스프링에서 관리되기 때문에 스프링 내의 모든 객체에 접근이 가능하다.


인터셉터를 이용해서 HttpSession에 로그인이 필요한 객체를 보관하는 형태로

작성하면 컨트롤러에서 직접 HttpSession 등의 API를 사용하지 않는 코드를 작성할 수 있다.


개발자가 비즈니스 계층까지 구현을 완성했다면 세션을 사용하기 위해 결정해야될 사항은

'컨트롤러에서 HttpSession 객체를 처리할 것인가? 인터셉터에서 HttpSession을 처리할 것인가?' 이다.


스프링 MVC는 컨트롤러에서 필요한 모든 자원을 파라미터에서 수집해서 처리하기 때문에,

HttpServletRequest나 HttpSession과 같은 자원들 역시 파라미터로 처리해도 아무런 문제가 없다.










※ 참고 : 코드로 배우는 스프링 웹 프로젝트

'Programming > Java & JSP & Spring' 카테고리의 다른 글

[JSP] View로 전달된 배열 접근하기  (0) 2017.03.21
[Java] Jsoup 사용법  (0) 2017.03.16
[Spring] HiddenMethod의 활용  (0) 2017.02.15
[Spring] @RequestParam 파라미터 매핑  (0) 2017.02.14
[Spring] VO와 DTO  (0) 2017.02.02