MSA ์์ ์๋น์ค๊ฐ ํต์ ์ ํ๊ฒ ๋๋ฉด ๋คํธ์ํฌ ํต์ ์ ํ๊ฒ ๋๋ค. ์ฆ ํ๋ก์ธ์ค๊ฐ ํต์ ์ ํ๊ฒ ๋๋๋ฐ ์ด๋ฅผ IPC( Inter-Process Communication ) ๋ผ๊ณ ํ๋ค. IPC๋ ๋จ์ผ ์์คํ ๋ด์ ํ๋ก์ธ์ค ๊ฐ์ด๋ , ๋ถ์ฐ ์์คํ ์ ์๋ก ๋ค๋ฅธ ๋ ธ๋ ๊ฐ์ด๋ , ๋๊ธฐ(Synchronous)์ ๋น๋๊ธฐ(Asynchronous) ํต์ ํจํด์ ์ง์ํ๋ค. ์์คํ ์ค๊ณ์ ๊ธฐ๋ฅ์ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ๊ฐ๊ฐ์ ํจํด์ ๊ณ ๋ คํด์ ์ฌ์ฉํด์ผ ํ๋ค. ์ฌ์ฉ์๊ฐ ๊ธฐ๋ฅ์ ๊ฒฐ๊ณผ๋ฅผ ์ฆ๊ฐ์ ์ผ๋ก ๋ฐ์๋ด์ผํ๋ ๊ฒฝ์ฐ๋ ๋๊ธฐํจํด์ ์ฌ์ฉํ๊ณ ์ฆ๊ฐ์ ์ด์ง ์๊ณ ์คํ ํ ๋ค ๋์ค์ ์๋ฃ ์๋ฆผ์ ๋ฐ๋ ๊ฒฝ์ฐ๋ผ๋ฉด ๋น๋๊ธฐ ํต์ ์ ๊ณ ๋ คํ ์ ์์ ๊ฒ์ด๋ค.
๋๊ธฐ ๋ฐฉ์์ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ์ง๋ง, ํน์ ์์ (์: ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์ฅ์๊ฐ ์์ )์ ๋น๋๊ธฐ ์์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
๋ํ REST API์ ๊ฐ์ ๋๊ธฐ ํธ์ถ์์, ๋ฐฑ์๋ ์๋น์ค ๊ฐ์ ํต์ ์ ๋น๋๊ธฐ ๋ฉ์์ง ํ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
๋๊ธฐ(Synchronous) ํต์
๋๊ธฐ ํต์ ์ ์์ฒญ-์๋ต ๋ชจ๋ธ๋ก์จ ์์ฒญ๊ณผ ์๋ต ์ฌ์ด์ ํ๋ฆ์ด ์์ฐจ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ ๋ฐฉ์์ด๋ค.
Synchronous Blocking ๋ชจ๋ธ๋ก ๊ฐ์ด ์ฌ์ฉ๋๋ฉด์ ํ๋ก์ธ์ค A๊ฐ ํ๋ก์ธ์ค B์ ์์ฒญ์ ๋ณด๋ด๋ฉด, ์๋ต์ ๋ฐ์ ๋๊น์ง ํ๋ก์ธ์ค A๋ ์์ ์ ๋ฉ์ถ๊ณ ๊ธฐ๋ค๋ฆฐ๋ค. ์์ฒญ-์๋ต์ด ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ์์ ์์๊ฐ ๋ณด์ฅ๋ฉ๋๋ค.
์ฅ์
1. ์์ฒญ-์๋ต ๊ตฌ์กฐ๋ก ์ง๊ด์ ์ด๋ผ ๊ตฌํ์ด ์ฝ๋ค.
2. ์์ฒญ์ด ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ฝ๋ค.
๋จ์
1. ์๋ต์ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ์์์ด ๋ธ๋ก(Block)๋๊ธฐ ๋๋ฌธ์ ํจ์จ์ด ๋ฎ์์ง ์ ์๋ค.
2. ๋ ํ๋ก์ธ์ค ๊ฐ์ ๊ฐํ ์์กด์ฑ ๋๋ฌธ์ ํ์ชฝ์ ์ง์ฐ์ด ์ ์ฒด ์์คํ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์๋ค.
๋ํ์ ์ฌ์ฉ ์ฌ๋ก
1. ์์ฒญ-์๋ต ๋ชจ๋ธ API : RESTful API, GraphQL, gRPC
2. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ: ํด๋ผ์ด์ธํธ๋ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ๋ฐ๊ธฐ๊น์ง ๋๊ธฐ.
3. ๋๊ธฐ์ ํ์ผ I/O: ํ์ผ์ ์ฝ๊ฑฐ๋ ์ฐ๋ ๋์ ํ๋ก์ธ์ค๊ฐ ๋๊ธฐ.
๋น๋๊ธฐ(Asynchronous) ํต์
๋น๋๊ธฐ ํต์ ์ ์์ฒญ๊ณผ ์๋ต์ด ๋ ๋ฆฝ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค. ์ฆ, ์์ฒญ์ ๋ณด๋ธ ํ ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ์์ ์ ๊ณ์ ์ํํ ์ ์๋ค. ๋ฐ๋ผ์ ์๋ต์ ์์๊ฐ ์์ฒญ ๋ณด๋ธ ์์์ ๋ค๋ฅผ ์ ์๋ค.
๋น๋๊ธฐ Non-Blocking ํต์ ๊ฒฝ์ฐ ํ๋ก์ธ์ค A๊ฐ ํ๋ก์ธ์ค B์ ์์ฒญ์ ๋ณด๋ธ ํ, ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ์์ ์ ์ํํ๋ค. ์ฆ ์์ฒญ์ ๋ณด๋ธ ์งํ ์๋ฒ(ํ๋ก์ธ์ค B)๋ก๋ถํฐ์ ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ ์ด๊ถ์ด ํธ์ถ์(ํ๋ก์ธ์ค A)์๊ฒ ์ฆ์ ๋ฐํ๋๋ค. ํธ์ถ์๋ ๋ค๋ฅธ ์์ ์ ๊ณ์ ์ํํ ์ ์๋ค. ๊ฒฐ๊ณผ๋ ๋์ค์ ์ฝ๋ฐฑ(callback), Future, Promise ์ด๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ํตํด ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ค.
์ฅ์
1. ์์ฒญ-์๋ต์ด ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌ๋๋ฏ๋ก, ์์คํ ์์์ด ํจ์จ์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
2. ํ๋ก์ธ์ค ๊ฐ ์์กด์ฑ์ด ๋ฎ์์ง๊ณ , ์๋ต ์๊ฐ์ ๊ด๊ณ์์ด ์์ ์ ๊ณ์ ์ํํ ์ ์์.
3. ๋น๋๊ธฐ ๋ฐฉ์์ ๋๊ท๋ชจ ๋ถ์ฐ ์์คํ ์์ ๋์ ๋์์ฑ(Concurrency)์ ์ ๊ณต.
๋จ์
1. ์๋ต์ ์ฝ๋ฐฑ, Future, Promise ๋ฑ์ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฝ๋๊ฐ ๋ณต์กํด์ง ์ ์์.
2. ์์ฒญ๊ณผ ์๋ต์ด ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์, ์ค๋ฅ ์ถ์ ๋ฐ ๋๋ฒ๊น ์ด ์ด๋ ต์ต๋๋ค.
๋ํ์ ์ฌ์ฉ ์ฌ๋ก
1. ๋ฉ์์ง ํ(RabbitMQ, Kafka) : ์์ฒญ์ ๋ฉ์์ง๋ก ๋ฐํํ๊ณ , ์๋น์๊ฐ ์ด๋ฅผ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํ๋ค.
2. WebSocket : ํด๋ผ์ด์ธํธ-์๋ฒ ๊ฐ์ ์ค์๊ฐ ์๋ฐฉํฅ ๋น๋๊ธฐ ํต์ .
3. ๋น๋๊ธฐ ํ์ผ I/O: ํ์ผ ์์ ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ํํ์ฌ ํ๋ก์ธ์ค๊ฐ ๋ธ๋ก๋์ง ์์.
๋๊ธ