DuplicateEmailException에 @ResponseStatus(HttpStatus.CONFLICT) 애너테이션 사용
52
작성한 질문수 4
안녕하세요.
도메인 영역에 @Entity, @Query 애너테이션을 사용하는게 문제가 없다는 내용과 이유를 강의에서도, 질문&답변에서도 잘 설명해 주셨고, 모두 확인했습니다.
동일한 이유로,
강의에서 DuplicateEmailException에 @ResponseStatus 애너테이션 사용 시, 의존성 문제에 대해서 언급한 부분도, JPA 애너테이션을 사용할 수 있다는 동일한 근거로 허용되어도 문제가 없는게 아닐까요?
물론, @ResponseStatus 사용 시에 상태 코드 외에 추가적인 메시지 설정이 불가능하다는 등 단점이 있어서 사용하지는 않겠지만요.
그저 기술 의존성 침투 관점에서 궁금해서 문의 드립니다.
감사합니다.
답변 1
2
좋은 질문을 해주셨네요.
예외에 웹 응답 코드 정보를 애노테이션으로 넣는 것도 리포지토리에 JPA 애노테이션을 넣어도 된다면 허용할 수도 있지 않냐는 말씀이군요.
그럼에도 저는 사용을 안 하는 것으로 결정을 했고요. 사실 넣는다고 도메인 쪽에서 예외를 사용할 때 기능에 문제가 생길리는 없겠죠. 그럼에도 제가 이걸 피하려고 했던 이유는 도메인 로직에서 정의된 예외와 웹 응답 코드는 너무 간격이 크다고 느껴졌기 때문입니다.
@Entity는 JPA가 아니라 JDBC를 쓴다고 해도, 이건 도메인 모델 방식에서 이야기 하는, 혹은 DDD에서 말하는 엔티티라는 정보를 주는 것으로도 가치가 있습니다. import까지 찾아가서 이거 JPA 거자나라고 따지고 들지 않는다면, 코드를 읽는데 전혀 방해가 되지 않습니다.
@Query도 마찬가지입니다. 다음에 네이티브 쿼리가 나올 때는 또 고민이 되겠지만, JPA의 @Query에 들어가는 JPQL은 그 표현식 자체가 도메인 언어로 된 엔티티로 쓰여져있습니다. 이게 DB가 아니라 순수한 오브젝트 저장소에서 조회를 한다고 해도 전혀 어색하지 않은 도메인 속성과 잘 맞는 쿼리죠. 애초에 SQL도 비개발자들이 손쉽게 데이터를 조회할 수 있게 만들어진 것인데, JPQL은 도메인 언어만 잘 이해하고 있는 비개발자인 도메인 전문가도 간단한 문법만 배우면, 도메인 지식만 가지고도 얼마든지 조회를 해볼 수 있을 정도로 친숙합니다. 근데 왜 그게 하필 JPA 것을 쓰느냐, 이런 질문에 대해서 그 정도는 충분히 용납될 수 있다고 본 거죠.
반면 도메인 로직을 담은 예외가 웹의 응답 코드로 매칭이 된다. 이건 너무 뜬금없다고 느껴집니다. 헥사곤의 클라이언트가 웹만 있는게 아니니까요. 그런 관점에서 저는 웹이라는 특정 기술에 더 가까이간 응답 코드 정보를 예외에 넣고 싶지는 않았네요.
그런데, 이게 맞고 틀리고의 문제는 아닙니다. 뭐, 어짜피 코드 동작에 영향을 주지 않는 애노테이션이고, 클라이언트는 100%는 아니더라도 주로 웹 응답이 많이 쓰일테니, 넣는 것도 나쁘지 않겠다. 도메인 코드를 읽으면서 웹 응답은 뭘까도 떠올리는 게 개발자에겐 부담은 아니다라고 생각하면 써도 상관없습니다.
하지만 저는 그렇게까지는 쓰고 싶지 않네요.
도메인 모델에서 관계와 규칙을 구분하는 방법
0
37
2
헥사고날 아키텍처에서의 배치, 시큐리티, 비동기 이벤트 처리는 어떻게 하나요?
0
115
2
어댑터에서 도메인에 직접 의존하는 경우에 대해
0
116
2
Member 도메인이 PasswordEncoder를 받는 구조 질문 있습니다.
0
103
2
MemberService와 EmailSender 책임 분리에 대한 질문
0
102
2
NonNullApi를 NullMarked로 대체하라고 합니다.
0
123
2
39. 문서와 코드 다듬기 updateInfo 테스트 질문 있습니다.
0
71
2
Repository Adapter 설계에 대해 피드백을 부탁드립니다
0
105
2
헥사고날 part2 강의 출시 예정일 문의 드립니다.
0
244
2
PT 문의사항
0
97
1
초기 어플리케이션 구동 시 compose.yml 파싱 오류
0
147
2
애플리케이션의 JPA 리턴과 도메인 모델
0
125
2
애그리거트 루트의 하위 도메인들의 depth가 깊어질 때 문의
0
133
2
페이징 처리를 해야한다면 어떻게 해야할까요?
0
187
2
애그리거트의 repository
0
116
2
Domain Expert가 정확히 어떤 역할을 하는 사람인가요?
0
228
1
회원 애플리케이션 서비스 테스트 (1)
0
102
2
정적 팩토리 메서드 관련 질문드립니다!
0
103
2
spotbug + @NonNullApi 로만 Null 방어가 될까요?
0
127
2
required 포트에 관해서
0
90
2
혹시 다음 편은 언제쯤 오픈할까요?
0
163
2
서비스 단위 테스트 코드 작성
0
94
2
domain 모듈에 entity를 정의한다고 했을때
0
95
2
여러 엔티티의 조합으로 리포트를 제공해야할 때
0
78
2





