프로젝트/개인 프로젝트 리팩토링

[개인프로젝트 리팩토링] 멀티모듈에 대한 회고..?

dal_been 2024. 8. 21. 16:40
728x90

최근 모듈을 추가하면서 후회?? 회고?? 한 느낌을 작성하고자 한다.

 

 


현재 모듈 구성

 

 

간단히 이미지로 보자면 이런구성이다. 일단 멀티모듈로 COMMON, CUSTOMER, FCM, JOB ,WALKER 총 5개의 모듈로 구성중이다.

여기서 COMMON에 domain관련된 엔티티와 CUSTOMER와 WALKER에 공통적으로 쓰이는 AUTH(로그인, 토큰)관련 로직들이 있다.

 

그래서 CUSTOMER와 WALKER관련된 코드를 작성한후 FCM코드를 짤때 dependency에 COMMON모듈을 추가해야하나?? 하는 고민이 있었다. 

그러려면 AUTH관련된 코드들 떄문에 OpenFeign, Redis와 관련된 설정값을 넣어줘야했다. 그것은 매우 쓸모없는 행위라고 생각했다.

일단 FCM에서 관련된 코드들을 사용하지 않기때문이다.

 

생각해보니 CUSTOMER, WALKER자체에서는 FCM관련된 엔티티를 생성하지는 않는다. 위의 이미지처럼 다 Kafka를 통해 FCM서버가 다 담당한다. 그래서 common모듈을 추가하지 않은채 FCM모듈에 메세지와 관련된 엔티티를 추가했다.

 

그런데 문제가 생겼다. JOB이라는 모듈을 만들면서...

 

 

common모듈이 좀 복잡해진것 같다..?

 

common 모듈에 domain관련된 엔티티가 있다보니 JOB모듈에 해당 엔티티들이 필요했다.

왜냐면 JOB에는 예약관련된 엔티티들을 읽어서 quartz를 돌려 fcm서버에 전송할 것이기 때문이다.

 

그래서 common모듈을 dependency에 추가했더니.....

redis관련 환경설정 값이 없다고 나왔다.... 뿐만아니라 OpenFeign도..

 

초반에 common모듈을 customer와 walker를 생각하여 만든 모듈이라 인증관련된 공통된 코드들도 있으면 괜찮을 것이라고 생각했다.

물론 둘 모듈만 사용할 것이라면 큰 문제 없지만.... 다른 모듈을 추가한다고 했을때... 좀 복잡해진 느낌이다.

 

 

그래서..?

 

일단 common모듈에 domain과 auth를 모듈로 분리하는 것이 나을 것같다.

왜냐면 domain빼고는 진짜 왠만하며 auth 관련된 코드라서... 물론 위치 저장관련된 코드들도 있지만 해당 코드들은 대부분 위치를 mysql에 넣기 위한 작업들이라 큰 문제가 없다.

 

그래서 domain, common이렇게 나눌 예정이다.

 

이런 느낌으로 모듈을 구성할 것같다. 

 


사실 customer, walker코드만 본다면 common모듈이 나쁘지 않다고 생각한다.

다만 추후 다른 서버들이 추가했을때를 본다면 확장성에서 조금 떨어진다. 그래서 조금더 세분화해서 나눠보았다.