회원가입과 유효성 검사 AOP
📄 AOP 란?
애플리케이션의 공통 관심사를 분리하여 모듈화하는 프로그래밍 기법이다. 주로 로깅, 트랜잭션 관리, 보안, 에러 처리와 같은 기능을 분리하여 깔끔하게 한곳에서 사용할 수 있다.

📄 @Valid, BindingResult, AOP 사용하기 코드 정리

- 컨트롤러에서 @Valid 어노테이션을 붙이면, BindingResult 로 에러들을 다 받아준다.

-
그럼 RequestDto 에 걸어둔 제약조건들이 어겨질 경우 BindingResult 에 에러들이 저장된다.
-
handler/aop 패키지에서 해당 유효성 검사 로직을 CustomValidationAdvice라는 클래스에 aop의 advice로 뽑아준다.

-
먼저 Pointcut으로 유효성 검사를 사용할 메서드를 정의해준다.

-
그리고 유효성 검사에 BindingResult 가 있을 때 에러가 있으면 유효성 검사 실패 오류를 throw한다.

📄 유효성 검사 참고 정규 표현식 간단 정리 (실제 적용할 땐 더 자세하게 해야한다)
- [a-zA-Z] : 알파벳 모두
- [0-9] : 숫자
- 문자 클래스 안에 ^ 메타 문자를 사용할 경우에는 반대라는 의미를 가짐.
-> ex) [^0-9] : 숫자가 아닌 것
- ^hello : hello로 시작하는 것
- hello$ : hello로 끝나는 것
- * : 바로 직전에 있는 문자가 포함되지 않거나 반복될 수 있음
- + : 바로 직전에 있는 문자가 반드시 포함되거나 반복될 수 있음
- {m} : 바로 직전에 있는 문자 m번 반복
- {m,} : 바로 직전에 있는 문자 m번 이상 반복
- {,n} : 바로 직전에 있는 문자 n 이하로 반복
- {m,n} : 바로 직전에 있는 문자 m개에서 n개 까지만 가능함.
나만의 Exception 만들기
📄 일반 클래스에서의 예외 처리
서버단에서 터지는 예외가 프론트단에게 그 모습 그대로 넘어가지 않도록 예쁘게 처리를 해줘야한다. 즉, 예외를 내가 직접 컨트롤할 수 있어야한다.

- ex 패키지 밑에 CustomApiException 클래스를 생성 후 message를 받도록한다.

- 그리고 해당 Exception 클래스를 handler 패키지 밑에 CustomExceptionHandler 에러 핸들러 클래스 안에 @RestControllerAdvice 와 함께 등록해준다.


- 그럼 에러 핸들러 클래스에 등록해줄 때 설정한 HTTP.status로 메시지를 자유롭게 넣어서 핸들링 할 수 있다.

- 실제로 처리해준 에러가 터졌을 때 json 형태 msg가 잘 나오는걸 볼 수 있다.
+) 참고로 핸들러 클래스에서 사용하는 ResponseDto 내부는

이렇게 설정해두었다.
📄 SecurityConfig 에서 Exception 가로채기
실패와 성공 시 응답을 해주고 싶을 때가 있다.
그래서 util 패키지 아래에 CustomResponseUtil 클래스를 생성하고 실패와 성공 시 응답을 각각 json으로 예쁘게 만들어준다.

- 성공 시에는 data에 응답을 넣어 반환한다. 실패 시에는 에러 메시지를 넣어 반환한다.


- 실제로 이렇게 사용할 수 있다. 위 (실패 케이스) 아래 (성공 케이스)