[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)