์ถ์ฒ
ChatGPT
https://www.ibm.com/docs/ko/aix/7.3?topic=concepts-remote-procedure-call
https://www.geeksforgeeks.org/what-is-rpc-mechanism-in-distributed-system/
https://www.guru99.com/remote-procedure-call-rpc.html
https://engineeringhulk.com/remote-procedure-call-rpc/
RPC Remote Procedure Call ์๊ฒฉ ํ๋ก์์ ํธ์ถ์ด๋
RPC๋ ์๊ฒฉ์ผ๋ก ๋ค๋ฅธ ์ฃผ์ ๊ณต๊ฐ์ด๋ ๋ค๋ฅธ ์ปดํจํฐ์์ ์คํ๋๊ณ ์๋ ํ๋ก์์ (ํจ์๋ ๋ฉ์๋)๋ฅผ ํธ์ถํ๋๋ก ํ๋ ๊ธฐ์ ์ด๋ค. ํด๋ผ์ด์ธํธ๊ฐ ๋ง์น ๋ก์ปฌ์ธ ๊ฒ์ฒ๋ผ ์๊ฒฉ ์๋ฒ์์ ๊ธฐ๋ฅ์ ์คํํ ์ ์๋๋ก ํ๋ ๋ถ์ฐ ์์คํ ์ ํ๋กํ ์ฝ๋ก ๊ตฌํ๋์๋ค.
๐ค ํ๋ก์์ ๋
ํน์ ์์ ์ ์ํํ๋ ๋ช ๋ น์ด๋ค์ ์งํฉ. ํธ์ถํ ์ ์๋ ํจ์(ํด๋์ค์ ์ํ์ง ์๊ณ ์ ์ญ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ)์ ๋ฉ์๋(๊ฐ์ฒด๋ ํด๋์ค์ ์ผ๋ถ๋ถ).
๐ค ํ๋ก์์ ์ ํจ์๋ ๋ญ๊ฐ ๋ค๋ฅธ๊ฐ
ํ๋ก์์ ๋ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ ๋ฐํํ์ง ์๊ณ ์์ ์ ์ํํ๋ ๋ช ๋ น์ด๋ค์ ์งํฉ์ด๋ค. ์์ ์ ์ํํ๋ ๊ฒ์ ์ค์ ์ ๋๋ค.
ํจ์๋ ๋ฐํ๊ฐ์ด ์๋ ๋ช ๋ น์ด๋ค์ ์งํฉ์ด๋ค. ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ์ค์ ์ ๋๋ค.
์ผ๋ถ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์๋ ๋ ์ฉ์ด ํผ์ฉ๋๊ธฐ๋ ํ๋ค.
๐ค ํ๋กํ ์ฝ์ด๋
์ปดํจํฐ๋ ์์คํ ๊ฐ์ ๋ฐ์ดํฐ ์ ์ก์ ํ ๋ ๋ฐ๋ฅด๋ ๊ท์น๊ณผ ์ ์ฐจ๋ฅผ ์ ์ํ ํ์ค
RPC ์ฃผ์ ํน์ง
1. ํฌ๋ช ์ฑ
์๊ฒฉ ํ๋ก์์ ํธ์ถ์ ๋คํธ์ํฌ ํต์ ์ ๋ณต์ก์ฑ์ ์ถ์ํํด์ ์๊ฒฉ ํ๋ก์์ ๊ฐ ๋ง์น ๋ก์ปฌ ํจ์ ํธ์ถ์ฒ๋ผ ๋ณด์ธ๋ค. ๊ฐ๋ฐ์๋ ๋คํธ์ํฌ ํต์ ์ ๋ณต์ก์ฑ์ ์ ๊ฒฝ ์ธ ํ์์์ด, ์๊ฒฉ ์์คํ ์ ํจ์๋ฅผ ํธ์ถํ ์ ์์ด ๊ฐ๋ฐ์ ๋จ์ํํ๋ค.
2. ๋๊ธฐ์ ํธ์ถ
๋๋ถ๋ถ RPC๋ ๋๊ธฐ์ ์ผ๋ก ์๋ํด์ ํธ์ถ์๋ ์๊ฒฉ ํ๋ก์์ ๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค. ๋น๋๊ธฐ์ RPC๋ ๊ฐ๋ฅํ๋ค.
3. ์ธ์ด ๋ฐ ํ๋ซํผ ๋ ๋ฆฝ์ฑ
๋ค์ํ ํ๋ก๊ทธ๋จ์ด ์ธ์ด๋ ํ๋ซํผ์์ ์ฌ์ฉํ ์ ์๋ค. ํธ์ถํ๋ ์ชฝ๊ณผ ํธ์ถ๋๋ ์ชฝ์ด ๋ฐ๋์ ๋์ผํ ์์คํ ์ผ ํ์๊ฐ ์๋ค.
4. ์ธํฐํ์ด์ค ์ ์
RPC๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํธ์ถํ๊ณ ์ ํ๋ ํจ์๋ค์ ์ธํฐํ์ด์ค๊ฐ ์ ์๋์ด ์์ด์ผ ํ๋ค. ์ด๋ฅผ ์ํด ์ธํฐํ์ด์ค ์ ์ ์ธ์ด(IDL: Interface Definition Language)๋ฅผ ์ฌ์ฉํด ํจ์ ์๊ทธ๋์ฒ๋ฅผ ์ ์ํ ์ ์๋ค.
๐ค IDL์ด๋
์๋ก ๋ค๋ฅธ ์์คํ ์ด๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ฐ์ ํต์ ํ ๋, ํจ์๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ ์ธ์ด. ์ด๋ฅผ ํตํด ๋ถ์ฐ ์์คํ ์์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์๋ก ๋ค๋ฅธ ์ธ์ด๋ก ๊ตฌํ๋์ด ์๋๋ผ๋, ์๋ก์ ์ธํฐํ์ด์ค๋ฅผ ์ดํดํ๊ณ ์ํธ์์ฉํ ์ ์๊ฒ ๋๋ค.
RPC ์ข ๋ฅ
์ฝ๋ฐฑ RPC Callback RPC
์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ์ญ์ผ๋ก ํ๋ก์์ ๋ฅผ ํธ์ถํ๋ ํํ. ์ผ๋ฐ์ ์ธ RPC๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ํ๋ก์์ ๋ฅผ ํธ์ถํ๋ ๋ฐฉ์์ด์ง๋ง, ์ฝ๋ฐฑ RPC๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ฉด, ์๋ฒ๊ฐ ๋ค์ ํด๋ผ์ด์ธํธ์๊ฒ ํน์ ์์ ์ ์ํํ๋๋ก ์์ฒญํ ์ ์๋ ๊ธฐ๋ฅ์ ํฌํจํ๋ค.
ํด๋ผ์ด์ธํธ๋ ์๋ฒ๋ก๋ถํฐ ์ฝ๋ฐฑ์ด ์ฌ ๋๊น์ง ๋๊ธฐ ์ํ๊ฐ ๋ ์ ์์ด์ ๋์์ฑ ๋ฌธ์ ๋ ๊ต์ฐฉ ์ํ(deadlock)๊ฐ ๋ฐ์ํ ์ ์๋ค.
์๋ฐฉํฅ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํด์ ํผ์ด ํฌ ํผ์ด ๋ชจ๋ธ์ ์ง์ํ ์ ์๋ค.
๋ถ์ฐ ์์คํ ์ด๋ ๋๊ท๋ชจ ๋คํธ์ํฌ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ๋๋ฉฐ, ์๋ฐฉํฅ ํต์ ์ด ํ์ํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
๐ค ๊ต์ฐฉ ์ํ : ๋ ์ด์์ ํ๋ก์ธ์ค๊ฐ ์๋ก ์ ์ ํ ์์์ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๋ฌดํํ ๋๊ธฐํ๋ ์ํ
๐ค ํผ์ด ํฌ ํผ์ด(Peer-to-Peer) ๋ชจ๋ธ : ๊ฐ ๋ ธ๋๊ฐ ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ญํ ์ ๋์์ ์์ ํ๋ฉฐ, ์๋ก ์ง์ ์์์ ๊ณต์ ํ๊ณ ํต์ ํ๋ ๋คํธ์ํฌ ๊ตฌ์กฐ
- ๐ค ๋ ธ๋ : ๋คํธ์ํฌ ๋ด์์ ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํ๊ฑฐ๋ ์์์ ๊ณต์ ํ๋ ๊ฐ๋ณ์ ์ธ ์ฅ์น๋ ์์คํ
๋ธ๋ก๋์บ์คํธ RPC Broadcast RPC
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์๋ฒ๋ก ๋์์ ๋ธ๋ก๋์บ์คํธ๋๋ฉฐ, ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ ์๋ฒ๊ฐ ์๋ต์ ๋ณด๋ธ๋ค.
๊ฐ ์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๊ณ ๋ธ๋ก๋์บ์คํธ๋ ๋ฉ์์ง์ ๋ํ ์๋ต์ ์ ํ์ ์ผ๋ก ๋ณด๋ผ ์ ์๋ ์๋ฒ์ ์์จ์ฑ์ด ์๋ค.
๋คํธ์ํฌ ์์ ๋ชจ๋ ์๋ฒ๋ก ๋ฉ์์ง๊ฐ ์ ์ก๋๊ธฐ ๋๋ฌธ์ ๋คํธ์ํฌ ํธ๋ํฝ์ด ์ฆ๊ฐํ ์ ์์ด์ ํฐ ๊ท๋ชจ์ ๋คํธ์ํฌ์์ ์ ์คํ ์ค๊ณ๊ฐ ํ์ํ๋ค.
์ฌ๋ฌ ์๋ฒ๊ฐ ๋์ผํ ์์ ์ ์ํํ ์ ์๋ ํ๊ฒฝ์์ ์ ์ฉํ๋ค. ๋ถ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฉํฐ์บ์คํธ ๋คํธ์ํฌ์์ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ๋ฌ ์ญ์ ์์ฒญ์ ๋ณด๋ด๊ณ , ์ด๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ์๋ฒ์์ ๊ฐ์ฅ ๋น ๋ฅธ ์๋ต์ ๋ฐ์ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋ ์ ์๋ค.
๐ค ๋ฉํฐ์บ์คํธ ๋คํธ์ํฌ๋
ํ ์ถ๋ฐ์ง์์ ์ฌ๋ฌ ์์ ์ง๋ก ๋ฐ์ดํฐ๋ฅผ ๋์์ ์ ์กํ ์ ์๋ ๋คํธ์ํฌ ํต์ ๋ฐฉ์. ํน์ ๊ทธ๋ฃน์ ์ํ ๋ค์์ ์์ ์์๊ฒ๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์กํด์, ๋คํธ์ํฌ ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. ๋์ผํ ๋ฐ์ดํฐ ํจํท์ ์ฌ๋ฌ ๋ฒ ์ ์กํ ํ์ ์์ด, ํ ๋ฒ์ ์ ์ก์ผ๋ก ์ฌ๋ฌ ๋์์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์๋ค. ๋ฐ์ดํฐ๊ฐ ๋คํธ์ํฌ ์์์ ํ ๋ฒ๋ง ์ ์ก๋ ํ, ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ํ์๊ฐ ์๋ ๋ ธ๋(์์ ์)๋ก ๋ณต์ฌ๋๋ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค.
- ์ฃผ์ ํน์ง
- ๊ทธ๋ฃน ํต์ : ์ฌ๋ฌ ์์ ์๋ฅผ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ฏ๋ก, ๋ชจ๋ ๋คํธ์ํฌ ์ฐธ์ฌ์์๊ฒ ๋ธ๋ก๋์บ์คํธํ๋ ๋ฐฉ์๊ณผ ๋ฌ๋ฆฌ ํน์ ๊ทธ๋ฃน ๋ด์ ์์ ์๋ง ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋๋ค.
- ํจ์จ์ฑ : ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ค์์๊ฒ ์ ์กํ ๋ ๋คํธ์ํฌ ๋์ญํญ์ ์ ์ฝํ ์ ์์ด, ํนํ ์คํธ๋ฆฌ๋ฐ ๋ฏธ๋์ด, ์ค์๊ฐ ์ฃผ์ ๊ฑฐ๋ ์์คํ , ๋น๋์ค ํ์ ๋ฑ ๋์ฉ๋ ๋ฐ์ดํฐ ์ ์ก์ด ํ์ํ ํ๊ฒฝ์์ ์ ๋ฆฌํ๋ค
- IP ๋ฉํฐ์บ์คํธ : ์ฃผ๋ก IP ๊ธฐ๋ฐ ๋คํธ์ํฌ์์ ์ฌ์ฉ๋๋ฉฐ, IGMP(Internet Group Management Protocal) ๊ฐ์ ํ๋กํ ์ฝ ์ฌ์ฉํด ๋ฉํฐ์บ์คํธ ๊ทธ๋ฃน์ ๊ด๋ฆฌํ๋ค.
- ๐ค IGMP : IP ๋ฉํฐ์บ์ค๋ฅผ ๊ทธ๋ฃน์ ๊ด๋ฆฌํ๋ ํ๋กํ ์ฝ. ํธ์คํธ(์ปดํจํฐ ๋ฑ)๊ณผ ๊ทผ์ฒ์ ๋ผ์ฐํฐ ์ฌ์ด์์ ๋ฉํฐ์บ์คํธ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ๋๊ฐ๋ ์์ฒญ์ ๊ด๋ฆฌํ๋ค.
๋ฐฐ์น๋ชจ๋ RPC Batch-mode RPC
ํด๋ผ์ด์ธํธ ์ธก์์ ์ฌ๋ฌ RPC ์์ฒญ์ ์์งํด ํ๋ฒ์ ์๋ฒ๋ก ์ ์กํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฌ๋ฌ ๊ฐ์ ๋ณ๋ ์์ฒญ์ ๋ณด๋ด๋ ๋คํธ์ํฌ ์ค๋ฒํค๋๊ฐ ์ค์ด๋ ๋ค.
์ฌ๋ฌ RPC ์์ฒญ์ ํ๋์ ์ ์ก ๋ฒํผ์ ์ ์ฅํด, ๋คํธ์ํฌ๋ฅผ ํตํด ํ ๋ฒ์ ์๋ฒ๋ก ์ ์กํ๋ค. ์ด๋ฅผ ํตํด ๊ฐ ์์ฒญ์ ๊ฐ๋ณ์ ์ผ๋ก ์ ์กํ ๋ ๋ฐ์ํ๋ ๋คํธ์ํฌ ์ง์ฐ ์๊ฐ์ ์ค์ผ ์ ์์ง๋ง, ์ค์๊ฐ ์๋ต์ด ํ์ํ ๊ฒฝ์ฐ์๋ ์ ํฉํ์ง ์์ ์ ์๋ค.
๋คํธ์ํฌ ์ค๋ฒํค๋๋ฅผ ์ค์ฌ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์์ฐ๋ง, ๋ฎ์ ํธ์ถ๋น๋๋ฅผ ์๊ตฌํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํ๋ค.
๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ ์กํ๊ธฐ ๋๋ฌธ์ ์ ๋ขฐ์ฑ์ด ์๋ ์ ์ก ํ๋กํ ์ฝ์ด ํ์ํ๋ค.
๋ถ์ฐ ์์คํ ์ด๋ ๋คํธ์ํฌ ํต์ ์ด ๋น๋ฒํ์ง ์๋ ํ๊ฒฝ์์ ์ ์ฉํ๋ค.
Stateless RPC
์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ด์ ์์ฒญ ์ํ๋ฅผ ๊ธฐ์ตํ์ง ์๊ณ , ๊ฐ ์์ฒญ์ ๋ ๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค. ๊ฐ ํธ์ถ์ ํด๋ผ์ด์ธํธ๊ฐ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ํฌํจํ ์์ฒญ์ ์๋ฒ์ ๋ณด๋ด๊ณ , ์๋ฒ๋ ์์ฒญ์ ์ฒ๋ฆฌํ ํ ๊ฒฐ๊ณผ๋ง ๋ฐํํ๋ค. ํด๋ฆฌ์ธํธ์ ์๋ฒ ๊ฐ์ ์ํธ์์ฉ์ด ์ด์ ์์ฒญ๊ณผ ๋ฌด๊ดํ๊ฒ ๋ณ๋๋ก ์ด๋ฃจ์ด์ง๋ค.
ํ์ฅ์ฑ, ๋จ์์ฑ์ ์ ๊ณตํ๋ค. HTTP์ ๊ฐ์ ํ๋กํ ์ฝ์์๋ RESTful API์ ์ ์ฌํ๊ฒ ์ ์ฉ๋ ์ ์๋ค.
Stateful RPC
์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ด์ ์์ฒญ ์ํ๋ฅผ ๊ธฐ์ตํ๊ณ ์ ์งํ๋ ์๊ฒฉ ํ๋ก์์ ํธ์ถ ๋ฐฉ์์ด๋ค. ์ด ๋ฐฉ์์์๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ฌ๋ฌ ์์ฒญ์ด ์ฐ๊ฒฐ๋์ด, ์๋ฒ๊ฐ ๊ฐ ์์ฒญ์ ๋ํด ์ธ์ ์ ๋ณด๋ ์ํ๋ฅผ ์ ์งํ๋ฉด์ ์ฒ๋ฆฌํ๋ค.
์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ํ์ํ ์ถ๊ฐ์ ์ธ ๋ก์ง์ด ํ์ํ๋ฉฐ, ์ด๋ก ์ธํด ์์คํ ์ด ๋ ๋ณต์กํด์ง๊ณ ํ์ฅ์ฑ์ด ์ด๋ ค์ธ ์ ์๋ค.
์ํ๊ฐ ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ (์ : ์จ๋ผ์ธ ๊ฒ์, ๊ธ์ต ๊ฑฐ๋ ์์คํ )์์ ์์ฃผ ์ฌ์ฉ๋๋ฉฐ, ์ํ ์ ๋ณด๋ฅผ ๊ณต์ ํ๊ฑฐ๋ ์ง์์ ์ธ ์ธํฐ๋ ์ ์ด ํ์ํ ๊ฒฝ์ฐ์ ์ ์ฉํ๋ค. ๊ทธ๋ฌ๋ ๋ถ์ฐ ์์คํ ์์๋ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ด ๊น๋ค๋กญ๊ณ ์๋ฒ ์ฅ์ ์ ์ํ ์ ๋ณด ๋ณต๊ตฌ์ ์ถ๊ฐ์ ์ธ ๋ ธ๋ ฅ์ด ํ์ํ๋ค.
๋น๋๊ธฐ RPC Asynchronous RPC
ํด๋ผ์ด์ธํธ๊ฐ ์๊ฒฉ ํ๋ก์์ ํธ์ถ์ ๋ณด๋ธ ๋ค์ ์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋์ ๋ค๋ฅธ ์์ ์ ๊ณ์ํ ์ ์๋ค. ํด๋ผ์ด์ธํธ๋ ์๋ฒ๊ฐ ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ์๋ฃํ๋ฉด ์๋ฆผ์ ๋ฐ๋๋ค. ๋น๋๊ธฐ RPC๋ ์๋ฃํ๋ ๋ฐ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ์์ ์ ์ ์ฉํ๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋์ ๋ค๋ฅธ ์์ ์ ๋์์ ์ํํ ์ ์์ด์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค. ๋คํธ์ํฌ ์ง์ฐ๊ธฐ ๊ธธ๊ฑฐ๋ ์ฒ๋ฆฌ ์๊ฐ์ด ๊ธด ์์ ์ ์ ์ฉํ๋ฉฐ, ํด๋ผ์ด์ธํธ๊ฐ ์๋ต ๋๊ธฐ ์๊ฐ ์์ด ๋ค๋ฅธ ์์ ์ ๊ณ์ ํ ์ ์๋ค. ๋น๋๊ธฐ ์ด๋ฆฌ๊ฒ ์ถ๊ฐ์ ์ธ ์ฝ๋ฐฑ ๊ด๋ฆฌ์ ์๋ฌ ์ฒ๋ฆฌ ๋ก์ง์ด ํ์ํ๋ฉฐ, ์ฝ๋์ ๋ณต์ก๋๋ ์ฆ๊ฐํ ์ ์๋ค.
๋๊ธฐ RPC Synchronous RPC
ํด๋ผ์ด์ธํธ๊ฐ ๋ค๋ฅธ ์์ ์ ๊ณ์ํ๊ธฐ ์ ์ ์๋ฒ๊ฐ ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ๋ง์น ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ค. ๋๊ธฐ RPC๋ ํด๋ผ์ด์ธํธ๊ฐ ์ฆ์ ์๋ต์ ๋ฐ์ ์ ์๋๋ก ๋ณด์ฅํ๋ฏ๋ก ๋น ๋ฅธ ์๋ต์ด ํ์ํ ์์ ์ ์ ์ฉํ๋ค. ๊ทธ๋ฌ๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๊ฐ ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ๋ง์น ๋๊น์ง ๋ค๋ฅธ ์์ ์ ๊ณ์ํ ์ ์์ผ๋ฏ๋ก ๋ณต์กํ ์์ ์ ์ฒ๋ฆฌํ ๋ ๋นํจ์จ์ ์ผ ์ ์๋ค. ์์ฒญ ํ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ-์๋ฒ ํต์ ์ ํ๋ฆ์ด ์ง๊ด์ ์ด๊ณ ๋ณต์ก์ฑ์ด ์ ๋ค.
RPC ๋์ ๊ณผ์
1. ํด๋ผ์ด์ธํธ ์์ฒญ
ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ์ ๋ก์ปฌ ํจ์์ฒ๋ผ ์๊ฒฉ ํ๋ก์์ ๋ฅผ ํธ์ถํ๋ค. ์ด๋ ์๊ฒฉ ์์คํ ์ IP์ฃผ์์ ํจ์ ์ด๋ฆ์ด ํ์ํ ์ ์๋ค.
2. ์คํ
ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๋คํธ์ํฌ ํต์ ์ ์จ๊ธฐ๊ธฐ ์ํด ์คํ (stub)์ด๋ผ๋ ์ค๊ฐ ๊ณ์ธต์ด ์กด์ฌํ๋ค. ํด๋์ด์ธํธ๋ฅผ ์ด ์คํ ์ ํตํด ์๊ฒฉ ํธ์ถ์ ์ํํ๋ค.
- ํด๋ผ์ด์ธํธ ์คํ : ํธ์ถ๋ ํจ์์ ์ธ์๋ฅผ ๋คํธ์ํฌ๋ก ์ ์กํ ์ ์๋๋ก ์ง๋ ฌํ(๋ง์ฌ๋ง)ํ๋ค.
- ์๋ฒ ์คํ : ๋คํธ์ํฌ์์ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ง๋ ฌํ(์ธ๋ง์ฌ๋ง)ํ๊ณ ์ค์ ์๊ฒฉ ํ๋ก์์ ๋ฅผ ํธ์ถํ๋ค.
๐ค ๋ง์ฌ๋ง : ํ๋ก์์ ์ธ์์ ๋ฐํ ๊ฐ์ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ์กํ ์ ์๋ ํ์์ผ๋ก ๋ณํํ๋ ํ๋ก์ธ์ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ผ๋ก ์ง๋ ฌํํ๋ ๊ฒ์ ํฌํจํ๋.
๐ค ์ธ๋ง์ฌ๋ง : ์์ ๋ ๋ฐ์ดํธ ์คํธ๋ฆผ์ ์์ ์์คํ ์์ ์ฌ์ฉํ ์ ์๋ ์๋ ๋ฐ์ดํฐ ํ์์ผ๋ก ๋ค์ ๋ณํํ๋ ์ญ๊ณผ์ .
3. ๋คํธ์ํฌ ํต์
ํด๋ผ์ด์ธํธ ์คํ ์ด ์์ฑํ ์์ฒญ์ด ๋คํธ์ํฌ๋ฅผ ํตํด ์๋ฒ๋ก ์ ์ก๋๋ค. ์ด๋ TCP, UDP์ ๊ฐ์ ํ๋กํ ์ฝ์ ์ฌ์ฉํ ์ ์๋ค.
4. ์๊ฒฉ ํ๋ก์์ ์คํ
์๋ฒ์์ ์์ฒญ์ ๋ฐ์ ํ ํด๋น ํ๋ก์์ ๋ฅผ ์คํํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ๋ก ๋ฐํํ๋ค.
5. ๊ฒฐ๊ณผ ๋ฐํ
์๋ฒ๊ฐ ๋ฐํํ ๊ฒฐ๊ณผ๋ ํด๋ผ์ด์ธํธ ์คํ ์ ํตํด ๋ค์ ์ญ์ง๋ ฌํ๋์ด ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ๋๋ค.
RPC ์ฅ์
์ถ์ํ
๋คํธ์ํฌ ํต์ ์ ์ถ์ํํด์ ๊ฐ๋ฐ์๊ฐ ๋ง์น ๋ก์ปฌ ํ๋ก์์ ๋ฅผ ํธ์ถํ๋ ๊ฒ์ฒ๋ผ ์๊ฒฉ ํ๋ก์์ ๋ฅผ ์ฝ๊ฒ ํธ์ถํ ์ ์๋ค.
๋ถ์ฐ ์์คํ ์ง์
RPC๋ IPC(ํ๋ก์ธ์ค ๊ฐ ํต์ )์ผ๋ก ๋ค์ํ ๋ ธ๋ ๊ฐ ์ํธ์์ฉ์ด ํ์ํ ๋ถ์ฐ ์ปดํจํ ์ ์ฉ์ดํ๊ฒ ๋ง๋ค์ด ์ค๋ค. ์ด๋ฅผ ํตํด ์ฌ๋ฌ ์๋ฒ์ ๊ธฐ๋ฅ์ ๋ถ์ฐ์ํฌ ์ ์๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค, ์ปดํจํ ๋ฅ๋ ฅ, ์ ๋ฌธ ๊ธฐ๋ฅ ๋ฑ์ ๋ฆฌ์์ค์ ์๋น์ค๋ฅผ ๋คํธ์ํฌ ์ ์ฒด์์ ๊ณต์ ํ ์ ์๋ค.
์ ์ฐ์ฑ
๋ค์ํ ์ธ์ด์ ํ๋ซํผ ๊ฐ์ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํด, ์ด์ง์ ์ธ ํ๊ฒฝ์์๋ ํจ์จ์ ์ธ ์๊ฒฉ ํธ์ถ์ ์ง์ํ๋ค.
ํฅ์๋ ๋ชจ๋์ฑ ๋ฐ ์ฌ์ฌ์ฉ์ฑ
RPC๋ ์์คํ ๊ตฌ์ฑ ์์์ ์ปคํ๋ง์ ์ค์ธ๋ค. ์ ์ง ๊ด๋ฆฌ ๋ฐ ํ์ฅ์ฑ์ด ๋ ๋ฐ์ด๋ ์์คํ ์ ๊ตฌ์ถํ๋๋ฐ ๋์์ด ๋๊ณ , ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์์ํ ์ ์๋ค.
RPC ๋จ์
์ฑ๋ฅ ๋ฌธ์
๋ก์ปฌ ํจ์ ํธ์ถ์ ๋นํด ๋คํธ์ํฌ ํต์ ์ด ๋ฐ์ํ๋ฏ๋ก ์ง์ฐ ์๊ฐ์ด ์ฆ๊ฐํ ์ ์์ผ๋ฉฐ, ๋คํธ์ํฌ ์ํ์ ๋ฐ๋ผ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ค๋ฅ ์ฒ๋ฆฌ
๋คํธ์ํฌ ์ค๋ฅ, ํ์์์, ์๋ฒ ๋ถ๋ฅ ๋ฑ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ์ด๋ฌํ ๊ฒฝ์ฐ ๋ก์ปฌ ํธ์ถ๊ณผ ๋ฌ๋ฆฌ ๋ณต์กํ ์ค๋ฅ ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค.
์ํ ๊ด๋ฆฌ
์๊ฒฉ ์์คํ ๊ฐ์ ์ํ ๊ณต์ ๊ฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์ํ๋ฅผ ์ ์งํ๋ ค๋ฉด ์ถ๊ฐ์ ์ธ ์ฒ๋ฆฌ๊ฐ ํ์ํ ์ ์๋ค.
RPC ์์
- gRPC : ๊ตฌ๊ธ์์ ๊ฐ๋ฐํ RPC ํ๋ ์์ํฌ๋ก, ์ฑ๋ฅ์ด ๋ฐ์ด๋๋ฉฐ, Protocal Buffers๋ผ๋ ์ง๋ ฌํ ๋ฐฉ์๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ค.
- XML-RPC : XML์ ๊ธฐ๋ฐ์ผ๋กํ RPC ๋ฐฉ์. ๊ฐ๋จํ๋ ๊ตฌ์กฐ์ HTTP๋ฅผ ์ฌ์ฉํด ๋๋ฆฌ ์ฌ์ฉ๋๋ค.
- JSON-RPC : JSON ํฌ๋งท์ ์ฌ์ฉํ๋ RPC ๋ฐฉ์. ๊ฒฝ๋์ ํ๋กํ ์ฝ์ด๋ฉฐ ์น ํ๊ฒฝ์์ ์์ฃผ ์ฌ์ฉ๋๋ค.
RPC์ REST์ ๋น๊ต
RPC์ REST๋ ์๋ก ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ํต์ ์ ์ง์ํ๋ ๋ถ์ฐ ์์คํ ์์ ์ฌ์ฉํ๋ ํ๋กํ ์ฝ ๋๋ ์ํคํ ์ฒ ์คํ์ผ์ด๋ค. ๋์ ์ฐจ์ด์ ์ ์ฃผ๋ก ํต์ ๋ฐฉ์, ๋ฐ์ดํฐ ์ ์ก ๋ฐฉ์, ์ฌ์ฉ ๋ชฉ์ ๋ฑ์์ ๋ํ๋๋ค.
๋ ์ค ์ด๋ ๊ฒ์ด ๋ ์ ํฉํ์ง๋ ์ฌ์ฉ ๋ชฉ์ ์ ๋ฐ๋ผ ๋ค๋ฅธ๋ค. ๊ณ ์ฑ๋ฅ, ํจ์จ์ฑ์ด ํ์ํ๋ฉด RPC๊ฐ, ๊ฐํธํ๊ณ ์น ์นํ์ ์ธ ์ํธ ์ด์ฉ์ฑ์ด ์ค์ํ ๊ฒฝ์ฐ REST๊ฐ ์ ํฉํ๋ค.
RPC | REST | |
ํต์ ๋ฐฉ์ | ํด๋ผ์ด์ธํธ๊ฐ ์๊ฒฉ ์๋ฒ์ ์๋ ํน์ ํ๋ก์์ ๋ ํจ์๋ฅผ ํธ์ถํ๋ ๋ฐฉ์. gRPC๊ฐ์ ํ๋์ ์ธ RPC ๊ตฌํ์ฒด๋ ํ๋กํ ์ฝ ๋ฒํผ ๊ฐ์ ์ด์ง ํ์์ผ๋ก ๋ฐ์ดํธ๋ฅด ์ง๋ ฌํํ๊ณ , HTTP/2๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค. |
๋ฆฌ์์ค ๊ธฐ๋ฐ ํต์ ์ผ๋ก ์ค์ฌ์ผ๋ก ํ๋ ์ํคํ ์ฒ ์คํ์ผ์ด๋ค. RESTful API๋ HTTP ๋ฉ์๋(GET, POST, PUT, DELETE)๋ฅผ ์ฌ์ฉํด ์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ์กฐ์ํ๊ณ , ๋ฆฌ์์ค๋ ์ฃผ๋ก URL์ ํตํด ์ ๊ทผ๋๋ค. ๋ฐ์ดํฐ๋ ์ฃผ๋ก JSON์ด๋ XML ํ์์ผ๋ก ์ ์ก๋๋ค. |
์ํ ๊ด๋ฆฌ | ์ํ ์ ์ง๊ฐ ๊ฐ๋ฅํ ์ ์๋ค. ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ธ์ ์ด ์ ์ง๋๋ ์ํฉ์์ ์ํ ๊ธฐ๋ฐ์ผ๋ก ํธ์ถ์ ๊ด๋ฆฌํ ์ ์๋ค. ์์ฒญ๊ณผ ์๋ต ๊ฐ์ ์ผ์ ํ ์ปจํ ์คํธ๋ฅผ ์ ์งํ ์ ์๋ค. |
์์ ํ ์ํ๊ฐ ์๋ค. ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ด์ ์์ฒญ ์ํ๋ฅผ ๊ธฐ์ตํ์ง ์๊ณ , ๋ชจ๋ ์์ฒญ์ ๋ ๋ฆฝ์ ์ด๋ค. ํด๋ผ์ด์ธํธ๋ ํ์ํ ์ํ๋ฅผ ๋งค๋ฒ ์์ฒญ์ ํฌํจ์์ผ์ผ ํ๋ค. |
์ฑ๋ฅ ๋ฐ ํจ์จ์ฑ | gRPC๊ฐ์ RPC ๊ตฌํ์ฒด๋ ์ด์ง ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํํ๊ณ , HTTP/2์ ๊ฐ์ ๊ณ ์ฑ๋ฅ ํ๋กํ ์ฝ์ ์ฌ์ฉํด ํต์ ํด์ REST๋ณด๋ค ๋ ๋น ๋ฅด๊ณ ๋ ์์ ๋ฐ์ดํฐ ํจํท์ผ๋ก ๋์ ์ฑ๋ฅ์ ์ ๊ณตํ๋ค. ์ด๋ ๋๊ท๋ชจ ๋ถ์ฐ ์์คํ ์ด๋ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์ ํนํ ์ ๋ฆฌํ๋ค. | ํ
์คํธ ๊ธฐ๋ฐ(์ฃผ๋ก JSON, XML) ํต์ ์ ์ฌ์ฉํด์ ๋ฐ์ดํฐ ํจํท์ ํฌ๊ธฐ๊ฐ ์๋์ ์ผ๋ก ํฌ๋ก ์ฒ๋ฆฌ ์ฑ๋ฅ์ ๋จ์ด์ง ์ ์๋ค. ์์คํ ๊ฐ ์ํธ ์ด์ฉ์ฑ์ด ๋ฐ์ด๋๊ณ , API ๊ตฌํ๊ณผ ์ฌ์ฉ์ด ์๋์ ์ผ๋ก ๊ฐํธํ๋ค. |
๋ฐ์ดํฐ ํ์ | ์ฃผ๋ก ์ด์ง ํ์(์ : gRPC์ ProtocolBuffers)์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ถ๊ณ ๋ฐ์ ๋ฐ์ดํฐ ์ ์ก ํจ์จ์ฑ์ด ๋๋ค. RPC๋ ํธ์ถ ์ ํน์ ๋ฐ์ดํฐ ํฌ๋งท์ ๋ง์ถฐ์ง๋ค. | ์ฃผ๋ก JSON, XML๊ณผ ๊ฐ์ ํ
์คํธ ํ์์ ์ฌ์ฉํ๋ค. ํ ์คํธ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ํ์์ ์ฌ๋์ด ์ฝ๊ธฐ ์ฝ์ง๋ง, ์ด์ง ํ์์ ๋นํด ์ ์ก ์ ๋ ๋ง์ ๋คํธ์ํฌ ๋์ญํญ์ด ํ์ํ ์ ์๋ค. |
์ฌ์ฉ ์ฌ๋ก | ๊ณ ์ฑ๋ฅ์ด ์๊ตฌ๋๋ ์์คํ
์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ ํต์ , ๋๊ท๋ชจ ๋ถ์ฐ ์์คํ , ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฑ์ ์ํฉ์์ RPC๊ฐ ์ ๋ฆฌํ๋ค. ํนํ, gRPC๋ ์๋ฐฉํฅ ์คํธ๋ฆฌ๋ฐ ๋ฐ ๋์์ฑ์ ์ง์ํด, ๋ณต์กํ ํด๋ผ์ด์ธํธ-์๋ฒ ํต์ ์ด ํ์ํ ๊ฒฝ์ฐ ์ ์ฉํ๋ค. |
์น ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ๋ชจ๋ฐ์ผ API์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค. API ์ฌ์ฉ์ด ๊ฐ๋จํ๊ณ , ๋ฒ์ฉ์ ์ด๋ฉฐ ์น ํ์ค์ ๋ฐ๋ฅด๋ฏ๋ก ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ๊ฐ๋จํ API๋ฅผ ์ ๊ณตํ๋ ์๋น์ค์ ์ ํฉํ๋ค. |
์ฑ์๋ ๋ฐ ํ์ค | ์ฌ๋ฌ RPC ํ๋กํ ์ฝ๋ค์ด ์์ง๋ง, ํ์คํ๊ฐ ๋ ๋์ด ์์ด์ ๋ค์ํ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋๋ค. ์๋ฅผ ๋ค์ด, XML-RPC, JSON-RPC, gRPC ๋ฑ์ด ์์ผ๋ฉฐ, ๊ฐ๊ธฐ ๋ค๋ฅธ ์ง๋ ฌํ ๋ฐ ํต์ ๋ฐฉ์์ ์ฌ์ฉํ๋ค. |
์น ํ์ค์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค. ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์ฑ์๋ ๋ฐฉ์์ด๋ค. RESTful API๋ HTTP์ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, ํ์คํ๋ ๋ฐฉ์์ผ๋ก ์ฝ๊ฒ ๊ตฌ์ถํ ์ ์๋ค. |
๐ค HTTP/2 : ์น ํ์ด์ง ๋ก๋ฉ ์๋๋ฅผ ํฅ์์ํค๊ธฐ ์ํด ๋ฉํฐํ๋ ์ฑ, ํค๋ ์์ถ, ์๋ฒ ํธ์ ๋ฑ์ ์ง์ํ๋ ๊ณ ์ฑ๋ฅ ์น ํ๋กํ ์ฝ
- ๐ค ๋ฉํฐํ๋ ์ฑ : HTTP/2์์ ์ฌ๋ฌ ์์ฒญ๊ณผ ์๋ต์ ํ ๋ฒ์ RCP ์ฐ๊ฒฐ๋ก ๋ณ๋ ฌ ์ฒ๋ฆฌํด์, ๊ฐ๊ฐ์ ์์ฒญ์ด ๋ ๋ฆฝ์ ์ผ๋ก ๋์์ ์ ์ก๋๋๋ก ํ๋ ๊ธฐ๋ฅ
- ๐ค ํค๋ ์์ถ : HTTP ์์ฒญ๊ณผ ์๋ต์ ์ฌ์ฉ๋๋ ํค๋๋ฅผ HPACK ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์์ถํด, ๋คํธ์ํฌ ์ ์ก ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ํต์ ์ฑ๋ฅ์ ๋์ด๋ ๊ธฐ์
- ๐ค (HTTP/2์) ์๋ฒ ํธ์ : ํด๋ผ์ด์ธํธ ์์ฒญ ์ ์ ์๋ฒ๊ฐ ํ์ํ ๊ฒ์ผ๋ก ์์๋๋ ์์์ ๋ฏธ๋ฆฌ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์กํด ์น ํ์ด์ง ๋ก๋ฉ ์๊ฐ์ ๋จ์ถ์ํค๋ ๊ธฐ๋ฅ
๐ค ๋ง์ดํฌ๋ก์๋น์ค : ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ๋๊ณ ๊ด๋ฆฌ๋๋ ์์ ์๋น์ค๋ค์ด ๋ชจ์ฌ ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ ๋ฐฉ์. ๊ฐ๊ฐ์ ์๋น์ค๋ ํน์ ๋น์ฆ๋์ค ๊ธฐ๋ฅ์ ๋ด๋นํ๋ค.
๐ค ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ : ์ ํ๋ฆฌ์ผ์ด์ ์ ์์, ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ ๊ฐ๋ฅํ ์๋น์ค๋ค๋ก ๊ตฌ์ฑํ๋ ์ํคํ ์ฒ ์คํ์ผ.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] I/O Channel (0) | 2024.10.14 |
---|---|
[Java] I/O Buffer (1) | 2024.10.14 |
[ํ๋ก๊ทธ๋๋ฐ] ํจ์ํ ํ๋ก๊ทธ๋๋ฐ (3) | 2024.10.11 |
[ํ๋ก๊ทธ๋๋ฐ] ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์ (0) | 2024.10.11 |
[ํ๋ก๊ทธ๋๋ฐ] ์ ์ ํ์ ์ง์ ์ธ์ด (1) | 2024.10.09 |