커피와 개발자

Argument Resolver 설정 본문

프로젝트/Spring Boot

Argument Resolver 설정

광박이 2022. 10. 11. 14:25
728x90

아규먼트 리졸버(Argument Resolver)

Controller로 들어온 파라미터를 가공하거나 수정 기능을 제공하는 객체입니다. Argument Resolver를 Controller단에서 사용하면 중복 코드(HttpSession에서 세션 로드, HttpServletRequest에서 요청 Parameter, URL 및 IP 정보 로드 등)를 깔끔하게 처리할 수 있습니다.

커스텀 어노테이션(Custom Annotation) 작성 :

annotation 패키지를 생성하고 Params.java 파일에 사용자 어노테이션 @interface를 작성합니다.

  • @Target : 어노테이션이 생성될 수 있는 위치를 지정합니다. 파라미터(PARAMETER) 면 메서드의 파라미터로 선언된 객체에서만 사용 가능합니다.
  • @Retention : 어노테이션의 메모리 생명 주기를 지정합니다. 런타임(RUNTIME)에도 해당 어노테이션 객체는 메모리에 올라가 있습니다.

리졸버(resolver)를 설정하기 전 사전 준비작업으로 다음을 실행합니다.

pom.xml - dependency 적용 :

pom.xml 파일에 FastHashMap을 사용하기 위해 라이브러리를 받습니다.

다음으로는 resolver 패키지를 생성하여 패키지 하위에 파라미터를 받아서 처리할 Map객체를 정의하고 파라미터를 전달받은 VO객체를 생성합니다.

ParamsMap 객체 정의 :

이번에 설정할 리졸버는 아규먼트 리졸버 즉, 파라미터를 받아 처리할 것입니다. ParamsArgumentResolver.java 파일을 resolver 패키지에 생성하고 HandlerMethodArgumentResolver 인터페이스를 상속받는 구현체 클래스를 생성합니다.
이 인터페이스는 개발자가 커스텀하는 Argument Resolver에 대한 여러 메서드를 지원합니다.

아규먼트 리졸버(ArgumentResolver) 설정 :

  • supportsParameter 메서드는 들어온 파라미터에 대해 resolveArgument 메서드를 실행할지 말지 판단합니다. 리턴 값이 true면 결과적으로 resolveArgument 메서드를 실행하게 되는데, 이 메서드는 파라미터를 가공하는 역할을 합니다.

결과 확인 : 

http://localhost:9090/sample 접속 후 로그 확인

2022-05-24 00:37:59,138 [INFO ] [http-nio-9090-exec-3] s.p.s.c.i.LoggerInterceptor: /********** BEGIN **************************************************
2022-05-24 00:37:59,139 [INFO ] [http-nio-9090-exec-3] s.p.s.c.i.LoggerInterceptor:  * Request URI : /sample
2022-05-24 00:37:59,168 [INFO ] [http-nio-9090-exec-3] s.p.s.c.r.ParamsArgumentResolver: #1 Parameter : zipcode = 97201
2022-05-24 00:37:59,169 [INFO ] [http-nio-9090-exec-3] s.p.s.c.r.ParamsArgumentResolver: #2 Parameter : size = 5000
2022-05-24 00:37:59,209 [INFO ] [http-nio-9090-exec-3] s.p.s.c.a.LoggerAspect: 		 * AspectJ : Around Logging BEGIN
2022-05-24 00:37:59,210 [INFO ] [http-nio-9090-exec-3] s.p.s.c.a.LoggerAspect: 		 * Controller 	 : std.pjt.springboot.sample.controller.SampleController.page()
2022-05-24 00:37:59,211 [INFO ] [http-nio-9090-exec-3] s.p.s.c.a.LoggerAspect: 		 * AspectJ : Before Logging BEGIN
2022-05-24 00:37:59,211 [INFO ] [http-nio-9090-exec-3] s.p.s.c.a.LoggerAspect: 		 * AspectJ : Before Logging END
2022-05-24 00:37:59,213 [INFO ] [http-nio-9090-exec-3] s.p.s.s.c.SampleController: Controller params : ParamsVO(jsonString={"zipcode":"97201","size":"5000"}, paramsMap={zipcode=97201, size=5000})
2022-05-24 00:37:59,244 [INFO ] [http-nio-9090-exec-3] s.p.s.s.c.SampleController: HashMap put 50000 Object using0.023s
2022-05-24 00:37:59,256 [INFO ] [http-nio-9090-exec-3] s.p.s.s.c.SampleController: FastHashMap put 50000 Object using0.01s
2022-05-24 00:37:59,273 [INFO ] [http-nio-9090-exec-3] s.p.s.s.c.SampleController: HashMap get 50000 Object using0.013s
2022-05-24 00:37:59,278 [INFO ] [http-nio-9090-exec-3] s.p.s.s.c.SampleController: FastHashMap get 50000 Object using0.002s
2022-05-24 00:37:59,278 [INFO ] [http-nio-9090-exec-3] s.p.s.c.a.LoggerAspect: 		 * AspectJ : AfterReturning Logging BEGIN
2022-05-24 00:37:59,279 [INFO ] [http-nio-9090-exec-3] s.p.s.c.a.LoggerAspect: 		 * AspectJ : AfterReturning Logging END
2022-05-24 00:37:59,279 [INFO ] [http-nio-9090-exec-3] s.p.s.c.a.LoggerAspect: 		 * AspectJ : ModelAndView [view="jsonView"; model={HashMapPUT=HashMap put 50000 Object using0.023s, FastHashMapPUT=FastHashMap put 50000 Object using0.01s, HashMapGET=HashMap get 50000 Object using0.013s, FastHashMapGET=FastHashMap get 50000 Object using0.002s}]
2022-05-24 00:37:59,279 [INFO ] [http-nio-9090-exec-3] s.p.s.c.a.LoggerAspect: 		 * AspectJ : Around Logging END
2022-05-24 00:37:59,279 [INFO ] [http-nio-9090-exec-3] s.p.s.c.i.LoggerInterceptor:  *********** END ***************************************************/
2022-05-24 00:37:59,297 [INFO ] [http-nio-9090-exec-3] s.p.s.c.i.LoggerInterceptor:  * afterCompletion ...
728x90

'프로젝트 > Spring Boot' 카테고리의 다른 글

Mybatis 적용  (0) 2022.10.11
DataBase 연동 (MariaDB, HikariCP)  (0) 2022.10.11
jsonView 설정  (0) 2022.10.11
AOP(Aspect Oriented Programming) 설정  (0) 2022.10.11
Interceptor 설정  (0) 2022.10.11
Comments