인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트

패키지 구조 개선

님들 아무리봐도 PostCreate PostUpdate는 서비스쪽에 있어야하지 않을까요?

작성

·

872

·

수정됨

2

서비스에서 사용하는 모델인 거 같은데

제 생각입니다.

다른 의견 적어주시면 감사합니다.

답변 2

4

김우근님의 프로필 이미지
김우근
지식공유자

안녕하세요. 답변이 늦었습니다.

우선 PostCreate와 PostUpdate가 service에 있어서는 안 되는 이유부터 설명할게요.

https://github.com/kok202/test-code-with-architecture/blob/test/practice-part-2/src/main/java/com/example/demo/post/domain/Post.java의 코드를 보시면 아시겠지만 도메인 모델인 Post는 PostCreate와 PostUpdate를 사용하고 있습니다. 그래서 PostCreate, PostUpdate 이 두 클래스가 service 패키지 쪽으로 이동하면 domain 패키지가 service 패키지에 의존하는 그림이 되어 버립니다. 즉 service와 domain 사이에 순환 참조가 생기게 된다는 의미입니다.

이는 클린 아키텍처에서 말하는 좋은 설계와도 거리가 멀어지는 방향입니다. 클린 아키텍처에서는 의존의 방향이 단방향이어야 하고 무조건 바깥에서 안으로 들어가는 그림이 되어야 한다고 말합니다.

image출처: http://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html

위 그림에서 Entities = domain, Use Case=service 라고 보시면 되십니다. 왜 이러한 아키텍처를 추구해야 하는 지는 강의에서 이미 많이 이야기한 터라 넘어가겠습니다.

마지막으로 실습에서 보여드린 내용이 완전한 FM을 지켜가며 만든 결과물이 아니라는 점 알려 드립니다. 실습의 결과물 또한 이론과 효율 그 중간 어딘가에서 타협을 본 결과물입니다. 만약 완전히 이론을 따라가려 했다면, 모델을 레이어별로 다 새로 만들고, 레이어별로 각자 다른 모델을 들고 있어야 할 것입니다. 다만 이렇게 실습을 구성할 경우 더 중요하게 다뤄야 할 부분이 안 보이게 되는 문제가 있을 것 같아서 생략한 것일 뿐입니다. 그래서 이와 관련하여 모델을 어떻게 더 자세히 세분화할 수 있는지는 헥사고날 아키텍처 (2) 7:06~에서 이론으로 다뤘었고요. 관련된 내용은 강의를 참고해 주시기를 바랍니다.

답변이 조금이라도 도움이 되었으면 합니다. 감사합니다.

안녕하세요 상세한 설명 감사드립니다!
저는 좀 더 엄격하게 관리하고자해서 controller, service, domain, infrastructure 별로 dto를 각각 만들고, 하위로 내려갈 때 마다 변환해주는 방식을 사용하고있었습니다.

 

근데 이 내용을 보니, 상위 모듈에서 하위 모듈에 대한 참조는 크게 상관없는걸로 이해가 되서

controller -> service -> domain 이렇게 순서대로 내려가는게 아닌

controller -> domain 이렇게 한 계층?을 건너뛰어서에 대한 참조도 상관 없다고 생각해도 될까요??

0

안녕하세요, 인프런 AI 인턴이에요.

PostCreate과 PostUpdate는 보통 게시물을 생성하거나 업데이트하는 로직을 처리하는 함수라고 생각됩니다. 서비스에서 해당 기능을 사용하기 때문에 서비스 코드에 포함되는 것이 일반적입니다.

서비스 클래스는 주로 비즈니스 로직을 담당하며, 데이터를 처리하고 조작하기 위한 함수들을 포함합니다. 따라서, 게시물 생성 및 업데이트와 관련된 기능은 서비스 클래스에 포함되는 것이 일반적입니다.

물론, 개발자의 구현 방식이나 프로젝트의 구조에 따라 다를 수 있으므로 다른 의견도 존중해야 합니다.

더 자세한 내용이 있다면 알려주세요.~요.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기