๐ŸŽ‰ berenickt ๋ธ”๋กœ๊ทธ์— ์˜จ ๊ฑธ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽ‰
Back
NestJs
49-Others

1. Order Microservice

1.1 Entity ๊ตฌ์„ฑํ•˜๊ธฐ

  • Order (์ฃผ๋ฌธ ์ •๋ณด ํ†ตํ•ฉ ์ •๋ณด)
    • Customer (์ฃผ๋ฌธํ•œ ์‚ฌ๋žŒ)
    • DeliveryAddress (์ฃผ๋ฌธ ๋ฐฐ์†ก ์ฃผ์†Œ)
    • Payment (์ฃผ๋ฌธ ๊ฒฐ์ œ ๋ฐฉ๋ฒ•)
    • Product (์ฃผ๋ฌธ ์ƒํ’ˆ)

1.2 SQL vs NoSQL

NoSQL์˜ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ์žฅ์ ์€ ๊ตฌ์กฐํ™”๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ Document๋กœ ํ•œ๋ฒˆ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. populate๋ฅผ ํ†ตํ•œ join ๊ธฐ๋Šฅ์ด ๊ฐ€๋Šฅํ•˜๊ธด ํ•˜์ง€๋งŒ, ๋ณดํ†ต ํ•˜๋‚˜์˜ Document๊ฐ€ ํ†ต์งธ๋กœ ์œ ์˜๋ฏธํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๊ฒŒ ๋œ๋‹ค.

SQL์€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋‹ค์–‘ํ•œ Join ๊ธฐ๋Šฅ๊ณผ ํ•จ๊ป˜ โ€œํ˜„์žฌ ์ƒํƒœโ€๋ฅผ ์ •ํ™•ํžˆ ๋ณด์—ฌ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

  • ๊ทธ๋ ‡๋‹ค๋ฉด โ€œOrder (์ฃผ๋ฌธ)โ€ ๋ฐ์ดํ„ฐ๋Š” โ€œ์ตœ์‹  ํ˜„์žฌ ์ƒํƒœโ€๋ฅผ ๋ฐ˜์˜ํ•ด์•ผํ•˜๋Š” ๋ฐ์ดํ„ฐ์ผ๊นŒ?
  • Order ๊ฐ์ฒด์˜ Customer, DeliveryAddress, Product, Payment๋Š” ๋งค๋ฒˆ ์ตœ์‹  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ˜์˜๋ผ์•ผํ•˜๋Š”๊ฐ€?

2. Microservice Transporters

2.1 TCP๋ง๊ณ  ๋‹ค๋ฅธ ์˜ต์…˜

nestjs-fastcam-others_49-1


2.2 Synchronous Networking vs Asynchronous Networking

Broker๋ž€ ๋ฉ”์„ธ์ง€ ๋˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ค‘๊ฐœํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋ช…์นญํ•œ๋‹ค!

  • Synchronous Networking
    • ์š”์ฒญ์„ ๋ณด๋‚ธ ํ›„ ์‘๋‹ต์ด ๋Œ์•„์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฐฉ์‹์ด๋‹ค.
    • ์š”์ฒญ ์‘๋‹ต์ด ๋๋‚œ๋‹ค์Œ ๋‹ค์Œ ์ž‘์—…์„ ์ง„ํ–‰ํ•œ๋‹ค.
    • ์‘๋‹ต ์‹œ๊ฐ„์ด ๊ธด ์šฉ์ฒญ์ด ์žˆ์„ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ ์ „์ฒด์˜ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.
    • ํ†ต์‹ ํ•˜๋Š” Microservice๋ผ๋ฆฌ Tight Coupling์ด ๋œ๋‹ค.
    • ์ „ํ™” ํ†ตํ™”๋ฅผ ์ƒ์ƒํ•˜๋ฉด ๋œ๋‹ค. ์ „ํ™”๋ฅผ ๊ฑธ๋ฉด ์ƒ๋Œ€๋ฐฉ์ด ์ „ํ™”๋ฅผ ๋ฐ›์•„์•ผํ•˜๊ณ  ํ†ตํ™”๊ฐ€ ๋๋‚ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผํ•œ๋‹ค.
  • Asynchronous Networking
    • ์š”์ฒญ์„ ๋ณด๋‚ธ ํ›„ ์‘๋‹ต์ด ์˜ฌ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์„ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์ด๋‹ค.
    • ์‘๋‹ต ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋™์•ˆ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • (๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์— ์ ํ•ฉ)
    • ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๊ณ  ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฉ”์„ธ์ง€/์ด๋ฒคํŠธ๊ฐ€ ํ•œ๋ฒˆ ์ด์ƒ ์ „๋‹ฌ๋˜๋Š” ์ƒํ™ฉ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.
    • ์ด๋ฉ”์ผ์„ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
      • ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด๋‘๋ฉด ์–ธ์  ๊ฐ€ ์ƒ๋Œ€๋ฐฉ์ด ์ด๋ฉ”์ผ์„ ์ฝ์„๊ฑธ ์ƒ๊ฐํ•˜๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

