개발 공부 기록/07. TIL

스프링 부트 핵심가이드 TIL - 8장 (유효성 검사와 예외처리)

박세류 2023. 10. 11. 15:04

✍학습 키워드

유효성 검사와 예외처리

  • 비즈니스 로직이 올바르게 작동하려면 데이터를 사전 검증하는 작업이 필요하다. 이를 유효성 검사 또는 데이터 검증이라 부른다.
    • 자바에서 가장 신경 써야 하는 것 중 하나로 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