ํฐ์คํ ๋ฆฌ ๋ทฐ
gRPC๋ ์ ์ค์ฉ์ ์ผ๊น?
์ด ๊ธ์ gRPC๋ฅผ ์ ํ ์ง ์ผ๋ง ์ ๋๊ฑฐ๋ ์๋กญ๊ฒ ์์๋ณด๊ณ ์ถ์ ์ฌ๋์ ๋์์ผ๋ก go, gRPC ๊ทธ๋ฆฌ๊ณ MSA ํ๊ฒฝ์์์ ์ค๋ฌด ๊ฒฝํ์ ๊ธฐ๋ฐํ์ฌ ์์ฑ๋์์ต๋๋ค.
์ ๋ gRPC๋ ์ธํ๋ผ ๊ตฌ์ถ์ ์์ด ๋ค์ ๋ฌ๋์ปค๋ธ๊ฐ ์๋ ํธ์ด์ง๋ง ๊ต์ฅํ ์ค์ฉ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ค๋์ ์ด์ ๋ํ ์ด์ผ๊ธฐ๋ฅผ ํด๋ณด๋ ค๊ณ ํด์.
๋จผ์ , gRPC๋ ๋ฌด์์ผ๊น์?
gRPC๋ ํ ๋ฌธ์ฅ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ์ ์ํด๋ณผ ์ ์์ต๋๋ค.
gRPC
๋Protocol Buffer
๋ฅผIDL
(Interface Definition Language)๋ก ์ฌ์ฉํ๋HTTP/2
๊ธฐ๋ฐ์RPC ํ๋ ์์ํฌ
์ ๋๋ค.
์์ํ ๋จ์ด๋ค์ด ๋ง์ ์ ์์ ๊ฒ ๊ฐ์๋ฐ์! ์ ๊น ๋ช ๊ฐ์ง ์ดํด๋ณผ๊น์?
RPC
(Remote Procedure Call)- RPC๋ ๋ง ๊ทธ๋๋ก ์๊ฒฉ ํ๋ก์์ ๋ฅผ ํธ์ถํ๋ ๊ธฐ์ ์ ์๋ฏธํฉ๋๋ค.
- ์ฐ๋ฆฌ๊ฐ ํํ ์๊ณ ์๋ RESTful API์ ๋น์ทํ๋ฐ, ์์ ๋ถํฐ ์กด์ฌํ๋ ๊ฐ๋ ์ด์์.
- ์ด์ ์๋ RESTful์ด ์ข ๋ ์ธ๊ธฐ๊ฐ ๋ง์์ RPC๊ฐ ๋ฌปํ์ก๋ค(?)๋ ์ด์ผ๊ธฐ๊ฐ ์์ด์.
Protocol Buffer
- gRPC์์ ํต์ ์ ์ํ interface๋ฅผ ์ ์ํ๋๋ฐ ์ฌ์ฉํ๋ ๋ฌธ๋ฒ&ํ์! ์ ๋๋ค.
- ๊ฐ๋จํ๊ฒ๋ json๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ํต์ ํ์์ผ๋ก ๋ณผ ์ ์์ต๋๋ค!
- ์ฐ๋ฆฌ๊ฐ API๋ฅผ ๊ฐ๋ฐํ ๋, interface๋ฅผ ์ ์ํ ํ ๋ฐ ์ด๋ฅผ gRPC์์๋ Protocol Buffer ๋ฌธ๋ฒ์ ์ด์ฉํด ์ ์ํ๊ฒ ๋ฉ๋๋ค.
๋ณธ๊ฒฉ์ ์ผ๋ก ๋ค์ด๊ฐ๊ธฐ ์ ์ gRPC์ ํน์ง๋ค์ ๋ช ๊ฐ์ง ์ดํด๋ณผ๊น์?
gRPC์ ํน์ง์ ๋์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค!
1. IDL
๊ธฐ๋ฐ์ผ๋ก ๊ฐ ์ธ์ด๋ณ client ์ฝ๋์ server ๋ผ๋ ์ฝ๋๋ฅผ ์๋ ์์ฑ(generate)
Protocol Buffer๋ก ์์ฑ๋ IDL
์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ ์ธ์ด๋ณ client ์ฝ๋&server ๋ผ๋ ์ฝ๋๋ฅผ ๊ฐ๋จํ ๋ช
๋ น์ผ๋ก ์๋ ์์ฑํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ๊ฐ ์ธ์ด๋ณ๋ก ์ปดํ์ผ๋ฌ
๊ฐ ์กด์ฌํ๊ณ ์ด๋ gRPC์์ ์ ๊ณตํ๊ณ ์์ด์!
์ด๋ ๊ฒ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํจ๊ณผ๋ฅผ ๋๋ฆด ์ ์์ต๋๋ค!
- API ์์
์ IDL์ ๊ฐ์ฅ ๋จผ์ ์์ฑํ๊ธฐ์
๋๋ฆ ๊ฒ์ฆ๋ API ๋ฌธ์ํ
- PR ๋ฆฌ๋ทฐ์์ ํ์ ์์ payload ์ ์์ ์๊ฒฌ์ ์ฃผ๊ณ ๋ฐ๊ธฐ๋ ํด์(๋ค์ด๋ฐ ๋ฑ๋ฑ)
- IDL์
SSOT
(Single Source Of Truth)๋ก ์ฌ์ฉ- IDL์ ์ ๋ขฐํ ์ ์๋ ๋จ์ผ ๋ฌธ์๋ฅผ ์๋ฏธํ๊ณ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก
์ํต ๋น์ฉ์ ์ ์ฝ
ํฉ๋๋ค.
- IDL์ ์ ๋ขฐํ ์ ์๋ ๋จ์ผ ๋ฌธ์๋ฅผ ์๋ฏธํ๊ณ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก
2. payload ์์ถ๋ฅ ์ด ๋์ Protocol Buffer๋ฅผ ์ฌ์ฉ
gRPC์์๋ ์์ถ๋ฅ ์ด ๋์ Protocol Buffer
๋ฅผ IDL
(Interface Definition Language)๋ก ์ฌ์ฉํฉ๋๋ค
Protocol Buffer
์๋ ์ฑ๋ฅ์ ์ํ ๊ณ ๋ฏผ๋ค์ด ๋
น์์ ธ์ต๋๋ค. ์ด๋ ์กฐ๊ธ ๋ค์ ์์๋ณด์ฃ !
์ ์ด์ ์์ ๋์ดํ ํน์ง๋ค์ ํ ๋ฒ ํบ์๋ณด๋๋ก์ค์ค์ค์ฅ~~ ํ๊ฒ ์ต๋๋ค!!
IDL
์์์ ๊ณ์ ์ด์ผ๊ธฐํ๋ IDL์ ๋ํด์ ์ข ๋ ์ดํด๋ด
์๋ค.
๋จผ์ gRPC์์ IDL ๋ฌธ๋ฒ์ผ๋ก ์ฌ์ฉํ๋ Protocol Buffer์ ๋ํด ์์๋ณด๊ณ , ์ด๋ป๊ฒ ์์ฑํ๊ณ ํ์ฉ๋๋์ง ์ดํด๋ณผ๊ฒ์!
Protocol Buffer์ ๊ทธ์ ์์ถ๋ฅ
MSA ํ๊ฒฝ์์ ๋คํธ์ํฌ ์ง์ฐ์๊ฐ์ ์ค์ด๋ ๊ฒ์ ๊ต์ฅํ ์ค์ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์๋ค์ํผ payload ์์ถ์ ๋คํธ์ํฌ ์ง์ฐ์๊ฐ์ ์ค์ด๋ ๋ฐฉ๋ฒ ์ค์๋ ํ๋์ฃ .
gRPC์ ๊ธฐ๋ฐ์ด ๋๋ Protocol Buffer
์ HTTP/2
์๋ ์ด๋ฐ ์์ถ๊ณผ ๊ด๋ จ๋ ๊ณ ๋ฏผ๋ค์ด ๋ง์ด ๋
น์์ ธ ์๋๋ฐ์, ๋จผ์ Protocol Buffer๊ฐ payload๋ฅผ ์ด๋ป๊ฒ ์์ถํ๋์ง ์ดํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
Protocol Buffer ๋ ๋ฌด์์ผ๊น์?
- JSON/XML๊ณผ ๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ ํํํ๋ ํ์์ด๋ฉฐ
- .proto ํ์ฅ์๋ฅผ ๊ฐ์ง ํ์ผ์ ๊ธฐ๋ก๋๊ณ
binary format
(์ด์ง ํฌ๋งท)์ผ๋ก ์ ์ฅ๋์ด ์ฌ๋์ด ์ฝ์ ์ ์๊ณ
(์ฌ์ค ์ด๋ฅผ ์ญ์ง๋ ฌํ(Unmarshaling
)ํ๋ฉด ์ฝ์ ์ ์๊ธด ํฉ๋๋ค.)- ์์ถ๋ฅ ์ด ๋์ JSON/XML์ ๋นํด ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ ์ฝํฉ๋๋ค.
Protocol Buffer์์๋ payload๋ฅผ message
๋ผ๋ ํค์๋๋ก ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ ์ ์๋๋ฐ์, ๋ค์๊ณผ ๊ฐ์ด Person์ด๋ผ๋ message๋ฅผ ์ ์ํด๋ณผ ์ ์์ต๋๋ค.
(๋ค์ด๋ฐ ๊ด๋ จํ ์ปจ๋ฒค์ ์ ์ฌ๊ธฐ์ ๋ค๋ฃจ์ง ์์ต๋๋ค)
๊ทธ๋ฆฌ๊ณ ์ Person ๋ฉ์์ง๋ฅผ Protocol Buffer ํ์์ผ๋ก ๋ํ๋ด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋ผ ์ ์์ต๋๋ค.
๊ทธ๋ฆผ์ด ์กฐ๊ธ ๋ณต์กํ๋ฐ.. ๋์น์ฑ์ ๋ถ๋ค๋ ์๊ฒ ์ง๋ง ์์์ message๋ฅผ ์ ์ํ ๋ ๊ฐ ํ๋์ ์์ ์ซ์๋ค์ด ๋ณด์ด์๋์?
์ ์ด๋ฏธ์ง์ ์ข์ธก์ ์ดํด๋ณด๋ฉด, field tag
์ type
์ ๋ฏธ๋ฆฌ ์ง์ ํด๋ ์ด์ง ํฌ๋งท์ผ๋ก ๋ณ๊ฒฝํ์ฌ ์ธ์ฝ๋ฉํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ด๋ ๊ณง payload key๊ฐ์ ์์ถ์ ์๋ฏธํ๋๋ฐ์! ๋ค์ jsonํ์๊ณผ ๋น๊ตํ๋ฉฐ ์ดํดํด๋ณด์ฃ
์ protocol buffer๋ก ํํํ ๋ฐ์ดํฐ๋ฅผ ๋๊ฐ์ด json์ผ๋ก ํํํด๋ณด์์ต๋๋ค.
// 82bytes
{
"userName": "Martin",
"favouriteNumber": 1337,
"interests": ["daydreaming", "hacking"]
}
์ด ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ์ดํด๋ณด๋ฉด 82bytes
์
๋๋ค
๊ทธ๋ฆฌ๊ณ ์ protocol buffer๋ก ํํ๋ ๊ฒ์ ์ด๋ฏธ์ง์ ์ฐ์ธก ํ๋จ ๋ณด๋ฉด 33bytes
๋ผ๋ ๊ฑธ ์ ์ ์์ด์.
๋ฐ๋ก “userName”
, “favouriteNumber”
, “interests”
์ด๋ฐ key ๊ฐ๋ค์ด ์์ถ๋ ๊ฒ์ด์ฃ
์กฐ๊ธ ๊ณผ์ฅ ๋ณดํ์ ๋ฌด๋ ค 248% ์์ถ๋ฅ ์ ์๋ํฉ๋๋ค..! (82Bytes → 33Bytes)
RESTful์์๋ gzip๊ณผ ๊ฐ์ ์์ถ์ ์ด์ฉํ๋ฉด ๋๋ ๊ฑฐ ์๋๊ฐ? ํ๋ ์๊ฐ์ด ๋ค์ง๋ง
gRPC๋ gzip๊ณผ ๊ฐ์ ์์ถ์ ํ์ฉํ ์๋ ์๊ณ ๊ฐ์ธ์ ์ผ๋ก gRPC๋ฅผ ๊ธฐ์ ์ ์ผ๋ก ์ ํํ๋ ์ด์ ๋ ์ด๋ฐ ์์ถ๋ฅ ๋ณด๋ค IDL์ ํ์ฉํ ์ค์ฉ์ฑ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค!
์ด์ ๋ํ ๋ด์ฉ์ ์๋์์ ์ข ๋ ์์๋ณด๊ฒ ์ต๋๋ค.
IDL ๊ธฐ๋ฐ์ Client-Server ์ฝ๋ ์๋ ์์ฑ
gPRC๋ ๊ฐ ์ธ์ด๋ณ๋ก Client-Server ์ฝ๋๋ฅผ ์๋ ์์ฑํด์ฃผ๋ protoc
๋ผ๋ ์ปดํ์ผ๋ฌ
๊ฐ ์กด์ฌํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ ์๋ ์์ฑํ Client-Server๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐํ๊ฒ ๋ฉ๋๋ค.
์ด๋ฐ ๊ตฌ์กฐ๊ฐ ๋ฌด์์ ์๋ฏธํ๊ณ ์ด๋ค ๊ฒ ํจ์จ์ ์ธ ๊ฑธ๊น์? ๐ค
์ ์๊ฐ์ ์ด๋ ์ต๋๋ค.
- protoc๋ฅผ ์ด์ฉํ ์ฝ๋ ์๋ ์์ฑ์ผ๋ก ๊ธฐ์กด Client ์ฝ๋๋ฅผ ์์ฑํ๋ ์๊ฐ์ ์ ์ฝํด์ค๋๋ค.
์ด๋ ํด๋น api๋ฅผ ์ฌ์ฉํ๋ client service๊ฐ ๋ง์์๋ก ๋ ๋ง์ ์๊ฐ์ ์ ์ฝํ๊ฒ ๋ฉ๋๋ค. ์์ ๋งํ๋ N๋ฐฐ์ ํจ์จ์ ๋ผ ์ ์๋ ๊ฒ์ด์ฃ .
- IDL์ ๊ธฐ๋ฐ์ผ๋ก Server-Client ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ IDL์ด
SSOT
(Single Source Of Truth)๊ฐ ๋์ด ์ปค๋ฎค๋์ผ์ด์ ๋น์ฉ์ ์ ์ฝํฉ๋๋ค.
๊ฐ๋ฐํ๋ค ๋ณด๋ฉด ํญ์ API ๋ฌธ์ํ๋ API๋ฅผ ๊ฐ๋ฐํ ์ดํ์ ์งํํ๊ฒ ๋์ง๋ง,
gRPC๋ ๊ตฌ์กฐ์ ์ผ๋ก IDL์ ๋จผ์ ์์ฑํ๊ฒ ํจ์ผ๋ก์จ ์ด๋ ์ ๋ ๊ฒ์ฆ๋ API ๋ฌธ์ํ๋ฅผ ๊ฐ์ ํฉ๋๋ค.
์ ๋ ์ด๋ฐ ๊ตฌ์กฐ์ ๊ฐ์ ์ ์ข์ํ๋๋ฐ์, ์ด๋ฐ ๋ฉด์์ gRPC๋ ๊ต์ฅํ ๊ธ์ ์ ์ ๋๋ค.
golang ๊ธฐ์ค์ผ๋ก protoc
์ปดํ์ผ๋ฌ๋ฅผ ํตํด ์ด๋ค ์ฝ๋๋ค์ด ์์ฑ๋๋์ง ์ ๊น ์ดํด๋ณผ๊น์?
์ฌ๊ธฐ ์์๋ก content service๋ฅผ ์ ์ํ content.proto
ํ์ผ์ด ์์ต๋๋ค.
์ด content.proto ํ์ผ์ ๊ฐ์ง๊ณ ์๋์ ๊ฐ์ protoc
๋ช
๋ น์ด๋ฅผ ์คํํ๋ฉด
์๋์ ๊ฐ์ด content.pb.go
, content_grpc.pb.go
ํ์ผ์ด ์๋ ์์ฑ๋ฉ๋๋ค.
์ด์ ์ด ํ์ผ๋ค์๋ ์ด๋ค ์ฝ๋๋ค์ด ๋ค์ด์๋์ง ํ์ธํด๋ณด๋ฉด..?
์ด๋ ๊ฒ ์ content.proto ํ์ผ์์ ์ ์ํ ๋ด์ฉ ๊ธฐ๋ฐ์ผ๋ก message์ struct์ ListContents rpc interface๊ฐ ๋ง๋ค์ด์ง ๊ฒ์ ํ์ธํด๋ณผ ์ ์์ต๋๋ค!
์ด๋ ๋ฏ IDL์ SSOT๋ก Server-Client ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ดํด๋ณด์์ต๋๋ค.
์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์๋ ์์ฑํ๋ ๊ฒ์ golang ์ธ์๋ ๋ค์ํ ์ธ์ด๋ค์ ์ง์ํ๊ณ ์์ด์.
(go, java, kotlin, python, swagger, swift, typescript…)
SSOT์ธ IDL ๊ทธ๋ฆฌ๊ณ MSA
์์ ๋งํ๋ MSA
ํ๊ฒฝ์์ IDL์ SSOT
๋ก ์ฌ์ฉํ ๋์ ์ฅ์ ์ ๊ทน๋ํ๋ฉ๋๋ค.
๋ชจ๋ ์๋น์ค๊ฐ SSOT์ธ IDL์ ๋ฐ๋ผ๋ณด๊ธฐ๋ง ํ๋ฉด ๋๋
- ์ ๋ง๋ก ๋ค๋ฅธ ์๋น์ค ์ปดํฌ๋ํธ์ ๊ตฌํ์ ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋๊ณ
- ๊ฐ ์ปดํฌ๋ํธ์์ ์ต์ ํ๋ฅผ ์ด๋ป๊ฒ ํ ๊ฒ์ธ์ง๋ฅผ ๊ณ ๋ฏผํ์ง ์์๋ ๋ฉ๋๋ค.
์ด๊ฑด ์ต์ ํ๋ IDL์ generateํ๋ ๊ฒ๋ง์ผ๋ก ํด๊ฒฐ๋ ํ ๋๊น์.
์ด๋ ๊ฒ IDL์ด๋ผ๋ ๊ท์น์ ๋ง๋ค์ด์ ๊ตฌ์กฐ์ ์ผ๋ก ๊ณ ๋ฏผ๊ฑฐ๋ฆฌ๋ฅผ ์ค์ด๋ ๊ฒ ๋ํ ์ ๊ฐ ์๊ฐํ๋ ์ค์ฉ์ ์์ ์ค ํ๋์ ๋๋ค.
์๋ํํฐ API์ IDL
์๋ํํฐ API(์ธ๋ถ API)๋ฅผ ์ด์ฉํ ๋๋ IDL์ ์ด์ฉํ๋ฉด ๋ฌธ์ํ๋ฅผ ์ฑ๊ฒจ๋ณผ ์ ์์ต๋๋ค.
IDL option ์ค์์ [json_name]
option์ ์ด์ฉํ๋ฉด ์๋ํํฐ API์ ํ๋๋ช
์ ์ํ๋ ๋๋ก ์ปค์คํ
ํด์ ์ฌ์ฉํด๋ณผ ์ ์๋๋ฐ์!
๋ค์๊ณผ ๊ฐ์ด ์ฌ์ ์๋ฑ๋ก๋ฒํธ์ ๊ตญ๋ฌธ๋ช ์ ์ ์ ์๋ ์๋ํํฐ API์ Company message๋ฅผ ์ ์ํ๊ณ ์ ์ ํ๊ฒ ํ ๋ด ์ปจ๋ฒค์ ์ ๋ง๊ฒ ๋ค์ด๋ฐ์ ๋ณ๊ฒฝํด๋ณผ ์ ์์ต๋๋ค.
HTTP/2์ ์ค์ฉ์ฑ
์ฌ๊ธฐ์ ์์ธํ ๋ค๋ฃจ์ง ์์ ๊ฒ์ด์ง๋ง,HTTP/2
์๋ ๋คํธ์ํฌ ๋น์ฉ์ ์ค์ด๊ธฐ ์ํ ์๋์ ๊ฐ์ ๋ค์ํ ๊ณ ๋ฏผ๋ค์ด ๋
น์์ ธ ์์ต๋๋ค.
๊ด์ฌ ์๋ ๋ถ๋ค์ ์ฐพ์๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์ ํค์๋๋ค ๋ช ๊ฐ๋ฅผ ๋จ๊ฒจ๋ก๋๋ค!
- ๋ฐ์ด๋๋ฆฌ ํ๋ ์ด๋ฐ
- ํค๋ ์์ถ
- ๋ฉํฐํ๋ ์ฑ(Multiplexing)
- TLS ์์์ ๋์
- ๋ฑ๋ฑ..
Summary
์ฌ๊ธฐ๊น์ง gRPC๋ ์ ์ค์ฉ์ ์ผ๊น?
์ ๋ํด์ ์งง๊ฒ ์์๋ดค๋๋ฐ์ ์ ๋ฆฌํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- IDL(Protocol Buffer)์ ์ด์ฉํด ๋๋ฆ ๊ฒ์ฆ๋ API์ ๋ฌธ์ํ๋ฅผ ๊ฐ์
IDL์ ์ → ๊ฐ๋ฐ
์ ๊ณผ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๊ธฐ์ API ์์ฒญ-์๋ต์ด ๊ฒ์ฆ๋์ด ์๊ณ
API ๋ฌธ์ํ๊ฐ ๊ตฌ์กฐ์ ์ผ๋ก ๊ฐ์ ๋จ.SSOT
(Single Source Of Truth)๋ก ์ด์ฉํ์ฌ ์ํต ๋น์ฉ ์ ์ฝ
- Client-Server ์ฝ๋ ์๋ ์์ฑ์ผ๋ก ์์ฐ์ฑ ํฅ์
๊ฐ ์ฝ๋๋ฅผ ์๋ ์์ฑํด์ฃผ๋ ์ปดํ์ผ๋ฌprotoc
!! ์ด๊ฑดํํธ
๋ค..
golang์gomock
์ ์ด์ฉํ๋ฉด mock code๊น์ง ์๋ ์์ฑ์ด ๊ฐ๋ฅํด์!
- ๊ณ ์ฑ๋ฅ ํต์ ์ผ๋ก ๋คํธ์ํฌ ๋น์ฉ ์ ์ฝ
์ค์ ๊ฒฝํ์ client ํต์ ์ด ๋ง์ ์ด๊ฑด ์ข ๋๋ฆฐ ๊ฒ ๊ฐ์๋ฐ? ์ถ์ ๊ฒ๋ ๋น ๋ฅด๊ณ
์ฌ๊ธฐ์ ์์ธํ ๋ค๋ฃจ์ง ์์์ง๋ง HTTP/2์ ๋ น์์ ธ ์๋ ์ฑ๋ฅ ์ต์ ํ ๊ณ ๋ฏผ๋ค๋ ํ๋ชซํฉ๋๋ค
(+ golang์goroutine
์ ์ด์ฉํ ๊ณ ์ฑ๋ฅ ๋์์ฑ ์ฒ๋ฆฌ๋ ๋ค!)
๋ง์น๋ฉฐ
์ฌ๋ฌ๋ถ๋ค์ ์ด ๊ธ์ ์ฝ๊ณ gRPC์ ํฅ๋ฏธ๊ฐ ์๊ธฐ์ จ๋์?
์ด ๊ธ์ ๋ด๊ณ ์๋ ๋ด์ฉ๋ค์ ๋ณด๋ฉด MSA ํ๊ฒฝ์์ gRPC์ ํจ์จ์ด ๊ทน๋ํ๋๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์ ๋ฌผ๋ก MSA ํ๊ฒฝ์ด๋ผ๋ฉด gRPC๋ฅผ ๋ฌด์กฐ๊ฑด ์ฌ์ฉํด๋ผ! ๋ผ๋ ๊ฑด ์๋๋๋ค.
gRPC๋ฅผ ๋์
ํ๊ธฐ ์ํ ์ธํ๋ผ ๋ฑ ํ์ด์ผ ํ ๋ฌธ์ ๋ค์ด ๋ช ๊ฐ์ง ์กด์ฌํ๊ณ , ์์ง ๋ ํผ๋ฐ์ค๊ฐ ๋ง์ด ์๋ ๊ฒ์ด ์ฌ์ค์
๋๋ค.
ํ์ง๋ง ๊ทธ๋ผ์๋ gRPC๋ฅผ ๋์
ํ ์ค๋น๊ฐ ๋์ด์๋ ํ๊ฒฝ์ด๋ผ๋ฉด ์ ์ ๋๋ต์ Wht Not? ์
๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฌด์๋ณด๋ค ์ด์์์ ๊ฐ ์ํฉ์ ๋ง๋ ํธ๋ ์ด๋์คํ๋ ํญ์ ํ์ํ๊ธฐ์
์์ง๋์ด๋ก์ ์ ์ ํ ์ ํ์ ๊ทธ๋ฆฌ๊ณ , ์์ฃผ ์ ํํ์
จ์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค.
๊ธด ๊ธ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค ๐
'BackEnd' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค(isolation level)์ด๋? (0) | 2024.03.03 |
---|---|
AWS Elastic Beanstalk ๋จ์ผ ์ธ์คํด์ค ๋ฌด์ค๋จ ๋ฐฐํฌํ๊ธฐ (0) | 2023.10.08 |
Nginx 403 (13 Permission denied) ํด๊ฒฐํ๊ธฐ (0) | 2021.10.30 |
JWT (0) | 2021.06.26 |
์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น(SOLID) (0) | 2021.06.12 |
- Total
- Today
- Yesterday
- ๋ฑ ํฌ์๋ฌ๋ ๊ฐ๋ฐ์
- ์คํ/ํ
- ์ข์ ๊ฐ๋ฐ์ ๋๊ธฐ
- ์ฝ๋ฉํ ์คํธ
- ์ถ์ ์ง๋
- mysql ์คํ ๊ณํ
- mysql
- ์๊ณ ๋ฆฌ์ฆ
- HTTP
- 2023 ํ๊ณ
- AWS re:Invent 2023
- 2๋ ์ฐจ ์๋ฒ ๊ฐ๋ฐ์
- 2023 ๊ฐ๋ฐ์ ํ๊ณ
- ์ข์ ์์ง๋์ด
- ์ข์ ๊ฐ๋ฐ์
- ํ๋ก๊ทธ๋๋จธ์ค
- ํด์
- golang oomkilled
- ๊น์ด/๋๋น ์ฐ์ ํ์(DFS/BFS)
- grpc client
- ํ(Heap)
- Aws Reinvent 2023
- Go
- kotlin s3 upload
- ์ฅ์ ํ๊ณ
- rate limit
- ์ข์ ์ฝ๋๋ ๋ฌด์์ธ๊ฐ?
- ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค
- Golang
- ๋ฐฑ์ค
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |