[question] 멀티 모듈을 어떻게 분리하고 계신가요?
Closed this issue · 4 comments
leejaeseung commented
질문
이번에 진행하고 있는 신규 프로젝트에선 아래와 같은 멀티 모듈 구조를 사용하고 있는데, 자칫하면 support 에 너무 많은 공통 코드가 몰릴 수도 있을 것 같더라구요... 다른 분들께선 각 모듈의 공통적인 코드를 어떻게 분리해 사용하고 계신지 궁금합니다..!
-
core
ㄴ infra
ㄴ 각 비즈니스 로직(repo + service)
ㄴ 등등.. -
api (메인 모듈)
ㄴ infra
ㄴ 각 비즈니스 로직(repo + service)
ㄴ 등등.. -
pubsub (메인 모듈)
ㄴ kafka 관련 패키지
ㄴ 각 비즈니스 로직 -
entity (단순 entity 에 대한 명세. 각 모듈에서 entity 를 재정의해서 사용.)
ㄴ mongodb 베이스 레포지토리
ㄴ 각 Entity 에 대한 명세 -
support
ㄴ 공통 유틸성 함수들 + 공통 확장 함수 등
ㄴ redis
ㄴ 사내 메시징 툴
wooyounggggg commented
https://www.youtube.com/watch?v=ipDzLJK-7Kc
예전에 이 영상을 봤던게 생각나네요
kth990303 commented
아래 글에서도 support
(의존성, 유틸성 등의 부분)에 지나치게 많은 코드가 몰리는 것을 어떻게 해결할지에 대해 다루고 있어서 공유해봅니다.
https://techblog.woowahan.com/2637/
내용이 좀 많아서 저도 아직 다 보진 못했습니다 😢
emiling commented
- 중복을 제거해야한다는 강박관념
- 일부 코드를 중복시키는 것 보다 core와 common이 가지고 있는 잠재적 위험성이 더 크다
- Too Many Connections, 라이브러리 참조 문제로 인한 버전 업그레이드, copy & paste / if-else , 빌드 시간...
- 일부 코드를 중복시키는 것 보다 core와 common이 가지고 있는 잠재적 위험성이 더 크다
- "무엇을" 기준으로 멀티 모듈을 나누어야 하는가? : 역할, 책임, 협력관계가 올바른가? → bounded context
- 각자 고유한 성격과 특성, 사이클을 가지고 있고 그 기준으로 경계를 나누었다
emiling commented
멀티 모듈의 도입 시기?
- 프로젝트 특성...에 따라 고려됨 : 여러개의 서버를 띄워야 하는 경우
- 단일 어플리케이션 (monorepo vs mo)
- 중복 함수/기능에 대한 어느정도 감안
- 작은 기능 단위로 쪼개기
- 클래스 분리 VS 메서드 분리? : 클래스별 적절한 메서드를 포함시켜서 분리
- 하나의 클래스에 하나의 함수만
- 중복 코드가 왜 나쁠까요?
- "중복된 행위" : 어떤 역할을 수행하기위한 행위를 구현체
- MatchingProcessor 객체 <- 관리툴 / 외부 서비스 (의존성)
- 중복의 사이즈? 트레이드 오프의 지점?
- 응집도/결합도 관점
- 응집도 : 동일한 소스코드가 다른 여러 곳에 존재 ->
- 결합도 : 동일한 행위(코드)를 여러 곳에서 사용하기 위해 특정 객체에게 해당 행위를 위임 -> 다른 곳에서 사용하면서 결합도 증가
- 두 가지의 트레이트 오프