RPC - gRPC์ ๋ํ์ฌ
๐ฉ RPC - gRPC์ ๊ดํ์ฌ
ํ์ฌ ์ ํํ๋ MSA ( Micro Service Architecture ) ๊ตฌ์กฐ๋ก ์๋น์ค๋ฅผ ๋ง๋ค๋ค๋ณด๋ฉด, ๋ค์ํ ์ธ์ด์ ํ๋ ์์ํฌ๋ก ๊ฐ๋ฐ๋๋ ๊ฒฝ์ฐ๊ฐ ๋น๋ฒํ๋ค. ๊ทธ๋ฌ๋ฉด Service ๊ฐ์ ํต์ ์ด ํ๊ฒฝ์ ์ํฅ์ ๋ฐ์ ๋งค์ฐ ๋ณต์กํด์ง๊ฒ ๋๋๋ฐ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ํ๋ก๊ทธ๋จ ๊ฐ์ API ( Application Programming Interface ) ๋ฅผ ๋ง๋ ๋ค. ํ์ฌ ์ ์ผ ๋์ค์ ์ธ API ๋ HTTP Protocol ์ ํ์ฉํ RestAPI ์ธ๋ฐ, ์ฐ์ฐํ RPC ์ ๋ํด์ ์๊ฒ๋์ด ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
๐ RPC ( Remote Procedure Call ) ๋ ?
โ RPC ( Remote Procedure Call ) ์ ์ ์
- Remote Procedure Call( ์๊ฒฉ ํ๋ก์์ ํธ์ถ )์ ์ฝ์๋ก, ๋ณ๋์ ์๊ฒฉ ์ ์ด๋ฅผ ์ํ ์ฝ๋ฉ ์์ด ๋ค๋ฅธ ์ฃผ์ ๊ณต๊ฐ์์ ํจ์ ( Function ) ํน์ ํ๋ก์์ ( Procedure ) ๋ฅผ ์คํํ ์ ์๊ฒ ํ๋ ํ๋ก์ธ์ค ๊ฐ ํต์ ๊ธฐ์
์ฉ์ด ์ ๋ฆฌ
- ํจ์ ( Function ) : Input ์ ๋ฐ๋ฅธ Output ์ ๋ฐ์์ด ๋ชฉ์ ์ด๋ฏ๋ก Return ๊ฐ์ ํ์๋ก ๊ฐ์ง๋ ๊ณ์ฐ
- ํ๋ก์์ ( Procedure ) : Input ์ ๋ฐ๋ฅธ Output ์ ๋ฐ์์ ์ง์คํ๊ธฐ๋ณด๋ค๋ ์์ ์ ์ง์คํ ๊ฐ๋
โ RPC ( Remote Procedure Call ) ์ ๋์ ์๋ฆฌ
๋์ ์์
- Client ์์ ๋งค๊ฐ๋ณ์๋ฅผ Client stub ์ ์ ๋ฌ
- Client stub ์์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฉ์์ง๋ก Marshalling
- Client stub ์ Marshalling ๋ ๋ฉ์ธ์ง๋ฅผ ์ ์ก๊ณ์ธต ( Transport Layer ) ์ผ๋ก ์ ๋ฌํ์ฌ Server ๋ก ์ ์ก.
- Server ์์ ๋ฉ์์ง๋ฅผ ๋ฐ์ Server stub ์ผ๋ก ์ ๋ฌํ๊ณ ๋งค๊ฐ ๋ณ์๋ฅผ UnMarshalling ํ์ฌ Server ํจ์ ํธ์ถ
- ํจ์ ์ํ์ด ์๋ฃ๋๋ฉด Server Stub ์ผ๋ก ๋ฆฌํด๋๋ฉฐ ๋ฆฌํด๊ฐ์ ๋ฉ์์ง๋ก Marshalling
- ๊ฒฐ๊ณผ ๋ฉ์์ง๋ฅผ Client ์ ๋ณด๋ด๊ณ Client ๋ UnMarshalling ํ, ๋ฆฌํด๊ฐ์ Client ์๊ฒ ๋ฐํ
์ฉ์ด ์ ๋ฆฌ
- Stub : ์๋ฒ์ ํด๋ผ์ด์ธํธ๋ ์๋ก ๋ค๋ฅธ ์ฃผ์ ๊ณต๊ฐ์ ์ฌ์ฉํ๋ฏ๋ก ํจ์ ํธ์ถ์ ์ฌ์ฉ๋ ๋งค๊ฐ๋ณ์๋ฅผ Marshalling, UnMarshalling ํ๋ ์ญํ
- Client stub : ํจ์ ํธ์ถ์ ์ฌ์ฉ๋ ํ๋ผ๋ฏธํฐ์ ๋ณํ(Marshalling) ๋ฐ ํจ์ ์คํ ํ Server ์์ ์ ๋ฌ๋ ๊ฒฐ๊ณผ์ ๋ฐํ
- Server stub : Client ๊ฐ ์ ๋ฌํ ๋งค๊ฐ๋ณ์์ ์ญ๋ณํ(UnMarshalling) ๋ฐ ํจ์ ์คํ ๊ฒฐ๊ณผ ๋ณํํ์ฌ Client ์ ๋ฐํ
- Marshalling & UnMarshalling : ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํด์ ๋ณํํ๋ ์ผ๋ จ์ ๊ณผ์
- Serialize & Deserialize : ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํด byte stream ์ผ๋ก ๋ณํํ๋ ๊ณผ์
โ RPC ( Remote Procedure Call ) ์ ์ต์ข ์งํฅ์
- Client <-> Server ๊ฐ์ ์ปค๋ฎค๋์ผ์ด์ ์ ํ์ํ ์์ธ์ ๋ณด๋ ์ต๋ํ ๊ฐ์ถ๋ค.
- Client ๋ ์ผ๋ฐ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒ์ฒ๋ผ Server ์ Method ๋ฅผ ํธ์ถํ ์ ์๋ค.
- Server ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ผ๋ฐ ๋ฉ์๋๋ฅผ ๋ค๋ฃจ๋ ๊ฒ์ฒ๋ผ Client Method ๋ฅผ ๋ค๋ฃฐ ์ ์๋ค.
โ RPC ( Remote Procedure Call ) ์ ์ฅ์
- ํ๊ฒฝ์ ์ ํ ๋ฐ์ง ์๊ณ ํ๋ก๊ทธ๋จ ๊ฐ ํต์ ์ ์ฝ๊ฒ ๊ตฌํํ๊ณ ์ ๊ตํ ์ ์ด๊ฐ ๊ฐ๋ฅํ๋ค.
- ๋คํธ์ํฌ ํ๋กํ ์ฝ์ ๋ํ ์ ํ ์์ด ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ ์ง์ค์ด ๊ฐ๋ฅํ๋ค.
โ RPC ( Remote Procedure Call ) ์ ๋จ์
- ํธ์ถ ์คํ๊ณผ ๋ฐํ ์๊ฐ์ด ๋ณด์ฅ๋์ง ์๋๋ค.
- ๋คํธ์ํฌ ๊ตฌ๊ฐ์ ํตํ์ฌ RPC ํต์ ์ ํ๋ ๊ฒฝ์ฐ, ๋คํธ์ํฌ๊ฐ ๋๊ฒผ์ ๋ ์น๋ช ์ ๋ฌธ์ ๋ฐ์ํ๋ค.
- ํต์ ๊ฐ์ ๋ณด์์ด ๋ณด์ฅ๋์ง ์๋๋ค.
๐ gRPC ( Google Remote Procedure Call ) ๋ ?
โ gRPC ( Google Remote Procedure Call ) ์ ์ ์
- HTTP/2 ์ ProtocolBuf ๋ฅผ ํ์ฉํ์ฌ Google ์์ ๊ฐ๋ฐํ ์คํ์์ค RPC Framework
โ gRPC ( Google Remote Procedure Call ) ๋์ ์๋ฆฌ
โ gRPC ( Google Remote Procedure Call ) ์ ํน์ง
- HTTP/2 ๋ฅผ ํ์ฉํ ๋ฐ์ด๋ ํจ์จ์ฑ
- ProtoBuf(proto3) ๋ฅผ ์ด์ฉํ JSON ์์์ ์ฑ๋ฅ
- RPC ์ ๋จ์ ์ ๋ณด์ํ ์ธ์ฆ, ์ํธํ, ์์ถ ๋ฑ ํ๋ถํ ๋ด์ฅ ๊ธฐ๋ฅ
- Java, C++, C#, Python, Ruby, Node.js ๋ฑ 10๊ฐ์ ์ธ์ด ์ง์
โ HTTP/2 ๋?
- HTTP 1.1 ์ ๊ฐ์ ๋ ๋ฒ์ ์ผ๋ก SPDY ( ์คํผ๋ ) ๊ธฐ๋ฐ HTTP ํ๋กํ ์ฝ์ ๋๋ฒ์ฌ ๋ฒ์
- SPDY ( ์คํผ๋ )
์ ์ก ์ง์ฐ ( latency ) ๋ฌธ์ ์ ํด๊ฒฐ์ ์ง์คํ์ฌ HTTP ํต์ ์ ๊ณ ์ํํ๊ธฐ ์ํด ๊ตฌ๊ธ์ด ๊ฐ๋ฐํ ๋นํ์ค ๊ฐ๋ฐฉํ ๋คํธ์ํฌ ํ๋กํ ์ฝ
โ HTTP/2 ํน์ง
- HTTP/1.1 ์ ์์ฐจ์ ์ฒ๋ฆฌ์๋ ๋ค๋ฅธ ํ๋์ TCP/IP ์ฐ๊ฒฐ์์ ์ฌ๋ฌ๊ฐ์ ์คํธ๋ฆผ์ ๋์์ ์ด์ด ๋ณ๋ ฌ์ฒ๋ฆฌ
- ๊ธฐ์กด Client ์ Server ์์ ์ฌ์ฉ๋ Header ๋ค์ ๋ชฉ๋ก๋ค์ ๊ด๋ฆฌํ์ฌ ์ค๋ณต ํค๋ ํ๋ ์์ ์์ถํด์ ์ ์ก
- HTTP/1.1 Text ๊ธฐ๋ฐ protocol ์์ Binary protocol ์ง์
โ ProtoBuf ( Protocol Buffer ) ๋?
- gRPC ์์ ์ฌ์ฉ๋๋ XML, JSON ๊ณผ ์ ์ฌํ ์ง๋ ฌํ ๋ฐ์ดํฐ ๊ตฌ์กฐ
โ ProtoBuf ( Protocol Buffer ) ํน์ง
- byte ๋ฅผ ์ ์กํ๊ธฐ ๋๋ฌธ์ JSON ๊ณผ ๊ฐ์ Parsing ( ํ์ฑ ) ์ ๋ถํ์
- ๊ฐ์ ๋ฐ์ดํฐ๋ผ๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ์์ ๋น ๋ฅธ ํต์ ์๋
- binary ๊ตฌ์กฐ๋ก ์ธํ ์ธ๊ฐ์ด ์ฝ๊ธฐ ์ด๋ ค์ด ๊ตฌ์กฐ
- proto ๋ฌธ๋ฒ์ ๋ํ Learning Curve
โ gRPC ( Google Remote Procedure Call ) ์ ์ฅ์
- ProtoBuf ๊ธฐ๋ฐ Binary Protocol ์ฌ์ฉ
- HTTP/2 ์ฌ์ฉ
โป ์ฐ์ํ ๋คํธ์ํฌ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ
โ gRPC ( Google Remote Procedure Call ) ์ ๋จ์
- Browser ํ๊ฒฝ์์ ์ฌ์ฉ ๋ถ๊ฐ
- Binary Protocol ๋ก ์ธํ Debug ์ ์ด๋ ค์ ( Not Human Readable )
- ๊ธฐ์กด์ RPC ๋ณด๋ค๋ ๊ฐํธํ๋ ์ฌ์ ํ Learning Curve
- Load Balancer ( ๋ก๋๋ฐธ๋ฐ์ ) ๊ฐ HTTP/2 ๋ฅผ ์ง์ํด์ผํ๋ค.
โป Rest ์ ๋นํด Learning Curve ๊ฐ ๋๋ค.
๐ฉ ๋ง์น๋ฉฐ..
gRPC ์ ๋ํ ๊ฐ๋ ์ ์ ๋ฆฌํด๋ณด์๋ค. Rest ์ ๋น๊ตํ์ฌ ํ์คํ Learning Curve ๊ฐ ๋ฌด์ง๋ง์งํ๊ฒ ๋๋ค. ์ ๋ฌธ๊ฐ๊ฐ ๋๋ค๋ฉด ์ง๊ธ์ ์์ฉ์๋น์ค๋ฅผ ํ์ฉํ์ง ์๊ณ ๋ ์ด ๊ธฐ์ ๋ง์ผ๋ก๋ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ ์ ์์ ๊ฒ ๊ฐ๋ค.