Skip to content

Test using Spring Boot starter module for gRPC framework

Notifications You must be signed in to change notification settings

stopmin/gRPC-spring

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

32 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

gRPC SpringBoot Test

ํ•ด๋‹น ๋ ˆํฌ๋Š” gRPC๋ฅผ Spring ํ”„๋ ˆ์ž„์›Œํฌ ์ƒ์—์„œ ํ™œ์šฉํ•ด๋ณด๊ธฐ ์œ„ํ•ด์„œ ํ…Œ์ŠคํŠธ ๋ชฉ์ ์œผ๋กœ ์ž‘์„ฑํ•œ ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค. application.yml์€ ๋ณธ์ธ์˜ ์‹คํ–‰ํ™˜๊ฒฝ์— ๋งž์ถ”์–ด ํ…Œ์ŠคํŠธํ•ด๋ณด์„ธ์š”.

gRPC-echosystem ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•œ ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ๋” ์ž์„ธํ•œ ์˜ˆ์ œ๋Š” ์•„๋ž˜ ๋ ˆํฌ์˜ document๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

dependencies {
  compile 'net.devh:grpc-client-spring-boot-starter:3.0.0.RELEASE'
}

gRPC

  • gRPC๋Š” Google์ด ๊ฐœ๋ฐœํ•œ ๊ณ ์„ฑ๋Šฅ, ๋ฒ”์šฉ RPC(์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ) ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.
  • gRPC๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์˜ ํ†ต์‹ ์„ ์œ„ํ•ด HTTP/2๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ(Protocol Buffers)๋ผ๋Š” ํšจ์œจ์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ ์–ธ์–ด(IDL)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API๋ฅผ ์ •์˜ํ•œ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด ์–ธ์–ด ๋…๋ฆฝ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ์ •์˜ํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์ง๋ ฌํ™”ํ•˜์—ฌ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.
  • gRPC๋Š” ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ, ํ๋ฆ„ ์ œ์–ด, ์ŠคํŠธ๋ฆผ ์šฐ์„  ์ˆœ์œ„ ์„ค์ • ๋“ฑ HTTP/2์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด ๋†’์€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

Websocket๊ณผ๋Š” ๋ฌด์—‡์ด ๋‹ค๋ฅธ๊ฐ€?

  • ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ: gRPC๋Š” HTTP/2๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, WebSocket์€ HTTP๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•œ ๋…๋ฆฝ์ ์ธ ํ”„๋กœํ† ์ฝœ์ด๋‹ค.
  • ์šฉ๋„
    • WebSocket์€ ์–‘๋ฐฉํ–ฅ, ์ง€์†์ ์ธ ์—ฐ๊ฒฐ์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ, ์ฃผ๋กœ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์— ์‚ฌ์šฉ๋œ๋‹ค.
    • gRPC๋Š” ์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์žˆ์œผ๋ฉฐ, ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๊ฐ„์˜ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ „์†กํ•˜๋Š” ๋ฐ ์œ ์šฉํ•˜๋‹ค.
  • ์ŠคํŠธ๋ฆฌ๋ฐ: gRPC๋Š” ์„œ๋ฒ„ ์ŠคํŠธ๋ฆฌ๋ฐ, ํด๋ผ์ด์–ธํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ, ์–‘๋ฐฉํ–ฅ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์ง€์›ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ†ต์‹  ํŒจํ„ด์„ ํ•œ๋‹ค. WebSocket์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ์ง€์›ํ•œ๋‹ค.
  • ๋ฉ”์‹œ์ง€ ํฌ๋งท: gRPC๋Š” ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ง๋ ฌํ™”ํ•œ๋‹ค. ์ด๋Š” ๋งค์šฐ ํšจ์œจ์ ์ด์ง€๋งŒ ์‚ฌ์šฉ์„ ์œ„ํ•ด์„œ๋Š” ์Šคํ‚ค๋งˆ ์ •์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋ฐ˜๋ฉด, WebSocket์€ ํ…์ŠคํŠธ(์˜ˆ: JSON) ๋˜๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ˜•์‹์— ๋Œ€ํ•œ ์ œํ•œ์ด ์—†๋‹ค.

โญ๏ธ ๋ถ€๋ก) ์„œ๋ฒ„ ์ŠคํŠธ๋ฆฌ๋ฐ๊ณผ ์ฝ”๋ฃจํ‹ด

์„œ๋ฒ„ ์ŠคํŠธ๋ฆฌ๋ฐ

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

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ์œ„์น˜๋ฅผ ์—ฐ๊ฒฐ์ด ์ˆ˜๋ฆฝ๋˜๋ฉด data stream์œผ๋กœ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์˜€์œผ๋ฉฐ, kotlin์—์„œ๋Š” ์•ž์„œ๋งํ•œ coroutine์ด๋ผ๋Š” ๊ฒƒ์ด ์กด์žฌํ•˜์—ฌ ์ด๋ฅผ ํŽธํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ‘€ ์–ด๋А ๋ชฉ์ ์ธ๊ฐ€?

  • ์ด๋ฒˆ ํ…Œ์ŠคํŠธ์˜ ๋ชฉ์ ์€ Kinesis Stream ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ฐ˜์„ ๋‹ค์ง€๊ธฐ ์œ„ํ•œ ํ•™์Šต์ด์—ˆ๋‹ค.
  • ์ดํ›„ Stream ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘๋  ๋•Œ๋งˆ๋‹ค ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์ˆ˜์ง‘๋œ ๋ฐ์ดํ„ฐ๋ฅผ gRPC ์—ฐ๊ฒฐ์ด ์ˆ˜๋ฆฝ๋œ client๋กœ ์ „์†กํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค.

About

Test using Spring Boot starter module for gRPC framework

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages