본문 바로가기
프로그래밍/Angular

앵귤러 기초(Angular basic) 30. 앵귤러 모듈(Angular Module)

by 신나요 2022. 2. 10.

앵귤러에서 가장 중요한 개념 중 하나인 모듈에 대해 알아보도록 하겠습니다.

 

이번 포스트는 아래 내용을 다루고 있습니다.

  1. 앵귤러 모듈의 역할
  2. 애플리케이션의 구성

앵귤러 모듈이란

앵귤러 모듈은 NgModule 데코레이터가 있는 클래스입니다.

지난 포스트에서 계속 다뤘던 AppModule 아래와 같습니다.

앵귤러 모듈의 역할

  1. 애플리케이션의 일부를 구성하고 이를 응집력 있는 기능 블록 정리해 주고 외부 라이브러리 기능 통해 애플리케이션을 확장하게 합니다.
  2. 앵귤러 모듈은 컴포넌트 템플릿에서 디렉티브와 파이프를 위한 실행 환경을 제공합니다.
  3. 다른 모듈로부터 클래스를 선택적으로 취합하여 통합 모듈로 다시 내보낼 수 있게 합니다.
  4. 애플리케이션이 시작될 때 빠르게 로드되거나 라우터에 의해 비동기적으로 느리게 로드(lazy load)를 가능하게 해 줍니다.

애플리케이션의 구성

앵귤러 모듈은 애플리케이션을 어떻게 구성할까요?

앵귤러 모듈

Angular 모듈은 관리하는 각 구성요소, 지시문 및 파이프를 선언(Declarations)합니다. 작성하는 모든 컴포넌트 디렉티브와 파이프는 하나의 모듈에 속해 있어야 합니다. 앵귤러 모듈은 루트 애플리케이션 컴포넌트를 부트스트랩하여 첫 번째 템플릿을 표시하는데 필요한 컴포넌트를 정의합니다.

앵귤러 모듈은 컴포넌트, 디렉티브, 파이프 및 기타 Angular 모듈들을 내보낼 수 있는데, 그러면 다른 모듈에서 export 한 부품을 다시 가져와서(imports) 사용할 수 있습니다.

 

Angular Module를 박스라고 생각해보세요.

우선 컴포넌트인 AppComponent, MovieListComponent, MovieDetailComponet, WelcomeComponent 박스에 선언합니다.

해당 컴포넌트의 템플릿에 기능이 필요한 경우 해당 기능도 이 상자 내에 정의해야 합니다.

AppComponent의 템플릿은 routerLink를 사용하여 기본 메뉴에 대한 라우팅을 설정하고 router-outlet 디렉티브를 포함 하고 있으므로, 이 상자에는 RouterModule에 정의된 라우팅 지시문, 라우터 서비스 및 라우터가 필요합니다.

MovieListComponent 템플릿은 ngModel을 사용하므로 상자에 FormsModule, ngFor ngIf를 사용하므로 상자에 BrowserModule, 커스텀 파이프를 사용하므로 상자에도 ConvertPipe가 필요합니다. 또한 MovieListComponent 템플릿은 <app-star-score> 디렉티브 사용하므로 상자 안에 각 구성 요소 템플릿에 필요한 모든 것이 포함되어 있어야 합니다. 

 

Angular 모듈은 모듈에 속한 각 구성 요소에 대해 템플릿을 처리하고 실행 있는 환경을 제공합니다. 다시 말하면 컴파일러가 HTML에 넣은 특별한 Angular 구문을 찾아 실행할 수 있는 방법을 제공합니다.

애플리케이션이 모두 하나의 모듈에 있다면 템플릿의 실행 환경을 생각할 필요가 없지만, 애플리케이션을 여러 앵귤러 모듈로 분할 할 때는 이를 반드시 염두해 둬야 합니다.

 


이번 포스트는 여기까지 입니다.

다음 포스트에서는 AppModule을 여러 모듈로 리팩터링 하여 코드 구성을 개선하겠습니다.

댓글