Computer Science/Network

IPC ํŒจํ„ด (Sync ํ†ต์‹  vs Async ํ†ต์‹ )

ํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜ค์›” 2024. 10. 26.

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: ํŒŒ์ผ ์ž‘์—…์„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ธ”๋ก๋˜์ง€ ์•Š์Œ.

 

๋Œ“๊ธ€