๋ชจ๋“  ํ†ต์‹ ์„ Synchronous ๋˜๋Š” Asynchronous๋กœ ์ž‘์—…ํ•˜๋Š”๊ฑด ์ ์ ˆํ•˜์ง€ ์•Š๋‹ค. Synchronous์™€ Asynchronous์˜ ํŠน์„ฑ์„ ์ž˜ ์‚ด๋ ค์„œ ํ†ต์‹ ์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ์ ํ•ฉํ•œ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•ด์ฃผ๋Š”๊ฒŒ ์ค‘์š”ํ•˜๋‹ค.


2.3 Broker๋ž€?

nestjs-fastcam-others_49-2


2.4 Broker ์ข…๋ฅ˜ ๋น„๊ต

RedisMQTTNATSRabbitMQ
์ฃผ์š” ํŒจํ„ดPub/Sub, StreamsPub/SubPub/Sub, Request/ReplyPub/Sub, Queue, Request/ Reply
Quality of Service
(QoS)
์—†์ŒQoS(0, 1, 2)์—†์ŒAcknowledgement
(ํ™•๋‹ต ๋ฐ›๊ธฐ)
ํ™•์žฅ์„ฑํด๋Ÿฌ์Šคํ„ฐ๋ง ํ•„์š”์„œ๋ฒ„ ํ™•์žฅ ๊ฐ€๋Šฅ๊ธฐ๋ณธ์ ์œผ๋กœ
ํด๋Ÿฌ์Šคํ„ฐ๋ง ์ง€์›
Exchange/Binding ํ†ตํ•œ ํ™•์žฅ ๊ฐ€๋Šฅ
๋‚ด๊ตฌ์„ฑStreams ์‚ฌ์šฉ์‹œ ์ œ๊ณตQoS ์„ค์ •์— ๋”ฐ๋ผ ๋‹ค๋ฆ„NATS Streaming ์‚ฌ์šฉ์‹œ ์ œ๊ณต๋†’์€ ๋‚ด๊ตฌ์„ฑ

