이 문서는 새로운 서비스 혹은 모듈 프로젝트를 시작하는 방법을 소개한다.
준비물
프로젝트를 시작하기 위해서 아래 항목들이 필요하다.
사전 지식
클린 아키텍처
로버트 C. 마틴(Robert C. Martin a.k.a Uncle Bob)가 제안한 소프트웨어 아키텍처이다. 소프트웨어의 각 부분이 담당하는 레이어를 정의하고 레이어 사이의 의존성 규칙을 정의함으로써 레이어간의 의존성을 최소화 할 수 있다. 예를 들어 표현(Presentation)의 변경이 비지니스 로직의 변경 없이 적용될 수 있으며, 그 반대 또한 가능하다. 레이어간 의존성이 적으므로 데이터 저장소의 변경이 쉽고, 또한 도메인 로직 변경이 프레임워크의 영향을 받지 않는 장점도 있다. 좀 더 자세한 내용은 The Clean Architecture 문서를 참고한다.
기능 기반 패키지(Package by Feature)
패키지는 함께 사용되거나 함께 변경되는 코드를 같은 곳에 두는(높은 응집성, Highly-cohesive) 동시에 서로 관련이 없거나 독립적으로 존재하는 코드를 분리(낮은 결합도, Loosely-coupled)하는데 큰 역할을 한다. 언어별로 패키지(package) 관련 문법이나 사용 방법은 다르지만 목적이나 원칙은 거의 동일하다.
패키지 방식에는 대표적으로 레이어 기반 패키지(Package by Layer)와 기능 기반 패키지(Package by Feature) 방식이 있다. 레이어 기반 패키지 방식은 상대적으로 개념을 이해하기 쉽다는 장점이 있으나 높은 응집성과 낮은 결합도를 이끌어내기 어렵다. 하나의 기능 변경을 위해 여러 패키지를 수정해야하며, 이를 위해 많은 이동을 해야한다. 반면 기능 기반 패키지는 패키지의 목적을 달성하기 위한 장점을 충분히 가지고 있기에 많은 부분에서 사용되고 있다.