Nest.js IoC 및 DI

김민석·2026년 3월 17일
post-thumbnail

Ioc(Inversion of Control)

개념

Inversion of Control (IoC)는 객체의 생성과 관리 책임을 개발자가 아닌 프레임워크가 맡는 설계 패턴입니다. 즉 애플리케이션의 제어 흐름을 프레임워크가 관리하게 되며 이는 개발자가 직접 제어하는 대신 프레임워크가 애플리케이션의 구성 요소를 관리하고 연결함

목적

  • 결합도 감소: 애플리케이션의 구성 요소 간의 결합도를 낮추어 유지보수성을 높입니다.
  • 유연성 향상: 애플리케이션의 확장성과 유연성을 향상시킵니다.
  • 테스트 용이성: 의존성 주입을 통해 테스트하기 쉬운 구조를 제공합니다.

3. DI (Dependency Injection) 개요

개념

  • *Dependency Injection (DI)**는 IoC의 구현 방법 중 하나로 객체의 의존성을 외부에서 주입하여 객체 간의 결합도를 낮추는 설계 패턴입니다. DI는 객체의 생성과 관리가 아닌 의존성의 주입을 통해 객체를 구성함

유형

  • 생성자 주입: 객체를 생성할 때 의존성을 주입합니다.
  • 세터 주입: 객체의 세터 메서드를 통해 의존성을 주입합니다.
  • 인터페이스 주입: 의존성을 구현체의 메서드를 통해 주입합니다.

Express와 NestJS에서의 IoC 및 DI

Express

IoC 및 DI의 사용

  • Express는 기본적으로 IoC와 DI를 제공하지 않는다. 개발자가 직접 객체를 생성하고 관리해야 하며의존성 관리도 개발자가 직접 수행해야 한다.
  • 예시:
    • 라우터와 컨트롤러를 수동으로 연결해야 하며, 의존성을 직접 관리해야 합니다.
    • 테스트 시, 의존성 주입을 수동으로 처리해야 합니다.

코드 예시

const express = require('express');
const app = express();

class UserService {
  constructor() {
    // 초기화
  }

  getUser() {
    // 사용자 데이터 반환
  }
}

const userService = new UserService();

app.get('/user', (req, res) => {
  res.json(userService.getUser());
});
  • 문제점: 의존성 관리가 어렵고, 의존성을 직접 생성하고 연결해야 합니다.

NestJS

IoC 및 DI의 사용

  • NestJS는 IoC와 DI를 강력하게 지원합니다. 프레임워크가 객체의 생성과 관리, 의존성 주입을 자동으로 처리합니다.
  • 예시:
    • NestJS는 의존성 주입을 통해 컨트롤러와 서비스를 자동으로 연결합니다.
    • @Injectable() 데코레이터를 사용하여 서비스의 의존성을 주입합니다.

코드 예시

import { Injectable, Controller, Get } from '@nestjs/common';

@Injectable()
class UserService {
  getUser() {
    // 사용자 데이터 반환
  }
}

@Controller('user')
class UserController {
  constructor(private readonly userService: UserService) {}

  @Get()
  getUser() {
    return this.userService.getUser();
  }
}
  • 장점:
    • 자동 의존성 주입: NestJS는 UserController에서 UserService의 의존성을 자동으로 주입합니다.
    • 유연성 및 테스트 용이성: 의존성 주입을 통해 구성 요소의 결합도를 낮추어 테스트가 용이합니다.

5. IoC 및 DI의 이점

1. 결합도 감소

  • Express: 직접 객체를 생성하고 관리해야 하므로 결합도가 높아질 수 있습니다.
  • NestJS: 프레임워크가 객체의 의존성을 관리하여 결합도를 낮춥니다.

2. 유연성 향상

  • Express: 유연성을 확보하기 위해 개발자가 직접 의존성을 관리해야 합니다.
  • NestJS: 프레임워크가 의존성 관리를 자동으로 처리하여 유연성을 높입니다.

3. 테스트 용이성

  • Express: 테스트 시 의존성 주입을 수동으로 처리해야 하며, 테스트가 복잡해질 수 있습니다.
  • NestJS: 자동으로 의존성을 주입하여 테스트가 용이하고, Mocking도 쉽습니다.

정리

NestJS가 Ioc와 DI를 지원하기 떄문에 개발 효율성과 유지보수에 도움이 많이 됨. 즉 express 대신 NestJS를 쓰자!

profile
나만의 기록장

0개의 댓글