Providers
Last updated
Was this helpful?
Last updated
Was this helpful?
곡κΈμλ Nestμ κΈ°λ³Έ κ°λ
μ
λλ€. λ§μ κΈ°λ³Έ Nest ν΄λμ€λ μλΉμ€, μ μ₯μ, ν©ν 리, ν¬νΌ λ± κ³΅κΈμλ‘ μ·¨κΈλ μ μμ΅λλ€. 곡κΈμμ μ£Όμ μμ΄λμ΄λ μμ‘΄μ±μ μ£Όμ
ν μ μλ€λ κ²μ
λλ€. μ¦, κ°μ²΄κ° μλ‘ λ€μν κ΄κ³λ₯Ό λ§λ€ μ μμΌλ©° κ°μ²΄μ "λ°°μ "κΈ°λ₯μ Nest λ°νμ μμ€ν
μ ν¬κ² μμ ν μ μμ΅λλ€. 곡κΈμλ λ¨μν @Injectable()
λ°μ½λ μ΄ν°λ‘ μ£Όμμ΄ λ¬λ¦° ν΄λμ€μ
λλ€.
μ΄μ μ₯μμ μ°λ¦¬λ κ°λ¨ν CatsController
λ₯Ό λ§λ€μμ΅λλ€. 컨νΈλ‘€λ¬λ HTTP μμ²μ μ²λ¦¬νκ³ λ 볡μ‘ν μμ
μ 곡κΈμμκ² μμν΄μΌ ν©λλ€. 곡κΈμλ ν΄λμ€ μ μΈ μμ @Injectable()
λ°μ½λ μ΄ν°κ° μλ μΌλ° JavaScript ν΄λμ€μ
λλ€.
info ννΈ Nestλ₯Ό μ¬μ©νλ©΄ μ’ λ λ€μν λ°©λ²μΌλ‘ μ’ μμ±μ λμμΈνκ³ κ΅¬μ± ν μ μμΌλ―λ‘ SOLID μμΉμ λ°λ₯΄λ κ²μ΄ μ’μ΅λλ€.
κ°λ¨ν CatsService
λ₯Ό λ§λ€μ΄ λ΄
μλ€. μ΄ μλΉμ€λ λ°μ΄ν° μ μ₯ λ° κ²μμ λ΄λΉνλ©° CatsController
μμ μ¬μ©νλλ‘ μ€κ³λμμΌλ―λ‘ κ³΅κΈμλ‘ μ μνλ κ²μ΄ μ’μ΅λλ€. λ°λΌμ ν΄λμ€λ₯Ό @Injectable()
μΌλ‘ μ₯μν©λλ€.
info ννΈ CLIλ₯Ό μ¬μ©νμ¬ μλΉμ€λ₯Ό λ§λ€λ €λ©΄ κ°λ¨ν
$nest g service cats
λͺ λ Ήμ μ€ννμμμ€.
μ°λ¦¬μ CatsService
λ νλμ μμ±κ³Ό λ κ°μ λ©μλλ₯Ό κ°μ§ κΈ°λ³Έ ν΄λμ€μ
λλ€. μ μΌν μλ‘μ΄ κΈ°λ₯μ@Injectable()
λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νλ€λ κ²μ
λλ€. @Injectable()
λ°μ½λ μ΄ν°λ λ©ν λ°μ΄ν°λ₯Ό 첨λΆνμ¬ μ΄ ν΄λμ€κ° Nest 곡κΈμλΌλ κ²μ Nestμκ² μλ €μ€λλ€. 그건 κ·Έλ κ³ , μ΄ μμ λ Cat
μΈν°νμ΄μ€λ μ¬μ©νλλ°, μλ§λ λ€μκ³Ό κ°μ΄ λ³΄μΌ κ²μ
λλ€:
Catλ₯Ό κ²μνλ μλΉμ€ ν΄λμ€κ° μκ²ΌμΌλ CatsController
μμμ μ¬μ©νμ:
CatsService
λ ν΄λμ€ μμ±μλ₯Ό ν΅ν΄ μ£Όμ
λ©λλ€. private readonly
ꡬ문μ μ¬μ©μ μ£Όλͺ©νμμμ€. μ΄ μκΈ°λ μ°λ¦¬κ° λμΌν μμΉμμ μ¦μ catsService
λ©€λ²λ₯Ό μ μΈνκ³ μ΄κΈ°ν ν μμκ² νλ€.
Nestλ μΌλ°μ μΌλ‘ μ’ μ μ£Όμ μΌλ‘ μλ €μ§ κ°λ ₯ν λμμΈ ν¨ν΄μ μ€μ¬μΌλ‘ ꡬμΆλμμ΅λλ€. 곡μ Angular λ¬Έμμμ μ΄ κ°λ μ λν νλ₯ν κΈ°μ¬λ₯Ό μ½λ κ²μ΄ μ’μ΅λλ€.
Nestμ TypeScript κΈ°λ₯ λλΆμ μ’
μμ±μ μ νλ³λ‘ ν΄κ²°λκΈ° λλ¬Έμ μ’
μμ±μ κ΄λ¦¬νκΈ°κ° λ§€μ° μ½μ΅λλ€. μλ μμ μμ Nestλ CatsService
μ μΈμ€ν΄μ€λ₯Ό μμ±νκ³ λ°νν¨μΌλ‘μ¨ (λλ μΌλ°μ μΈ κ²½μ° μ±κΈ ν€μ κ²½μ° μ΄λ―Έ λ€λ₯Έ κ³³μ μμ² λ κ²½μ° κΈ°μ‘΄ μΈμ€ν΄μ€λ₯Ό λ°ννμ¬) catsService
λ₯Ό ν΄κ²°ν©λλ€. μ΄ μ’
μμ±μ ν΄κ²°λμ΄ μ»¨νΈλ‘€λ¬μ μμ±μμκ² μ λ¬λκ±°λ νμλ μμ±μ ν λΉλ©λλ€.
곡κΈμλ μΌλ°μ μΌλ‘ μμ© νλ‘κ·Έλ¨ μλͺ
μ£ΌκΈ°μ λκΈ°ν λ μλͺ
( λ²μ
)μ κ°μ΅λλ€. μμ© νλ‘κ·Έλ¨μ΄ λΆνΈ μ€νΈλ© λ λ λͺ¨λ μ’
μμ±μ ν΄κ²°ν΄μΌ νλ―λ‘ λͺ¨λ 곡κΈμλ₯Ό μΈμ€ν΄μ€ν ν΄μΌ ν©λλ€. λ§μ°¬κ°μ§λ‘ μμ© νλ‘κ·Έλ¨μ΄ μ’
λ£λλ©΄ κ° κ³΅κΈμκ° μμ λ©λλ€. κ·Έλ¬λ 곡κΈμμ μλͺ
μ μμ² λ²μλ‘ λ§λλ λ°©λ²λ μμ΅λλ€. μ΄λ¬ν κΈ°μ μ λν μμΈν λ΄μ©μ μ¬κΈ°λ₯Ό μ°Έμ‘°νμμμ€.
Nestμλ 곡κΈμκ° κ΄κ³λ₯Ό ν΄κ²°νλ κΈ°λ³Έ μ 곡 μ μ΄ μμ ( "IoC") 컨ν
μ΄λκ° μμ΅λλ€. μ΄ κΈ°λ₯μ μμμ μ€λͺ
ν μ’
μμ± μ£Όμ
κΈ°λ₯μ κΈ°μ΄κ° λμ§λ§ μ€μ λ‘ μ§κΈκΉμ§ μ€λͺ
ν κ²λ³΄λ€ ν¨μ¬ κ°λ ₯ν©λλ€. @Injectable()
λ°μ½λ μ΄ν°λ λΉμ°μ μΌκ° μΌ λΏμ΄λ©° 곡κΈμλ₯Ό μ μνλ μ μΌν λ°©λ²μ μλλλ€. μ€μ λ‘ μΌλ° κ°, ν΄λμ€ λ° λΉλκΈ° λλ λκΈ° ν©ν 리λ₯Ό μ¬μ©ν μ μμ΅λλ€. λ λ§μ μκ° μ¬κΈ°μ μ 곡λ©λλ€ .
λλλ‘, λ°λμ ν΄κ²° λ νμκ° μλ μ’ μμ±μ΄ μμ μ μμ΅λλ€. μλ₯Ό λ€μ΄ ν΄λμ€λ κ΅¬μ± κ°μ²΄μ μμ‘΄ν μ μμ§λ§ μ λ¬λμ§ μμ κ²½μ° κΈ°λ³Έκ°μ μ¬μ©ν΄μΌν©λλ€. μ΄λ¬ν κ²½μ° κ΅¬μ± κ³΅κΈμκ° μμΌλ©΄ μ€λ₯κ° λ°μνμ§ μμΌλ―λ‘ μ’ μμ±μ΄ μ ν μ¬νμ΄λ©λλ€.
곡κΈμκ° μ νμ μμ λνλ΄λ €λ©΄ constructor
μλͺ
μ @Optional()
λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νμμμ€.
μμ μμμ μ°λ¦¬λ 컀μ€ν
μ 곡μλ₯Ό μ¬μ©νκ³ μλλ°, μ΄κ²μ΄ μ°λ¦¬κ° HTTP_OPTIONS
컀μ€ν
ν ν°μ ν¬ν¨νλ μ΄μ μ
λλ€. μ΄μ μμ λ μμ±μμμ ν΄λμ€λ₯Ό ν΅ν μ’
μμ±μ λνλ΄λ μμ±μ κΈ°λ° μ£Όμ
μ 보μ¬μ€λλ€. μ¬μ©μ μ§μ 곡κΈμ λ° κ΄λ ¨ ν ν°μ λν μμΈν λ΄μ©μ μ¬κΈ°λ₯Ό μ°Έμ‘°νμμμ€.
μ°λ¦¬κ° μ§κΈκΉμ§ μ¬μ©ν κΈ°μ μ μμ±μ λ©μλλ₯Ό ν΅ν΄ 곡κΈμκ° μ£Όμ
λλ―λ‘ constuctor κΈ°λ° μ£Όμ
μ΄λΌκ³ ν©λλ€. λ§€μ° νΉμ ν κ²½μ°μλ μμ± κΈ°λ° μ£Όμ
μ΄ μ μ© ν μ μμ΅λλ€. μλ₯Ό λ€μ΄ μ΅μμ ν΄λμ€κ° νλ μ΄μμ 곡κΈμμ μμ‘΄νλ κ²½μ° μμ±μμ νμ ν΄λμ€μμ super()
λ₯Ό νΈμΆνμ¬ λͺ¨λ 곡κΈμλ₯Ό μ λ¬νλ κ²μ λ§€μ° μ§λ£¨ν μ μμ΅λλ€. μ΄λ₯Ό νΌνκΈ° μν΄ μμ± λ 벨μμ @Inject()
λ°μ½λ μ΄ν°λ₯Ό μ¬μ©ν μ μμ΅λλ€.
warning κ²½κ³ ν΄λμ€κ° λ€λ₯Έ μ 곡μλ₯Ό νμ₯νμ§ μλ κ²½μ° νμ μμ±μ κΈ°λ° μ£Όμ μ μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
μ΄μ μ°λ¦¬λ 곡κΈμ (CatsService)λ₯Ό μ μνκ³ , κ·Έ μλΉμ€μ μλΉμ (CatsController)λ₯Ό κ°μ§κ³ μμΌλ―λ‘, μ£Όμ
μ μνν μ μλλ‘ Nestμ μλΉμ€λ₯Ό λ±λ‘ν΄μΌ ν©λλ€. λͺ¨λ νμΌ (app.module.ts
)μ νΈμ§νκ³ μλΉμ€λ₯Ό @Module()
λ°μ½λ μ΄ν°μ providers
λ°°μ΄μ μΆκ°νλ©΄ λ©λλ€.
Nestλ μ΄μ CatsController
ν΄λμ€μ μμ‘΄μ±μ ν΄κ²°ν μ μμ΅λλ€.
λλ ν 리 ꡬ쑰λ λ€μκ³Ό κ°μ΅λλ€.
src
cats
dto
create-cat.dto.ts
interfaces
cat.interface.ts
cats.service.ts
cats.controller.ts
app.module.ts
main.ts