카테고리 없음
애플리케이션 계층별 입력값 검증 책임
개발자 김마늘
2025. 5. 18. 23:14
애플리케이션에서 입력값 검증을 어디서 어떻게 처리해야할지 정리한 글입니다.
컨트롤러
컨트롤러는 사용자로부터 받은 입력값의 형식적인 유효성을 검사하는 역할을 담당합니다.
- 이메일 형식이 올바른지 (@Email)
- 필수 값이 들어왔는지 (@NotBlank, @NotNull)
- 문자열 길이가 제한을 초과하지 않았는지 (@Size)
등은 대부분 컨트롤러에서 처리합니다.
Spring에서는 @Valid를 통해 쉽게 처리할 수 있습니다.
서비스
서비스 계층에서는 비즈니스 로직 관점의 유효성 검증을 수행해야 합니다.
- 이메일은 형식상 맞더라도 이미 가입된 이메일인지 체크
- 비공개 채널을 수정하려 할 때 권한이 있는 사용자만 가능하게
- 포인트가 부족한데 결제를 시도한 경우 막기
이처럼 입력값이 실제로 의미 있는지 판단하는 작업은 서비스 계층의 책임입니다.
엔티티 (도메인)
엔티티나 도메인 객체 자체가 불변 조건이나 상태 전이 제약을 가지고 있다면, 그 유효성은 도메인 레벨에서 처리해야 합니다.
- 사용자의 이메일은 null이 될 수 없다
- 계좌의 잔액은 음수가 될 수 없다
이런 조건은 지금은 그렇다가 아니라 항상 그래야 하며, 어떤 메서드를 호출해도 절대 위반되면 안됩니다. 이런 검증은 서비스보다 도메인 레벨에서 수행해야 객체가 스스로 자신의 유효성을 책임질 수 있습니다.