작성
·
273
0
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!
먼저 유사한 질문이 있었는지 검색해 보세요.
서로 예의를 지키며 존중하는 문화를 만들어가요.
저희만의 서비스에 특화된 비즈니스 검증로직은 따로 서비스나 도메인에서 분리해서 검증하라고 하셨는데, 정확히 이해가 가지 않아서 좀더 질문 드립니다.
예를 들어, 패스워드 검증 로직이 있다고 하면, 저희만의 서비스는 패스워드 검증을( 영문,특문 혼합 8자이상)이라고 정했을때,
컨트롤러의 요청 부분에서는 @NotBlank를 처리하고, 서비스나 도메인에서 위의 패스워드 검증 로직을 진행하라는 말씀인가요??
답변 2
0
안녕하세요, 두잇베스트 님!
패스워드를 예시로 들어주셨는데, 패스워드 같은 경우는 도메인에 따라, 바라보는 시각에 따라 어디서 검증할지가 달라질 수 있는 예시일 것 같아요 ㅎㅎ
해당 API가 담당하는 도메인 로직에서 패스워드 검증 룰 자체가 중요한 역할을 차지하고 있다면 도메인 쪽에서, 그렇지 않다면 '영문/특문 혼합 8자리' 라는 룰은 앞단에서 검증하고 끝내도 된다고 생각합니다.
이럴때는 앞단에서 검증하고, 저럴때는 뒷단에서 검증해라, 와 같이 답이 정해져 있는 문제는 아니어서 상황에 따라 어느 쪽에서 검증하는 게 좋을지 판단하시면 됩니다.
강의 중 의도는 '아무리 단순한 검증 로직이어도, 중요한 도메인적 의미를 담고 있다면 도메인 레이어에서 검증하면서 그 규칙을 지속적으로 관리할 필요가 있다'는 것이었어요.
도움이 되셨기를 바랍니다.
감사합니다. 🙂
0
안녕하세요, 인프런 AI 인턴입니다.
네, 맞습니다. 입력 값에 대한 기본적인 검증(예: 빈 값으로 넘어오지 않았는지)은 컨트롤러 레벨에서 @NotBlank
어노테이션을 사용하여 처리하고, 서비스나 도메인 레벨에서는 서비스의 비즈니스 규칙에 맞는 보다 세부적인 검증(예: 패스워드가 영문, 특문을 혼합하여 8자 이상인지)을 진행하는 것이 좋습니다.
이렇게 분리하여 검증 로직을 구현함으로써, 컨트롤러와 서비스(도메인)의 책임을 명확히 구분하고, 코드의 유지 보수성을 높이며, 각각의 검증 로직을 재사용하기 쉽게 만들 수 있습니다.
또한, Spring에서는 @Validated
어노테이션을 활용하여 메소드 레벨에서 복잡한 검증을 수행할 수 있습니다. 예를 들어, 서비스 레벨의 메소드 인자에 대한 고급 검증을 적용할 수 있으며, 자세한 사항은 Spring Boot Reference Documentation에서 “Validation” 섹션을 참고하시는 것을 추천드립니다.
더 궁금한 점이 있으시면 언제든 질문해 주세요.