유효성 검사가 무엇일까?
무엇인지 알겠는데, 회원가입할 때 로그인 할 때.. 쓰는 그거..가 아니라 정확히 어떻게 표현하면 좋을까?
유효성 검사는 데이터가 서버에서 잘 작동하기 위해서, 서버가 정한 조건에 맞는지 확인하는 것이다.
프론트엔드를 통해 요청 온 데이터의 유효성은 어디서 검사하는 것이 더 좋아? Controller? Service? Repository?
서버에서 잘 작동한다는 것은 비즈니스 로직을 수행하는데 문제가 없다는 것이다. 그럼 로직 수행 전에 문제가 없는지 확인해야 할 필요가 있지 않을까?
비즈니스 로직을 수행하는 곳이 서비스니까, 컨트롤러에서 들어온 요청에 따른 데이터가 올바른지 확인해주면 될 것 같다는 결론이 나왔다!
그럼 유효성 검사는 어떻게 해?
컨트롤러에서 유효성 검사를 해줄 때 사용하는 어노테이션이 바로 @Valid다.
1. 의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-validation:3.3.2'
2. Controller에서 각 메소드의 @RequestBody 앞에 @Valid 어노테이션을 추가
3. 유효성 검사할 DTO 필드에 어떤 유효성에 대해 검사할 것인지 어노테이션을 추가
@Valid 를 보고 누가 어떻게 처리해주는거지?
유효성 검사는 HandlerAdaptor가 요청에 맞는 컨트롤러와 컨트롤러의 메소드를 호출하기 전에 수행된다.
바로, ReqeustResponseBodyMethodProcessor가 어노테이션을 보고, Validator에게 요청객체를 전달하여 유효성 검사를 부탁한다.
그러면 Validator는 유효성 검사를 하는데, 만일 유효하지 않다면, MethodArgumentNotValidException 라는 예외를 발생시킨다.
그럼 이러한 에러 처리를 해줘야하는거 아니야? 누가해줘?
Errors 객체를 이용하거나 BindingResult를 이용하여, 예외를 담을 수 있다.
Errors는 유효성 검증 에러, BindingResult는 데이터 바인딩 에러 + 유효성 검증 에러를 잡을 수 있다!
그럼 이러한 에러를 어떻게 처리해줄 수 있지?
1. Service로 넘겨서, 프론트엔드가 원하는 형태로 에러에 대한 정보를 넘겨준다.
2. ExceptionHandler에서 잡아서, 프론트엔드가 원하는 형태로 넘겨준다.
'프레임워크(Framework) > Spring' 카테고리의 다른 글
[Spring] Servlet이랑 DispatcherServlet (0) | 2024.07.31 |
---|---|
[Spring] SpringContext와ApplicationContext는 같은걸까?! (0) | 2024.07.30 |
[Spring] DI의 생성자 주입 선호 이유를 테스트 코드에서 찾기(vs 필드 주입) (0) | 2024.07.30 |
[Spring] Bean관리 누가할래? in TEST (@SpringBootTest @Test 알고 쓰기) (0) | 2024.07.30 |
[Spring] DTO는 왜 필요할까? (0) | 2024.07.22 |