๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๐ŸŒฎ ๐Ÿ’ฌ
๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป/network

RPC vs gRPC

by ๋ฐ”์ฟ„๋ฆฌ 2025. 1. 14.

RPC (Remote Procedure Call)

ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ (IPC)์„ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ

๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ•˜๋“ฏ์ด ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ๋‚˜ ์„œ๋ฒ„์˜ Procedure(ํ•จ์ˆ˜)๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฐœ๋…

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

gRPC

RPC์˜ ํ˜„๋Œ€์ ์ธ ๊ตฌํ˜„์œผ๋กœ, Google์—์„œ ๋งŒ๋“  ์˜คํ”ˆ ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ

HTTP/2๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ณ  Protocol Buffers(Protobuf)๋ผ๋Š” ์ง๋ ฌํ™” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ํ•ต์‹ฌ ๊ฐœ๋…: ํ˜„๋Œ€์ ์ธ ๊ณ ์„ฑ๋Šฅ RPC ํ”„๋ ˆ์ž„์›Œํฌ, ํšจ์œจ์ ์ธ ์ง๋ ฌํ™”์™€ ๋‹ค์ค‘ ์–ธ์–ด์„ ์ง€์›ํ•œ๋‹ค.
  • ์ž‘๋™ ๋ฐฉ์‹:
    • Protobuf๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค ์ •์˜๋ฅผ ์ž‘์„ฑ
    • gRPC ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์ฝ”๋“œ๋ฅผ ์ž๋™ ์ƒ์„ฑ
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉฐ HTTP/2๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๊ตํ™˜
  • ํŠน์ง•:
    • HTTP/2 ๊ธฐ๋ฐ˜: ๋‹ค์ค‘ํ™”, ํ—ค๋” ์••์ถ•, ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ ์ „์†ก ์ง€์›
    • Protobuf: ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™”๋ฅผ ์ตœ์ ํ™”ํ•˜์—ฌ ๋†’์€ ์„ฑ๋Šฅ ์ œ๊ณต
    • ๋‹ค์–‘ํ•œ ํ˜ธ์ถœ ๋ฐฉ์‹:
      • Unary (์ผ๋ฐ˜์ ์ธ ์š”์ฒญ-์‘๋‹ต)
      • Server Streaming (์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ์ŠคํŠธ๋ฆผ)
      • Client Streaming (ํด๋ผ๋ฆฌ์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ์ŠคํŠธ๋ฆผ)
      • Bidirectional Streaming (์–‘๋ฐฉํ–ฅ ์ŠคํŠธ๋ฆผ)
    • ์žฅ์ :
      • ๋†’์€ ์„ฑ๋Šฅ, ํšจ์œจ์ ์ธ ์ง๋ ฌํ™” ๋ฐ ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉ
      • ๋‹ค์–‘ํ•œ ์–ธ์–ด ์ง€์›
      • ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐฉ์‹์œผ๋กœ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „์†ก
      • ์˜คํ”ˆ ์†Œ์Šค ์ƒํƒœ๊ณ„์™€ ํ’๋ถ€ํ•œ ๋„๊ตฌ ์ œ๊ณต
    • ๋‹จ์ :
      • ์ดˆ๊ธฐ ํ•™์Šต ๊ณก์„ ์ด ์žˆ๋‹ค
      • Protobuf ์˜์กด์„ฑ์œผ๋กœ ์ธํ•ด JSON๋ณด๋‹ค ์ธ๊ฐ„์ด ์ฝ๊ธฐ ์–ด๋ ค์šด ํฌ๋งท ์‚ฌ์šฉ

์ •๋ฆฌ

  • RPC:
    • ๊ฐ„๋‹จํ•œ ์‹œ์Šคํ…œ ๊ฐ„ ํ˜ธ์ถœ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
    • ์ดˆ๊ธฐ ์„ค์ •์ด ๊ฐ„๋‹จํ•œ ๊ฒƒ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ
  • gRPC:
    • ๊ณ ์„ฑ๋Šฅ, ์‹ค์‹œ๊ฐ„ ํ†ต์‹ 
    • ๋‹ค์ค‘ ์–ธ์–ด ํ™˜๊ฒฝ์—์„œ์˜ ํ†ตํ•ฉ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ
    • ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ์ดํ„ฐ(ex: ๋น„๋””์˜ค, ๋กœ๊ทธ, ์‹ค์‹œ๊ฐ„ ์„ผ์„œ ๋ฐ์ดํ„ฐ) ์š”๊ตฌ์‚ฌํ•ญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