회사에서의 프로젝트는 Monolithic 아키텍쳐로 이루어져 있다.
회사 초기에는 Monolithic 아키텍쳐로 개발/배포해도 문제가 되지 않았지만, 서비스가 커지다 보니 한개의 프로젝트로만 개발하기에 여러 문제에 직면하였다.(package, class 의치 등의 convention 불일치, 다운로드 서버 분리 불가 등등)
해서 MSA 아케텍쳐를 고민 했지만 도메인, util, repository등등의 결합이 너무 복잡하게 얽혀있어 분리하기에는 스타트업에서 지불하기에는 많은 시간이 필요했다.
우선 차선책으로 기존 프로젝트를 multi module로 변환하기로 했다.
멀티 모듈이란 서로 독립적인 프로젝트(인증, 다운로드, 어플리케이션)를 하나의 프로젝트로 묶어 모듈로서 사용되는 구조를 말한다.
멀티 모듈을 사용하면 공통적인 기능을 모아 하나의 모듈로 만드는 것이 가능하다. 즉, 인증과 어플리케이션에서 공통으로 사용하는 util, domain, Repository등을 모듈로 분리해 사용할 수 있는 것이다.
멀티 모듈에 관련해 더 자세하게 알고 싶은 경우 아래 글을 참고하자.
https://techblog.woowahan.com/2637/
multi module로 분리하는 방법은 많으니 스킵
약 1달이라는 시간이 주어진 시점에서 모든걸 할 순 없었다.
해서 분리가 급한 목록을 추려서 최종 목록은
entity와 repository를 분리하는건 큰 문제가 아니였다.(multi module은 상속 관계처런 의존성 주입이 가능하다.)
entity와 repository(xml로 작성 된 mybatis와 querydsl로 작성 된 repository들은 기존 프로젝트에 둔다.)는 'core'라는 project에 분리해서 넣어주고 기존 controller, service, dto 등은 기존 프로젝트에 남겨둔다.
가장 큰 문제를 이 분리 작업을 시작한 이유인 download 기능(PPT, Excel, Zip)분리 였다.
하나의 다른 프로젝트로 분리하기에는 기존 service와 util에 의존하는 파일이 너무 많았다.
해서 그냥 하나의 download 서버를 따로 띄우기로 결정(욕심으로는 분리하고 싶지만 시간이....😥)
download server를 추가 하기로 했지만 기존의 application에서 작동하는게 아닌 새로 띄운 download 서버에서 작동해야 하기 때문에 Message Queue를 사용하기로 했다.
해당 분리기는 다운로드 서버 추가(?) 여기서 확인해 보자.
음.........끝!