RESTful, ๋นํจ์จ์ ํ ์คํธ ๊ธฐ๋ฐ ๋ฉ์ธ์ง ํ๋กํ ์ฝ
RESTful ์๋น์ค๋ HTTP 1.x ์ ๊ฐ์ ํ
์คํธ ๊ธฐ๋ฐ ์ ์ก ํ๋กํ ์ฝ๋ก ๊ตฌ์ถ๋๊ณ , JSON ์ฒ๋ผ ์ฌ๋์ด ์ฝ์ ์ ์๋ ํ
์คํธ ํฌ๋งท์ ํ์ฉํจ.
๊ทธ๋ฐ๋ฐ, ์๋น์ค๊ฐ ํต์ ์ ํ ๊ฒฝ์ฐ(common server - user server ์ด๋ฐ์?) ์ฌ๋์ด ์ฝ์ ์ ์๋ ํ
์คํธ ๊ธฐ๋ฐ ํฌ๋งท์ ์ฌ์ฉํ ํ์๊ฐ ์์!
→ ๋นํจ์จ์ ์ด๋ผ ํ๋จํจ.
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก ์ ์กํ ๋ฐ์ด๋๋ฆฌ ์ฝํ
์ธ ๋ฅผ ๋ง๋ ํ, ๋ฐ์ด๋๋ฆฌ ๊ตฌ์กฐ์ฒด๋ฅผ ํ
์คํธ๋ก ๋ณํํจ.
๊ทธ๋ฆฌ๊ณ ๋คํธ์ํฌ๋ฅผ ํตํด ํ
์คํธ๋ก ์ ์กํ๊ณ ์๋น์ค์ธก์์ ๋ค์ ๋ฐ์ด๋๋ฆฌ ๊ตฌ์กฐ๋ก ๋ณํํจ.
→ ์ด๋ด๋ฐ์ ๋น์ฆ๋์ค ๋ก์ง์ผ๋ก ๋ฐ๋ก ๋งคํ๋ ์ ์๋ ๋ฐ์ด๋๋ฆฌ ํ์์ผ๋ก ์ฝ๊ฒ ์ ์กํ๋๊ฒ์ด ๋ซ๋ค๊ณ ํ๋จ!
RPC
์ค๋ช
ํด๋ผ์ด์ธํธ - ์๋น์ค ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ๋ ๋ฐ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํ๋ก์ธ์ค๊ฐ ํต์ ๊ธฐ์
RPC์ ํตํด ํด๋ผ์ด์ธํธ๋ ๋ก์ปฌ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒ์ฒ๋ผ ์๊ฒฉ์ผ๋ก ๋ฉ์๋ ๊ธฐ๋ฅ์ ํธ์ถํ ์ ์๋ค.
gRPC
์ค๋ช
๊ตฌ๊ธ์์ ๋ง๋ ์คํ์์ค ์๊ฒฉ ํ๋ก์์ ํธ์ถ ์์คํ .
โป ์๊ฒฉ ํ๋ก์์
๋ณ๋์ ์๊ฒฉ ์ ์ด๋ฅผ ์ํ ์ฝ๋ฉ ์์ด ๋ค๋ฅธ ์ฃผ์ ๊ณต๊ฐ์์ ํจ์๋ ํ๋ก์์ ๋ฅผ ์คํํ ์ ์๊ฒํ๋ ํ๋ก์ธ์ค ๊ฐ ํต์ ๊ธฐ์ ์ด๋ค.
๋ค์ ๋งํด, ์๊ฒฉ ํ๋ก์์ ํธ์ถ์ ์ด์ฉํ๋ฉด ํ๋ก๊ทธ๋๋จธ๋ ํจ์๊ฐ ์คํ ํ๋ก๊ทธ๋จ์ ๋ก์ปฌ ์์น์ ์๋ ์๊ฒฉ ์์น์ ์๋ ๋์ผํ ์ฝ๋๋ฅผ ์ด์ฉํ ์ ์๋ค.
๋ก์ปฌํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ ๋งํผ ์ฝ๊ฒ ๋ถ์ฐ๋ ์ด๊ธฐ์ข
์ ํ๋ฆฌ์ผ์ด์
์ ์ฐ๊ฒฐ/ํธ์ถ/์ด์/๋๋ฒ๊น
ํ ์ ์๋ ํ๋ก์ธ์ค ๊ฐ ํต์ ๊ธฐ์ .
์ฃผ๋ก ํต์ ์ ๋๊ธฐ์ ์์ฒญ-์๋ต ์คํ์ผ์ ์ฌ์ฉํ๋, ์ด๊ธฐ ํต์ ์ด ์ค์ ๋๋ฉด ์์ ๋น๋๊ธฐ์์ด๊ฑฐ๋ ์คํธ๋ฆฌ๋ฐ ๋ชจ๋์์ ์๋ํ ์ ์๋ค.
ํ๋กํ ์ฝ ๋ฒํผ์ HTTP/2 ํ๋กํ ์ฝ ์์ ๊ตฌ์ถ๋จ.
โป ํ๋กํ ์ฝ ๋ฒํผ
๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํํ๊ณ ์ ์ธ์ด์ ๊ตฌ์ ๋ฐ์ง ์๊ณ ํ๋ซํผ ์ค๋ฆฝ์ ์ด๋ฉฐ ํ์ฅ ๊ฐ๋ฅํ ๋ฉ์ปค๋์ฆ์ธ ๋ฐ์ดํฐ ์ง๋ ฌํ ํ๋กํ ์ฝ.
๋ฐ์ดํฐ๊ฐ ์ง๋ ฌํ๋๋ฉด ์ด ํ๋กํ ์ฝ์ ์ผ๋ฐ JSON ํ์ด๋ก๋๋ณด๋ค ํฌ๊ธฐ๊ฐ ์๊ณ ๊ฐ๋ ฅํ ํ์์ ๋ฐ์ด๋๋ฆฌ ํ์ด๋ก๋๋ฅผ ์์ฑํจ.
→ HTTP/2๋ผ๋ ๋ฐ์ด๋๋ฆฌ ์ ์ก ํ๋กํ ์ฝ์ ํตํด ์ ์ก!
๊ตฌ์ฑ ํ๋ก์ ํธ
โ ์ธํฐํ์ด์ค ์ ์
โฃ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ, ์๊ฒฉ์ผ๋ก ํธ์ถ๋๋ ๋ฉ์๋ ์ข
๋ฅ, ํด๋น ๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ์ํ ํ๋ผ๋ฏธํฐ, ๋ฉ์ธ์ง ํ์๋ฑ์ ํฌํจ.
โฃ *.proto ํ์ผ๋ก ์ ์(=์ธํฐํ์ด์ค ์ ์ ์ธ์ด), ์ด๋ ํ๋กํ ์ฝ ๋ฒํผ ๋ฉ์ธ์ง๋ก RPC ๋ฉ์๋ ํ๋ผ๋ฏธํฐ ๋ฐ ๋ฐํ ํ์
๊ณผ ํจ๊ป gRPC ์๋น์ค๋ฅผ ์ผ๋ฐ ํ๋กํ ์ฝ ๋ฒํผ ํ์์ผ๋ก ์ ์ํจ.
โฃ ํ๋กํ ํ์ผ์์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ gRPC ํ๋ฌ๊ทธ์ธ์ด ์ฌ์ฉ๋๋ค.
โป gRPC ํ๋ฌ๊ทธ์ธ
gRPC ์๋ฒ์ธก, ํด๋ผ์ด์ธํธ์ธก ์ฝ๋ ๋ฟ๋ง์ด ์๋๋ผ
์ ์๋ ๋ฉ์ธ์ง ํ์ ์ ๋ฐ์ดํฐ ์ง์ , ์ง๋ ฌํ, ๋ฐ์ดํฐ ์ทจ๋์ ์ผ๋ฐ ํ๋กํ ์ฝ ๋ฒํผ ์ฝ๋๋ ์์ฑํ ์ ์๋ค.
โ ์๋ฒ
โฃ ์ธํฐํ์ด์ค ์ ์๊ฐ ์๋ฃ๋๋ฉด, protoc์ ์ฌ์ฉํด ์๋ฒ์ธก์ด๋ ํด๋ผ์ด์ธํธ ์ธก ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
โฃ ์ค์ผ๋ ํค(server skeleton) ์ด๋ผ๋ ์๋ฒ์ธก ์ฝ๋ ์์ฑ๊ฐ๋ฅ. ์ ์์ค์ ํต์ ์ถ์ํ๋ฅผ ํตํด ์๋ฒ ์ธก ๋ก์ง ๋จ์ํ ๊ฐ๋ฅ.
(gRPC ๊ด๋ จ ์์ ์๋น์ค ํด๋์ค๋ฅผ ์ค๋ฒ๋ผ์ด๋ ํ์ฌ ์ค์ผ๋ ํค(server skeleton) ์ด๋ผ๋ ์๋ฒ์ธก ์ฝ๋ ๊ตฌํ!)
โฃ ๋ก์ง ๊ตฌํ ํ, ์๋ฒ ์คํํ์ฌ ํด๋ผ์ด์ธํธ ์์ฒญ ์์ ๋ฐ ์๋ต!
โ ํด๋ผ์ด์ธํธ
โฃ ์คํ
(client stub) ์ด๋ผ๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์. ๋ฉ์๋ ํจ์ ํธ์ถํ๋๊ฒ์ฒ๋ผ ์ฝ๊ฒ ํด๋ผ์ด์ธํธ์ธก์์ ์๊ฒฉ ํธ์ถ ๊ฐ๋ฅ.
โฃ ์คํ
(client stub)์ ์๋ฒ์ ๋์ผํ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋๋ฐ, ํด๋ผ์ด์ธํธ ์ฝ๋์์ ๋ฉ์๋๋ค์ ํธ์ถ์ ๋คํธ์ํฌ์ ์๊ฒฉ ํจ์ ํธ์ถ๋ก ๋ณํํจ.
์ผ๋ก ๊ตฌ์ฑ.
ํด๋ผ์ด์ธํธ-์๋ฒ ํ๋ฆ
โถ๏ธ ๋คํธ์ํฌ ํต์ ์ HTTP/2๋ฅผ ํตํด ์ด๋ฃจ์ด์ง
โถ๏ธ (java ๊ธฐ์ค) *.proto ํ์ผ ์์ฑ ํ, ๋น๋ํ๋ฉด(๋ฌผ๋ก ๊ด๋ จ ํจํค์ง importํ๊ณ ,,) grpc ์ฌ์ฉ๊ด๋ จ ํด๋์ค๋ค์ด ์์ฑ๋๊ณ , ์ด๋ฅผ ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ๋๊ฒ์ผ๋ก ํ์ธ
gRPC ์ฅ์
• ํ๋ก์ธ์ค๊ฐ ํต์ ํจ์จ์ฑ์ด ์ฆ๋
ํ
์คํธ ํ์ ๋์ ํ๋กํ ์ฝ ๋ฒํผ ๊ธฐ๋ฐ ๋ฐ์ด๋๋ฆฌ ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ gRPC ์๋น์ค ๋ฐ ํด๋ผ์ด์ธํธ์ ํต์ ํ๋ฉฐ,
HTTP/2 ํ๋กํ ์ฝ ๋ฒํผ๋ก ๊ตฌํ๋๊ธฐ์ ํ๋ก์ธ์ค ๊ฐ ํต์ ์๋๊ฐ ๋งค์ฐ ๋นจ๋ผ์ง๋ค.
• ๊ฐ๋จ ๋ช
ํํ ์๋น์ค ์ธํฐํ์ด์ค ์คํค๋ง
๋จผ์ ์๋น์ค ์ธํฐํ์ด์ค๋ฅผ ์ ์ ํ๊ณ ๋์ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ์์
ํ๋ค. (๊ตฌํ์ด ๊ฐ๋จ)
• ์๊ฒฉํ ํ์
์ ๊ฒ ํ์
ํ๋กํ ์ฝ ๋ฒํผ๋ฅผ ์ฌ์ฉํ๊ธฐ์ gRPC ์๋น์ค ๊ณ์ฝ์ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ ํต์ ์ ์ฌ์ฉํ ๋ฐ์ดํฐ ํ์
์ ๋ช
ํํ๊ฒ ์ ์ํ๋ค.
• ํด๋ฆฌ๊ธ๋
์ฌ๋ฌ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์๋ํ๋๋ก ์ค๊ณ๋จ. ํน์ ์ธ์ด์ ๊ตฌ์ ์๋ฐ์!
• ์ด์ค ์คํธ๋ฆฌ๋ฐ
• ์ ์ฉํ ๋ด์ฅ ๊ธฐ๋ฅ ์ง์
• ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ์ํ๊ณ์ ํตํฉ
๋ทํ๋ฆญ์ค ๋์ปค ์์ค์ฝ ๋ฑ์์ ์ฑํ
gRPC ๋จ์
• ์ธ๋ถ ์๋น์ค ๋ถ์ ํฉ
์ธ๋ถ ํด๋ผ์ด์ธํธ์ ์ ๊ณตํ๋ ค๋ ๊ฒฝ์ฐ๋ ์ ํฉํ์ง ์์ ์ ์์.
๊ณ์ฝ ๊ธฐ๋ฐ์ด๊ณ , ๊ฐ๋ ฅํ ํ์
์์ฑ์ ๊ฐ๊ธฐ ๋๋ฌธ
๊ทธ๋์ gRPC ๊ฒ์ดํธ์จ์ด๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐ์ฑ
์ผ๋ก ์ค๊ณ๋จ.
• ์๋น์ค ์ ์์ ๊ธ๊ฒฉํ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๊ฐ๋ฐ ํ๋ก์ธ์ค ๋ณต์ก์ฑ
gRPC ์๋น์ค๊ฐ ์ฌ์ ์๋๋ฉด, ํด๋ผ์ด์ธํธ ๋ฐ ์๋ฒ ์ฝ๋ ๋ชจ๋ ๋ณ๊ฒฝ์ ํด์ผํจ;
• ์๋์ ์ผ๋ก ์์ ์ํ๊ณ
๋ธ๋ผ์ฐ์ ๋ฐ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์
์์ gRPC ์ง์์ ์ด๊ธฐ ๋จ๊ณ๋ผ๊ณ ํจ.
..
์ฐธ๊ณ
์ฑ
: http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791161754635
๋งํฌ: https://thenewstack.io/grpc-remote-procedure-calls-in-a-nutshell/
๋งํฌ: https://grpc.io/