Basics
Basics
Nest λ§μ΄ν¬λ‘ μλΉμ€λ HTTPμ λ€λ₯Έ μ μ‘ κ³μΈ΅μ μ¬μ©νλ μμ© νλ‘κ·Έλ¨ μ νμ λλ€.
Installation
λ¨Όμ νμν ν¨ν€μ§λ₯Ό μ€μΉν΄μΌ ν©λλ€.
Overview
μΌλ°μ μΌλ‘ Nestλ μ¬λ¬ λ΄μ₯ μ μ‘κΈ°λ₯Ό μ§μν©λλ€. μμ²-μλ΅ λ° μ΄λ²€νΈ κΈ°λ° ν¨λ¬λ€μμ κΈ°λ°μΌλ‘ νλ©° μ 체 ν΅μ λ‘μ§μ΄ μΆμν κ³μΈ΅ λ€μ μ¨κ²¨μ Έ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ½λ λΌμΈμ λ³κ²½νμ§ μκ³ λ μ΄μ‘μ 체(transporter)κ°μ μ½κ² μ ν ν μ μμ΅λλ€. κ·Έλ¬λ μμ²-μλ΅ ν¨λ¬λ€μμ λ€μν λ²μμ λ¬Έμ λ₯Ό ν΄κ²°νλλ‘ μ€κ³λ Kafka λλ NATS μ€νΈλ¦¬λ°κ³Ό κ°μ λ‘κ·Έ κΈ°λ° μ§μμ±μ΄ μ 곡λλ μ€νΈλ¦¬λ° νλ«νΌμμλ κ·Έλ€μ§ μλ―Έκ° μμ΅λλ€. κ·ΈλΌμλ λΆκ΅¬νκ³ μ΄λ²€νΈ κΈ°λ° (λ¨λ°©ν₯) ν΅μ λλ μμ© νλ‘κ·Έλ¨ μ»¨ν μ€νΈ κΈ°λ₯κ³Ό ν¨κ» μ¬μ©ν μ μμ΅λλ€.
Getting started
λ§μ΄ν¬λ‘ μλΉμ€λ₯Ό μμ±νκΈ° μν΄ μ°λ¦¬λ NestFactory
ν΄λμ€μ createMicroservice()
λ©μλλ₯Ό μ¬μ©ν©λλ€.
info ννΈ λ§μ΄ν¬λ‘ μλΉμ€λ κΈ°λ³Έμ μΌλ‘ TCP νλ‘ν μ½μ ν΅ν΄ λ©μμ§λ₯Ό λ£κ³ μμ΅λλ€.
createMicroservice()
λ©μλμ λ λ²μ§Έ μΈμλ μ΅μ
κ°μ²΄μ
λλ€. μ΄ κ°μ²΄μλ λ λ©€λ²κ° μμ μ μμ΅λλ€.
The μ΅μ
κ°μ²΄λ μ νν νΈλμ€ν¬ν°μ λ°λΌ λ€λ¦
λλ€. TCP νΈλμ€ν¬ν°λ μλμ μ€λͺ
λ λͺκ°μ§ μμ±μ κ°μ Έμ΅λλ€.
Patterns
λ§μ΄ν¬λ‘ μλΉμ€λ ν¨ν΄μ ν΅ν΄ λ©μμ§μ μ΄λ²€νΈλ₯Ό λͺ¨λ μΈμν©λλ€. ν¨ν΄μ 리ν°λ΄ κ°μ²΄ λλ λ¬Έμμ΄κ³Ό κ°μ μΌλ° κ°μ λλ€. κ²°κ΅ λͺ¨λ ν¨ν΄μ΄ μ§λ ¬νλλ―λ‘ λ°μ΄ν°μ ν¨κ» λ€νΈμν¬λ₯Ό ν΅ν΄ μ μ‘λ μ μμ΅λλ€. λ°λΌμ, 리μλ²λ λ€μ΄μ€λ λ©μμ§λ₯Ό λμνλ νΈλ€λ¬μ μ½κ² μ°κ΄μν¬ μμλ€.
Request-response
μμ²-μλ΅ ν΅μ λ©μ»€λμ¦μ λ€μν μΈλΆ μλΉμ€κ°μ λ©μμ§λ₯Ό κ΅νν΄μΌ ν λ μ μ©ν©λλ€. λν μ΄ ν¨λ¬λ€μμ μ¬μ©νλ©΄ μλΉμ€κ° μ€μ λ‘ λ©μμ§λ₯Ό μμ νλμ§ νμΈν μ μμ΅λλ€.
μλΉμ€κ° λ€νΈμν¬λ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό κ΅νν μ μλλ‘ Nestλ λ μ±λμ μμ±ν©λλ€. νλλ λ°μ΄ν° μ μ‘μ λ΄λΉνκ³ λ€λ₯Έ νλλ λ€μ΄μ€λ μλ΅μ μμ ν©λλ€. κ·Έλ¬λ νμ κ·Έλ° κ²μ μλλλ€. μλ₯Ό λ€μ΄ NATSμ κ°μ νλ«νΌμ μ΄λ¬ν κΈ°λ₯μ κΈ°λ³Έμ μΌλ‘ μ 곡νλ―λ‘ μ체μ μΌλ‘ μνν νμκ° μμ΅λλ€.
κΈ°λ³Έμ μΌλ‘, μμ²-μλ΅ ν¨λ¬λ€μμ κΈ°λ°μΌλ‘ νλ λ©μμ§ νΈλ€λ¬λ₯Ό λ§λ€κΈ° μν΄ μ°λ¦¬λ @nestjs/microservices
ν¨ν€μ§μμ κ°μ Έμ¨ @MessagePattern()
λ°μ½λ μ΄ν°λ₯Ό μ¬μ©ν©λλ€.
accumulate()
νΈλ€λ¬λ cmd:'sum'
ν¨ν΄μ μΆ©μ‘±μν€λ λ©μμ§λ₯Ό λ£κ³ μμ΅λλ€. ν¨ν΄ νΈλ€λ¬λ ν΄λΌμ΄μΈνΈλ‘λΆν° μ λ¬λ data
λΌλ λ¨μΌ μΈμλ₯Ό μ·¨ν©λλ€. μ΄ κ²½μ°, λ°μ΄ν°λ λμ λμ΄μΌ νλ μ«μμ λ°°μ΄μ
λλ€.
Asynchronous responses
κ° λ©μμ§ νΈλ€λ¬λ λκΈ°μ λλ λΉλκΈ°μμΌλ‘ μλ΅ν μ μμ΅λλ€. λ°λΌμ async
λ©μλκ° μ§μλ©λλ€.
λν Observable
μ λ°νν μ μμΌλ―λ‘ μ€νΈλ¦Όμ΄ μλ£ λ λκΉμ§ κ°μ΄ λ°©μΆλ©λλ€.
μμ λ©μμ§ μ²λ¦¬κΈ°λ λ°°μ΄μ κ° νλͺ©κ³Ό ν¨κ» 3 λ² μλ΅ν©λλ€.
Event-based
μμ²-μλ΅ λ°©λ²μ μλΉμ€κ°μ λ©μμ§λ₯Ό μ§μμ μΌλ‘ κ΅νν΄μΌ ν λ μ μ©νμ§λ§ μλ΅μ κΈ°λ€λ¦¬μ§ μκ³ μ΄λ²€νΈλ₯Ό κ²μνλ €κ³ ν λ μμ ν μΈλͺ¨μλ λΆνμν μ€λ² ν€λκ° λ무 λ§μ΄ λ°μν©λλ€. μλ₯Ό λ€μ΄, μμ€ν μ μ΄ λΆλΆμμ νΉμ μν©μ΄ λ°μνμμ λ€λ₯Έ μλΉμ€μ μλ¦¬λ €κ³ ν©λλ€. λ°λΌμ, μ΄λ²€νΈ κΈ°λ° ν΅μ λ μ§μν©λλ€.
μ΄λ²€νΈ νΈλ€λ¬λ₯Ό λ§λ€κΈ° μν΄ μ°λ¦¬λ@nestjs/microservices
ν¨ν€μ§μμ κ°μ Έμ¨ @EventPattern ()
λ°μ½λ μ΄ν°λ₯Ό μ¬μ©ν©λλ€.
handleUserCreated()
λ©μλλ user_created
μ΄λ²€νΈλ₯Ό μ²μ·¨νκ³ μμ΅λλ€. μ΄λ²€νΈ νΈλ€λ¬λ ν΄λΌμ΄μΈνΈλ‘λΆν° μ λ¬ λ data
λΌλ λ¨μΌ μΈμλ₯Ό λ°μ΅λλ€ (μ΄ κ²½μ° λ€νΈμν¬λ₯Ό ν΅ν΄ μ μ‘λ μ΄λ²€νΈ νμ΄λ‘λ).
Client
λ©μμ§λ₯Ό κ΅ννκ±°λ Nest λ§μ΄ν¬λ‘ μλΉμ€μ μ΄λ²€νΈλ₯Ό κ²μνκΈ° μν΄ λͺκ°μ§ λ°©λ²μΌλ‘ μμ±ν μ μλ ClientProxy
ν΄λμ€λ₯Ό μ¬μ©ν©λλ€. λ¨Όμ μ μ register()
λ©μλλ₯Ό λ
ΈμΆνλ ClientsModule
μ κ°μ Έμ¬ μ μμ΅λλ€. μ΄ λ©μλλ λͺ¨λ μμκ° name
(λ§μ΄ν¬λ‘ μλΉμ€ μλ³μμ μΌμ’
)κ³Ό λ§μ΄ν¬λ‘ μλΉμ€ νΉμ μ΅μ
(μ΄κ²μ΄createMicroservice()
λ°©λ²μ μ λ¬λ κ²κ³Ό λμΌν κ°μ²΄)μ κ°λ λ§€κ° λ³μλ‘ λ°°μ΄μ μ·¨ν©λλ€.
info ννΈ
ClientsModule
μ@nestjs/microservices
ν¨ν€μ§μμ κ°μ Έμ΅λλ€.
λͺ¨λμ κ°μ Έ μ€λ©΄ @Inject()
λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νμ¬ MATH_SERVICE
λ₯Ό μ£Όμ
ν μ μμ΅λλ€.
info ννΈ
ClientProxy
ν΄λμ€λ@nestjs/microservices
ν¨ν€μ§μμ κ°μ Έμ΅λλ€.
κ·ΈλΌμλ λΆκ΅¬νκ³ ,μ΄ μ κ·Όλ²μ λ§μ΄ν¬λ‘ μλΉμ€ ꡬμ±μ λΉλκΈ°μ μΌλ‘ κ°μ Έμ¬ μ μμ΅λλ€. μ΄ κ²½μ°μ, μ°λ¦¬λ ν΄λΌμ΄μΈνΈ μΈμ€ν΄μ€ μΈ Custom providerλ₯Ό λ±λ‘νκΈ° μν΄ ClientProxyFactory
λ₯Ό μ§μ μ¬μ©ν μ μμ΅λλ€ :
info ννΈ
ClientProxyFactory
λ@nestjs/microservices
ν¨ν€μ§μμ κ°μ Έμ΅λλ€.
λ§μ§λ§μΌλ‘ κ°λ₯ν ν΄κ²°μ±
μ @Client()
μμ± λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νλ κ²μ
λλ€.
info ννΈ
@Client()
λ@nestjs/microservices
ν¨ν€μ§μμ κ°μ Έμ΅λλ€.
κ·Έλ¬λ λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νλ κ²μ κΆμ₯λμ§ μμ΅λλ€ (ν μ€νΈνκΈ° μ΄λ ΅κ³ ν΄λΌμ΄μΈνΈ μΈμ€ν΄μ€λ₯Ό 곡μ νκΈ°κ° μ΄λ ΅μ΅λλ€).
ClientProxy
λ κ²μΌλ₯Έμ
λλ€. μ¦μ μ°κ²°μ μμνμ§ μμ΅λλ€. λμ , 첫 λ²μ§Έ λ§μ΄ν¬λ‘ μλΉμ€ νΈμΆ μ μ μ€μ λκ³ μ΄νμ κ° νΈμΆμμ μ¬μ¬μ©λ©λλ€. κ·Έλ¬λ μ ν리μΌμ΄μ
λΆνΈ μ€νΈλ© νλ‘μΈμ€λ₯Ό μ§μ°μν€κ³ μ°κ²°μ μλμΌλ‘ μ΄κΈ°ννλ €λ©΄ OnModuleInit
λΌμ΄ν μ¬μ΄ν΄ νν¬ λ΄μμ connect()
λ©μλλ₯Ό μ¬μ©ν μ μμ΅λλ€.
μ°κ²°μ λ§λ€ μ μμΌλ©΄ connect()
λ©μλλ ν΄λΉ μ€λ₯ κ°μ²΄μ ν¨κ» κ±°λΆλ©λλ€.
Sending messages
ClientProxy
λ send()
λ©μλλ₯Ό λ
ΈμΆμν΅λλ€. μ΄ λ©μλλ λ§μ΄ν¬λ‘ μλΉμ€λ₯Ό νΈμΆνκΈ° μν κ²μ΄λ©° μλ΅κ³Ό ν¨κ» Observable
μ λ°νν©λλ€. λ°λΌμ λ°©μΆλ κ°μ μ½κ² κ°μ
ν μ μμ΅λλ€.
send()
λ©μλλ pattern
κ³Ό payload
λΌλ λ κ°μ μΈμλ₯Ό μ·¨ν©λλ€. pattern
μ @MessagePattern()
λ°μ½λ μ΄ν°μ μ μλ κ²κ³Ό λμΌν΄μΌ νλ©°, payload
λ λ€λ₯Έ λ§μ΄ν¬λ‘ μλΉμ€λ‘ μ μ‘νλ €λ λ©μμ§μ
λλ€.
Publishing events
λ λ€λ₯Έ λ°©λ²μ emit()
μ
λλ€. μ΄ λ°©λ²μ μ±
μμ μ΄λ²€νΈλ₯Ό λ©μμ§ λΈλ‘컀μ 곡κ°νλ κ²μ
λλ€.
emit()
λ©μλλ pattern
κ³Ό payload
λΌλ λ κ°μ μΈμλ₯Ό μ·¨ν©λλ€. pattern
μ @EventPattern()
λ°μ½λ μ΄ν°μ μ μλ κ²κ³Ό λμΌν΄μΌνλ©°, payload
λ λ€λ₯Έ λ§μ΄ν¬λ‘ μλΉμ€λ‘ μ μ‘νλ €λ μ΄λ²€νΈ νμ΄λ‘λμ
λλ€.
Last updated