Study: ComputerScience(CS)/CS: Network

[Network] ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹  ๋ฐฉ๋ฒ•: IPC(Inter Process Communication)

DrawingProcess 2023. 1. 8. 14:08
๋ฐ˜์‘ํ˜•
๐Ÿ’ก ๋ณธ ๋ฌธ์„œ๋Š” 'ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹  ๋ฐฉ๋ฒ•: IPC(Inter Process Communication)'์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋†“์€ ๊ธ€์ž…๋‹ˆ๋‹ค.
ํ”„๋กœ์„ธ์Šค๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒํ˜ธ๋…๋ฆฝ์ ์ž…๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ž ์ž์‹ ์˜ ์ผ๋งŒ ํ•˜๋ฉฐ ์„œ๋กœ ๊ฐ„์„ญ์„ ํ•˜์ง€ ์•Š์•„์š”. ํ•˜์ง€๋งŒ ํ•„์š”์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์Šค๊ฐ„ ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ฒ ์ฃ ? ์ด๋•Œ ๋ณ„๋„ ์ˆ˜๋‹จ์„์ด์šฉํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์„ ํ†ต์นญํ•˜์—ฌ IPC(Inter Process Communication) ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ (IPC)๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ฐพ์•„๋ณด๋˜ ์ค‘ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์ ‘ํ•˜์˜€๊ณ  ์ด๋ฅผ ์ •๋ฆฌํ•˜์˜€์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

1. ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ†ต์‹ (inter-process communication, ipc)

๋ฆฌ๋ˆ…์Šค ์ปค๋„ ๊ตฌ์กฐ (์ถœ์ฒ˜ :  https://jwprogramming.tistory.com/54)

1.1 ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ์ด๋ž€?

ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด์— ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ํ–‰์œ„ ๋˜๋Š” ๊ทธ์— ๋Œ€ํ•œ ๋ฐฉ๋ฒ•์ด๋‚˜ ๊ฒฝ๋กœ๋ฅผ IPC๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ†ต์‹  ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์€ ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋ฉฐ, ๋™์‹œ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ฆ‰, ํ”„๋กœ์„ธ์Šค๋“ค์ด ๊ณต์œ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๋Š” ์ปค๋„์ด ์ œ๊ณตํ•˜๋Š” IPC๋ฅผ ์ด์šฉํ•ด์„œ ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ IPC๋Š” ์ปดํ“จํ„ฐ ๋‚ด๋ถ€์—์„œ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•œ ํ†ต์‹ ์˜ ์ผ์ข…์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋˜๊ณ , ์ธํ„ฐ๋„ท ํ†ต์‹ ์„ IPC์˜ ํ™•์žฅ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ†ต์‹ ์ด ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ํ†ต์‹ ๊ณผ ์œ ์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ).

1.2 ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ†ต์‹ ์„ ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ

1.2.1 ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒฝ์šฐ

ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ์˜ ์ฐจ์ด๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. fork()๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ, pthread_create()๋กœ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š”๋ฐ ์ด ๊ณผ์ •์—์„œ ํฐ ์ฐจ์ด๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๋Š” ์ƒ์„ฑ๋˜๋ฉด์„œ PC๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ๋“ฑ์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ณ„๋„์˜ ์ž์›์„ ํ• ๋‹นํ•˜์ง€๋งŒ, ์Šค๋ ˆ๋“œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„๊ณผ ์ž์›์„ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋กœ์„ธ์Šค๋Š” IPC๋ฅผ ํ†ตํ•ด ํ†ต์‹ ์„ ์œ„ํ•œ ๋ณ„๋„์˜ ๊ณต๊ฐ„์„ ๋งŒ๋“ค์–ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1.2.2 ์ค‘์š” ํ”„๋กœ์„ธ์Šค์˜ ์•ˆ์ •์„ฑ์„ ์œ„ํ•ด

ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์—์„œ ๊ณต์œ ์ž์›์„ ๋™๊ธฐํ™”ํ•œ ํ›„ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ ๊ณต์œ ๋ฅผ ์ƒ๋Œ€์ ์œผ๋กœ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฃฝ์–ด๋ฒ„๋ฆฌ๋ฉด ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค์˜ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ์ฃฝ์–ด๋ฒ„๋ ค ์œ„ํ—˜ํ•œ ์ƒํ™ฉ์ด ์˜ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด api๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ž‘์—…๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„/์ ์žฌํ•˜๋Š” ์ž‘์—…์„ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์—์„œ ํ•˜๋Š” ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ ๋ถ„์„ ๊ณผ์ •์— exception์ด ๋ฐœ์ƒํ•ด ํ”„๋กœ๊ทธ๋žจ์ด ๋‚ด๋ ค๊ฐ„๋‹ค๋ฉด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ api๊ฐ€ ๋‚˜๊ฐ€์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1.2.3 ์‹ฑ๊ธ€์ฝ”์–ด๋งŒ ์“ฐ๋Š” ์–ธ์–ด์—์„œ์˜ cpu์‚ฌ์šฉ์œจ์„ ๋†’์—ฌ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ

์‹ฑ๊ธ€ ์ฝ”์–ด๋งŒ ์‚ฌ์šฉํ•˜๋Š” ํŒŒ์ด์ฌ๋„ ์Šค๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ job(์Šค๋ ˆ๋“œ)์ด ๋งŽ์ด ์ƒ์„ฑํ•˜๋”๋ผ๋„ ์šด์˜์ฒด์ œ๊ฐ€ ํ•˜๋‚˜์˜ ์ฝ”์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋‹ˆ ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ๋ฝ‘์•„๋‚ด๊ธฐ ํž˜๋“ญ๋‹ˆ๋‹ค. job์ด ๋งŽ์ด ์ƒ์„ฑ๋˜์•ผ ํ•˜๋Š”๊ฒฝ์šฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‚˜๋ˆ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1.3 ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”

์ด๋Ÿฌํ•œ IPC ํ†ต์‹ ์—์„œ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ณ  ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์„ธ๋งˆํฌ์–ด์™€ ๋ฎคํ…์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด๋Š” ๊ณต์œ ๋œ ์ž์›์— ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์ ‘๊ทผ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

์„ธ๋งˆํฌ์–ด(Semaphore)

  • ์œ„์˜ ๋‹ค๋ฅธ IPC ์„ค๋น„๋“ค์ด ๋Œ€๋ถ€๋ถ„ ํ”„๋กœ์„ธ์Šค๊ฐ„ ๋ฉ”์‹œ์ง€ ์ „์†ก์„ ๋ชฉ์ ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์— ๋ฐ˜ํ•ด, ์„ธ๋งˆํฌ์–ด๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ณ  ๋ณดํ˜ธํ•˜๋Š”๋ฐ ๋ชฉ์ ์„ ๋‘”๋‹ค.
  • ๊ณต์œ ๋œ ์ž์›์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•˜๋ฉด ์•ˆ๋˜๋ฉฐ, ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

2. ํ”„๋กœ์„ธ์Šค ํ†ต์‹ ์˜ ์ข…๋ฅ˜

ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ†ต์‹ ์˜ ๋ฐฉ๋ฒ•์—๋Š” ํฌ๊ฒŒ ์šด์˜์ฒด์ œ์˜์—ญ์—์„œ ์ง€์›ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์†Œ์ผ“(๋„คํŠธ์›Œํฌ)์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค.

2.1 ์šด์˜์ฒด์ œ์—์„œ ์ง€์›ํ•˜๋Š” ๋ฐฉ์‹

  • ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ(shared memory)
  • ๋ฉ”๋ชจ๋ฆฌ ๋งต(Memory Map)
  • ๋ฉ”์„ธ์ง€ ํŒจ์‹ฑ (Message Passing): ํŒŒ์ดํ”„(pipe)
  • ์ปค๋„ ๋ฉ”์‹œ์ง€ํ(kernel messageq)
  • ํŒŒ์ผ(file)...

2.2 ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹

  • ์†Œ์ผ“(tcp, udp ๋“ฑ), Http ๋“ฑ
  • ๋„คํŠธ์›Œํฌ ๋ฉ”์‹œ์ง€ํ(kafka, rabbitMQ ๋“ฑ)
  • RPC(Remote Procedure Call)
  • DBMS, ์บ์‹œ(redis)...

3. ํ”„๋กœ์„ธ์Šค ํ†ต์‹ ์˜ ์ข…๋ฅ˜๋ณ„ ์ƒ์„ธ

3.1 ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ (Shared Memory)

  • ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ๊ณต์œ ํ•˜๋„๋ก ์ง€์›ํ•˜๋Š” ์„ค๋น„. ํ”„๋กœ์„ธ์Šค๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•œ๋‹ค.
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์ปค๋„์— ์š”์ฒญํ•˜๋ฉด ์ปค๋„์€ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์— ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•œ๋‹ค. ์ดํ›„ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฑด ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ฐ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ฒจ๋ถ€(attach)ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๊ฒŒ ๋œ๋‹ค.
    • = ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ฒจ๋ถ€๋จ
  • ํ”„๋กœ์„ธ์Šค๊ฐ„ Read, Write๋ฅผ ๋ชจ๋‘ ํ•„์š”๋กœ ํ• ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋Œ€๋Ÿ‰์˜ ์ •๋ณด๋ฅผ ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ค‘๊ฐœ์ž ์—†์ด ๊ณง๋ฐ”๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  IPC ์ค‘์—์„œ ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

3.2 ๋ฉ”๋ชจ๋ฆฌ ๋งต(Memory Map)

๋ฉ”๋ชจ๋ฆฌ ๋งต(์ถœ์ฒ˜ :  https://doitnow-man.tistory.com/110)

  • ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์ฒ˜๋Ÿผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•ด์ค€๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ ๋งต์€ ์—ด๋ฆฐ ํŒŒ์ผ์„ ๋ฉ”๋ชจ๋ฆฌ์— ๋งตํ•‘์‹œ์ผœ์„œ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. (์ฆ‰ ๊ณต์œ  ๋งค๊ฐœ์ฒด๊ฐ€ ํŒŒ์ผ+๋ฉ”๋ชจ๋ฆฌ)
  • ์ฃผ๋กœ ํŒŒ์ผ๋กœ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • FILE IO ๊ฐ€ ๋Š๋ฆด ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค.
  • ๋Œ€๋ถ€๋ถ„ ์šด์˜ ์ฒด์ œ์—์„œ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‹คํ–‰ ํŒŒ์ผ์˜ ๊ฐ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์‚ฌ์ƒํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋งต ํŒŒ์ผ์„ ์ด์šฉํ•œ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ ๋งต ํŒŒ์ผ์€ ํŒŒ์ผ์˜ ํฌ๊ธฐ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜๋Š” ์—†์œผ๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ ๋งต ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ด์ „, ๋˜๋Š” ์ดํ›„์—๋งŒ ํŒŒ์ผ์˜ ํฌ๊ธฐ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

3.3 ๋ฉ”์„ธ์ง€ ํŒจ์‹ฑ (Message Passing): ํŒŒ์ดํ”„(pipe)

ํ†ต์‹ ์„ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„(๋ฒ„ํผ)์„ ์ƒ์„ฑํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ฒŒ๋” ํ•œ๋‹ค.

3.3.1 ์ต๋ช… ํŒŒ์ดํ”„ (Anonymous PIPE)

  • ํ†ต์‹ ํ•  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ.
    • ๋ถ€๋ชจ-์ž์‹ or ํ˜•์ œ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋‹จํ†ต์‹ ์— ์‚ฌ์šฉ
    • ์™ธ๋ถ€ ํ”„๋กœ์„ธ์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • ํŒŒ์ดํ”„๋Š” ๋‘ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ , ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ธฐ๋งŒ, ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ๋งŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•œ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•œ ํŒŒ์ดํ”„์˜ ํŠน์ง•๋•Œ๋ฌธ์— ๋ฐ˜์ด์ค‘(Half-Duplex) ํ†ต์‹ ์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค.
  • ์†ก/์ˆ˜์‹ ์„ ๋ชจ๋‘ ํ•˜๊ธฐ ์›ํ•œ๋‹ค๋ฉด ๋‘ ๊ฐœ์˜ ํŒŒ์ดํ”„๋ฅผ ๋งŒ๋“ค์–ด์•ผ ๊ฐ€๋Šฅ
  • ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • pipe ํ•จ์ˆ˜๋กœ ์ƒ์„ฑ
  • ๋‹จ์ 
    • ๋ฐ˜์ด์ค‘ ํ†ต์‹  → ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ํ†ต์‹ ์„ ๋ชจ๋‘ ํ•ด์•ผํ•œ๋‹ค๋ฉด, PIPE ๋‘ ๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋ฏ€๋กœ ๊ตฌํ˜„์ด ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.
    • ์ „์ด์ค‘ ํ†ต์‹ ์„ ๊ณ ๋ คํ•ด์•ผ๋  ์ƒํ™ฉ์ด๋ผ๋ฉด ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์€ ์„ ํƒ์ด ์•„๋‹ˆ๋‹ค.

3.3.2 ๋„ค์ž„๋“œ ํŒŒ์ดํ”„ (Named PIPE)

  • ์ „ํ˜€ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์˜ ์–‘ํ†ต์‹ ์— ์‚ฌ์šฉ
  • ์ต๋ช… ํŒŒ์ดํ”„์˜ ํ™•์žฅ๋œ ์ƒํƒœ๋กœ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ๋ฌด๊ด€ํ•œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋„ ํ†ต์‹  ๊ฐ€๋Šฅ
    • ํ”„๋กœ์„ธ์Šค ํ†ต์‹ ์„ ์œ„ํ•ด ์ด๋ฆ„์ด ์žˆ๋Š” ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•˜๋‹ค.
    • FIFO ๋ผ ๋ถˆ๋ฆฌ๋Š” ํŠน์ˆ˜ ํŒŒ์ผ์„ ์ด์šฉํ•ด ์„œ๋กœ ๊ด€๋ จ ์—†๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ์— ์‚ฌ์šฉํ•œ๋‹ค.
    • = ์™ธ๋ถ€ ํ”„๋กœ์„ธ์Šค์™€ ํ†ต์‹  ๊ฐ€๋Šฅ
  • mkfifo or mknod ํ•จ์ˆ˜๋กœ ์ƒ์„ฑ
  • ๋‹จ์ 
    • ๋ฐ˜์ด์ค‘ ํ†ต์‹  → ์ „์ด์ค‘ ํ†ต์‹ ์„ ์œ„ํ•ด์„œ๋Š” ์ต๋ช… ํŒŒ์ดํ”„์ฒ˜๋Ÿผ 2๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ๊ฐ€๋Šฅํ•˜๋‹ค.

3.4 ์†Œ์ผ“ (Socket)

 
  • Unix ๋„๋ฉ”์ธ ์†Œ์ผ“ ๋˜๋Š” IPC ์†Œ์ผ“์€ ๋™์ผํ•œ ํ˜ธ์ŠคํŠธ ์šด์˜ ์ฒด์ œ์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ํ†ต์‹  ์—”๋“œ ํฌ์ธํŠธ์ด๋‹ค.
  • ๋„คํŠธ์›Œํฌ ์†Œ์ผ“ ํ†ต์‹ ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•œ๋‹ค.
    • ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•ด ์–‘์ชฝ PC์—์„œ ๊ฐ๊ฐ ์ž„์˜์˜ ํฌํŠธ๋ฅผ ์ •ํ•˜๊ณ  ํ•ด๋‹น ํฌํŠธ ๊ฐ„์˜ ๋Œ€ํ™”๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐฉ์‹์ด๋‹ค.
    • ์ด ๋•Œ ๊ฐ๊ฐ PC์˜ PORT๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ์†Œ์ผ“์€ ๊ฐ๊ฐ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์ด๋‹ค.
    • ์ฆ‰ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋Š” ์ž„์˜์˜ PORT๋ฅผ ๋งก์•„ ๋ฐ์ดํ„ฐ๋ฅผ ์†ก์ˆ˜์‹  ํ•˜๋Š” ์—ญํ• ์„ ์ง„ํ–‰ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ธ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.
    • ๊ฐ๊ฐ์˜ PC์—์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ด ํƒ€ PC PORT์— ์—ฐ๊ฒฐํ•˜๋ผ๋Š” ๋ช…๋ น์„ ๋ณด๋‚ด๊ฒŒ ๋˜๋ฉด ๋‘ ํ”„๋กœ์„ธ์Šค๋Š” ์„œ๋กœ ํ™•์ธ๊ณผ์ •์„ ๊ฑฐ์ณ ์—ฐ๊ฒฐ์„ ์ง„ํ–‰ํ•˜๊ณ  ์—ฐ๊ฒฐ ํ›„ ๋งˆ์น˜ PIPE์™€ ๊ฐ™์ด 1 ๋Œ€ 1๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์†Œ์ผ“์„ ํ†ตํ•ด์„œ ํ†ต์‹ ํ•˜๋Š” ๊ตฌ์กฐ๋กœ, ์›๊ฒฉ์—์„œ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ „์ด์ค‘(Full Duplex, ์–‘๋ฐฉํ–ฅ) ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์„œ๋ฒ„(bind, listen, accept), ํด๋ผ์ด์–ธํŠธ(connect) ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ ์šฉ์ด.
  • ์†Œ์ผ“ํ†ต์‹ ์€ 0๊ณผ1์„ ์ด์šฉํ•ด ํ†ต์‹ ํ•˜๋ฏ€๋กœ ์ง๋ ฌํ™” ์—ญ ์ง๋ ฌํ™”๋ฅผ ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ค‘๋Œ€ํ˜• ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ฐธ๊ณ : ์†Œ์ผ“์„ ์ด์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜๋Š” ๋ฐฉ๋ฒ• [Network] Socket ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (feat. sockaddr_in, IPv4...)

3.5 ๋ฉ”์‹œ์ง€ ํ(Message Queue)

 
  • ์ž…์ถœ๋ ฅ ๋ฐฉ์‹์€ Named ํŒŒ์ดํ”„์™€ ๋™์ผํ•˜๋‹ค.
  • ์ฃผ๋กœ MSA๊ฐ™์€ ํ™˜๊ฒฝ์—์„œ http api์š”์ฒญ์€ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ„์˜ ํ†ต์‹ ๊ณผ์ •์ค‘ ๋ธ”๋ฝ๋  ํ•„์š”๊ฐ€ ์—†๋Š”๊ณณ์—์„œ ๋ธ”๋ฝ๋˜๊ฑฐ๋‚˜, IO๊ฐ€ ์˜ค๋ž˜๊ฑธ๋ฆฌ๋Š” ์„œ๋ฒ„๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ณ‘๋ชฉ์— ๊ฑธ๋ ค ์„ฑ๋Šฅ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ์ ์€
    • ๋ฉ”์‹œ์ง€ ํ๋Š” ํŒŒ์ดํ”„์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์ด ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด๋‹ค. (๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ PIPE)
    • PIPE๋‚˜ FIFO์™€๋Š” ๋‹ฌ๋ฆฌ, ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ„ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌ ํ•  ์ˆ˜ ์žˆ์Œ
  • ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ์— ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์ด๋ฉด์„œ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฉ”์‹œ์ง€์˜ ์ ‘๊ทผ์„ ์œ„ํ•ด์„œ๋Š” ํ‚ค(key)๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  • e.g. kafka, rabbitMQ ๋“ฑ์˜ ๋„คํŠธ์›Œํฌ ๋ฉ”์‹œ์ง€ํ

3.6 RPC(Remote Procedure Call)

RPC ๋ฐฉ๋ฒ•์€ ๋ถ„์‚ฐ ๋„คํŠธ์›Œํฌ ๋ง์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋ณ„๋„์˜ ์›๊ฒฉ ์ œ์–ด๋ฅผ ์œ„ํ•œ ์ฝ”๋”ฉ ์—†์ด ๋‹ค๋ฅธ ์ฃผ์†Œ ๊ณต๊ฐ„์—์„œ ํ•จ์ˆ˜๋‚˜ ํ”„๋กœ์‹œ์ €๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹  ๊ธฐ์ˆ ์ด๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ์„ ์ด์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰ ํ”„๋กœ๊ทธ๋žจ์— ๋กœ์ปฌ ์œ„์น˜์— ์žˆ๋“  ์›๊ฒฉ ์œ„์น˜์— ์žˆ๋“  ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•ด๋‹น ๋ฐฉ๋ฒ•์€ ๋ถ„๋ฆฌ๋œ PC์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋งˆ์น˜ ๋‚ด PC์— ์กด์žฌํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•˜๋Š” ํ†ต์‹ ๋ฐฉ๋ฒ•์ด๋‹ค. ์Šคํ…(stub)์„ ํ†ตํ•ด์„œ ๋งˆ์น˜ ์ž์‹ ์˜ ๋””์Šคํฌ์— ์กด์žฌํ•˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ์ฐฉ๊ฐ์„ ์ผ์œผ์ผœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • ์Šคํ… : ๋ฆฌ๋ˆ…์Šค์—์„œ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ผ๋ถ€๋ถ„ ์ค‘ ํ•˜๋‚˜
  • ํ”„๋กœ์‹œ์ € : ๋ฃจํ‹ด, ์„œ๋ธŒ๋ฃจํ‹ด, ํ•จ์ˆ˜์™€ ๊ฐ™์€ ๋œป์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ ํ•˜๋‚˜์˜ ํ”„๋กœ์‹œ์ €๋Š” ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋žจ์˜ ์ผ๋ถ€์ด๋‹ค. ๋˜๋Š” ์–ด๋–ค ํ–‰๋™์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ จ์˜ ์ž‘์—… ์ˆœ์„œ๋ฅผ ๋งํ•œ๋‹ค.

์ด๋ฅผ ๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌํ™”ํ•œ ๋Œ€ํ‘œ์ ์ธ ํ”„๋กœ์ ํŠธ๋Š” gRPC, json-rpc๋กœ, gRPC์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ ํ•˜๋‹จ์˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. 

์ •๋ฆฌ

IPC ์ข…๋ฅ˜  PIPE Named PIPE  Mesage Queue  Shared Memory  Memory Map  Socket 
์‚ฌ์šฉ
์‹œ๊ธฐ
 ๋ถ€๋ชจ ์ž์‹ ๊ฐ„
๋‹จ๋ฐฉํ–ฅ ํ†ต์‹  ์‹œ
๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์™€ 
๋‹จ๋ฐฉํ–ฅ ํ†ต์‹  ์‹œ 
๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์™€
 ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹  ์‹œ  
๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์™€
์–‘๋ฐฉํ–ฅ ํ†ต์‹  ์‹œ 
๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์™€ 
์–‘๋ฐฉํ–ฅ ํ†ต์‹  ์‹œ 
 ๋‹ค๋ฅธ ์‹œ์Šคํ…œ๊ฐ„ 
์–‘๋ฐฉํ–ฅ ํ†ต์‹  ์‹œ
 ๊ณต์œ 
๋งค๊ฐœ์ฒด
ํŒŒ์ผ  ํŒŒ์ผ  ๋ฉ”๋ชจ๋ฆฌ  ๋ฉ”๋ชจ๋ฆฌ  ํŒŒ์ผ+๋ฉ”๋ชจ๋ฆฌ  ์†Œ์ผ“ 
ํ†ต์‹ 
๋‹จ์œ„
 Stream Stream ๊ตฌ์กฐ์ฒด ๊ตฌ์กฐ์ฒด  ํŽ˜์ด์ง€ Stream 
 ํ†ต์‹ 
 ๋ฐฉํ–ฅ
 ๋‹จ ๋ฐฉํ–ฅ ๋‹น ๋ฐฉํ–ฅ  ๋‹จ ๋ฐฉํ–ฅ  ์–‘ ๋ฐฉํ–ฅ  ์–‘ ๋ฐฉํ–ฅ  ์–‘ ๋ฐฉํ–ฅ 
ํ†ต์‹  
๊ฐ€๋Šฅ 
๋ฒ”์œ„
 ๋™์ผ ์‹œ์Šคํ…œ ๋™์ผ ์‹œ์Šคํ…œ ๋™์ผ ์‹œ์Šคํ…œ  ๋™์ผ ์‹œ์Šคํ…œ  ๋™์ผ ์‹œ์Šคํ…œ  ๋™์ผ + ์™ธ๋ถ€ 
์‹œ์Šคํ…œ 

๋งˆ๋ฌด๋ฆฌ

์ปค๋„์˜ IPC ๊ธฐ์ˆ ์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ(์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ, ๋ฐ์Šคํฌํƒ‘ ์•ฑ)์ด๋‚˜ ํŒŒ์ด์ฌ์˜ ์„ฑ๋Šฅ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ทธ ์™ธ์—๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋Ÿฌ๋‹์ปค๋ธŒ์—†์ด ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” DBMS๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด ์ข‹์œผ๋ฉฐ (ํ•˜๋‚˜์˜ ์„œ๋ฒ„์—์„œ ๊ณต์œ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ sqlite๋‚˜ h2๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.(filedb๋Š” insert update ๋“ฑ์˜ transaction์‹œ lock์ด ๊ฑธ๋ฆฌ๋‹ˆ ์ฃผ์˜ํ•ฉ๋‹ˆ๋‹ค) ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ค‘์š”ํ•œ๊ฒฝ์šฐ ์†Œ์ผ“์œผ๋กœ ์ปค๋„ฅ์…˜์„ ์žก๊ณ  ๊ฐ€๋Š”๊ฒƒ๋„ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ 

๋ฐ˜์‘ํ˜•