-
Notifications
You must be signed in to change notification settings - Fork 1
모듈‐구조
Junsu Jang edited this page Aug 27, 2023
·
1 revision
project
├── clients
└── java-email
├── event-consumer
└── event-api
├── mega-coffee-api
├── mega-coffee-common
├── mega-coffee-core
├── mega-coffee-core-infra
├── mega-coffee-scheduler
└── mega-coffee-infra
└── database
└── mysql
└── message-queue
└── rabbitmq
[Application 영역]
- 실제 실행을 담당하는 모듈
- mega-coffee-api, mega-coffee-scheduler
- Http 프로토콜 기반 Rest API의 경우 controller를 통한 입출력/검증 역할을 수행합니다.
- 비동기 백그라운드를 통해 Trigger + Job을 수행합니다.
[Core 영역]
- 도메인, 비즈니스 로직을 담당하는 모듈
- mega-coffee-core, mega-coffee-core-infra
- 변할 수 있는 Repository부분을 인터페이스로 정의하여 db가 바뀌거나 내부적으로 캐싱처리등 구체적인 구현을 알필요 없도록 하였습니다.
- 트레이드오프로 인해 빈 주입을 위한
spring-context
와 AOP방식인 트랜잭션 지원을 위해spring-tx
라이브러리르 허용하였습니다.- 추후 pure한 core모듈을 갖출 수 있도록 빈 주입은 kotlinConfig방식으로 변경하고, TransactionHandler라는 독립된 클래스를 만들어 스프링 의존성을 격리시킬 예정입니다.
[Infra 영역]
- database, 미들웨어등 타 App에 의존도가 높은 모듈
- db/mysql, message-queue/rabbitmq
- core에서 정의한 인터페이스의 구체적인 구현을 정의하고 활용합니다.
- DB의 경우 root entity, vo등 도메인 영역을 객체로 분리하여 응집력을 높입니다.
[Clients 영역]
- 외부 API 연동등 외부 App에 의존도가 높은 모듈
- clients/java-email
- 실제 외부 API연동과 관련한 로직을 구현하는 곳입니다.