포스트

제목 : 멀티모듈 설계 이야기 with Spring,Gradle - 우아한형제들 기술 블로그

링크 : http://woowabros.github.io/study/2019/07/01/multi-module.html


모듈이란?

- 본체에 대한 독립된 하위 단위로서 다른 구성요소와 독립적으로 운영. - 관련있는 클래스나 함수 등을 모아놓아 구성.


내용 요약

- 프로젝트를 모듈화하여 작성한다. (common:공통모듈, batch:배치모듈, internal-api: 내부api 등)

- 코드를 추가할 때, 무조건 공통 모듈에 작성하게 되면 다양한 문제가 발생할 가능성이 크다.

  • common 모듈에 의해서 불필요한 혹은 의도하지 않은 부분들이 붙게 된다.
  • common 모듈에 다른 모듈들이 의존하게 되면서 common 모듈의 수정은 전체 시스템에 영향을 미치게 된다.

- 이러한 문제들을 피하기 위해 모듈들에 대한 의존성과 사용성에 대한 개방, 폐쇄를 철처하게 분리하여 설계한다. 이를 통해 아래의 이득을 얻을 수 있다.

  • 명확한 경계
  • 최소 의존성


리뷰

이 글을 보고나서 모듈이라는 것에 대해 다시 한번 생각해 볼 수 있는 기회가 되었다. 멀티 모듈 프로젝트라는 개념을 처음 들어보는 것은 아니다. 처음 이 개념을 알고나서 대부분의 프로젝트는 모두 이를 적용하여 만들었었다. 나는 주로 common, api, front 로 나누어 개발을 하였다. 프로젝트라 부르기 어려울 정도로 작고 작은 규모의 프로젝트이기에 무리 없이 마무리 하였지만, 다시금 코드를 바라보면 많은 문제들을 내포하고 있다는 것을 알 수 있다.

  • common의 DB설정 때문에 사용하지 않아도 되는 Front모듈에서 DB와 커넥션을 맺게 됨
  • 공통적이지 않는 기능들이 common에 작성되어있다. 기능 수정을 하게 되었을 때 영향을 받지 않아도 되는 모듈들이 영향을 받는다.
  • 공통적일 필요가 없는 RestTemplate, Conntection Pool등의 설정이 common에 정의되어 있다.

위의 글을 다시 한번 읽어보고 난 후 내가 만든 코드들은 일회성이라는 생각이 참 많이 들었다. 이번 기회를 통해 다시 프로젝트를 재구성시켜보고, 앞으로 프로젝트를 만들 때 이러한 점을 충분히 인지하고 설계해야 함을 느낀다.