ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

๐Ÿงฉ NestJS Module ์™„์ „ ์ดํ•ด – ๊ตฌ์กฐ์  ๋ฐฑ์—”๋“œ ์„ค๊ณ„์˜ ์ถœ๋ฐœ์ 


NestJS์—์„œ **Module(๋ชจ๋“ˆ)**์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ๊ตฌ์„ฑํ•˜๋Š” ํ•ต์‹ฌ ๊ตฌ์กฐ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.
NestJS ๊ณต์‹ ๋ฌธ์„œ์˜ Modules๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๊ธ€ ๋ฒˆ์—ญ๊ณผ ํ•จ๊ป˜, ์‹ค๋ฌด์— ํ•„์š”ํ•œ ๊ตฌ์กฐ ์„ค๊ณ„ ๋ฐฉ๋ฒ•๊นŒ์ง€ ํ•ด์„คํ•ฉ๋‹ˆ๋‹ค.

NestJS์—์„œ ๋ชจ๋“  ๊ฒƒ์€ ๋ชจ๋“ˆ๋กœ ์‹œ์ž‘๋˜๊ณ , ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋ ค๋ฉด ๋ชจ๋“ˆ ์„ค๊ณ„๋ถ€ํ„ฐ ์ž˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


โœ… NestJS์—์„œ Module์ด๋ž€?

NestJS๋Š” ๊ตฌ์กฐ์  ๋ฐฑ์—”๋“œ ์„ค๊ณ„๋ฅผ ์ง€ํ–ฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ ๊ธฐ๋Šฅ๋ณ„๋กœ Controller, Service, DTO ๋“ฑ์„ ๋ฌถ์–ด ๋ชจ๋“ˆ๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  Nest ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ **์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ๋ฃจํŠธ ๋ชจ๋“ˆ(AppModule)**์„ ํฌํ•จํ•ด์•ผ ํ•˜๋ฉฐ, ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์€ **์„œ๋ธŒ ๋ชจ๋“ˆ(SubModule)**๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


1๏ธโƒฃ ๊ธฐ๋ณธ Module ๊ตฌ์กฐ

import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';

@Module({
  controllers: [CatsController],
  providers: [CatsService],
})
export class CatsModule {}

ํ•ต์‹ฌ ํฌ์ธํŠธ:

  • controllers: ๋ผ์šฐํŒ…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค
  • providers: ์„œ๋น„์Šค, ํ—ฌํผ, ์œ ํ‹ธ ๋“ฑ ์ฃผ์ž… ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด
  • imports: ๋‹ค๋ฅธ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ
  • exports: ์™ธ๋ถ€์— ๋…ธ์ถœํ•  provider/service

2๏ธโƒฃ AppModule ๊ตฌ์„ฑ ์˜ˆ์‹œ

๋ฐ˜์‘ํ˜•
import { Module } from '@nestjs/common';
import { CatsModule } from './cats/cats.module';

@Module({
  imports: [CatsModule],
})
export class AppModule {}

๋ชจ๋“  ๊ธฐ๋Šฅ์€ AppModule์—์„œ ๊ฐ€์ ธ์™€์„œ ์กฐ๋ฆฝํ•ฉ๋‹ˆ๋‹ค.
์ฆ‰, AppModule์€ ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ ์กฐ๋ฆฝ๊ณต์žฅ ๊ฐ™์€ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“ฆ CLI๋กœ ๋ชจ๋“ˆ ์ƒ์„ฑํ•˜๊ธฐ

nest g module cats

Nest CLI๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™์œผ๋กœ ํด๋”์™€ ํŒŒ์ผ์ด ์ •๋ฆฌ๋œ ์ƒํƒœ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

src/
  cats/
    cats.module.ts โœ…
    cats.controller.ts
    cats.service.ts

๊ตฌ์กฐํ™”๋œ ๋ชจ๋“ˆ ๋‹จ์œ„ ๊ฐœ๋ฐœ์„ ๊ฐ•์ œํ•˜๋ฏ€๋กœ ๋Œ€๊ทœ๋ชจ ํŒ€ ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ•๋ ฅํ•œ ์œ ์ง€๋ณด์ˆ˜ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“บ ๊ด‘๊ณ 

์ด ๊ตฌ๊ฐ„์€ ๋ชจ๋“ˆ ๊ฐœ๋…์ด ์™„์ „ํžˆ ์ •๋ฆฌ๋˜๋Š” ์‹œ์ ์œผ๋กœ, ๋ธ”๋กœ๊ทธ์— ์• ๋“œ์„ผ์Šค ๊ด‘๊ณ ๋ฅผ ์‚ฝ์ž…ํ•˜๋ฉด ํด๋ฆญ๋ฅ ์ด ๋†’์Šต๋‹ˆ๋‹ค.

<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-XXXX"
     data-ad-slot="YYYY"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>

3๏ธโƒฃ ๋ชจ๋“ˆ ๊ฐ„ ์˜์กด์„ฑ ์—ฐ๊ฒฐ – imports & exports

