model module 분리 관련 논의 #30
Replies: 2 comments 5 replies
-
음..... 이러한 의존관계를 두는게 제 2의 common 모듈을 만드는 것 같아서 조금 복잡도가 올라갈까 걱정이 되네요! 혹시 지금 구조가 module-api 에 컨트롤러(Presentation Layer) 만 존재하고 Service Layer 가 module-domain 모듈로 빠져있는데 이러게 설계하신 의도가 있으실까요? 제가 잘못 생각하고 있는것일수도 있지만 Service Layer 가 module-api 로 올라오는게 조금 더 자연스럽지 않을까..? 하는 생각이 조금 있습니다! Service Layer 는 요청에 따른 비즈니스 로직 처리를 담당하는데 "요청"에 따라서 이기 때문에 Domain 보다는 Controller 에 의존적으로 존재하는게 맞을것 같다는 생각이 듭니다! 혹시 이 부분에 대해서 어떻게 생각하실까요? |
Beta Was this translation helpful? Give feedback.
-
회사일이 매우 바빠서 확인이 늦었습니다! 죄송합니다 ㅠㅠ 말씀하신대로 Presentation Layer 는 외부로부터의 요청을 받는 역할을 하고, Service Layer 는 비즈니스 로직을 처리하는 역할을 하도록 모듈을 나눠도 상관은 없습니다만... 프로젝트의 규모가 크지않고 모듈 복잡도가 올라갈것같다는 생각이 조금은 남아있는것 같아요 ㅠㅠ 해당 비즈니스 로직은 module-api 를 통해 들어온 요청에 대한 비즈니스 로직이고, 다른 곳에서 재사용이 불가능한 형태가 될 가능성이 높아서 저한테는 나눴을 때 얻을 수 있는 이득보다 복잡도가 올라감으로써 얻는 손해가 좀 더 크다고 느껴지는것 같아요. 이 부분은 선택적인 부분이라 선필님이 의도하신 방향으로 진행해주셔도 됩니다 :)
sms 와 같이 정확히 외부만 바라보는 경우 별도의 client 모듈(Infra Layer)로 나눠도 괜찮다고 생각해요. 이를 나눔으로써 해당 부분의 코드의 의존성을 좀더 깐깐하게 확인할 수 있을것 같아요. 물론 지금처럼 별도의 폴더로만 나눠서 진행해도 크게 무리는 없다고 생각합니다ㅎㅎ 현재처럼 폴더로 나눠놓고 진행하다가 나중에 언제든지 필요에의해서 별도 모듈로 빼낼수 있으니까요! 대신 지금처럼하면 의존성을 좀더 꼼꼼하게 확인하긴 해야할것 같아요. 도메인 모듈에 같이있다보니 도메인에 의존하기 쉬운상태인것 같아서요 ㅎㅎ |
Beta Was this translation helpful? Give feedback.
-
comment by #25에서 시작된 주제입니다.
사실 domain 모듈에 Response 클래스가 이거 말고도 또 있는데요, ErrorResponse입니다.
또 domain 모듈에 OAtuh2SuccessHandler 클래스를 보시면, api 모듈에 있는 ResultResponse 클래스를 참조하지 못해서 동일한 형태로 Response 클래스를 만들어서 사용하기도 하는데, 이런 부분들이 구현하면서 좀 거슬렸지만 모른척 했던(?) 부분들인데, 마침 찬준님께서 comment를 남겨주셨으니, 확실히 짚고 넘어가는게 좋을 것 같아서 고민좀 해봤는데요,
혹시
module-model
을 따로 분리하고, domain 모듈과 api 모듈이 model 모듈을 의존하는 형태는 어떻게 생각하시나요?해당 모듈에서 api interface랑 request/response class를 관리하고, api 모듈에서 api interface를 상속받아 controller를 구현하고, request/response class는 필요한 모듈(api, domain)에서 자유롭게 사용하는 방식입니다.
글로만 써서 제 의도가 잘 전달될진 모르겠네요😅
아래는 간단한 예시입니다.
module-model의 MemberAuthApi interface
module-api의 MemberAuthController
이렇게 하면 장점은, 구현하기 전 api 명세서를 먼저 빠르게 설계해서 프론트/클라이언트 분들께 전달할 수 있고, controller단에서 api 명세서에 관련된 지저분한 코드를 더 이상 보지 않아도 됩니다. (api 모듈에서 swagger 의존성을 떼어낼 수 있습니다.)
또한, 이전의 문제였던 response 클래스를 domain 모듈에서 관리할 필요 없이 호출이 가능하게 됩니다.
model 모듈 구조는 아래와 같습니다.
Beta Was this translation helpful? Give feedback.
All reactions