[DDD] 응용 서비스와 표현 영역 -4

2025. 5. 13. 22:12·📚 개발자의 서재/도메인 주도 개발 시작하기
해당 포스팅은 최범균 작가님의  도메인 주도 개발 시작하기 (P.221~226)를 읽고 정리한 글입니다.

 

값 검증

값 검증은 표현 영역과 응용 서비스 두 곳에서 모두 수행할 수 있다. 원칙적으로 모든 값에 대한 검증은 응용 서비스에서 처리한다. 

 

그런데 표현 영역은 잘못된 값이 존재하면 이를 사용자에게 알려주고 값을 다시 입력받아야 한다. Spring MVC는 폼에 입력한 값이 잘못된 경우 에러 메시지를 보여주기 위한 용도로 Errors 나 BindingResult를 사용하는데, 컨트롤러에서 위와 같은 응용 서비스를 사용하면 폼에 에러 메시지를 보여주기 위해 다소 번잡한 코드를 작성해야 한다.

 

응용 서비스에서 각 값이 유효한지 확인할 목적으로 익셉션을 사용할 때의 문제점은 사용자에게 좋지 않은 경험을 제공한다는 것이다. 사용자 경험을 향상 시키기 위해 응용 서비스에서 에러 코드를 모아 하나의 익셉션으로 발생시키는 방법도 있다.

 

표현 영역에서 필수 값을 검증하는 방법도 있다. 스프링과 같은 프레임워크는 값 검증을 위한 Validator 인터페이스를 별도로 제공하므로 이 인터페이스를 구현한 검증기를 따로 구현하면 위 코드를 다음과 같이 간결하게 줄일 수 있다.

 

표현 영역에서 필수 값과 값의 형식을 검사하면 실질적으로 응용 서비스는 ID 중복 여부와 같은 논리적인 오류만 검사하면 된다. 즉, 표현 영역과 응용 서비스가 값 검사를 나눠서 수행하는 것이다.

  • 표현 영역 : 필수 값, 값의 형식, 범위 등을 검증한다.
  • 응용 서비스 : 데이터의 존재 유무와 같은 논리적인 오류를 검증한다.

저자는 응용 서비스 단계에서 필수값과 논리적 검증을 모두 직접 수행한다. 이렇게 하면 프레임워크가 제공하는 검증 기능만 사용할 때보다 코드량은 늘어나지만, 그만큼 응용 서비스의 완성도가 높아진다. 필자는 이러한 장점을 더 크게 평가하여 값 오류를 응용 서비스에서 검증하는 방식을 선호한다.


나는 값 검증을 할 때 주로 @Valid와 @Validated 어노테이션을 활용했다. 프로젝트 수준에서 복잡한 논리적 검증을 요구하지 않았기 때문에 코드의 간결함을 취한 선택이었다. 하지만 이런 방향이 습관이 되어 표현 영역과 응용 영역에서 어디서 값 검증을 할지 고민은 하지 못했는데 이번 기회에 생각할 수 있는 좋은 기회였다.
저작자표시 비영리 변경금지 (새창열림)

'📚 개발자의 서재 > 도메인 주도 개발 시작하기' 카테고리의 다른 글

[DDD] 응용 영역과 표현 영역 -6  (0) 2025.05.15
[DDD] 응용 서비스와 표현 영역 -5  (0) 2025.05.14
[DDD] 응용 서비스와 표현 영역 -3  (0) 2025.05.12
[DDD] 응용 서비스와 표현 영역 -2  (0) 2025.05.11
[DDD] 응용 서비스와 표현 영역 -1  (0) 2025.05.10
'📚 개발자의 서재/도메인 주도 개발 시작하기' 카테고리의 다른 글
  • [DDD] 응용 영역과 표현 영역 -6
  • [DDD] 응용 서비스와 표현 영역 -5
  • [DDD] 응용 서비스와 표현 영역 -3
  • [DDD] 응용 서비스와 표현 영역 -2
l'avenirJun
l'avenirJun
  • l'avenirJun
    오늘도 꾸준히 개발
    l'avenirJun
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 📚 개발자의 서재 N
        • 객체지향의 사실과 오해
        • Good Code, Bad Code
        • 도메인 주도 개발 시작하기 N
      • 🔧 트러블 슈팅
      • Java
      • Spring
      • 운영체제
        • 공룡책 학습
      • 알고리즘
      • GIT
      • 면접 지식
      • Spring 단기심화 2기
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    책임
    메시지
    역할
    협력
    specification
    코드트리
    티스토리챌린지
    good code bad code
    코딩트리조별과제
    애그리거트 루트
    표현 영역
    도메인 주도 개발 시작하기
    DIP
    인터페이스
    유스케이스
    캡슐화
    애그리거트
    오블완
    매핑 구현
    책임-주도 설계
    객체지향의 사실과 오해
    가독성
    추상화
    도메인 모델
    타입
    코딩테스트
    모듈화
    객체
    리포지터리
    코드 계약
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
l'avenirJun
[DDD] 응용 서비스와 표현 영역 -4
상단으로

티스토리툴바