๋ชจ๋“ˆ์€ ์ž์ฒด์ ์œผ๋กœ ๊ฒฉ๋ฆฌ๋˜์–ด ์žˆ์ง€๋งŒ, ๋‹ค๋ฅธ ๋ชจ๋“ˆ๊ณผ ์—ฐ๊ฒฐํ•ด์•ผ ํ•  ๋•Œ๋Š” imports์™€ exports๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

@Module({
  providers: [CatsService],
  exports: [CatsService],
})
export class CatsModule {}
@Module({
  imports: [CatsModule],
})
export class DogsModule {}
  • CatsModule์€ CatsService๋ฅผ ์™ธ๋ถ€์— exports ํ•˜์˜€๊ณ 
  • DogsModule์€ CatsModule์„ imports ํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

4๏ธโƒฃ Global Module – ์ „์—ญ ๋ชจ๋“ˆ ๋งŒ๋“ค๊ธฐ

๋ชจ๋“  ๋ชจ๋“ˆ์— ๋™์ผํ•œ ์„œ๋น„์Šค๋ฅผ ์ฃผ์ž…ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด @Global() ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

@Global()
@Module({
  providers: [ConfigService],
  exports: [ConfigService],
})
export class ConfigModule {}

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ConfigService๋ฅผ ๋ชจ๋“  ๋ชจ๋“ˆ์—์„œ imports ์—†์ด๋„ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์˜: ๋‚จ์šฉํ•˜๋ฉด ๋ชจ๋“ˆ ๊ฐ„ ์˜์กด์„ฑ์ด ์• ๋งคํ•ด์ ธ์„œ ํ…Œ์ŠคํŠธ์™€ ์œ ์ง€๋ณด์ˆ˜์— ์–ด๋ ค์›€์ด ์ƒ๊น๋‹ˆ๋‹ค.


5๏ธโƒฃ Dynamic Module – ๋™์ ์œผ๋กœ ๊ตฌ์„ฑ๋˜๋Š” ๋ชจ๋“ˆ

@Module({})
export class ConfigModule {
  static register(options: ConfigOptions): DynamicModule {
    return {
      module: ConfigModule,
      providers: [{ provide: 'CONFIG_OPTIONS', useValue: options }],
      exports: ['CONFIG_OPTIONS'],
    };
  }
}

register()๋ฅผ ํ†ตํ•ด ๋Ÿฐํƒ€์ž„์— ๋ชจ๋“ˆ ์„ค์ • ๊ฐ’์„ ์™ธ๋ถ€์—์„œ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐํ•œ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์‹ค๋ฌด์—์„œ DatabaseModule, CacheModule, MailModule ๋“ฑ์„ ๊ตฌ์„ฑํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.


โœ… ์‹ค๋ฌด ์„ค๊ณ„ ์ „๋žต: ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ๋ชจ๋“ˆ์„ ๋‚˜๋ˆ„์ž

๋ชจ๋“ˆ๋ช… ํฌํ•จ ๋‚ด์šฉ

UserModule user.controller.ts, user.service.ts, user.repository.ts
AuthModule ๋กœ๊ทธ์ธ, ์ธ์ฆ ๊ด€๋ จ ๋กœ์ง ๋ฐ Strategy
PostModule ๊ฒŒ์‹œ๋ฌผ ์ž‘์„ฑ/์กฐํšŒ ์„œ๋น„์Šค
CommonModule ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์œ ํ‹ธ, DTO, ํ•„ํ„ฐ, ์ธํ„ฐ์…‰ํ„ฐ ๋“ฑ

ํ•˜๋‚˜์˜ ํด๋”์— ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ๋ชฐ์•„๋„ฃ๋Š” ์„ค๊ณ„๋Š” ์žฅ๊ธฐ์ ์œผ๋กœ ํฐ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์„ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿง  ๋งˆ๋ฌด๋ฆฌ ์ •๋ฆฌ

๊ฐœ๋… ์„ค๋ช…

@Module ๋ชจ๋“ˆ ์ •์˜ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ
controllers HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌ
providers ์„œ๋น„์Šค, ํ—ฌํผ ๋“ฑ์„ ์ •์˜
imports ๋‹ค๋ฅธ ๋ชจ๋“ˆ์„ ์—ฐ๊ฒฐ
exports ์™ธ๋ถ€ ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉํ•  provider ๊ณต๊ฐœ
@Global() ์ „์—ญ์—์„œ ํ•œ ๋ฒˆ๋งŒ ์„ค์ •ํ•˜์—ฌ ์‚ฌ์šฉ
register() ๋™์  ๊ตฌ์„ฑ ๋ชจ๋“ˆ ํŒจํ„ด

 

NestJS Module,NestJS ๋ชจ๋“ˆ ๊ตฌ์กฐ,NestJS imports exports,NestJS ๊ธ€๋กœ๋ฒŒ ๋ชจ๋“ˆ,NestJS ์„ค๊ณ„,NestJS register,Dynamic Module,NestJS ๊ตฌ์กฐํ™”,Node.js ๋ฐฑ์—”๋“œ,์„œ๋น„์Šค ๋ถ„๋ฆฌ ์„ค๊ณ„

 

โ€ป ์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค.
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/07   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•