1. Valid와 AOP

@Valid를 사용하는 법

회원가입 로직을 작성중에 ID, PASSWORD, EMAIL과 같은 필수값들을 입력 받지 못한채 요청이 들어온다면 컨트롤러 호출 전에 검증해야만 한다.

이때 사용할 수 있는 어노테이션이 @Vaild가 있는데 javax에서 지원하는 것으로 들어오는 파라미터 값을 검증해주게 된다.

검증할 필드에 @NotBlank, @Email등 무수히 많은 어노테이션들을 지원하고 있고 검증하고 싶은 어노테이션을 붙여서 관리하면 된다.

API마다 DTO를 만들었다면, 이를 이용해서 API마다 검증을 다르게 해서 처리할 수 있다.

Vaild에 대해서 알았다면, 세트로 붙어다니는 BindingResult에 대해서 알아야 한다.

Valid를 통해서 검증을 했다면, 검증에 대한 예외 발생 정보는 BindingResult객체에 담겨서 들어오게 된다.

이를 컨트롤러 계층에서 꺼내서 처리할 수도 있지만, AOP를 이용한다면 공통적으로 해당하는 로직들을 분리해서 처리할 수 있다.

AOP의 작동원리

Untitled

사용자 요청이 들어왔을 때 컨트롤러에 있는 함수에는 유효성 검사나 로그와 같은 공통적으로 어쩔 수 없이 처리해야 하는 로직들이 많이 있다. 이런 부분들이 많아지게 되면 컨트롤러 계층이 너무 많은 책임을 가지고 또, 무거워지게 된다.

그래서 AOP를 사용하는건데 함수의 앞 뒤로 공통부분에 대한 처리를 해주는 것이다.

이때, 앞 뒤로 잘라서 공통기능을 넣어주는 것을 PointCut이라고 하고 그 해당하는 부분을 Joinpoint라고 한다.

공통 부분을 처리할 때는 그대로 메모리로 복사(프록시 공간)해와서 완전한 제어권을 가지게 된다.

그래서 Valid와 같이 BindingResult를 사용할 때 매번, 컨트롤러에서 if문과 예외처리를 해줄 필요없이 별도의 AOP 클래스를 만들어서 그곳에서 Validation 체크해주면 컨트롤러 코드를 깔끔하고 가볍게 유지할 수 있다.