๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
BE/๐Ÿƒ Spring

[gRPC]์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ

by ํ‹ด๋”” 2024. 11. 24.
๋ฐ˜์‘ํ˜•

 

RPC๋ž€ 

  • Remote Procedure Call
  • ๋„คํŠธ์›Œํฌ ์ƒ์˜ ๋‹ค๋ฅธ ์„œ๋ฒ„๋‚˜ ์‹œ์Šคํ…œ์— ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๋งˆ์น˜ ๋กœ์ปฌ ๊ธฐ๋Šฅ์ฒ˜๋Ÿผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ”„๋กœํ† ์ฝœ
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋กœ์ปฌ ํ•จ์ˆ˜ ํ˜ธ์ถœ -> ์š”์ฒญ์ด ์ง๋ ฌํ™” ๋˜์–ด ๋„คํŠธ์›Œํฌ๋กœ ์ „์†ก -> ์›๊ฒฉ ์„œ๋ฒ„๊ฐ€ ์ด๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌ ํ›„ ์‘๋‹ต -> ์‘๋‹ต์ด ์ง๋ ฌํ™” ๋˜์–ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜ :: ์‚ฌ์šฉ์ž๋Š” ์›๊ฒฉ ์„œ๋ฒ„์™€ ์ง์ ‘ ์ƒํ˜ธ์ž‘์šฉํ•˜์ง€ ์•Š๊ณ  ๋กœ์ปฌ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ

 

gRPC ํŠน์ง•

  • Google์—์„œ ๊ฐœ๋ฐœํ•œ ์˜คํ”ˆ ์†Œ์Šค RPC ํ”„๋ ˆ์ž„์›Œํฌ
  • ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™”
  • ๋‹ค์–‘ํ•œ ์–ธ์–ด ์ง€์› ๋ฐ ์–ธ์–ด ๋…๋ฆฝ์„ฑ
    • ์„œ๋กœ ๋‹ค๋ฅธ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์—์„œ๋„ ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • HTTP/2 ๊ธฐ๋ฐ˜
    • ์—ฌ๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅผ ํ•œ๋ฒˆ์— ๋™์‹œ์— ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ์Œ
    • ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•ํƒœ์˜ ๋ฉ”์„ธ์ง€๋ฅผ ๋น ๋ฅด๊ฒŒ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Œ
  • TLS๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”
    • Transport Layer Security
    • ๋„คํŠธ์›Œํฌ ์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”
    • ๋ฐ์ดํ„ฐ ์ „์†ก ์ค‘ ๋„์ฒญ, ๋ณ€์กฐ ๋“ฑ์˜ ๊ณต๊ฒฉ์œผ๋กœ ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜์—ฌ ์•ˆ์ „ํ•œ ํ†ต์‹ ์„ ๋ณด์žฅํ•จ
  • ์–‘๋ฐฉํ–ฅ ์ŠคํŠธ๋ฆฌ๋ฐ
    • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ
  • ์ฑ„๋„์„ ์—ด์–ด ํ†ต์‹ ํ•˜๋ฉฐ ์ด ์ฑ„๋„์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • MSA์— ์ฃผ๋กœ ์‚ฌ์šฉ๋จ

 