(1) Redis

  • ํ†ต์‹ ๋ฐฉ์‹ : Pub/Sub ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๋‹ค.
    • ๊ฐ„๋‹จํ•œ ๋ฉ”์‹œ์ง€ ํ๋กœ์„œ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜,
    • ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ๋ฉ”์‹œ์ง€ ์ „์†ก์ด ํ•„์š”ํ•  ๋•Œ๋Š” Redis Streams๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ์„ฑ๋Šฅ : ๋งค์šฐ ๋น ๋ฅด๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์ด๋ฏ€๋กœ ์งง์€ ์‘๋‹ต ์‹œ๊ฐ„๊ณผ ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์ œ๊ณตํ•œ๋‹ค
  • ์‹ ๋ขฐ์„ฑ : ๊ธฐ๋ณธ Pub/Sub์—์„œ๋Š” ๋ฉ”์‹œ์ง€ ์†์‹ค์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Redis Streams๋Š” ๋ฉ”์‹œ์ง€ ๋ณด์žฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ,
    • ์—ฌ์ „ํžˆ RabbitMQ๋‚˜ NATS๋งŒํผ์˜ ์™„๋ฒฝํ•œ ๋ฉ”์‹œ์ง€ ๋‚ด๊ตฌ์„ฑ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค
  • ํ™•์žฅ์„ฑ : Redis๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,
    • ์ž์ฒด์ ์ธ ๋ฉ”์‹œ์ง• ๋ณด์žฅ์ด๋‚˜ ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์œ„ํ•ด์„œ๋Š” ์ถ”๊ฐ€์ ์ธ ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค.
  • ์‚ฌ์šฉ ์‚ฌ๋ก€ : ์บ์‹ฑ, ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ ๋“ฑ. ๋‹จ์ˆœํ•œ ๋ฉ”์‹œ์ง€ ํŒจํ„ด์ด ์š”๊ตฌ๋  ๋•Œ ์ ํ•ฉํ•˜๋‹ค.

(2) MQTT

  • ํ†ต์‹ ๋ฐฉ์‹ : Pub/Sub ํŒจํ„ด ๊ธฐ๋ฐ˜์˜ ๊ฒฝ๋Ÿ‰ ๋ฉ”์‹œ์ง€ ํ”„๋กœ ํ† ์ฝœ์ด๋‹ค.
    • ์ €์ „๋ ฅ ๋ฐ ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ์ด ์ œํ•œ๋œ ํ™˜๊ฒฝ์—์„œ ํšจ์œจ์ ์ด๋‹ค.
  • ์„ฑ๋Šฅ : ๋ฉ”์‹œ์ง€ ํฌ๊ธฐ๊ฐ€ ์ž‘๊ณ  ์ „์†ก ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
    • ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ์ €๋น„์šฉ ์žฅ์น˜ ๊ฐ„์˜ ํ†ต์‹ ์— ์ ํ•ฉํ•˜๋‹ค.
  • ์‹ ๋ขฐ์„ฑ : QoS(์„œ๋น„์Šค ํ’ˆ์งˆ) ๋ ˆ๋ฒจ์— ๋”ฐ๋ผ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฉ”์‹œ์ง€๋ฅผ ํ•œ๋ฒˆ๋งŒ ์ „ ๋‹ฌํ•˜๊ฑฐ๋‚˜, ์ตœ์†Œ ํ•œ ๋ฒˆ, ๋˜๋Š” ์ ์–ด๋„ ํ•œ ๋ฒˆ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์„ ์ œ๊ณตํ•œ๋‹ค.
  • ํ™•์žฅ์„ฑ : ๋ธŒ๋กœ์ปค๋ฅผ ํ†ตํ•œ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, Redis ๋‚˜ NATS์— ๋น„ํ•ด ๋ณต์žกํ•œ ํ™•์žฅ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ฌ์šฉ ์‚ฌ๋ก€ : IoT ๋””๋ฐ”์ด์Šค ๊ฐ„์˜ ํ†ต์‹ , ์ €์ „๋ ฅ ์žฅ์น˜ ๋ฐ ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ์ด ์ œํ•œ๋œ ์ƒํ™ฉ์— ์ ํ•ฉํ•˜ ๋‹ค

