✍학습 키워드
유효성 검사와 예외처리
- 비즈니스 로직이 올바르게 작동하려면 데이터를 사전 검증하는 작업이 필요하다. 이를 유효성 검사 또는 데이터 검증이라 부른다.
- 자바에서 가장 신경 써야 하는 것 중 하나로 NPE가 있다.
일반적인 애플리케이션 유효성 검사의 문제점
- 계층별로 진행하는 유효성 검사는 검증 로직이 각 클래스별로 분산돼 있어 관리하기가 어렵다.
- 검증해야 할 값이 많다면 검증하는 코드가 길어지므로, 코드가 복잡해지고 가독성 떨어진다.
예외 처리
- 스프링 부트의 예외 처리 방식
- 웹 서비스 애플리케이션에서는 외부에서 들어오는 요청에 담긴 데이터를 처리하는 경우가 많다. 그 과정에서 예외가 발생하면 예외를 복구해서 정상으로 처리하기보다는 요청을 보낸 클라이언트에 어떤 문제가 발생했는지 상황을 전달하는 경우가 많다.
- 스프링 부트에선 각 레이어에서 발생한 예외를 엔드포인트 레벨인 컨트롤러로 전달해야 클라이언트에 메세지 전달이 가능하다. 이 방식으로는 크게 두가지가 있다.
- @(Rest)ControllerAdvice와 @ExceptionHandler를 통해 모든 컨트롤러의 예외를 처리
- @ExceptionHandler를 통해 특정 컨트롤러의 예외를 처리
📝새로 배운 개념
스프링 부트의 유효성 검사
유효성 검사는 각 계층으로 데이터가 넘어오는 시점에 해당 데이터에 대한 검사를 실시한다. 스프링 부트에서는 계층 간 데이터 전송에 대체로 DTO 객체를 활용하고 있기 때문에 유효성 검사를 DTO 객체로 수행하는 것이 일반적이다.
- 유효성 검사를 위한 대표적인 어노테이션
- @Null : null 값만 허용한다
- @Notnull: null을 허용하지 않는다.
- @Min(value = $number) : $number 이상의 값을 허용한다.
- @Max(value = $number): $number 이하의 값을 허용한다.
- @AssertTrue : true인지 체크한다. null값은 체크하지 않는다.
- @Pattern(regexp = “$expression”) : 정규식을 검사한다.
@Validated 활용
@Valid 어노테이션은 자바에서 지원하는 어노테이션이며, 스프링도 @Validated라는 별도의 어노테이션으로 유효성 검사를 지원한다.
- @Validated는 @Valid 어노테이션의 기능을 포함하고 있기 때문에 @Validated로 변경할 수 있다.
또한, 유효성 검사를 그룹으로 묶어 대상을 특정할 수 있는 기능이 있다.
- @Validated 어노테이션에 특정 그룹을 설정하지 않은 경우에는 groups가 설정되지 않은 필드에 대해 유효성 검사를 수행한다.
- @Validated 어노테이션에 특정 그룹을 설정하는 경우에는 지정된 그룹으로 설정된 필드에 대해서만 유효성 검사를 수행
⇒ 어떤 상황에 사용할지를 적절하게 설계해야 의도대로 유효성 검사를 실시할 수 있다.
커스텀 Validation 추가
유효성 검사를 실시할 때 자바 또는 스프링의 유효성 검사 어노테이션에서 제공하지 않는 기능을 써야 할 때도 있다. 이 경우 ConstraintValidator와 커스텀 어노테이션을 조합해서 별도의 유효성 검사 어노테이션을 생성할 수 있다.
⇒ @Pattern (정규식) 어노테이션의 경우가 가장 흔한 사례이다.
커스텀 예외처리
- 표준 예외에서도 다양한 예외 상황을 처리할 수 있는 클래스를 제공하고 있지만 표준 예외에서 제공하는 클래스는 해당 예외 타입의 이름만으로 이해하기 어려운 경우에 개발자가 직접 예외를 관리하기 쉬워지기 때문에 사용한다. (에러 코드를 지정해 줄 수도 있다)
728x90
'개발 공부 기록 > 07. TIL' 카테고리의 다른 글
스프링 부트 핵심가이드 TIL - 10장 (서버 간 통신) (0) | 2023.10.13 |
---|---|
스프링 부트 핵심가이드 TIL - 9장 (액추에이터) (0) | 2023.10.12 |
스프링 부트 핵심가이드 TIL - 7장 (연관관계매핑) (0) | 2023.10.10 |
스프링 부트 핵심가이드 TIL - 6장 (Spring Data JPA 활용하기) (1) | 2023.10.09 |
스프링 부트 핵심가이드 TIL - 5장 (테스트 코드 작성하기) (0) | 2023.10.07 |