[Java] monolithic 프로젝트에서 multi module로 전환 일기

이건영·2023년 6월 10일
0
post-custom-banner

들어가기 앞서....

회사에서의 프로젝트는 Monolithic 아키텍쳐로 이루어져 있다.
회사 초기에는 Monolithic 아키텍쳐로 개발/배포해도 문제가 되지 않았지만, 서비스가 커지다 보니 한개의 프로젝트로만 개발하기에 여러 문제에 직면하였다.(package, class 의치 등의 convention 불일치, 다운로드 서버 분리 불가 등등)
해서 MSA 아케텍쳐를 고민 했지만 도메인, util, repository등등의 결합이 너무 복잡하게 얽혀있어 분리하기에는 스타트업에서 지불하기에는 많은 시간이 필요했다.

우선 차선책으로 기존 프로젝트를 multi module로 변환하기로 했다.

멀티 모듈 이란?

멀티 모듈이란 서로 독립적인 프로젝트(인증, 다운로드, 어플리케이션)를 하나의 프로젝트로 묶어 모듈로서 사용되는 구조를 말한다.

멀티 모듈을 사용하면 공통적인 기능을 모아 하나의 모듈로 만드는 것이 가능하다. 즉, 인증과 어플리케이션에서 공통으로 사용하는 util, domain, Repository등을 모듈로 분리해 사용할 수 있는 것이다.

멀티 모듈에 관련해 더 자세하게 알고 싶은 경우 아래 글을 참고하자.

https://techblog.woowahan.com/2637/
multi module로 분리하는 방법은 많으니 스킵

분리 진행

약 1달이라는 시간이 주어진 시점에서 모든걸 할 순 없었다.
해서 분리가 급한 목록을 추려서 최종 목록은

  • 시시 때때로 OOM을 발생하는 download 기능
  • entity와 jpa repository > 기본적으로 참조하는 domain 관련

entity와 repository를 분리하는건 큰 문제가 아니였다.(multi module은 상속 관계처런 의존성 주입이 가능하다.)
entity와 repository(xml로 작성 된 mybatis와 querydsl로 작성 된 repository들은 기존 프로젝트에 둔다.)는 'core'라는 project에 분리해서 넣어주고 기존 controller, service, dto 등은 기존 프로젝트에 남겨둔다.

- 작업도중 발생 한 문제사항

가장 큰 문제를 이 분리 작업을 시작한 이유인 download 기능(PPT, Excel, Zip)분리 였다.
하나의 다른 프로젝트로 분리하기에는 기존 service와 util에 의존하는 파일이 너무 많았다.
해서 그냥 하나의 download 서버를 따로 띄우기로 결정(욕심으로는 분리하고 싶지만 시간이....😥)

- 목표는 분리였지만 결국엔 download server 추가??

download server를 추가 하기로 했지만 기존의 application에서 작동하는게 아닌 새로 띄운 download 서버에서 작동해야 하기 때문에 Message Queue를 사용하기로 했다.
해당 분리기는 다운로드 서버 추가(?) 여기서 확인해 보자.

결론

음.........끝!

profile
일단 해보자
post-custom-banner

0개의 댓글