(3) NATS

  • ํ†ต์‹ ๋ฐฉ์‹ :์ฃผ๋กœ Pub/Sub๊ณผ Request/Reply ํŒจํ„ด ์„ ์ง€์›ํ•˜๋ฉฐ, ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ๊ฒฝ๋Ÿ‰ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์ด๋‹ค.
  • ์„ฑ๋Šฅ : ๋ฉ”์‹œ์ง€ ์ „์†ก ์†๋„์™€ ์‘๋‹ต ์‹œ๊ฐ„์ด ๋งค์šฐ ๋น ๋ฅด๋‹ค. ํŠนํžˆ ๊ณ ์„ฑ๋Šฅ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ ํ•˜๊ธฐ์— ์ ํ•ฉํ•˜๋‹ค.
  • ์‹ ๋ขฐ์„ฑ : NATS๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ์— ์žˆ์–ด ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ์•Š์ง€๋งŒ,
    • NATS Streaming(ํ˜„ ์žฌ JetStream)์€ ๋ฉ”์‹œ์ง€ ๋‚ด๊ตฌ์„ฑ, ํ™•์ธ ์‘๋‹ต (ACK), ๋ฉ”์‹œ์ง€ ์ €์žฅ ๋“ฑ์„ ์ œ๊ณตํ•œ๋‹ค
  • ํ™•์žฅ์„ฑ : NATS๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ง์„ ํ†ตํ•ด ๋งค์šฐ ์‰ฝ๊ฒŒ ํ™• ์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,
    • ๊ธ€๋กœ๋ฒŒ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ๋„ ๋งค์šฐ ์œ ์—ฐํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.
  • ์‚ฌ์šฉ ์‚ฌ๋ก€ : ๊ฒฝ๋Ÿ‰ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์ด ํ•„์š”ํ•  ๋•Œ, ๋†’์€ ์„ฑ ๋Šฅ๊ณผ ๋‚ฎ์€ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์š”๊ตฌํ•˜๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์— ์ ํ•ฉํ•˜๋‹ค

(4) RabbitMQ

  • ํ†ต์‹ ๋ฐฉ์‹ : AMQP(Advanced Message Queuing Protocol)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ,
    • Pub/Sub, Queue, Request/Reply ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ๋ฉ”์‹œ์ง• ํŒจํ„ด์„ ์ง€์›ํ•œ๋‹ค.
  • ์„ฑ๋Šฅ : ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ์ง€์—ฐ ์‹œ๊ฐ„์ด ์ƒ๋Œ€์ ์œผ๋กœ ๊ธธ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฉ”์‹œ์ง€ ๋‚ด๊ตฌ์„ฑ, ์ „๋‹ฌ ๋ณด์žฅ ๋“ฑ์—์„œ ๊ฐ•๋ ฅํ•˜๋‹ค
  • ์‹ ๋ขฐ์„ฑ : ๋ฉ”์‹œ์ง€ ๋‚ด๊ตฌ์„ฑ, ๋ฉ”์‹œ์ง€ ๋ณด์žฅ(ํ™•์ธ ์‘๋‹ต), ์žฌ์‹œ๋„ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ๋งค์šฐ ๋†’์€ ์‹ ๋ขฐ์„ฑ ์„ ์ œ๊ณตํ•œ๋‹ค.
  • ํ™•์žฅ์„ฑ : ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋ฐ ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์ง€์›ํ•˜๋ฉฐ, ํฐ ๊ทœ๋ชจ์˜ ์‹œ์Šคํ…œ์—์„œ๋„ ์œ ์—ฐํ•˜๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ ์ผ๋ถ€ ์„ค์ • ์กฐ์ • ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ฌ์šฉ ์‚ฌ๋ก€ : ๊ธˆ์œต ์„œ๋น„์Šค, ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ, ํŠธ๋žœ์žญ์…˜ ๋ณด์žฅ ๋“ฑ ์‹ ๋ขฐ์„ฑ์ด ์ค‘์š”ํ•œ ๊ณณ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋œ๋‹ค.

2.5 Redis์˜ ์ž‘๋™ ๋ฐฉ์‹

nestjs-fastcam-others_49-3


2.6 Rabbitmq์˜ ์ž‘๋™ ๋ฐฉ์‹

nestjs-fastcam-others_49-4

nestjs-fastcam-others_49-5


3. gRPC

3.1 gRPC๋ž€?

gRPC๋Š” Google๋Š” Protocol Buffer๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Microservice์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์ ํ•ฉํ•œ ๋†’์€ ํผํฌ๋จผ์Šค๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

