1. MVC 패턴
MVC 패턴은 Model-View-Controller 패턴으로, 애플리케이션의 로직을 세 가지 주요 부분으로 나누어 구조화하는 디자인 패턴입니다.
- Model: 애플리케이션의 데이터와 비즈니스 로직을 관리합니다.
- View: 사용자 인터페이스 요소를 표시하고 사용자 입력을 받습니다.
- Controller: 사용자 입력을 처리하고, 모델과 뷰를 업데이트합니다.
2. Node.js에서의 구조
Node.js에서는 다음과 같은 구조로 MVC 패턴을 구현할 수 있습니다.
- index.js: 애플리케이션의 진입점으로, 서버를 설정하고 필요한 모듈을 로드합니다.
- Controller: 사용자 요청을 처리하고, 모델과 뷰를 업데이트합니다.
- Service: 비즈니스 로직을 처리합니다.
3. 의존성 주입(DI)와 제어의 역전(IoC)
- DI (Dependency Injection): 객체가 직접 자신의 의존성을 생성하지 않고 외부에서 주입받는 방법입니다. 이를 통해 강한 결합을 느슨한 결합으로 변경할 수 있습니다.
- IoC (Inversion of Control): 프로그램의 제어 흐름을 외부에서 관리하는 것을 말합니다. DI는 IoC의 구현 방법 중 하나입니다.
4. 싱글톤 패턴
- 싱글톤 패턴: 특정 클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 디자인 패턴입니다.
- DI를 사용하면, 필요한 인스턴스를 한 번만 생성하고 이를 재사용할 수 있어 싱글톤 패턴을 구현할 수 있습니다.
5. 강한 결합 vs. 느슨한 결합
- 강한 결합 (Tight Coupling): 클래스가 다른 클래스의 구체적인 구현에 강하게 의존하고 있는 상태.
- 느슨한 결합 (Loose Coupling): 클래스가 다른 클래스의 구체적인 구현이 아닌 인터페이스나 추상 클래스에 의존하는 상태.
index(moduel) -> controller -> service
controller에서 new로 service에 있는 로직을 쓸때마다 불러왔는데 이걸 index(module)에서 service new로 생성한 후 controller에 클래스에 constructor를 사용해 service를 받아옴(이걸 의존성 주입이라고한다) 이역할을 nest.js의 기능을통해 알아서 DI해주는데 Ioc(제어역전)라고 한다.
6. Nest.js에서의 DI와 IoC
Nest.js는 DI와 IoC를 기본으로 지원하여 코드의 유지보수성과 테스트 용이성을 높입니다.
- 모듈 (Module): 애플리케이션의 각 부분을 그룹화하는 데 사용됩니다.
- 서비스 (Service): 비즈니스 로직을 처리합니다.
- 컨트롤러 (Controller): 요청을 처리하고 응답을 반환합니다.
예시
// app.module.ts
import { Module } from '@nestjs/common';
import { ProductService } from './product.service';
import { ProductController } from './product.controller';
@Module({
controllers: [ProductController],
providers: [ProductService],
})
export class AppModule {}
// product.service.ts
import { Injectable } from '@nestjs/common';
@Injectable()
export class ProductService {
getAllProducts() {
return [{ id: 1, name: 'Product 1' }];
}
}
// product.controller.ts
import { Controller, Get } from '@nestjs/common';
import { ProductService } from './product.service';
@Controller('products')
export class ProductController {
constructor(private readonly productService: ProductService) {}
@Get()
getAllProducts() {
return this.productService.getAllProducts();
}
}
6요약
- MVC 패턴: Node.js와 Nest.js에서의 구현 방법을 이해하고, 각각의 역할을 명확히 구분하여 작성.
- DI와 IoC: 의존성 주입을 통해 강한 결합을 느슨한 결합으로 변경하고, 제어의 역전을 통해 코드를 더욱 유연하게 관리.
- 싱글톤 패턴: DI를 활용하여 객체를 재사용하고, 자원의 낭비를 줄이며 성능을 향상.
'nest.js' 카테고리의 다른 글
Typescript-decorator (2024.05.29) (0) | 2024.05.29 |
---|---|
Typescript 란? (2024.05.29) (0) | 2024.05.29 |
node.js(상속, 전략패턴)(2024.05.20) (0) | 2024.05.20 |
node.js(상속, 오버라이딩, super())(2024.05.20) (0) | 2024.05.20 |
스크랩핑, 크롤링, 브라우저api(2024.05.12) (0) | 2024.05.14 |