[nats] ๊ธฐ๋ณธ
nats๋ Go๋ก ์์ฑ๋ in-memory ๋ถ์ฐ ๋ฉ์์ง ๋ธ๋ก์ปค ์์คํ
์ด๋ค.
์ผ๋จ์ ๊ทธ๋ฅ ํ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
pub/sub ๊ธฐ๋ฐ์ ๋ฉ์ธ์ง ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
๊ทธ๋ฆฌ๊ณ JetStream์ด๋ผ๋ ํ์ฅ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด Kafka์ ๋์ผํ๊ฒ on-disk, FIFO๋ก๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. ์ด๊ฑด ์ถํ ๋ค๋ค๋ณด๊ฒ ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก๋ ๊ฒฝ๋ ์์คํ
์ด๋ผ ๊ฐ๋ณ๊ฒ๋ ์ธ ์ ์์ง๋ง, ํด๋ฌ์คํฐ๋ง์ ํตํด ์ฒ๋ฆฌ๋์ ๋์ผ ์ ์๋ค.
๋ผ์ฆ๋ฒ ๋ฆฌํ์ด์๋ ์ฌ๋ผ๊ฐ ์ ์๋ ์ด๊ฒฝ๋ ์๋น์ค๋ถํฐ, ๋ํ ๋ถ์ฐ ์์คํ
๊น์ง ๊ฐ๋ฅํ, ๋ค์ฌ๋ค๋ฅํจ์ ์ถ๊ตฌํ๋ค.
๋์ปค๋ก ์์ํด๋ณด๊ธฐ
docker๋ฅผ ํตํด์ nats ์๋ฒ๋ฅผ ์คํํด๋ณด๋๋ก ํ๊ฒ ๋ค.
์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ฐ๊ณ , ๋คํธ์ํฌ ์ค์ ํ๊ณ , ์คํ์ํจ๋ค.
docker pull nats
docker network create nats
docker run --name nats --network nats --rm -p 4222:4222 -p 8222:8222 nats --http_port 8222
4222, 8222, 6222 ํฌํธ๋ฅผ ์ฌ์ฉํ๋ค.
4222๋ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ ์ธ๋ถ ๋
ธ์ถ ํฌํธ๊ณ , 6222๋ ํด๋ฌ์คํฐ์ ์ฌ์ฉํ๋ ํฌํธ, 8222๋ ๋ด๋ถ ๊ด๋ฆฌ์ฉ HTTP ํฌํธ๋ค.
๋ค์๊ณผ ๊ฐ์ด ์คํ์ด ๋๋ฉด

8222 ํฌํธ๋ก ๊ด๋ฆฌ ํ์ด์ง์ ์ ์ํ ์ ์๋ค.

์ด๋ฐ์ ๋ฐ ์ ๋ณด๋ค์ ์กฐํํ ์ ์๋ค.
์ด์จ๋ ์ด๋ ๊ฒ ์กฐํ๊ฐ ๋๋ฉด ์ ๋ฌ ๊ฒ์ด๋ค.
Pub/Sub ์ฌ์ฉํด๋ณด๊ธฐ (nats-cli)
nats๊ฐ ์ด๋ฐ์ ๋ฐ ์ก๋คํ ๊ธฐ๋ฅ์ ๋ง์ด ๊ฐ๊ณ ์๊ธด ํ๋ฐ, ๊ทผ๊ฐ์ด ๋๋ ๊ธฐ๋ฅ์ Pub/Sub์ด๋ค.
Redis Pub/Sub๊ณผ ๋น์ค๋ฌด๋ฆฌํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
์ปจ์๋จธ ํ๋ก๊ทธ๋จ์ด ํน์ ์ฃผ์ ๋ฅผ subcribeํ๊ณ , ํ๋ก๋์ ํ๋ก๊ทธ๋จ์ด ์ด๋ฒคํธ๋ฅผ ๊ฐ์ ์ฃผ์ ์ publishํ๋ฉด, ์ปจ์๋จธ๊ฐ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒ์ด๋ค.

๋จผ์ Cli ๋๊ตฌ๋ฅผ ์ค์นํ๋ค. go๋ฅผ ์ด์ฉํด์ ๊น๋๊ฒ ํธํ๋ค.
go install github.com/nats-io/natscli/nats@latest

์ด๊ฑธ๋ก nats ์๋ฒ์ ์ ์ํด์ pub/sub์ ํ๋ฒ ์๋ํด๋ณด์.
๊ตฌ๋
(sub)์ ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์๋ค.
์๋๋ "hello"๋ผ๋ ์ฃผ์ ๋ฅผ ๊ตฌ๋
ํ๋ ๊ฐ๋จํ ๋ช
๋ น์ด๋ค.
nats sub --server nats://localhost:4222 hello

๊ทธ๋ฆฌ๊ณ ๊ฒ์(pub)๋ ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์๋ค.
๋ค์ ๋ช
๋ น์ "hello"๋ผ๋ ์ฃผ์ ์ "i dont know who you are" ๋ฉ์ธ์ง๋ฅผ ๋ ๋ฆฐ๋ค.
nats pub --server nats://localhost:4222 hello "i dont know who you are"

๊ทธ๋ฌ๋ฉด ๊ตฌ๋ ์ ์ธก์์๋ ๊ทธ๊ฑธ ๋ฐ๋ก ๋ฐ์๋ณผ ์ ์๋ค.

์กฐ๊ธ ์ ์ํ ์ ์, ๊ตฌ๋ ์๊ฐ ์ฌ๋ฟ์ด๋ฉด ์ฌ๋ฌ๋ช ์ ๊ตฌ๋ ์๊ฐ ๋์์ ๊ฐ์ ๋ฉ์ธ์ง๋ฅผ ๋ฐ์ ์ ์๋ค๋ ๊ฒ๊ณผ



subscriber๊ฐ ์ฃฝ์ด์๋ ์ํ์์ publish๋ง ํ๋ฉด, ๋ฐ์ดํฐ๊ฐ ์ฆ๋ฐํ๋ค๋ ๊ฒ ์ ๋๋ค.
๋ค Redis Pub/Sub๋ ๋์ผํ๊ฒ ๊ฐ๊ณ ์๋ ํน์ง์ด๋ค.
์ฐธ์กฐ
What is NATS - NATS Docs
nats-io/natscli: The NATS Command Line Interface (github.com)