[Clean Architecture] 26장. 메인(Main) 컴포넌트
|
Introduction
- 모든 시스템에는 최소한 하나의 컴포넌트가 존재하고, 이 컴포넌트가 나머지 컴포넌트를 생성하고, 조정하며, 관리함
- 필자는 이 컴포넌트를 메인(Main)이라고 부름
궁극적인 세부사항
- 메인 컴포넌트는 궁극적인 세부사항
- 메인은 시스템의 초기 진입점
- 운영체제를 제외하면 어떤 것도 메인에 의존하지 않음
- 메인은 모든 팩토리와 전략, 그리고 시스템 전반을 담당하는 나머지 기반 설비를 생성한 후, 시스템에서 더 높은 수준을 담당하는 부분으로 제어권을 넘기는 역할을 맡음
- 의존성 주입 프레임워크를 이용해 의존성을 주입하는 일은 바로 이 메인 컴포넌트에서 이뤄져야 함
- 메인에 의존성이 일단 주입되고 나면, 메인은 의존성 주입 프레임워크를 사용하지 않고도 일반적인 방식으로 의존성을 분배할 수 있어야 한다.
- 메인은 지저분한 컴포넌트 중에서도 가장 지저분한 컴포넌트라고 생각
- 메인은 클린 아키텍처에서 가장 바깥 원에 위치하는, 지저분한 저수준 모듈이라는 점
- 메인은 고수준의 시스템에게 넘김
결론
- 메인을 애플리케이션의 플러그인이라고 생각하자
- 메인은 초기 조건과 설정을 구성하고, 외부 자원을 모두 수집한 후, 제어권을 애플리케이션의 고수준 정책으로 넘기는 플러그인
- 메인은 플러그인이므로 메인 컴포넌트를 애플리케이션의 설정별로 하나씩 두도록 하여 둘 이상의 메인 컴포넌트를 만들 수도 있음
- 개발, 테스트, 상용, 배포 국가별, 관할 영역별, 고객별
- 메인을 플러그인 컴포넌트로 여기고, 그래서 아키텍처 경계 바깥에 위치한다고 보면, 설정 관련 문제를 훨씬 쉽게 해결할 수 있음