์™œ RPC๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ์„๊นŒ?

์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋ถ„์‚ฐ ๋„คํŠธ์›Œํฌ ์ปดํ“จํ„ฐ ํ™˜๊ฒฝ์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ํŒจํ„ด์€?

  • Client - Server ํŒจํ„ด

    • Client๋Š” ์š”์ฒญํ•˜๊ณ  ๊ธฐ๋‹ค๋ฆฌ๊ณ 
    • Server๋Š” ์š”์ฒญํ•œ ๋‚ด์šฉ์„ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ 
    • Client๋Š” ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›์•„ ์ง„ํ–‰

์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ์นœ๊ทผํ•œ ๋ฐฉ๋ฒ•์€?

  • Socket
    • ์ˆ˜์ž‘์—…์œผ๋กœ Formatting ํ•ด์•ผ ํ•˜๋Š” ๋‹จ์ .
    • ์ง์ ‘ ๋„คํŠธ์›Œํฌ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๋ณด๋‚ด์•ผ ํ•˜๋Š” ๋‹จ์ .

ํ˜„์žฌ ์šฐ๋ฆฌ๊ฐ€ ๊ฒช๊ณ  ์žˆ๋Š” ๋ฌธ์ œ๋Š”?

  • MSA๋ฅผ ํ†ตํ•ด ์ •๋ง ๋‹ค์–‘ํ•œ ์–ธ์–ด์™€ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์กด์žฌ
  • Polyglotํ•œ ๊ตฌ์กฐ๋ฅผ ์ง€ํƒฑํ•˜๊ธฐ ์œ„ํ•ด์„  ํ”„๋กœํ† ์ฝœ์„ ๋งž์ถฐ์•ผ ๋น„์šฉ์ด ๋ฐœ์ƒ.

RPC๋ž€?

๋ถ„์‚ฐ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์—์„œ ์กฐ๊ธˆ ๋” ํŽธํ•˜๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ RPC

  • ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ

RPC์˜ ๊ถ๊ทน์ ์ธ ๋ชฉํ‘œ๋Š” ๋ฌด์—‡์ผ๊นŒ?

  • ํด๋ผ์ด์–ธํŠธ - ์„œ๋ฒ„๊ฐ„์˜ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์— ํ•„์š”ํ•œ ์ƒ์„ธํ•œ ์ •๋ณด๋Š” ์ตœ๋Œ€ํ•œ ๊ฐ์ถ”๊ณ 
  • ํด๋ผ์ด์–ธํŠธ๋Š” ์ผ๋ฐ˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค.
  • ์„œ๋ฒ„๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ผ๋ฐ˜ ๋ฉ”์†Œ๋“œ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ!

RPC์˜ ๋Œ€ํ‘œ์ ์ธ ๊ตฌํ˜„์ฒด๋Š” ๋ญ๊ฐ€ ์žˆ์„๊นŒ?

RPC์˜ ๊ฐ„๋‹จํ•œ Example๋ฅผ ํ™•์ธํ•ด๋ณด์ž

  • ์ด์ƒ์ ์ธ RPC๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
# Client
z = function(x, y)
# Server
function(x, y) {
 compute x, y
 return z
}
  • RPC๋Š” ์ด ์ •๋„์˜ ์ˆ˜์ค€์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด ์ดˆ๋ณด์ž ํ”„๋กœ๊ทธ๋ž˜๋จธ๋„ ์›๊ฒฉ ํ•จ์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

RPC๋Š” ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋ ๊นŒ?

  • Caller / Callee
    • ์‚ฌ์šฉ์ž(Client / Server)๊ฐ€ ํ•„์š”ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ž‘์„ฑํ•˜๋Š” Layer
    • IDL(interface definition language)๋กœ ์ž‘์„ฑ
  • Stub
    • Stub Compiler๊ฐ€ IDL ํŒŒ์ผ์„ ์ฝ์–ด ์›ํ•˜๋Š” Language๋กœ ์ƒ์„ฑ.
    • Parameter Object๋ฅผ Message๋กœ marshalling/unmarshallingํ•˜๋Š” Layer
  • RPC RunTime
    • Server์™€ Client๋ฅผ Bindingํ•˜๋Š” Layer
    • ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์ค‘ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋„ ์ง„ํ–‰

RPC๋Š” ์–ด๋–ป๊ฒŒ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋Š” ์—ฐ๊ฒฐํ• ๊นŒ?

  • Static Binding
    • ์„œ๋ฒ„ ์ฃผ์†Œ Hard Coding
    • ๊ฐ„๋‹จํ•˜๊ณ  ํšจ์œจ์ 
    • ์„œ๋ฒ„ ์ฃผ์†Œ ๋ณ€๊ฒฝ์— ์•ฝํ•จ.
  • Dynamic Binding
    • ์ฃผ์†Œ ๋ณ€๊ฒฝ์— ๋งค์šฐ ์œ ๋™์ 
    • ์—ฌ๋ถ„์˜ ์„œ๋ฒ„๋ฅผ ๋‘ฌ์•ผ ํ•˜๋Š” ๋‹จ์ .
      • Name Server
      • Load Balancer

์ •๋ฆฌํ•˜๋ฉฐ

RPC์˜ ์žฅ์ ์€?

  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Œ.
  • ๋‹ค์–‘ํ•œ ์–ธ์–ด๋ฅผ ๊ฐ€์ง„ ํ™˜๊ฒฝ์—์„œ ์‰ฝ๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Œ.
  • ์‰ฝ๊ฒŒ ์ธํ„ฐํŽ˜์ด์Šค ํ˜‘์—…์ด ๊ฐ€๋Šฅํ•จ.

RPC์˜ ๋‹จ์ ์€?

  • ์ƒˆ๋กœ์šด ํ•™์Šต ๋น„์šฉ์ด ๋“ฌ.
  • ์‚ฌ๋žŒ์˜ ๋ˆˆ์œผ๋กœ ์ฝ๊ธฐ ํž˜๋“ฌ.

Reference