강사님 유효성 검증의 분리에 대해 궁금한점이 있습니다.
398
작성한 질문수 32
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!
먼저 유사한 질문이 있었는지 검색해 보세요.
서로 예의를 지키며 존중하는 문화를 만들어가요.
저희만의 서비스에 특화된 비즈니스 검증로직은 따로 서비스나 도메인에서 분리해서 검증하라고 하셨는데, 정확히 이해가 가지 않아서 좀더 질문 드립니다.
예를 들어, 패스워드 검증 로직이 있다고 하면, 저희만의 서비스는 패스워드 검증을( 영문,특문 혼합 8자이상)이라고 정했을때,
컨트롤러의 요청 부분에서는 @NotBlank를 처리하고, 서비스나 도메인에서 위의 패스워드 검증 로직을 진행하라는 말씀인가요??
답변 2
0
안녕하세요, 두잇베스트 님!
패스워드를 예시로 들어주셨는데, 패스워드 같은 경우는 도메인에 따라, 바라보는 시각에 따라 어디서 검증할지가 달라질 수 있는 예시일 것 같아요 ㅎㅎ
해당 API가 담당하는 도메인 로직에서 패스워드 검증 룰 자체가 중요한 역할을 차지하고 있다면 도메인 쪽에서, 그렇지 않다면 '영문/특문 혼합 8자리' 라는 룰은 앞단에서 검증하고 끝내도 된다고 생각합니다.
이럴때는 앞단에서 검증하고, 저럴때는 뒷단에서 검증해라, 와 같이 답이 정해져 있는 문제는 아니어서 상황에 따라 어느 쪽에서 검증하는 게 좋을지 판단하시면 됩니다.
강의 중 의도는 '아무리 단순한 검증 로직이어도, 중요한 도메인적 의미를 담고 있다면 도메인 레이어에서 검증하면서 그 규칙을 지속적으로 관리할 필요가 있다'는 것이었어요.
도움이 되셨기를 바랍니다.
감사합니다. 🙂
0
안녕하세요, 인프런 AI 인턴입니다.
네, 맞습니다. 입력 값에 대한 기본적인 검증(예: 빈 값으로 넘어오지 않았는지)은 컨트롤러 레벨에서 @NotBlank 어노테이션을 사용하여 처리하고, 서비스나 도메인 레벨에서는 서비스의 비즈니스 규칙에 맞는 보다 세부적인 검증(예: 패스워드가 영문, 특문을 혼합하여 8자 이상인지)을 진행하는 것이 좋습니다.
이렇게 분리하여 검증 로직을 구현함으로써, 컨트롤러와 서비스(도메인)의 책임을 명확히 구분하고, 코드의 유지 보수성을 높이며, 각각의 검증 로직을 재사용하기 쉽게 만들 수 있습니다.
또한, Spring에서는 @Validated 어노테이션을 활용하여 메소드 레벨에서 복잡한 검증을 수행할 수 있습니다. 예를 들어, 서비스 레벨의 메소드 인자에 대한 고급 검증을 적용할 수 있으며, 자세한 사항은 Spring Boot Reference Documentation에서 “Validation” 섹션을 참고하시는 것을 추천드립니다.
더 궁금한 점이 있으시면 언제든 질문해 주세요.
private 상수 테스트 관련 질문
0
83
1
void는 어떻게 테스트하나요..? void로 애초에 코딩하면 안되나요??
0
126
2
커버리지는 어떻게 활용하시는지 궁금합니다.
0
161
2
테스트 문서화 질문입니다
0
105
2
단위테스트 질문이 있습니다
0
96
2
컨트롤러는 모킹을 한 이유가 궁금합니다.
0
103
2
ERD 가장자리에 있는 도메인 테스트 질문
0
89
2
DTO 검증 필드에 대한 테스트 코드 작성은 어디까지?
0
135
2
OrderCreateRequest DTO에 대해서 궁금한점
0
102
2
고전파의 테스트 대역 사용 대상, 공유 의존성
0
156
2
계층 관련 질문이 있습니다.
0
139
3
'코틀린'에서는 빌더를 따로 쓰지 않는데, 이 때는 어떻게 test fixture를 만드시는지 궁금합니다
1
124
2
혹시 update 로직은 어떻게 테스트하나요? (@Setter?)
0
134
2
단위테스트와 통합테스트의 경계가 궁금합니다.
0
228
2
Service+Repository 통합테스트 관련 질문입니다.
0
150
2
OrderControllerDocsTest 작성 해봤는데요. 날짜 형식이 이상하게 나와요
0
184
2
test 용 .yml
0
90
2
throws Exception
0
80
2
카페키오스크 클래스 문의 ,,
0
89
2
Rest docs 문서용 테스트코드를 따로 작성해야 되나요?
0
174
2
테스트 코드에서 필요한 생성자
0
138
1
tearDown 순서
0
116
2
@Builder 생성자 private
0
136
2
@DisplayName gradle / intellJ
0
93
2





