[Nest.JS] Module 개요, custom module 작성하기

장현수·2023년 7월 19일
0

Nest.JS

목록 보기
7/9

1. Module

Nest 프로젝트에서 Module의 역할은 뭘까?

기본적으로 생성되는 메인 모듈인 app.module 뿐 아니라, 특정한 동작을 수행하는 모듈을 정의할 수도 있다.

  • 모듈에는 controller, Entity, Providers, 그리고 코드들이 있다.
  • Providers는 특정 역할을 수행하는 클래스, providers의 의존성은 nest에 의해서 자동적으로 주입된다.
  • Providers는 다른 모듈로 export되어 사용될 수 있다.
  • 각 모듈은 외부에서 접근할 수 없는 내부적인 요소들을 가진다.

2. Custom Module 만들기

1. 모듈 생성 및 설정

nest generate module 모듈명


명령어로 모듈을 생성하게 되면, 새로운 폴더가 생성되고 그 안에 모듈 파일이 만들어진다.

해당 폴더 안에 관련된 파일들을 다 넣어놓는다.

기존 app.module에 있던 관련 기능들을 해당 모듈 안으로 옮긴다.


2. 모듈 작성하기

1. forRoot()

TypeOrmModule.forRoot()
  • 모듈과 애플리케이션의 루트 모듈 간의 연결을 설정할 때 사용한다.
  • 일반적으로 애플리케이션의 메인 모듈(AppModule)에 한 번만 사용된다.
  • forRoot() 메서드는 TypeOrmModule의 루트 모듈에 사용되어 데이터베이스 연결 및 설정을 구성한다.
@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'postgres',
      host: 'localhost',
      port: 5432,
      username: 'user',
      password: 'password',
      database: 'mydb',
      autoLoadEntities: true,
      synchronize: true,
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

이런 식으로 DB 연결 설정 등을 한다.

src/app.module.ts

@Module({
  imports: [
    TypeOrmModule.forRoot(ormConfig),
    TypeOrmModule.forFeature([Event]),
    EventsModule,
  ]
  ...

내 경우 postgre 연결 설정 config 파일을 따로 작성해서 ormConfig라는 이름으로 import하는 방식으로 작성했다.

2. forFeature()

TypeOrmModule.forFeature()
  • 외부 모듈과 특정 기능 또는 도메인과 관련된 모듈 간의 연결을 설정할 때 사용한다.
  • 일반적으로 forRoot() 메서드와 함께 사용되지 않으며, 하위 모듈에서 해당 모듈을 임포트할 때 사용된다.

예를 들어, 이벤트 관련 기능을 수행하는 모듈인 EventsModule을 만든다고 해보자.

src/events.module.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { EventsController } from './events.controller';

@Module({
  imports: [TypeOrmModule.forFeature([Event])],
  controllers: [EventsController],
})
export class EventsModule {}

(src/event.entity.ts 파일에서 정의한 Event 엔티티가 있다)

imports: [TypeOrmModule.forFeature([Event])]

forFeature() 메소드로 Event 엔티티와 EventsModule을 연결한다.

이렇게 되면, EventsController와 EventService에서 Event 엔티티를 사용할 수 있게 된다.

profile
개같이 발전하자 개발

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

글이 많은 도움이 되었습니다, 감사합니다.

답글 달기