Spring HttpServletRequest

Dev.nuts·2021년 6월 14일
0

spring

목록 보기
1/1

Spring 에서 HttpServletRequest 사용이 필요할 때가 많습니다.
1. interceptor
2. AOP
3. controller

HttpServletRequest를 통해 요청받는
HTTP URI,
HTTP method,
HTTP body
HTTP header (cookie 확인 가능)

  • WAS 간의 HTTP SESSION 공유 방법은 HttpServletRequest에서 제공하는 HttpSession 객체를 사용하는 것 외에도 여러 방법이 있다. 최근에는 in-memory cahce solution 을 이용한 session manager 서버를 별도로 구성하는 방법을 많이 상요함.
    하지만, HTTP SESSION 을 공유하는 방법에 정답은 없다.

Java 에서 HttpServletRequest에 대한 접근은 제한이 있다. servlet, filter, interceptor, AOP, controller 정도에서만 접근이 가능하다. 만약 service 에서 사용하기를 원한다면, controller 에서 service로 파라미터로 전달해야할 것이다. 그 결과 모든 controller에서는 HTTP SESSION 에서 VO를 추출하는 작업을 하고 모든 service는 method는 VO를 파라미터로 받을 수 있도록 만들어져야 한다.

HTTP SESSION 에다가 보관했기 때문에 같은 사용자라면 모든 WAS의 로그에서 같은 loggingCode가 패턴으로 출력됩니다. 로드밸런싱에 의해서 여러 서버에 남겨지고, 수많은 사용자들의 로그에 묻힌 특정 사용자의 로그를 추적하는데도 용이하다.


주의사항

session scope에 너무 많은 정보를 보관하면 안된다는 점이다. HTTP SESSION을 WAS간에 공유하기 위해 session clustering이 이뤄지는데, 정보가 많아지면 WAS에 부하를 준다.

예를들어, 정보 1개를 추가를 한다 하더라도 사용자가 1만명이면? 1만 개의 정보가 추가된다고 생각하면 이해가 빠를 것이다.

그렇다고, controller 와 service 간의 파라미터를 주고 받는 대용으로 사용하라는 말은 절대 아니다. WAS 간의 공유가 필요한 정보를 이 방법을 이용하면 controller, service , DAO 전 구간에 쉽게 접근이 가능하다는 말이다.

그리고, WAS 간의 공유가 불필요하지만, thread 내에서 공통적으로 자주 사용되는 내용은 session scope이 아니라, request scope를 이용하면 WAS에 무리를 주지 않고도 전 구간에서 접근이 가능하다.


profile
40대에 은퇴해, 제주살이를 꿈꾸는 Fire족

0개의 댓글