인프런 커뮤니티 질문&답변

djeuskwiwhe님의 프로필 이미지

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

Bean Validation - 스프링 적용

어노테이션 유효성 검증과 ResponseEntityExceptionHandler

작성

·

63

0

@Valid, @Validated 어노테이션으로도 유효성 검증이 가능하다는 것을 알고 있습니다. 그리고 GlobalExceptionHandler에서 ResponseEntityExceptionHandler 추상 클래스를 상속받아 메서드를 재정의해서 구현하는 방식으로 전역적으로 예외 객체 관리가 가능하다는 것을 알고 있는데요. 잘 이해가 되지 않는 부분이 있어 질문을 드립니다.

 

강의에서와 같이 DTO를 사용해 제약 조건을 추가해 타임리프에 오류 메시지를 추가하는건 BindingResult를 통해 이루어지는 것을 알고 있는데 어노테이션을 사용하면 타임리프에서의 유효성 검증만 가능한 것이고 ResponseEntityExceptionHandler 추상 클래스를 상속받아 메서드를 재정의해서 구현하는 경우에는 타임리프에 적용을 할 수 없고 RESTful API 개발에만 적용할 수 있는 것인가요?

타임리프 쓰면 그냥 DTO에 제약조건 걸고 어노테이션 써서 유효성 검증하는 것 말곤 방법이 없나요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

님의 질문에 답변드리겠습니다. @Valid@Validated 어노테이션을 사용한 유효성 검증은 타임리프에서 뿐만 아니라, Spring MVC에서도 널리 사용됩니다. DTO에 제약 조건을 추가하고, 컨트롤러에서 BindingResult를 통해 유효성 검사 결과를 관리하는 방법은 타임리프와 같은 서버 사이드 템플릿 엔진과 함께 사용하는 전통적인 웹 어플리케이션 개발에 잘 맞습니다.

반면, ResponseEntityExceptionHandler를 상속받아 예외 처리 로직을 구현하는 방식은 RESTful API를 개발할 때 주로 사용됩니다. 이 방식을 사용하면 API 응답으로 400 Bad Request, 500 Internal Server Error와 같은 HTTP 상태 코드와 함께 유효성 검사 실패나 서버 오류에 대한 세부 정보를 클라이언트에게 JSON 형식 등으로 전달할 수 있습니다.

따라서, 타임리프에서의 유효성 검증과 예외 처리는 주로 서버 사이드에서 처리되며, RESTful API 개발 시 사용되는 ResponseEntityExceptionHandler는 클라이언트와의 통신에서 오류 응답을 관리하는 것에 더 초점을 맞추고 있습니다.

두 방식 모두 유효한 접근 방식이며, 사용되는 컨텍스트나 요구 사항에 따라 선택할 수 있습니다. 타임리프를 사용하는 환경에서도 @ControllerAdvice를 사용하여 글로벌 예외 처리 로직을 구현할 수 있고, 이를 통해 REST API와 서버 사이드 렌더링을 모두 처리하는 애플리케이션에서 유용하게 사용할 수 있습니다.

타임리프외의 유효성 검증 방법으로는 스프링에서 지원하는 자바스크립트 함수를 이용한 클라이언트 사이드 유효성 검증이 있습니다. 하지만 서버 사이드에서의 유효성 검증 로직은 보안과 데이터 무결성을 위해 반드시 필요하기에 대체가 아닌 보완적으로 사용됩니다.