작성
·
252
0
안녕하세요 강사님.
본 강의에서 BindingResult를 처리하기 위해 아래와 같이 AOP를 적용하셨습니다.
제가 궁금한 점은 다음과 같습니다.
위의 AOP 적용을 위한 validationAdvice는 구체적으로 언제 (joinPoint 전 or 후 ?) 실행되는지 궁금합니다. joinPoint의 전후제어라고 설명해주셨는데, joinPoint의 전에 실행되는 것인지 후에 실행되는 것인지가 궁금합니다. 예를 들어, 사용자가 컨트롤러 Post or Put 요청 시 유효성 검사를 통과하지 못한 에러가 bindingResult에 담깁니다. 그리고 위의 AOP validationAdvice 코드 내부는 이미 BindingResult에 에러가 담긴 이후의 코드를 실행하도록 되어있습니다. 이때의 로직 흐름은 다음과 같은 실행 순서로 보면 될까요? 만약 맞다면, joinPoint의 후에 실행되는 것으로 보면 될까요?
"컨트롤러 진입 및 실행할 Post or Put 메서드 탐색 -> 해당 api 메서드 호출을 위해 http body의 데이터들을 ReqDto 객체로 변환 -> 유효성 검사 실패로 인한 bindingResult에 담김 -> 해당 api 호출 실패 -> 해당 api 호출이 실패로 끝났으므로 이후 AOP validationAdvice 호출 (joinPoint 후처리) -> Exception 발생
위와 같이 BindingResult 처리를 AOP 대신 필터나 인터셉터를 적용하여서는 해결할 수 없을까요 ?? 필터와 인터셉터는 여러 차이가 있지만 대표적으로 호출 순서에 차이가 있다고 알고 있습니다. 디스패처 서블릿 이전에 필터가 실행되며, 디스패처 서블릿 이후에 인터셉터가 실행되는 것으로 알고 있습니다. 위에 작성한 코드처럼 AOP 적용 위치는 개발자가 지정할 수 있는 것으로 보여집니다. 실제 컨트롤러가 호출되기 전에 필터나 인터셉터 호출되므로 BindingResult 검사를 할 수 없어서 AOP로 적용하신 것인지 궁금합니다.
만약 해결할 수 있다면, AOP로 적용한 이유가 궁금합니다.
추가적으로, Jwt Filter에서 필터를 이용하여 구현하셨습니다. UsernamePasswordAuthenticationFilter와 같이 이미 제공해주는 시큐리티가 있어서 그것을 활용하여 보다 편리하게 구현할 수 있는 것 같습니다. 그러나, 필터 대신 AOP나 인터셉터로도 Jwt 서버를 구현하는 것이 가능한지 궁금합니다.
좋은 강의를 듣다보니 자연스레 질문이 많아지는 것 같습니다.
정말 많이 배우고 있습니다.
감사합니다 !
답변 1
0
1번 답 - joinpoint 전에 실행됩니다. around는 joinpoint 전과 후를 처리할 수 있습니다.
참고하세요
https://getinthere.notion.site/AOP-872b3702c1fc4bb0834f4e442627d0c3
2번답
AOP는 리플렉션이 적용되어 있습니다. 그래서 메서드 파라메터에 접근할 수 있어요.
하지만 인터셉터는 메서드 파라메터에 접근하지 못합니다. (필터도요)
3번답
필터는 아파트 A동 입구
인터셉터는 A동에 1102호 입구 (본인 집 문앞)
AOP는 아파트 전체를 관리할 수 있어요
AOP는 서버에 무리가 많이 가는 작업이기 때문에, 연산이 많아요. 그래서 되도록이면 적게 쓰는것이 좋습니다. 매개변수나, 필드등에 접근해야 할 이유가 없다면, 혹은 어노테이션을 분석해야할 이유가 없다면 굳이 다른 방법이 있다면 젤 마지막에 사용!!
그럼 필터와 인터셉터가 남자나요!!
아파트 입구에서 잡상인을 막는것과, 문앞에서 막는것은 차원이 다른 문제입니다.
효율을 생각해보시면 이해할 수 있습니다.
감사합니다!