본문 바로가기

개발 공부/Angular

Angular Standalone

Angular Standalone

Angular 14 버전부터 도입된 standalone 컴포넌트는 기존의 NgModule을 생략하고 개별 컴포넌트에서 직접 의존성을 관리하는 새로운 방식입니다. 기존의 NgModule 구조에서는 여러 컴포넌트를 하나의 모듈로 묶어야 했지만, standalone 컴포넌트는 각 컴포넌트를 독립적으로 작성해 관리할 수 있게 만들어 줍니다.

이 접근 방식은 Angular 애플리케이션의 모듈 관리와 구조를 더욱 유연하게 만들어 주며, 특히 특정 컴포넌트의 독립성 및 테스트 용이성을 크게 개선합니다.

 

Standalone 컴포넌트의 필요성

Angular는 오랜 기간 동안 모듈(NgModule) 중심의 아키텍처를 사용해 왔습니다.

이 구조는 대규모 애플리케이션에서 컴포넌트와 서비스의 의존성을 체계적으로 관리할 수 있도록 해줍니다.

하지만 NgModule의 복잡성은 경우에 따라 개발 생산성을 저해할 수 있었습니다.

Standalone 컴포넌트는 이러한 문제점을 해결하고 컴포넌트의 독립적 사용을 보다 쉽게 하기 위해 도입되었습니다.

 

Standalone 컴포넌트의 장점

(1) 코드 간소화와 유지보수성 향상
Standalone 컴포넌트를 사용하면 개별 컴포넌트가 자체적으로 의존성을 관리할 수 있어, 모듈을 작성하고 가져오는 과정이 줄어듭니다. 이를 통해 코드가 간결해지고 유지보수성이 높아집니다.

(2) 더 쉬워진 테스트
컴포넌트 단위로 독립적인 관리가 가능하므로, 테스트 시에도 모듈 설정이나 복잡한 의존성 주입 설정 없이 컴포넌트만 집중적으로 테스트할 수 있습니다.

(3) 향상된 성능
모듈을 사용하는 경우 모듈 내의 모든 컴포넌트가 한 번에 로드될 수 있지만, Standalone 방식에서는 필요한 컴포넌트만 개별적으로 불러올 수 있어 초기 로딩 속도와 성능이 개선됩니다.

 

Standalone 컴포넌트의 단점

(1) 기존 NgModule 구조와의 호환성 이슈
기존 NgModule 방식으로 작성된 코드와 Standalone 컴포넌트를 함께 사용할 경우 호환성 문제가 발생할 수 있습니다. 이를 해결하기 위해서는 Angular 전반적인 구조와 설정을 변경해야 할 수도 있습니다.

(2) 프로젝트 구조의 일관성 문제
대규모 프로젝트의 경우 Standalone과 NgModule이 혼재되면 일관성을 잃을 수 있어, 전체 프로젝트의 구조를 처음부터 결정해야 할 필요가 있습니다.

 


Standalone 컴포넌트 예제

import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';

@Component({
  selector: 'app-standalone-example',
  standalone: true,
  imports: [CommonModule],
  template: `
    <div>
      <h1>Standalone 컴포넌트 예제</h1>
      <p>이 컴포넌트는 모듈 없이 동작합니다.</p>
    </div>
  `
})
export class StandaloneExampleComponent {}

 

standalone: true 옵션이 추가되어 있고, imports 배열을 통해 필요한 의존성을 직접 관리할 수 있습니다.

CommonModule을 직접 가져와서 컴포넌트 내에서 사용 가능하도록 설정한 것을 확인할 수 있습니다.

 

Standalone 컴포넌트를 라우팅에 사용하는 방법

Standalone 컴포넌트는 Angular 라우터와도 쉽게 통합할 수 있습니다.

import { Routes } from '@angular/router';
import { StandaloneExampleComponent } from './standalone-example.component';

const routes: Routes = [
  {
    path: 'standalone',
    component: StandaloneExampleComponent,
  },
];

 


기존 NgModule 방식과의 비교

기존 방식

@NgModule({
  declarations: [SomeComponent],
  imports: [CommonModule],
  exports: [SomeComponent]
})
export class SomeModule {}

 

Standalone 방식

@Component({
  standalone: true,
  imports: [CommonModule],
  template: `<p>Standalone Component</p>`
})
export class SomeComponent {}

 

 

기존 방식은 SomeComponent를 SomeModule에 포함시켜야 했습니다.

Standalone 컴포넌트 방식에서는 SomeComponent가 모듈에 의존하지 않으므로, 필요한 의존성만 컴포넌트에 선언하여 사용할 수 있습니다.

 

결론

Standalone 컴포넌트는 특정 상황에서 매우 유용하지만, 기존 Angular 모듈 시스템과 혼합하여 사용하는 데는 신중한 설계가 필요합니다. 특히 큰 규모의 프로젝트에서는 각 컴포넌트가 NgModule을 사용할지 Standalone으로 작성할지를 미리 결정하고, 일관성 있게 사용하는 것이 좋습니다.

'개발 공부 > Angular' 카테고리의 다른 글

Angular 컴포넌트 통신(@Input, @Output)  (2) 2024.11.05
Angular LifeCycle  (1) 2024.11.02
Angular 란  (0) 2024.07.21
Angular / @ngrx / store  (0) 2024.07.19
Angular / RxJS  (0) 2024.07.16