๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[ํ”„๋กœ๊ทธ๋ž˜๋ฐ] RPC Remote Procedure Call ์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ

์ถœ์ฒ˜

ChatGPT

https://www.ibm.com/docs/ko/aix/7.3?topic=concepts-remote-procedure-call

 

๋ฆฌ๋ชจํŠธ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ

์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ(RPC)์€ ์šด์˜ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ƒ์œ„ ๋ ˆ๋ฒจ ํ†ต์‹  ๋ฒ”๋ก€๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. RPC๋Š” ํ†ต์‹  ํ”„๋กœ๊ทธ๋žจ ๊ฐ„์— ๋ฉ”์‹œ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด TCP/IP (Transmission Control Protocol/Int

www.ibm.com

https://ko.wikipedia.org/wiki/%EC%9B%90%EA%B2%A9_%ED%94%84%EB%A1%9C%EC%8B%9C%EC%A0%80_%ED%98%B8%EC%B6%9C

 

์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „. ์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ(์˜์–ด: remote procedure call, ๋ฆฌ๋ชจํŠธ ํ”„๋กœ์‹œ์ € ์ฝœ, RPC)์€ ๋ณ„๋„์˜ ์›๊ฒฉ ์ œ์–ด๋ฅผ ์œ„ํ•œ ์ฝ”๋”ฉ ์—†์ด ๋‹ค๋ฅธ ์ฃผ์†Œ ๊ณต๊ฐ„์—์„œ ํ•จ์ˆ˜๋‚˜ ํ”„๋กœ์‹œ์ €๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜

ko.wikipedia.org

https://www.geeksforgeeks.org/what-is-rpc-mechanism-in-distributed-system/

 

What is Remote Procedural Call (RPC) Mechanism in Distributed System? - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

https://www.guru99.com/remote-procedure-call-rpc.html

 

Remote Procedure Call (RPC) Protocol in Distributed System

In this RPC tutorial, we will learn What is Remote Procedure Call, Types of RPC, Architecture, How it Works, features, advantages & disadvantages.

www.guru99.com

https://engineeringhulk.com/remote-procedure-call-rpc/

 

Remote procedure call [RPC]: A detailed overview about RCP

Remote Procedure Call (RPC) is a mechanism that enables programs on a network to communicate with each other. It is a way for a program to make a procedure call

engineeringhulk.com

 

 


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์˜) ์„œ๋ฒ„ ํ‘ธ์‹œ : ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์ „์— ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ์ž์›์„ ๋ฏธ๋ฆฌ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†กํ•ด ์›น ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ

๐Ÿค” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค : ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ๋˜๊ณ  ๊ด€๋ฆฌ๋˜๋Š” ์ž‘์€ ์„œ๋น„์Šค๋“ค์ด ๋ชจ์—ฌ ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ์‹. ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค๋Š” ํŠน์ • ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•œ๋‹ค.

๐Ÿค” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์€, ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์„œ๋น„์Šค๋“ค๋กœ ๊ตฌ์„ฑํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ.