๐ก ๋ณธ ๋ฌธ์๋ 'ํ๋ก์ธ์ค ๊ฐ ํต์ ๋ฐฉ๋ฒ: IPC(Inter Process Communication)'์ ๋ํด ์ ๋ฆฌํด๋์ ๊ธ์ ๋๋ค.
ํ๋ก์ธ์ค๋ค์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ํธ๋ ๋ฆฝ์ ์ ๋๋ค. ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์์ ์ ์ผ๋ง ํ๋ฉฐ ์๋ก ๊ฐ์ญ์ ํ์ง ์์์. ํ์ง๋ง ํ์์ ๋ฐ๋ผ ํ๋ก์ธ์ค๊ฐ ์ ๋ณด๋ฅผ ๊ตํํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ฒ ์ฃ ? ์ด๋ ๋ณ๋ ์๋จ์์ด์ฉํ์ฌ ํ๋ก์ธ์ค ํต์ ํ๋ ๋ฐฉ๋ฒ๋ก ์ ํต์นญํ์ฌ IPC(Inter Process Communication) ๋ผ๊ณ ํฉ๋๋ค. ์ด๋ฌํ ํ๋ก์ธ์ค ๊ฐ ํต์ (IPC)๋ฅผ ์ ์ฉํ๊ธฐ ์ํด ์ฐพ์๋ณด๋ ์ค ๋ค์ํ ๋ฐฉ๋ฒ์ ์ ํ์๊ณ ์ด๋ฅผ ์ ๋ฆฌํ์์ผ๋ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
1. ํ๋ก์ธ์ค๊ฐ ํต์ (inter-process communication, ipc)
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)
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํด์ค๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋งต์ ์ด๋ฆฐ ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ์ ๋งตํ์์ผ์ ๊ณต์ ํ๋ ๋ฐฉ์์ด๋ค. (์ฆ ๊ณต์ ๋งค๊ฐ์ฒด๊ฐ ํ์ผ+๋ฉ๋ชจ๋ฆฌ)
- ์ฃผ๋ก ํ์ผ๋ก ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํด์ผ ํ ๋ ์ฌ์ฉํ๋ค.
- 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์ด ๊ฑธ๋ฆฌ๋ ์ฃผ์ํฉ๋๋ค) ์ค์๊ฐ ๋ฐ์ดํฐ๊ฐ ์ค์ํ๊ฒฝ์ฐ ์์ผ์ผ๋ก ์ปค๋ฅ์ ์ ์ก๊ณ ๊ฐ๋๊ฒ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ ๋๋ค.
์ฐธ๊ณ
- [Blog] ํ๋ก์ธ์ค๊ฐ ํต์ (IPC): https://frozenpond.tistory.com/126
- [Blog] ํ๋ก์ธ์ค ๊ฐ ํต์ ๋ฐฉ๋ฒ(Inter Process Communication, IPC): https://dar0m.tistory.com/233
'Study: ComputerScience(CS) > CS: Network' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Network] Message Queue(๋ฉ์์ง ํ) ์ ๋ฆฌ: MQTT (0) | 2023.02.06 |
---|---|
[Network] C/C++์์ ํ๋ก์ธ์ค ๊ฐ ํต์ (0) | 2023.01.17 |
[Network] Socket ์์ผ ํ๋ก๊ทธ๋๋ฐ (feat. sockaddr_in, IPv4...) (2) | 2022.12.16 |
[Network] Message Queue(๋ฉ์์งํ) ์ ๋ฆฌ (0) | 2022.11.26 |
[Network] ๋คํธ์ํฌ ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋ฆฌ (IP, Route, Subnet...) (1) | 2022.10.08 |