๐จ ๋ฉ์์ง ๋ธ๋ก์ปค๋ ๋ฌด์์ผ๊น..?
์๋ก ๋ค๋ฅธ ์์คํ
์ด๋ ํ๋ก๊ทธ๋จ๋ผ๋ฆฌ "๋ฉ์์ง(๋ฐ์ดํฐ)"๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ์ค๊ฐ์์ ์ ๋ฌํด ์ฃผ๋ ์ํํธ์จ์ด์ด๋ค.
์ฝ๊ฒ ๋งํด์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ณ ์ถ์ ์์คํ
๊ณผ ์์ ํ ์์คํ
์ฌ์ด์ ์ค๊ฐ ์ ๋ฌ์ ์ญํ ์ ์ํํ๋ค.
๐จ ๊ทธ๋ ๋ค๋ฉด ๋ฉ์์ง ๋ธ๋ก์ปค๊ฐ ์ ํ์ํ ๊น??
โ ๊ธฐ์กด ๋ฐฉ์ : A ํ๋ก๊ทธ๋จ → ์ง์ B ํ๋ก๊ทธ๋จ ํธ์ถ
๐ A์ B๊ฐ ์๋ก ๊ฐํ๊ฒ ์ฐ๊ฒฐ๋๋ค. (Coupling)
๐ B๊ฐ ๋๋ฆฌ๊ฑฐ๋ ์ฅ์ ๊ฐ ๋๋ฉด A๋ ์ํฅ์ ๋ฐ๋๋ค.
๐ ๋น๋๊ธฐ ๋ถ๊ฐ๋ฅ → ํ์ฅ์ฑ/์ ์ง๋ณด์๊ฐ ์ด๋ ต๋ค.
โ ๋ฉ์์ง ๋ธ๋ก์ปค ์ฌ์ฉ : A ํ๋ก๊ทธ๋จ → ๋ฉ์์ง ๋ธ๋ก์ปค → B ํ๋ก๊ทธ๋จ
๐ A๋ ๋ฉ์์ง๋ง ๋ณด๋ด๋ฉด ๋์ด๋ค. (B๊ฐ ์ฃฝ์ด ์์ด๋ ๊ด์ฐฎ๋ค.)
๐ A์ B๊ฐ ๋
๋ฆฝ์ ์ผ๋ก ๋์ํ ์ ์๋ค. (๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.)
๐ ์์คํ
๊ฐ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ง๊ณ ๋น๋๊ธฐ ํต์ ์ด ๊ฐ๋ฅํด์ง๋ค.
โจ ๋น์
ํ๋ฐฐ ํ์ฌ์ฒ๋ผ ์๊ฐํ๋ฉด ์ฝ๋ค.
๋ด๊ฐ ์น๊ตฌ์๊ฒ ๋ฌผ๊ฑด์ ๋ณด๋ด๊ณ ์ถ์๋ฐ, ์ง์ ๊ฐ์ ์ ๋ฌํ๋ ๋์ ํ๋ฐฐ ๊ธฐ์ฌ๋(๋ฉ์์ง ๋ธ๋ก์ปค)์ด ๋์ ์ ๋ฌํด ์ค๋ค.
์น๊ตฌ๊ฐ ์ง์ ์์ด๋ ์๊ด์๋ค! ๋งก๊ธฐ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
๐จ ๋ฉ์์ง ๋ธ๋ก์ปค๊ฐ ํ๋ ์ผ์ ๋ญ๊ฐ ์์ง?
๐ ๋ฉ์์ง ์ ๋ฌ : ๋ณด๋ด๋ ์์คํ
→ ๋ฐ๋ ์์คํ
์ผ๋ก ๋ฉ์์ง ์ ๋ฌํ๋ค.
๐ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ง์ : ๋ณด๋ด๋ ์ชฝ์ "์ ์ก๋ง" ํ๊ณ ๋ฐ๋ก ๋ค์ ์ผ ์งํ์ด ๊ฐ๋ฅํ๋ค.
โจ ๋น๋๊ธฐ ์ฒ๋ฆฌ (Asynchronous Communication)
๋๊ธฐ(Synchronous) : ์์ฒญํ ์ชฝ์ด ์๋ต์ ๊ธฐ๋ค๋ ค์ผ ๋ค์ ์ผ์ ํ ์ ์๋ค.
๋น๋๊ธฐ(Asynchronous) : ์์ฒญํ ์ชฝ์ด ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ฐ๋ก ๋ค์ ์ผ์ ์ฒ๋ฆฌํ ์ ์๋ค.
๐ ๋ฉ์์ง ๋ธ๋ก์ปค๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณด๋ธ ์ชฝ์ "๋ฉ์์ง๋ง ๋์ง๊ณ " ๋ฐ๋ก ๋ค์ ์ผ์ ํ๋ค. ๋ฐ๋ ์ชฝ์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๋ง๋ ์์์ ๋์ค์ ๋ฉ์์ง๋ฅผ ๋ฐ์ ์ฒ๋ฆฌํ๋ค.
๐ "์ ํ ํตํ"๋ ๋๊ธฐ, "๋ฌธ์ ๋ฉ์์ง"๋ ๋น๋๊ธฐ
๐ ๋ฒํผ๋ง : ๋ฐ๋ ์ชฝ์ด ๋ฐ๋น ๋ ์ค๊ฐ์ ์ ์ฅํด ๋์๋ค๊ฐ ๋์ค์ ์ ๋ฌํ๋ค.
โจ ๋ฒํผ๋ง (Buffering)
๋ฒํผ (Buffer) : ๋ฐ์ดํฐ๋ฅผ ์ ๊น ์ ์ฅํด ๋๋ ์์ ๊ณต๊ฐ
๋ฒํผ๋ง (Buffering) : ๋ณด๋ธ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ก ์ฒ๋ฆฌ๋์ง ๋ชปํ ๋, ๋ฒํผ์ ์์๋์๋ค๊ฐ ์ฒ๋ฆฌํ๋ ๊ฒ
๐ ๋ฐ๋ ์ชฝ(B)์ด ๋ฐ์๊ฑฐ๋ ์ฃฝ์ด ์์ด๋, ๋ฉ์์ง ๋ธ๋ก์ปค๋ "๋ฒํผ"์ ์์ ๋๊ณ ๊ธฐ๋ค๋ ค์ค๋ค. ๊ทธ ๋๋ถ์ ์ ๋ฌ ์คํจ ์์ด ์์ ์ฑ์ ๋ณด์ฅํ ์ ์๋ค.
๐ "๊ณ ๊ฐ์ผํฐ ๋๊ธฐ ์ ํ"๋ ๋ฐ๋ก ์๋ต ๋ชปํด๋ "๋๊ธฐ์ด(๋ฒํผ)"์ ์์ฌ์ ์์๋๋ก ์ฐ๊ฒฐ
๐ ์ ๋ขฐ์ฑ ๋ณด์ฅ : ๋คํธ์ํฌ ์ค๋ฅ๋ ์๋ฒ ์ฅ์ ๊ฐ ๋๋ ๋ฉ์์ง๋ฅผ ์์ ํ๊ฒ ๋ณด๊ดํ ์ ์๋ค.
์ ๋ขฐ์ฑ ๋ณด์ฅ (Reliability)
์ ๋ขฐ์ฑ (Reliability) : ์์คํ ์ฅ์ ๋ ๋คํธ์ํฌ ๋ฌธ์ ์๋ ๋ฉ์์ง๋ฅผ ์์ด๋ฒ๋ฆฌ์ง ์๋ ๊ฒ
๐ ๋ฉ์์ง ๋ธ๋ก์ปค๋ ๋ฉ์์ง๋ฅผ ๋์คํฌ์ ์ ์ฅํ๊ฑฐ๋, ๋ณต์ ํ๊ฑฐ๋, ์ ์ก ์คํจ ์ ์ฌ์๋ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ ๋ขฐ์ฑ์ ํ๋ณดํ๋ค.
๐ ํ๋ฐฐ ํ์ฌ๊ฐ ๋ฌผ๊ฑด์ ๋ถ์คํ์ง ์๊ณ , ๋ฌธ์ ์๊ฒจ๋ "๋ณด์"ํด์ฃผ๊ฑฐ๋ "๋ค์ ๋ณด๋ด์ฃผ๋" ๊ฒ
๐จ ๋ฉ์์ง ๋ธ๋ก์ปค์ ๋ฉ์์ง ์ฒ๋ฆฌ ๋ฐฉ์
Queue ๊ธฐ๋ฐ ์ฒ๋ฆฌ (Point-to-Point)
๐ ํ๋์ ๋ฉ์์ง๋ฅผ ํ๋์ ์๋น์๋ง ์ฒ๋ฆฌํ ์ ์๋ค.
๐ ์ฃผ๋ก ์์
๋ถ์ฐ(Load Balancing)์ ํ์ฉ๋๋ค.
Pub/Sub ๊ธฐ๋ฐ ์ฒ๋ฆฌ (Publish/Subscribe)
๐ ํ๋์ ๋ฉ์์ง๋ฅผ ์ฌ๋ฌ ์๋น์์๊ฒ ๋์์ ์ ๋ฌํ๋ค.
๐ ์ด๋ฒคํธ ๋ธ๋ก๋์บ์คํธ์ ์ ํฉํ๋ค. (Kafka์ ๋ํ์ ์ธ ๋ฐฉ์)
๐จ ๋ฉ์์ง ๋ธ๋ก์ปค์ ๋จ์ ์?
๐ ์ด์ ๋ณต์ก์ฑ : Kafka ๋ฑ์ ๊ตฌ์ฑ์์๊ฐ ๋ง๊ณ ์ค์ ์ด ๋ณต์กํ๋ค.
๐ ์ง์ฐ ๋ฐ์ : ์ค์๊ฐ API์ ๋นํด ๋ฉ์์ง ์ฒ๋ฆฌ ์ง์ฐ์ด ์์ ์ ์๋ค.
๐ ์ค๋ณต/์ ์ค ์ฒ๋ฆฌ ํ์ : ์ฅ์ ์ ๋ฉ์์ง ์ค๋ณต ๋๋ ์ ์ค์ด ๊ฐ๋ฅํ๋ค → idempotent ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค.
๐ ๋ฆฌ์์ค ์ฌ์ฉ : ๋ฉ์์ง ์ ์ฅ/๋ณต์ /์ ์ก์ ๋์คํฌ, ๋คํธ์ํฌ ๋ฑ ๋ฆฌ์์ค ์๋ชจ๊ฐ ์๋ค.
๐จ ๋ฉ์์ง ๋ธ๋ก์ปค ์ข ๋ฅ
๐ Kafka : ๋์ฉ๋ ์ฒ๋ฆฌ์ ๊ฐํ๋ค. (์๋ฐฑ๋ง ๋ฉ์์ง๋ OK), ๋น ๋ฅด๊ณ ํ์ฅ์ฑ์ด ์ข๋ค.
๐ RabbitMQ : ๋ค์ํ ๋ฉ์์ง ํจํด์ ์ง์ํ๋ค. (ํ, ๋ผ์ฐํ
๋ฑ), ์ ๋ขฐ์ฑ ์์ฃผ์ด๋ค.
๐ AWS SQS : ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ, ์ธํ๋ผ ๊ณ ๋ฏผ ์์ด ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
โ ์ ๋ฆฌ
๋ฉ์์ง ๋ธ๋ก์ปค๋ ์์คํ
๊ฐ ์ฐ๊ฒฐ์ ์ ์ฐํ๊ฒ ํด ์ฃผ๊ณ , ํ์ฅ์ฑ๊ณผ ์ ๋ขฐ์ฑ์ ๋์ฌ์ฃผ๋ ํต์ฌ ์ปดํฌ๋ํธ์ด๋ค.
ํนํ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ
์ฒ๋ ๊ณ ์ ์ด๋ฒคํธ ์ฒ๋ฆฌ ์์คํ
์์๋ ํ์์ ์ธ ์ญํ ์ ํ๋ค.
๐ ๋น๋๊ธฐ ํต์
๐ ์ฅ์ ๋ถ๋ฆฌ
๐ ๋์ฉ๋ ๋ฉ์์ง ์ฒ๋ฆฌ
๊ฐ์ ์ฅ์ ์ ํตํด ๋ ์์ ์ ์ด๊ณ ์ ์ฐํ ์์คํ ์ค๊ณ๋ฅผ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด์ค๋ค.