본문 바로가기
창업일기

[Spring] 멀티 모듈 버릴게요

by Nhahan 2024. 1. 3.

MSA를 하기에는 시간이 없고, Facade 레이어를 적용해보면서 아예 레이어간 의존성을 최대한 독립적으로 구성하기 위해 멀티 모듈을 도입했다.

 

멀티 모듈 레이어드 아키텍쳐. 흰 부분이 어플리케이션.

 

각 레이어의 이름은 마음대로 지었다.

컨셉은 하위의 모듈들은 상위 모듈을 참조할 수 없다는 것이다. 그리고 Common 레이어는 다른 레이어를 참조할 수 없다.

 

Gateway: 흔히 Controller 혹은 Presentation 이라고 불리는 레이어이다. 인증을 담당하기도 한다.

Service: Facade레이어이다. 핵심 비즈니스 로직이 들어가는 레이어이다.

Domain: Domain의 유효성이나 제한 조건들을 검증하는 레이어이다. 도메인 자체의 예외처리는 여기 행해지고, Service(Facade)레이어에서는 예외처리는 최소화하고, 비즈니스 로직에만 집중할 수 있게 해주는 레이어이다.

Data: 유일하게 DB에 접근할 수 있는 레이어이다.

Common: logger나 공통 에러 형식 정도를 담고 있는 레이어이다. logger 제외, 외부 라이브러리 의존성을 절대 가지지 않는 것이 핵심.

 

 

이론상으로는 좋았고, 잘 굴러가나 싶었는데 QueryDSL과의 조합이 너무 좋지 않았다. QueryDSL을 이용하다 보면 Q클래스 생성을 위해 빌드를 하는 경우가 많은데 그 때마다 IDE에서 에러가 너무 많이 발생했다. 그럼 또 IDE의 Invalidate Caches를 누르면 해결이 되고... 이런 경우가 너무 잦으니 생산성 자체에 커다란 장애물이 되었다.

 

이거 때문에 exposed라는 새로운 orm을 도입해야하나 생각했지만 정식 릴리즈가 아직 되지 않아 시도하진 않았다. 충분히 사용해볼만하긴 하던데.

 

이거 좀 그만 누르고 싶어

 

빌드하다 세월을 다 보내게 생겼기에 결국 다시 전통적(?)인 싱글 모듈 프로젝트로 돌아오게 되었다.

 

바로 개발 효율이 급상승했고, 모든 불편이 해소되었다. 앞으로 한 동안 멀티 모듈을 사용하지 않을 것 같다. 정말 해야겠으면 Controller-Service정도의 모듈 구성 정도로만 하던가... 근데 그러면 별로 의미가 없을 것 같기도 하다. 아니면 정말 exposed를 시도해보던가?

 

 

댓글