gRPC ๋‹จ์ 

  • HTTP/2 ๊ธฐ๋ฐ˜์ด๋ผ REST API์— ๋น„ํ•ด ์ดˆ๊ธฐ ํ•™์Šต์‹œ ๋ณต์žก์„ฑ์œผ๋กœ ์ธํ•ด ํ•™์Šตํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Œ
  • ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ง๋ ฌํ™” ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋””๋ฒ„๊น…์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Œ
  • ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €๋กœ ์ธํ•ด ์›น์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด gRPC-Web์„ ์ถ”๊ฐ€์ ์œผ๋กœ ์„ค์ •ํ•ด์•ผํ•จ

 

ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ

  • protocol buffers, protobuf
  • ๊ตฌ๊ธ€์—์„œ ๊ฐœ๋ฐœํ•œ ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™” ํฌ๋ฉง. gRPC์—์„œ ์ด๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ
  • ๋ฉ”์„ธ์ง€์˜ ํ‚ค๋ฅผ ๊ฐ„์†Œํ™”, JSON๋ณด๋‹ค ์ž‘์€ ๋ฉ”์„ธ์ง€ ์ƒ์„ฑ
  • ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ์ง๋ ฌํ™” ํ•ด์„œ ์ „๋‹ฌ (json์— ๋น„ํ•ด ์šฉ๋Ÿ‰์ด ์ ์Œ)
  • ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ์ž‘์€ ํฌ๊ธฐ์˜ ๋ฉ”์„ธ์ง€ ๋ณด์žฅ
  • ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜๋ฉด ์ž๋™์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์Šคํ… ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•จ
    • .protoํŒŒ์ผ์— ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ ์„œ๋น„์Šค ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜
service AccountService {
    // ๊ณ„์ขŒ ๋“ฑ๋ก
    rpc registAccount (RegistAccountRequest) returns (RegistAccountResponse);
}

message RegistAccountRequest {
    string balance = 1;
    int64 userId = 2;
}

message RegistAccountResponse {
    string accountNumber = 1;
    int64 userId = 2;
}

ใ„ด .proto ํŒŒ์ผ ์ •์˜ ์˜ˆ์‹œ

{
    "balance" : 5000,
    "userId" : 24
}

ใ„ด json 

  • json์ด๋ผ๋ฉด balance, userId์™€ ๊ฐ™์€ ํ‚ค ๊ฐ’์ด ํ•„์š”ํ•˜์ง€๋งŒ ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ๋Š” ์ด ํ‚ค๋ฅผ balance = 1 ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ •์˜ํ•˜์—ฌ ํ‚ค ์ •์˜์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Œ

 

stub

 

์ถœ์ฒ˜ : https://grpc.io/docs/what-is-grpc/introduction/

  • ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์Šคํ…์„ ์‚ฌ์šฉํ•ด ๋งˆ์น˜ ๋กœ์ปฌ์˜ ๊ฐ์ฒด ์ฒ˜๋Ÿผ ๋‹ค๋ฅธ ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
  • ์„œ๋ฒ„ ์ธก์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์™€ ๋™์ผํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์Šคํ…์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ.
  • ๋‹ค์–‘ํ•œ ์–ธ์–ด์—์„œ ์ œ์•ฝ์—†์ด ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ

 

 

 

 

 

 

 

 

์ฐธ๊ณ  ๋ฐ ์ถœ์ฒ˜ ์‚ฌ์ดํŠธ

https://www.youtube.com/watch?v=uwrR5e5_FH8

https://blog.naver.com/jhc9639/222642712063

 

gRPC ์ดํ•ดํ•˜๊ธฐ - node.js express ์˜ˆ์ œ๊นŒ์ง€

์˜ค๋Š˜์€ MSA์˜ ์ปดํฌ๋„ŒํŠธ๋ผ๋ฆฌ ํ†ต์‹ ํ•˜๋Š”๋ฐ ๋งŽ์ด ์“ฐ์ด๋Š” gRPC์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž. gRPC๋ž€ gRPC๋Š” ...

blog.naver.com

https://dealicious-inc.github.io/2022/07/11/applying-grpc.html

 

๋‚œ์„ธ์˜ ์˜์›… gRPC

gRPC์˜ ํŠน์ง•์„ ์•Œ์•„๋ณด๊ณ  ์ด๋ฏธ์ง€ ๊ฒ€์ƒ‰ API ์„œ๋น„์Šค์— ์ ์šฉํ•œ ๊ฒฝํ—˜์„ ๊ธฐ๋กํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

dealicious-inc.github.io

https://grpc.io/docs/what-is-grpc/introduction/

 

Introduction to gRPC

An introduction to gRPC and protocol buffers.

grpc.io

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€