Spring Mvc์์
Controller์ ๋๋ฌํ๊ธฐ ์ ์ด๋ ํ์ ํ๋ฆ์ ์ ์ดํ ์ ์๋ค
HandlerInterceptor๋ฅผ implements ๋ฐ๋๋ค
์ปจํธ๋กค๋ฌ-๋์คํจ์ณ์๋ธ๋ฆฟ ์ฌ์ด์ ์์นํด์ ํน์ ์ปจํธ๋กค๋ฌ์ ์์ฒญ๊ณผ ์๋ต์ ์ปจํธ๋กค
WebMvcConfigurer์ ๋ฑ๋กํด์ ์ฌ์ฉํ๋ค
boolean - true ๋ค์ ์ธํฐ์
ํฐ or ์ปจํธ๋กค๋ฌ ํธ์ถ / false ์์
์ค๋จ
HandlerInterceptor์ ๊ตฌํ ํด๋์ค ์์ฑ
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณตํต๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ๊ณ ๋ชจ๋ํํ๋ค (๋ก๊น , ํธ๋์ ์ ๊ด๋ฆฌ, ๋ณด์ ๋ฑ)
public AdminLogAspect(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}
Aspect์ ๋์์ ์ ์ํ๋ ๋ถ๋ถ
| ์ด๋ฆ | ๋์ ์์ |
|---|---|
@Before | ๋ฉ์๋ ์คํ ์ ๋์์ถ๊ฐ |
@AfterReturning | ๋ฉ์๋ ์ ์์ข ๋ฃ ํ ๋์์ถ๊ฐ |
@AfterThrowing | ๋ฉ์๋ ์์ธ๋ฐ์ ์ ๋์์ถ๊ฐ |
@After | ๋ฉ์๋๊ฐ ์คํ ํ ๋ฌด์กฐ๊ฑด ๋์์ถ๊ฐ (์ฑ๊ณต/์์ธ ๋ฐ์ ์ฌ๋ถ์ ๋ฌด๊ด) |
@Around | ๋ฉ์๋ ์คํ ์ ํ ๋ชจ๋ ๋์์ถ๊ฐ (๊ฐ์ฅ ๊ฐ๋ ฅํ ์ ํ) |
โ๏ธ ์์
@Around("all()") public Object logging (ProceedingJoinPoint pjp) throws Throwable { ...
Advice๋ฅผ ๋ฐ์์ง ๊ฒฐ์ ํ๋ ํํ์ โข ์ ๊ท์์ผ๋ก ์์ฑโ๏ธ ์์
@Pointcut("execution(* org.example.expert.domain.user.controller.UserAdminController.*(..))") public void adminUser() {}
Advice๊ฐ ์ธ์ ์ ์ฉ๋ ์งJoinPoint: ๋ฉ์๋ ์คํ ์ ๊น์ง๋ง ์ ๊ทผ ๊ฐ๋ฅ (@Before, @After ๋ฑ์์ ์ฌ์ฉ)ProceedingJoinPoint: ๋ฉ์๋ ์คํ ์์ฒด๋ฅผ ์ ์ดํ ์ ์์ (@Around์์๋ง ์ฌ์ฉ)

์ผ๋จ ๋ธ๋ก๊ทธ ๋ณด๊ณ ๋ฌด๋ํ๊ฒ ๊ตฌํ,,
ํฌ์ธํธ ์ปท์ผ๋ก ์ ์ฉํ ์ปจํธ๋กค๋ฌ๋ฅผ ์ ๊ท์!!์ผ๋ก ์ ์ด์ค๋ค~
์ฒจ์ ์ฝ๋ฉํธ ์ ์ ๋๋ด๋ค๊ฐ
around๋ก ๋ ๋ฒ์ ์ ํด์ฃผ๋๋ฐ~~ ๊ฑ all๋ก ํฉ์นจ
๋ฌธ์ ๋ ์์ฒญ ๋ณธ๋ฌธ๊ณผ ์๋ต ๋ณธ๋ฌธ์ json ํํ๋ก ๊ฐ์ ธ์์ ๋ก๊น ํ๋ผ๋ ์๊ตฌ์ฌํญ์ด ์๋๋ฐ..
๋ฌธ์ ์
๋ค๋ฅธ ์ ๋ณด๋ค ์ฒ๋ผ ๊ทธ๋ฅ request.get~~ ์ผ๋ก ๋ถ๋ฌ์ฌ์์์๊ฑฐ๋ผ๊ณ ์๊ฐํด์ ๋ฉ์๋๋ฅผ ์ฐพ์๋ณด์์ผ๋
tomcat์์ ํ๋ฒ readํ body๋ ๋๋ฒ ์ฝ์ ์๊ฐ ์๋ค๊ณ ํ๋ค
๋ด๋ถ์์ ์์ฒญ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์ธ๋ฉํ ๋ ํ๋ฒ ๋ฆฌ๋ ํ๋ฏ๋ก,,
๋ด๊ฐ ๋ฉ์๋ ์คํ ์ ์ ์ฑ๊ฐ์ read ํด๋ฒ๋ฆฌ๋ฉด ๋ฐ์ธ๋ฉ์ด ๋ถ๊ฐํ ์ํฉ!
๊ทธ๋ผ ์ด๋ป๊ฒ ํ๋?
์ฝ๋ ๋ฉ์๋๋ ๋ด๊ฐ ๋ฐ๋ก ๋ง๋ค์ด์ผํ๋ค ์ด๋ง์ด๋ค~~
ํ๋ฒ๋ฐ์ ๋ชป์ฝ์ด? ๊ทธ๋ผ ์ง์ ๋ง๋ค์ด ์ฝ์ด~~
ใ
..
์ง์ง ์ฌ๊ธฐ์๋ถํฐ ๋ชจ๋ฅด๊ฒ ๋๋ฐ
1.HttpServletRequestWrapper๋ฅผ ์์๋ฐ์ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ๋ฉด๋๋ค
2.ContentCachingRequestWrapper๋ฅผ ์ฌ์ฉํ๋ค -> ์๊ฑธ ์ ํ! 1๋ฒ์ ์ ๋ฆฌํ ๊ธ์ด ์ด๋ง๋ฌด์ํ๊ธฐ๋๋ฌธ
์ผ์์์์์์
ContentCachingRequestWrapper๋ฅผ ํํฐ๋ก ๋ง๋ ๋ค
์ ํํฐ๋ก ๋ง๋๋? ๊ฑ ํด๋์ค๋ก ๋ง๋ค๋ฉด ์๋?
์๋ ํฐ์บฃ์ด ์ฝ์๋ ค๊ณ ๊ฐ์ ธ๊ฐ๊ธฐ ์ ์ ๊ฐ์ธ๋์ผํ๊ฑฐ๋ ~
์ํผ ํํฐ๋ฅผ ๋ง๋ค๊ณ ํํฐ๋ฅผ ๋ฑ๋กํ๋ค
์ ์ฉ๋ฒ์๋ ๊ฑ ์ ์ฒด๋ก ํจ ์ด์ฐจํผ aop์์ ์ ์ฉ๋ฒ์๊ฐ ์ ํด์ ธ์์(ํฌ์ธํธ์ปท)
+์ธ์ ๋ค๋ฅธ ๋ฉ์๋์ ์์ฒญ ๋ณธ๋ฌธ์ ๋ก๊น
ํด์ผํ ์ง ๋ชจ๋ฅด๋ฏ๋ก~
๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์ ํ๋ฉด๋๋๋ฐ
์ผ๋จ ๋ธ๋ก๊ทธ์์ if๋ก instanceof๋ก ํ์ธํ๊ธธ๋ ๋ฐ๋ผํ๊ณ ์ด์ ๋ฅผ ์ฐพ์๋ณด๋
๋ด๊ฐ๋ถ๋ฌ์จ request๊ฐ ์์๊น ๊ฐ์ธ๋๋!! ๊ฑ๊ฐ ๋ง๋์ง ๊ฒ์ฆํ๋ ๊ฑฐ๋ผ๋๋ฐ
๊ทธ๋์ ๊ฒ์ฆ์ ๊ผญ ํด์ผํ๋๊ณ ? ์ํด๋ฐจ๋ค ๋ชจ๋ฅธ๋ค !! ๊ธํ๋๊น ํ๋๋๋ก ํ๋ค
์ํผ๊ฐ์ ์คํธ๋ง์ผ๋ก ๋ณํํ๋ฉด ๋~
์๋ต ๋ณธ๋ฌธ์ ๊ฑ objectMapper๋ก ๊ธ์ด์ค๋ฉด ๋๋ค~
์๋ ์์ฒญ์ด ์๋๋ผ ์๋ต์ด๋ผ์ ํฐ์บฃ ์ด์๊ธฐ๊ฐ ์ฝ์์ผ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค..