Dynamic modules
Dynamic modules
λͺ¨λ μ±ν°λ Nest λͺ¨λμ κΈ°λ³Έ μ¬νμ λ€λ£¨κ³ λμ λͺ¨λμ λν κ°λ΅ν μκ°λ₯Ό ν¬ν¨ν©λλ€. μ΄ μ₯μ λ€μ΄λλ―Ή λͺ¨λμ μ£Όμ λ₯Ό νμ₯ν©λλ€. μλ£λλ©΄ μμ μ΄ λ¬΄μμΈμ§, μΈμ μ΄λ»κ² μ¬μ©νλμ§ μ νμ ν΄μΌν©λλ€.
Introduction
μ€λͺ
μμ κ°μ μΉμ
μμλ λλΆλΆμ μμ© νλ‘κ·Έλ¨ μ½λ μμ λ μΌλ° λλ static λͺ¨λμ μ¬μ©ν©λλ€. λͺ¨λμ νλ‘ λ°μ΄λ λ° μ»¨νΈλ‘€λ¬μ κ°μ΄ μ 체 μμ© νλ‘κ·Έλ¨μ λͺ¨λ μ λΆλΆμΌλ‘ ꡬμ±λλ κ΅¬μ± μμ κ·Έλ£Ήμ μ μν©λλ€. μ΄λ¬ν κ΅¬μ± μμμ λν μ€ν 컨ν
μ€νΈ λλ λ²μλ₯Ό μ 곡ν©λλ€. μλ₯Ό λ€μ΄, λͺ¨λμ μ μ λ 곡κΈμλ λ΄λ³΄λΌ νμμμ΄ λͺ¨λμ λ€λ₯Έ ꡬμ±μμκ² νμλ©λλ€. 곡κΈμκ° λͺ¨λ μΈλΆμμ λ³Ό μ μμ΄μΌνλ κ²½μ°, λ¨Όμ νΈμ€νΈ λͺ¨λμμ _exported_
λ₯Ό μ¬μ©ν λ€μ μλΉ λͺ¨λλ‘ _imported_
ν©λλ€.
μ΅μν μλ₯Ό μ΄ν΄ λ³΄κ² μ΅λλ€.
λ¨Όμ UsersService
λ₯Ό μ 곡νκ³ λ΄λ³΄λ΄λ UsersModule
μ μ μν©λλ€. UsersModule
μ UsersService
μ host λͺ¨λμ
λλ€.
λ€μμΌλ‘ UserModule
μ κ°μ Έ μμ UserModule
μ λ΄ λ³΄λΈ κ³΅κΈμλ₯Ό AuthModule
λ΄μμ μ¬μ©ν μ μλλ‘νλ AuthModule
μ μ μν©λλ€.
μ΄λ¬ν ꡬ문μ ν΅ν΄ μλ₯Ό λ€μ΄ AuthModule
μμ νΈμ€ν
λλ AuthService
μ UserService
λ₯Ό μ½μ
ν μ μμ΅λλ€.
μ΄κ²μ μ μ (static) λͺ¨λ λ°μΈλ©μ΄λΌκ³ ν©λλ€. Nestκ° λͺ¨λμ μλ‘ μ°κ²°νλ λ° νμν λͺ¨λ μ 보λ μ΄λ―Έ νΈμ€νΈ λ° μλΉ λͺ¨λμμ μ μΈλμμ΅λλ€. μ΄ κ³Όμ μμ μΌμ΄λλ μΌμ νμ΄λ³΄κ² μ΅λλ€. NestλAuthModule
λ΄μμUsersService
λ₯Ό λ€μκ³Ό κ°μ΄ μ¬μ© κ°λ₯νκ²ν©λλ€.
UsersModule
μμ²΄κ° μλΉνλ λ€λ₯Έ λͺ¨λμ μ μ΄μ μΌλ‘ κ°μ Έμ€κ³ μ’ μμ±μ μ μ΄μ μΌλ‘ ν΄κ²°νλ κ²μ ν¬ν¨νμ¬UsersModule
μΈμ€ν΄μ€ν (Custom provider μ°Έμ‘°)AuthModule
μ μΈμ€ν΄μ€ννκ³UsersModule
μ λ΄ λ³΄λΈ κ³΅κΈμλ₯ΌAuthModule
μ κ΅¬μ± μμμμ μ¬μ©ν μ μλλ‘ν©λλ€ (AuthModule
μμ μ μΈ λ κ²μ²λΌ).AuthService
μUsersService
μ μΈμ€ν΄μ€λ₯Ό μ£Όμ ν©λλ€.
Dynamic module use case
μ μ λͺ¨λ λ°μΈλ©μ μ¬μ©νλ©΄ μλΉ λͺ¨λμ΄ νΈμ€νΈ λͺ¨λμ 곡κΈμκ° κ΅¬μ±λλ λ°©μμ μν₯μ μ€ μμλ κΈ°νκ° μμ΅λλ€. μ΄κ²μ΄ μ μ€μνκ°? λ€λ₯Έ μ¬μ© μ¬λ‘μμ λ€λ₯΄κ² μλν΄μΌνλ λ²μ© λͺ¨λμ΄μλ κ²½μ°λ₯Ό κ³ λ €νμμμ€. μ΄λ λ§μ μμ€ν μμ "νλ¬κ·ΈμΈ"κ°λ κ³Ό μ μ¬νλ©° μΌλ° κΈ°λ₯μ μλΉμκ° μ¬μ©νκΈ° μ μ μΌλΆ ꡬμ±μ΄ νμν©λλ€.
Nestμ μ’μ μλ κ΅¬μ± λͺ¨λμ λλ€. λ§μ μμ© νλ‘κ·Έλ¨μ κ΅¬μ± λͺ¨λμ μ¬μ©νμ¬ κ΅¬μ± μΈλΆ μ 보λ₯Ό μΈλΆννλ κ²μ΄ μ μ©νλ€λ κ²μ μκ³ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ κ°λ°μλ₯Όμν κ°λ° λ°μ΄ν°λ² μ΄μ€, μ€λΉ / ν μ€νΈ νκ²½μμν μ€λΉ λ°μ΄ν°λ² μ΄μ€ λ± λ€μν λ°°ν¬ νκ²½μμ μμ© νλ‘κ·Έλ¨ μ€μ μ μ½κ² λ³κ²½ν μ μμ΅λλ€. κ΅¬μ± λ§€κ° λ³μ κ΄λ¦¬λ₯Ό κ΅¬μ± λͺ¨λ, μμ© νλ‘κ·Έλ¨ μμ€ μ½λμ μμν¨μΌλ‘μ¨ κ΅¬μ± λ§€κ° λ³μμ λ 립μ μΌλ‘ μ μ§λ©λλ€.
λ¬Έμ λ κ΅¬μ± λͺ¨λ μμ²΄κ° μΌλ° ( "νλ¬κ·ΈμΈ"κ³Ό μ μ¬νκΈ° λλ¬Έμ) μλΉ λͺ¨λμ λ°λΌ μ¬μ©μ μ μν΄μΌνλ€λ κ²μ λλ€. μ¬κΈ°μμ dynamic modulesμ΄ μμλ©λλ€. λμ λͺ¨λ κΈ°λ₯μ μ¬μ©νμ¬ μλΉ λͺ¨λμ΄ APIλ₯Ό μ¬μ©νμ¬ κ΅¬μ± λͺ¨λμ κ°μ Έμ¬ λ μ¬μ©μ μ μνλ λ°©λ²μ μ μ΄ ν μ μλλ‘ κ΅¬μ± λͺ¨λμ λμ μΌλ‘ λ§λ€ μ μμ΅λλ€.
λ€μ λ§ν΄, λμ λͺ¨λμ ν λͺ¨λμ λ€λ₯Έ λͺ¨λλ‘ κ°μ Έμ€κ³ , μ§κΈκΉμ§ λ³Έ μ μ λ°μΈλ©μ μ¬μ©νλ κ²κ³Ό λ°λλ‘ λͺ¨λμ κ°μ Έμ¬ λ ν΄λΉ λͺ¨λμ μμ±κ³Ό λμμ μ¬μ©μ μ μνκΈ°μν APIλ₯Ό μ 곡ν©λλ€.
Config module example
μ΄ μΉμ μμλ configuration chapterμ μμ μ½λ κΈ°λ³Έ λ²μ μ μ¬μ©ν©λλ€. μ΄ μ₯μ λμμ μμ± λ λ²μ μ μμ λ‘ μ¬μ©ν μ μμ΅λλ€.
μ°λ¦¬μ μꡬ μ¬νμ ConfigModule
μ΄ options
κ°μ²΄λ₯Ό λ°μ λ€μ¬ 컀μ€ν°λ§μ΄μ¦ νλλ‘ νλ κ²μ
λλ€. μ§μνλ €λ κΈ°λ₯μ λ€μκ³Ό κ°μ΅λλ€. κΈ°λ³Έ μνμ .env
νμΌμ μμΉλ₯Ό νλ‘μ νΈ λ£¨νΈ ν΄λμ νλ μ½λ©ν©λλ€. μ νν ν΄λμμ .env
νμΌμ κ΄λ¦¬ ν μ μλλ‘ κ΅¬μ± κ°λ₯νκ² λ§λ€κ³ μΆλ€κ³ κ°μ ν΄ λ΄
μλ€. μλ₯Ό λ€μ΄, λ€μν .env
νμΌμ config
λΌλ νλ‘μ νΈ λ£¨νΈ μλμ ν΄λ (μ: src
μ νμ ν΄λ)μ μ μ₯νλ€κ³ κ°μ ν΄λ³΄μμμ€. λ€λ₯Έ νλ‘μ νΈμμ ConfigModule
μ μ¬μ©ν λ λ€λ₯Έ ν΄λλ₯Ό μ νν μ μμ΅λλ€.
λμ λͺ¨λμ κ°μ Έ μ€λ λͺ¨λμ λ§€κ° λ³μλ₯Ό μ λ¬νμ¬ ν΄λΉ λμμ λ³κ²½ν μμλ κΈ°λ₯μ μ 곡ν©λλ€. μ΄κ²μ΄ μ΄λ»κ² μλνλμ§ λ΄
μλ€. μλΉ λͺ¨λμ κ΄μ μμ μ΄κ²μ΄ μ΄λ»κ² 보μΌμ§μ λν μ΅μ’
λͺ©νμμ μμνμ¬ κ±°κΎΈλ‘ μμ
νλ©΄ λμμ΄λ©λλ€. λ¨Όμ , ConfigModule
μ κ°μ Έ μ€λ _statically_
κ°μ Έ μ€κΈ° (μ¦, κ°μ Έμ¨ λͺ¨λμ λμμ μν₯μ μ€ μμλ μ κ·Ό λ°©λ²)λ₯Ό λΉ λ₯΄κ² κ²ν ν΄ λ³΄κ² μ΅λλ€. @Module()
λ°μ½λ μ΄ν°μ imports
λ°°μ΄μμ£Όμλ₯Ό κΈ°μΈμ΄μμμ€ :
κ΅¬μ± κ°μ²΄λ₯Ό μ λ¬νλ _dynamic module_
importκ° μ΄λ»κ² 보μΌμ§ μκ°ν΄ λ΄
μλ€. μ΄ λ μμ μ imports
λ°°μ΄μ μ°¨μ΄μ μ λΉκ΅νμμμ€.
μμ λμ μμμ λ¬΄μ¨ μΌμ΄ μΌμ΄λλμ§ λ΄ μλ€. μμ§μ΄λ λΆλΆμ 무μμ λκΉ?
ConfigModule
μ μΌλ° ν΄λμ€μ΄λ―λ‘register()
λΌλ μ μ λ©μλκ° μμ΄μΌ ν¨μ μ μΆν μ μμ΅λλ€. μ°λ¦¬λ ν΄λμ€μ μΈμ€ν΄μ€κ° μλλΌConfigModule
ν΄λμ€μμ νΈμΆνκΈ° λλ¬Έμ μ μ μμ μκ³ μμ΅λλ€. μ°Έκ³ : 곧 λ§λ€ μ΄ λ©μλλ μμμ μ΄λ¦μ κ°μ§ μ μμ§λ§, κ΄λ‘ μ μΌλ‘forRoot()
λλregister()
λΌκ³ λΆλ¦ λλ€.register()
λ©μλλ μ°λ¦¬μ μν΄ μ μλλ―λ‘ μνλ μ λ ₯ μΈμλ₯Ό λ°μ λ€μΌ μ μμ΅λλ€. μ΄ κ²½μ° μ μ ν μμ±μ κ°μ§ κ°λ¨νoptions
κ°μ²΄λ₯Ό μ¬μ©ν©λλ€. μ΄κ²μ΄ μΌλ°μ μΈ κ²½μ°μ λλ€.register()
λ©μλλ λ¦¬ν΄ κ°μ΄ μ΅μνimports
리μ€νΈμ λνλκΈ° λλ¬Έμmodule
κ³Ό κ°μ κ²μ λ°νν΄μΌνλ€κ³ μ μΆ ν μ μμ΅λλ€. μ¬κΈ°μλ λͺ¨λ리μ€νΈκ° ν¬ν¨λμ΄ μμ΅λλ€.
μ¬μ€, register()
λ©μλκ° λ¦¬ν΄ ν κ²μ DynamicModule
μ
λλ€. λμ λͺ¨λμ μ μ λͺ¨λκ³Ό λμΌν μ νν μμ±κ³Ό module
μ΄λΌλ μΆκ° μμ±μ κ°μ§ λ°νμμ μμ±λ λͺ¨λμ μ§λμ§ μμ΅λλ€. λ°μ½λ μ΄ν°μ μ λ¬λ λͺ¨λ μ΅μ
μμ£Όμλ₯Ό κΈ°μΈμ΄λ©΄μ μν μ μ λͺ¨λ μ μΈμ λΉ λ₯΄κ² κ²ν ν΄ λ³΄κ² μ΅λλ€.
λ€μ΄λλ―Ή λͺ¨λμ μ νν κ°μ μΈν°νμ΄μ€λ₯Ό κ°μ§ κ°μ²΄μ module
μ΄λΌλ μΆκ° μμ±μ λ°νν΄μΌν©λλ€. module
μμ±μ λͺ¨λ μ΄λ¦μΌλ‘ μ¬μ©λλ©° μλ μμ μ κ°μ΄ λͺ¨λμ ν΄λμ€ μ΄λ¦κ³Ό λμΌν΄μΌν©λλ€.
info ννΈ λμ λͺ¨λμ κ²½μ° λͺ¨λ μ΅μ κ°μ²΄μ λͺ¨λ μμ±μ μ ν μ¬νμ λλ€ except
module
.
μ μ register()
λ©μλλ μ΄λ»μ΅λκΉ? μ΄μ κ·Έ μν μ DynamicModule
μΈν°νμ΄μ€λ₯Ό κ°μ§ κ°μ²΄λ₯Ό λ°ννλ κ²μμ μ μ μμ΅λλ€. μ°λ¦¬κ° κ·Έκ²μ νΈμΆ ν λ, μ°λ¦¬λ μ μ ν΄λμ€μμ λͺ¨λ ν΄λμ€ μ΄λ¦μ λμ΄ν¨μΌλ‘μ¨ κ·Έλ κ²νλ κ²κ³Ό μ μ¬ν λ°©μμΌλ‘ λͺ¨λμ imports
λͺ©λ‘μ ν¨κ³Όμ μΌλ‘ μ 곡ν©λλ€. λ€μ λ§ν΄, λμ λͺ¨λ APIλ λ¨μν λͺ¨λμ λ°ννμ§λ§ @Modules
λ°μ½λ μ΄ν°μ μμ±μ μμ νλ λμ νλ‘κ·Έλλ° λ°©μμΌλ‘ μ§μ ν©λλ€.
μ¬μ§μ μμ±νλ λ° λμμ΄λλ λͺ κ°μ§ μΈλΆ μ λ³΄κ° μ¬μ ν μμ΅λλ€.
μ΄μ
@Module()
μ λ°μ½λ μ΄ν°μimports
μμ±μ λͺ¨λ ν΄λμ€ μ΄λ¦ (μ:imports: [UsersModule]
)λΏλ§ μλλΌ λμ ν¨μ returning ν¨μλ₯Ό μ¬μ©ν μ μμμ μ μ μμ΅λλ€ λͺ¨λ (μ:imports: [ConfigModule.register(...)]
).λμ λͺ¨λ μ체λ λ€λ₯Έ λͺ¨λμ κ°μ Έμ¬ μ μμ΅λλ€. μ΄ μμ μμλ κ·Έλ κ²νμ§ μμ§λ§ λμ λͺ¨λμ΄ λ€λ₯Έ λͺ¨λμ 곡κΈμμ μμ‘΄νλ κ²½μ° μ νμ
imports
μμ±μ μ¬μ©νμ¬ κ°μ Έμ΅λλ€. λ€μ, μ΄κ²μ@Module()
λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νμ¬ μ μ λͺ¨λμ λν λ©ν λ°μ΄ν°λ₯Ό μ μΈνλ λ°©μκ³Ό μ νν μ μ¬ν©λλ€.
μ΄λ¬ν μ΄ν΄λ₯Ό λ°νμΌλ‘ μ΄μ λμ ConfigModule
μ μΈμ λͺ¨μ΅μ λ³Ό μ μμ΅λλ€. κ·Έκ²μ κ· μ΄μ 보μ.
μ΄μ μ‘°κ°λ€μ΄ μ΄λ»κ² λ¬Άμ¬ μλμ§ λΆλͺ
ν΄μΌν©λλ€. ConfigModule.register(...)
λ₯Ό νΈμΆνλ©΄ μ§κΈκΉμ§ @Module()
λ°μ½λ μ΄ν°λ₯Ό ν΅ν΄ λ©ν λ°μ΄ν°λ‘ μ 곡 ν κ²κ³Ό λ³Έμ§μ μΌλ‘ λμΌν μμ±μ κ°μ§ DynamicModule
κ°μ²΄λ₯Ό λ°νν©λλ€.
info ννΈ
@nestjs/common
μμDynamicModule
μ κ°μ Έμ΅λλ€.
κ·Έλ¬λ λμ λͺ¨λμ κ·Έλ€μ§ ν₯λ―Έλ‘μ§ μμ§λ§, μ°λ¦¬κ° μνλλλ‘ κ΅¬μ±νλ κΈ°λ₯μ λμ νμ§ μμμ΅λλ€. λ€μμ κ·Έ λ΄μ©μ λ€λ£¨κ² μ΅λλ€.
Module configuration
ConfigModule
μ λμμ 컀μ€ν°λ§μ΄μ¦νκΈ°μν νμ€ν ν΄κ²°μ±
μ μμμ μκ°ν κ²μ²λΌ μ μ register()
λ©μλμμ options
κ°μ²΄λ₯Ό μ λ¬νλ κ²μ
λλ€. μλΉ λͺ¨λμ imports
μμ±μ λ€μ νλ² μ΄ν΄ 보μ.
κ·Έκ²μ 'μ΅μ
'κ°μ²΄λ₯Ό λμ λͺ¨λμ μ λ¬νλ κ²μ μ μ²λ¦¬ν©λλ€. κ·Έλ¬λ©΄ConfigModule
μμoptions
κ°μ²΄λ₯Ό μ΄λ»κ² μ¬μ©ν©λκΉ? μ μ μκ°ν΄ λ΄
μλ€. μ°λ¦¬λConfigModule
μ΄ κΈ°λ³Έμ μΌλ‘ λ€λ₯Έ μ 곡μκ° μ¬μ©νκΈ° μν΄ μ£Όμ¬ κ°λ₯ν μλΉμ€ μΈConfigService
λ₯Ό μ 곡νκ³ λ΄λ³΄λ΄λ νΈμ€νΈλΌλ κ²μ μκ³ μμ΅λλ€. μ€μ λ‘ λμμ μ¬μ©μ μ μνκΈ° μν΄options
κ°μ²΄λ₯Ό μ½μ΄μΌνλ κ²μ 'ConfigService'μ
λλ€. register ()
λ©μλμμConfigService
λ‘options 'λ₯Ό μ»λ λ°©λ²μ μκ³ μλ€κ³ κ°μ νμ. μ΄ κ°μ μ ν΅ν΄ μλΉμ€μ μΌλΆλ₯Ό λ³κ²½νμ¬
options` κ°μ²΄μ μμ±μ λ°λΌ λμμ μ¬μ©μ μ§μ ν μ μμ΅λλ€. ( μ°Έκ³ : λΉλΆκ°μ μ€μ λ‘ μ λ¬νλ λ°©λ²μ κ²°μ νμΌλ―λ‘ 'μ΅μ
'μ νλ μ½λ© λ§νλ©΄λ©λλ€. μ μ νμ μμ νκ² μ΅λλ€.)
μ΄μ ConfigService
λ options
μμ μ§μ ν ν΄λμμ .env
νμΌμ μ°Ύλ λ°©λ²μ μκ³ μμ΅λλ€.
μ°λ¦¬μ λλ¨Έμ§ μμ
μ register()
λ¨κ³μ options
κ°μ²΄λ₯Ό ConfigService
μ μ½μ
νλ κ²μ
λλ€. λ¬Όλ‘ _dependency injection_
μ μ¬μ©νμ¬ μνν©λλ€. μ΄κ²μ΄ ν΅μ¬ μ¬νμ΄λ―λ‘ μ΄ν΄ν΄μΌν©λλ€. μ°λ¦¬μ ConfigModule
μ ConfigService
λ₯Ό μ 곡νκ³ μμ΅λλ€. ConfigService
λ λ°νμμλ§ μ 곡λλ options
κ°μ²΄μ μμ‘΄ν©λλ€. λ°λΌμ λ°νμμ λ¨Όμ options
κ°μ²΄λ₯Ό Nest IoC 컨ν
μ΄λμ λ°μΈλ© ν λ€μ Nestκ° ConfigService
μ μ½μ
ν΄μΌν©λλ€. λ§μΆ€ μ 곡μ μ₯μμ μ 곡μλ μλΉμ€λΏλ§ μλλΌ λͺ¨λ κ°μΉλ₯Ό ν¬ν¨ ν μ μλ€λ μ μ κΈ°μ΅νμμμ€. μμ‘΄μ± μ£Όμ
μ μ¬μ©νμ¬ κ°λ¨ν options
κ°μ²΄λ₯Ό μ²λ¦¬νλ κ²μ΄ μ’μ΅λλ€.
μ΅μ
κ°μ²΄λ₯Ό IoC 컨ν
μ΄λμ λ°μΈλ©νλ λ°©λ²μ λ¨Όμ μ΄ν΄ λ³΄κ² μ΅λλ€. μ μ register()
λ©μλμμ μ΄λ₯Ό μνν©λλ€. μ°λ¦¬λ λμ μΌλ‘ λͺ¨λμ ꡬμ±νκ³ μμΌλ©° λͺ¨λμ μμ± μ€ νλλ 곡κΈμ λͺ©λ‘μ
λλ€. λ°λΌμ μ°λ¦¬κ°ν΄μΌ ν μΌμ μ΅μ
κ°μ²΄λ₯Ό 곡κΈμλ‘ μ μνλ κ²μ
λλ€. μ΄λ₯Ό ν΅ν΄ ConfigService
μ μ£Όμ
ν μμκ² λλ©° λ€μ λ¨κ³μμ νμ©ν κ²μ
λλ€. μλ μ½λμμproviders
λ°°μ΄μμ£Όμνμμμ€ :
μ΄μ CONFIG_OPTIONS
μ 곡μλ₯Ό ConfigService
μ μ½μ
νμ¬ νλ‘μΈμ€λ₯Ό μλ£ ν μ μμ΅λλ€. λΉ ν΄λμ€ ν ν°μ μ¬μ©νμ¬ κ³΅κΈμλ₯Ό μ μ ν λλ μ¬κΈ°μ μ€λͺ
λλλ‘ @Inject()
λ°μ½λ μ΄ν°λ₯Ό μ¬μ©ν΄μΌν©λλ€.
λ§μ§λ§ μ°Έκ³ μ¬ν: λ¨μνλ₯Ό μν΄ μμ λ¬Έμμ΄ κΈ°λ° μ£Όμ
ν ν° (CONFIG_OPTIONS
)μ μ¬μ©νμ§λ§ λͺ¨λ² μ¬λ‘λμ΄λ₯Ό λ³λμ νμΌμμ μμ (λλ μ¬λ³Ό
)λ‘ μ μνκ³ ν΄λΉ νμΌμ κ°μ Έ μ€λ κ²μ
λλ€. μλ₯Ό λ€λ©΄ λ€μκ³Ό κ°μ΅λλ€.
Example
μ΄ μ₯μ μ½λμ λν μ 체 μλ μ¬κΈ°μμ νμΈν μ μμ΅λλ€.
Last updated
Was this helpful?