ํด๋น ๋ ํฌ๋ gRPC๋ฅผ Spring ํ๋ ์์ํฌ ์์์ ํ์ฉํด๋ณด๊ธฐ ์ํด์ ํ ์คํธ ๋ชฉ์ ์ผ๋ก ์์ฑํ ์ ์ฅ์์ ๋๋ค. application.yml์ ๋ณธ์ธ์ ์คํํ๊ฒฝ์ ๋ง์ถ์ด ํ ์คํธํด๋ณด์ธ์.
gRPC-echosystem ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ ํ ์คํธ์ ๋๋ค. ๋ ์์ธํ ์์ ๋ ์๋ ๋ ํฌ์ document๋ฅผ ์ฐธ๊ณ ํ์ธ์.
dependencies {
compile 'net.devh:grpc-client-spring-boot-starter:3.0.0.RELEASE'
}- gRPC๋ Google์ด ๊ฐ๋ฐํ ๊ณ ์ฑ๋ฅ, ๋ฒ์ฉ RPC(์๊ฒฉ ํ๋ก์์ ํธ์ถ) ํ๋ ์์ํฌ์ด๋ค.
- gRPC๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์ ํต์ ์ ์ํด HTTP/2๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ํ๋กํ ์ฝ ๋ฒํผ(Protocol Buffers)๋ผ๋ ํจ์จ์ ์ธ ์ธํฐํ์ด์ค ์ ์ ์ธ์ด(IDL)๋ฅผ ์ฌ์ฉํ์ฌ API๋ฅผ ์ ์ํ๋ค.
- ์ด๋ฅผ ํตํด ์ธ์ด ๋ ๋ฆฝ์ ์ธ ๋ฐฉ์์ผ๋ก ์๋น์ค๋ฅผ ์ ์ํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํํ์ฌ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ์กํ ์ ์๋ค.
- gRPC๋ ๋ฉํฐํ๋ ์ฑ, ํ๋ฆ ์ ์ด, ์คํธ๋ฆผ ์ฐ์ ์์ ์ค์ ๋ฑ HTTP/2์ ์ฃผ์ ๊ธฐ๋ฅ์ ํ์ฉํด ๋์ ์ฑ๋ฅ์ ์ ๊ณตํ๋ค.
- ๊ธฐ๋ฐ ํ๋กํ ์ฝ: gRPC๋ HTTP/2๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, WebSocket์ HTTP๋ฅผ ์ ๊ทธ๋ ์ด๋ํ ๋ ๋ฆฝ์ ์ธ ํ๋กํ ์ฝ์ด๋ค.
- ์ฉ๋
- WebSocket์ ์๋ฐฉํฅ, ์ง์์ ์ธ ์ฐ๊ฒฐ์ ์ํด ์ค๊ณ๋์์ผ๋ฉฐ, ์ฃผ๋ก ์ค์๊ฐ ํต์ ์ ์ฌ์ฉ๋๋ค.
- gRPC๋ ์๊ฒฉ ํ๋ก์์ ํธ์ถ์ ์ด์ ์ ๋ง์ถ๊ณ ์์ผ๋ฉฐ, ํด๋ผ์ด์ธํธ-์๋ฒ ๊ฐ์ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์กํ๋ ๋ฐ ์ ์ฉํ๋ค.
- ์คํธ๋ฆฌ๋ฐ: gRPC๋ ์๋ฒ ์คํธ๋ฆฌ๋ฐ, ํด๋ผ์ด์ธํธ ์คํธ๋ฆฌ๋ฐ, ์๋ฐฉํฅ ์คํธ๋ฆฌ๋ฐ์ ์ง์ํ์ฌ ๋ค์ํ ํต์ ํจํด์ ํ๋ค. WebSocket์ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฐฉํฅ ํต์ ์ ์ง์ํ๋ค.
- ๋ฉ์์ง ํฌ๋งท: gRPC๋ ํ๋กํ ์ฝ ๋ฒํผ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํํ๋ค. ์ด๋ ๋งค์ฐ ํจ์จ์ ์ด์ง๋ง ์ฌ์ฉ์ ์ํด์๋ ์คํค๋ง ์ ์๊ฐ ํ์ํ๋ค. ๋ฐ๋ฉด, WebSocket์ ํ ์คํธ(์: JSON) ๋๋ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์์ผ๋ฉฐ, ํ์์ ๋ํ ์ ํ์ด ์๋ค.
์๋ฒ ์คํธ๋ฆฌ๋ฐ
- ์๋ฒ ์คํธ๋ฆฌ๋ฐ์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ธ ํ, ์๋ฒ๋ก๋ถํฐ ์ฌ๋ฌ ๊ฐ์ ๋ฉ์์ง๋ฅผ ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ผ ๋ฐ๋ ํต์ ๋ฐฉ์์ด๋ค.
- ์ด๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐฐ์น๋ก ๋น ๋ฅด๊ฒ ์ ์กํ๊ฑฐ๋, ๋ฐ์ดํฐ๊ฐ ์ค๋น๋๋ ๋๋ก ์ ์ง์ ์ผ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์ ๊ณตํ ๋ ์ ์ฉํ๋ค. ์ฝ๋ฃจํด
- ์ฝ๋ฃจํด์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ๋จ์ํํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ตฌ์กฐ๋ก, ํนํ Kotlin๊ณผ ๊ฐ์ ์ธ์ด์์ ๋ง์ด ์ฌ์ฉ๋๋ค.
- ์๋ฒ ์คํธ๋ฆฌ๋ฐ๊ณผ ์ฝ๋ฃจํด์ ํจ๊ป ์ฌ์ฉํ๋ฉด, ์๋ฒ๋ก๋ถํฐ ๋ฉ์์ง ์คํธ๋ฆผ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ฉด์๋ ์ฝ๋๋ฅผ ๋ง์น ๋๊ธฐ ์ฝ๋์ฒ๋ผ ๊ฐ๊ฒฐํ๊ณ ์ดํดํ๊ธฐ ์ฝ๊ฒ ์์ฑํ ์ ์๋ค.
- ์๋ฅผ ๋ค์ด, ์ฝ๋ฃจํด์ ์ฌ์ฉํ๋ฉด ์๋ฒ๋ก๋ถํฐ ๋ฉ์์ง ์คํธ๋ฆผ์ ๋ฐ๋ ๋์ ๋ค๋ฅธ ์์ ์ ์ํํ๊ฑฐ๋, ์คํธ๋ฆผ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆผ ์์ด ์ฆ์ ๋ค์ ์ฝ๋๋ก ๋์ด๊ฐ ์ ์๋ค.
- ์ด๋ I/O ๋ฐ์ด๋ ์์ , ํนํ ๋คํธ์ํฌ๋ฅผ ํตํ ๋ฐ์ดํฐ ํต์ ์์ ์ฝ๋์ ๋น๋๊ธฐ ์คํ์ ์ฉ์ดํ๊ฒ ํ๋ฉฐ, ์๋ฒ ์คํธ๋ฆฌ๋ฐ์ ํตํ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ํฐ ์ฅ์ ์ ์ ๊ณตํ๋ค.
์ด๋ฒ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ์์น๋ฅผ ์ฐ๊ฒฐ์ด ์๋ฆฝ๋๋ฉด data stream์ผ๋ก ๋ฐ์์ ์ฒ๋ฆฌํด์ผํ๊ธฐ ๋๋ฌธ์ ์๋ฒ์คํธ๋ฆฌ๋ฐ ๋ฐฉ์์ ์ฌ์ฉํ์์ผ๋ฉฐ, kotlin์์๋ ์์๋งํ coroutine์ด๋ผ๋ ๊ฒ์ด ์กด์ฌํ์ฌ ์ด๋ฅผ ํธํ๊ฒ ๋ค๋ฃฐ ์ ์๋ค.
- ์ด๋ฒ ํ ์คํธ์ ๋ชฉ์ ์ Kinesis Stream ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ธฐ ์ํ ๊ธฐ๋ฐ์ ๋ค์ง๊ธฐ ์ํ ํ์ต์ด์๋ค.
- ์ดํ Stream ๋ฐ์ดํฐ๋ฅผ ์์ง๋ ๋๋ง๋ค ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ฉฐ ์์ง๋ ๋ฐ์ดํฐ๋ฅผ gRPC ์ฐ๊ฒฐ์ด ์๋ฆฝ๋ client๋ก ์ ์กํ๋ ์ฝ๋๋ฅผ ์์ฑํ์๋ค.