# RPC VS RMI
RPC์ RMI์ ๊ธฐ๋ณธ ์ฐจ์ด์ ์ RPC๋ ์๊ฒฉ ์ปดํจํฐ์์ ํ๋ก ์์ ๋ฅผ ํธ์ถ ํ ์์๋ ๋ฉ์ปค๋์ฆ์ด๊ณ RMI๋ Java์์ RPC์ ๊ตฌํ์ ๋๋ค. RPC๋ ์ธ์ด ์ค๋ฆฝ์ ์ด์ง๋ง ์ ๋ฌํ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ํ ๋ง ์ง์ํฉ๋๋ค. ๋ฐ๋ฉด์ RMI๋ Java๋ก ์ ํ๋์ง๋ง ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค. RPC๋ ์ ํต์ ์ธ ์ ์ฐจ ์ ์ธ์ด ๊ตฌ์ฑ์ ๋ฐ๋ฅด๋ ๋ฐ๋ฉด RMI๋ ๊ฐ์ฒด ์งํฅ ๋์์ธ์ ์ง์ํฉ๋๋ค.
# RPC๋?
์๊ฒฉ ํ๋ก ์์ ํธ์ถ์ ์๋ฏธํ๋ RPC๋ ํ๋ก์ธ์ค ๊ฐ ํต์ ์ ํ์ ๋๋ค. ์ด๋ฅผ ํตํด ๋ก์ปฌ ์ปดํจํฐ ๋๋ ์๊ฒฉ ์ปดํจํฐ์์ ์คํ์ค์ธ ๋ค๋ฅธ ํ๋ก์ธ์ค์์ ํจ์๋ฅผ ํธ์ถ ํ ์ ์์ต๋๋ค. ์ด ๊ฐ๋ ์ 1980 ๋ ์ ์ค๋ ์ ์ ๋ฑ์ฅํ์ง๋ง, ์ ๋์ค์์ ์ฒ์์ผ๋ก ์ ๋ช ํ ๊ตฌํ์ด์์์ต๋๋ค.
RPC์๋ ์ฌ๋ฌ ๋จ๊ณ๊ฐ ํฌํจ๋ฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ํ์์ ๊ฐ์ด ๋ก์ปฌ ์ปดํจํฐ์์ ํ๋ก ์์ ํธ์ถ์ ์ํํฉ๋๋ค. ํด๋ผ์ด์ธํธ ์คํ ์ด๋ผ๋ ๋ชจ๋์ ์ธ์๋ฅผ ์์งํ์ฌ ๋ฉ์์ง๋ฅผ ์์ฑํ๊ณ ์ด์ ์ฒด์ ๋ก ์ ๋ฌํฉ๋๋ค. ์ด์ ์ฒด์ ๋ ์์คํ ํธ์ถ์ ์ํํ์ฌ์ด ๋ฉ์์ง๋ฅผ ์๊ฒฉ ์ปดํจํฐ๋ก ๋ณด๋ ๋๋ค. ์๋ฒ์ ์ด์ ์ฒด์ ๋ ๋ฉ์์ง๋ฅผ ์์งํ์ฌ ์๋ฒ ์คํ ์ด๋ผ๋ ์๋ฒ์ ๋ชจ๋๋ก ์ ๋ฌํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์๋ฒ ์คํ ์ ์๋ฒ์์ ํ๋ก ์์ ๋ฅผ ํธ์ถํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก ๊ฒฐ๊ณผ๊ฐ ํด๋ผ์ด์ธํธ๋ก ๋ค์ ์ ์ก๋ฉ๋๋ค.
RPC ์ฌ์ฉ์ ์ด์ ์ ๋คํธ์ํฌ ์ธ๋ถ ์ฌํญ๊ณผ ๋ ๋ฆฝ์ ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ํ๋ก๊ทธ๋๋จธ๋ ์ถ์์ ์ธ ๋ฐฉ์์ผ๋ก ์ง์ ํ๋ฉด๋๋ฉฐ ์ด์ ์ฒด์ ๋ ๋ด๋ถ ๋คํธ์ํฌ ์ธ๋ถ ์ ๋ณด๋ฅผ ํ์ธํฉ๋๋ค. ๋ฐ๋ผ์ ๋ฌผ๋ฆฌ์ ๋ฐ ํ๋กํ ์ฝ์ ์ฐจ์ด์๋ ๋ถ๊ตฌํ๊ณ ํ๋ก๊ทธ๋๋ฐ์ด ์ฌ์์ง๊ณ ๋ชจ๋ ๋คํธ์ํฌ์์ RPC๊ฐ ์๋ํฉ๋๋ค. RPC ๊ตฌํ์ Unix, Linux, Windows ๋ฐ OS X์ ๊ฐ์ ๋ชจ๋ ์ฃผ๋ฅ ์ด์ ์ฒด์ ์ ์กด์ฌํฉ๋๋ค. RPC๋ ์ผ๋ฐ์ ์ผ๋ก ์ธ์ด ์ค๋ฆฝ์ด๋ฏ๋ก ๋ชจ๋ ์ธ์ด์ ๊ณตํต์ ์ด์ด์ผํ๋ฏ๋ก ๋ฐ์ดํฐ ์ ํ์ ๊ฐ์ฅ ์์์ ์ธ ์ ํ์ผ๋ก ์ ํํฉ๋๋ค. RPC์ ์ ๊ทผ ๋ฐฉ์์ ๊ฐ์ฒด ์งํฅ์ ์ด์ง ์์ง๋ง C์ ๊ฐ์ ์ ํต์ ์ธ ์ ์ฐจ ๋ฉ์ปค๋์ฆ์ ๋๋ค.
# RMI๋?
RMI (Remote Method Invocation)๋ ๊ฐ์ฒด ์งํฅ ํน์ฑ์ ์ง์ํ๊ธฐ ์ํด Java๋ก RPC๋ฅผ ๊ตฌํํ๋ API (Application Programming Interface)์ ๋๋ค. ์ด๋ฅผ ํตํด ๋์ผํ ์ปดํจํฐ ๋๋ ์๊ฒฉ ์ปดํจํฐ์์๋ ๋ค๋ฅธ Java Virtual Machine์์ Java ๋ฉ์๋๋ฅผ ํธ์ถ ํ ์ ์์ต๋๋ค. RMI์ ํ๊ณ๋ Java ๋ฉ์๋ ๋ง ํธ์ถ ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ์ค๋ธ์ ํธ๋ฅผ ์ธ์ ๋ฐ ๋ฆฌํด ๊ฐ์ผ๋ก ์ ๋ฌํ ์ ์๋ค๋ ์ด์ ์ด ์์ต๋๋ค. Java ๊ฐ์ ๋จธ์ ์์ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ด RMI๊ฐ RPC๋ณด๋ค ๋๋ฆฌ๋ค๊ณ ์๊ฐ ๋ ๋ RMI๋ ํ๋ก๊ทธ๋๋จธ์๊ฒ ์น์ํ๊ณ ์ฌ์ฉํ๊ธฐ๊ฐ ๋งค์ฐ ์ฝ์ต๋๋ค.
RMI๋ Java์์ ๊ธฐ๋ณธ ์ ๊ณต ๋ณด์ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๊ณ ๋น TCP ์ฌ์ฉ์ ์ง์ ์ ์ก ๊ณ์ธต ํ๋กํ ์ฝ์ ์ฌ์ฉํ ์์๋ ์์ผ ํฉํ ๋ฆฌ๋ ์ ๊ณตํฉ๋๋ค. ๋ํ RMI๋ ๋ฐฉํ๋ฒฝ์ ์ฐํํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. RMI์์ ๋ฐ์ํ๋ ๋จ๊ณ๋ RPC์ ์ ์ฌํฉ๋๋ค. RMI์ ๊ตฌํ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ๊ฑฑ์ ํ ํ์๊ฐ์๋ ๋ด๋ถ ๋คํธ์ํฌ ์ธ๋ถ ์ฌํญ์ ์กฐ์ฌํฉ๋๋ค.
# RPC์ RMI์ ์ฐจ์ด์ ์?
- RPC๋ ์ธ์ด ์ค๋ฆฝ์ ์ด๋ฉฐ RMI๋ Java๋ก ์ ํ๋ฉ๋๋ค.
- RPC๋ C ์์์ฒ๋ผ ์ ์ฐจ ์ ์ด์ง๋ง RMI๋ ๊ฐ์ฒด ์งํฅ์ ์ ๋๋ค.
- RPC๋ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์ ๋ง ์ง์ํ๊ณ RMI๋ ๊ฐ์ฒด๋ฅผ ์ธ์ ๋ฐ ๋ฐํ ๊ฐ์ผ๋ก ์ ๋ฌํ ์ ์๋๋กํฉ๋๋ค. RPC๋ฅผ ์ฌ์ฉํ ๋ ํ๋ก๊ทธ๋๋จธ๋ ๋ณตํฉ ์ค๋ธ์ ํธ๋ฅผ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ํ์ผ๋ก ๋ถํ ํด์ผํฉ๋๋ค.
- RMI๋ ํด๋น RPC๋ฅผ ์ฝ๊ฒ ํ๋ก๊ทธ๋๋ฐ ํ ์ ์์ต๋๋ค.
- RMI์๋ Java ๋ฐ์ดํธ ์ฝ๋ ์คํ์ด ํฌํจ๋๋ฏ๋ก RMI๊ฐ RPC๋ณด๋ค ๋๋ฆฝ๋๋ค.
- RMI๋ ๊ฐ์ฒด ์งํฅ ํน์ฑ์ผ๋ก ์ธํด ๋์์ธ ํจํด์ ์ฌ์ฉํ ์ ์์ง๋ง RPC์๋์ด ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
# RPC VS RMI ์์ฝ
RPC๋ ์๊ฒฉ ์ปดํจํฐ์์ ํ๋ก ์์ ๋ฅผ ํธ์ถ ํ ์์๋ ์ธ์ด ์ค๋ฆฝ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ธ์ด ์ค๋ฆฝ ๊ธฐ๋ฅ์ ์ธ์๋ก ์ ๋ฌ๋๋ ๋ฐ์ดํฐ ์ ํ์ ์ ํํ๊ณ ๊ฐ์ ๊ธฐ๋ณธ ์ ํ์ผ๋ก ๋ฆฌํดํฉ๋๋ค. RMI๋ Java๋ก RPC๋ฅผ ๊ตฌํ ํ ๊ฒ์ผ๋ก ๊ฐ์ฒด ์ ๋ฌ๋ ์ง์ํ๋ฏ๋ก ํ๋ก๊ทธ๋๋จธ์ ์๋ช ์ ๋จ์ถ์ํต๋๋ค. RMI์ ์ฅ์ ์ ๊ฐ์ฒด ์งํฅ ๋์์ธ ์ง์์ด์ง๋ง Java์ ๋ํ ์ ํ์ ๋จ์ ์ ๋๋ค.
# Reference
# Todo ๊ธ๋ณด๊ณ ์ถ๊ฐํ๊ธฐ
- https://techdifferences.com/difference-between-rpc-and-rmi.html