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