RPC๋Š” Remote Procedure Call์˜ ์•ฝ์ž๋กœ ๋‚ด๋ถ€ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋‹ค๋ฅธ ์„œ๋ฒ„์˜ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹ค์ œ ์š”์ฒญ์€ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์œผ๋กœ ์ „๋‹ฌ๋˜์ง€๋งŒ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์€ ๋‚ด๋ถ€ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค.

gRPC๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด language agnostic (์–ธ์–ด์™€ ๊ด€๊ณ„์—†์ด) ์ผ๊ด€๋œ ์–ธ์–ด๋กœ ํ†ต์‹  ๊ทœ์น™์„ ๊ทœ์ • ํ•  ์ˆ˜ ์žˆ๋‹ค

gRPC ์ฃผ์š” ํฌ์ธํŠธ

  • HTTP/2๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • HTTP/2๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์ธ์ฝ”๋”ฉ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— JSON ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์ „์†ก๋  ์ˆ˜ ์žˆ๋‹ค.
  • Unary, Server Streaming, Client Streaming, Bi-Directional Streaming์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

3.2 Unary

nestjs-fastcam-others_49-6


3.3 Server Streaming

nestjs-fastcam-others_49-7


3.4 Client Streaming

nestjs-fastcam-others_49-8


3.5 Bi-Directional Streaming

nestjs-fastcam-others_49-9


3.6 Protobuf ๋ฌธ๋ฒ•

1
syntax = "proto3";
2
3
package codefactory;
4
5
service UserService {
6
rpc Unary(UserRequest) returns (UserResponse)
7
rpc ClientSideStreaming(stream UserRequest) returns (UserResponse)
8
rpc ServerSideStreaming(UserRequest) returns (stream UserResponse)
9
rpc BiDirectionalStreaming(stream UserRequest) returns (stream UserResponse)
10
}
11
12
message UserRequest {
13
string name = 1;
14
}
15
16
message UserResponse {
17
string result = 1;
18
}

3.7 Scalar Type ์ข…๋ฅ˜

  • ๊ธฐ๋ณธ ํƒ€์ž…
    • bool โ†’ ๋ถˆ๋ฆฌ์–ธ ํƒ€์ž…
    • string โ†’ ์ŠคํŠธ๋ง ํƒ€์ž…
    • bytes โ†’ ๋ฐ”์ดํŠธ ํƒ€์ž… (raw data, binary data)
    • enum โ†’ enum ํƒ€์ž…
  • Integer Type
    • int32, int64 โ†’ 32๋น„ํŠธ, 64๋น„ํŠธ ์ •์ˆ˜ ํƒ€์ž…
    • uin32, uint64 โ†’ 32๋น„ํŠธ, 64๋น„ํŠธ ์–‘์˜ ์ •์ˆ˜ ํƒ€์ž…
    • sint32, sint64 โ†’ 32๋น„ํŠธ, 64๋น„ํŠธ ์Œ์˜ ์ •์ˆ˜ ํƒ€์ž…
  • Modifier
    • repeated > Array ํƒ€์ž…
  • Floating Point Type
    • float โ†’ 32๋น„ํŠธ ์†Œ์ˆ˜ ํƒ€์ž… (single precision)
    • double โ†’ 64๋น„ํŠธ ์†Œ์ˆ˜ ํƒ€์ž… (double precision)

3.8 gRPC to Typescript

1
syntax = "proto3";
2
3
package greeter
4
5
service Greeter {
6
rpc SayHello (HelloRequest) returns (HelloResponse)
7
}
8
9
message HelloRequest {
10
string name = 1;
11
}
12
13
message HelloResponse {
14
string age = 1;
15
}
1
import { Injectable } from '@nestjs/common'
2
import { HelloRequest, HelloReply } from './interfaces/greeter.interface'
3
4
@Injectable()
5
export class GreeterService {
6
@GrpcMethod('Greeter', 'SayHello')
7
sayHello(data: HelloRequest): HelloResponse {
8
return { message: `Hello, ${date.age}!` }
9
}
10
}

nestjs-fastcam-others_49-10