5.1. ๊ฐœ์š”(Overview)

RSocket์€ TCP, ์›น์†Œ์ผ“ ๊ทธ๋ฆฌ๊ณ  ๊ธฐํƒ€ ๋‹ค๋ฅธ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ ์ „์†ก์„ ํ†ตํ•œ ๋‹ค์ค‘ํ™”๋œ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ์œ„ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœํ† ์ฝœ์ด๋‹ค. ์•„๋ž˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ƒํ˜ธ์ž‘์šฉ ๋ชจ๋ธ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

  • Request-Response - ๋ฉ”์‹œ์ง€ ํ•˜๋‚˜๋ฅผ ์ „์†กํ•˜๊ณ  ํ•˜๋‚˜์˜ ์‘๋‹ต์„ ๋ฐ›๋Š”๋‹ค.
  • Request-Stream - ๋ฉ”์‹œ์ง€ ํ•˜๋‚˜๋ฅผ ์ „์†กํ•˜๊ณ  ํ•˜๋‚˜์˜ ์‘๋‹ต์„ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ฐ›๋Š”๋‹ค.
  • Channel - ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋ฉ”์‹œ์ง€ ์ŠคํŠธ๋ฆผ์„ ์ „์†กํ•œ๋‹ค.
  • Fire-and-Forget - ๋‹จ๋ฐฉํ–ฅ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•œ๋‹ค.

์ปค๋„ฅ์…˜์ด ๋งบ์–ด์ง€๋ฉด, โ€œํด๋ผ์ด์–ธํŠธโ€์™€ โ€œ์„œ๋ฒ„โ€ ๋ผ๋Š” ๊ตฌ๋ถ„์€ ์‚ฌ๋ผ์ง€๊ณ , ์–‘์ชฝ์ด ๋Œ€์นญ์ด ๋˜์–ด ๊ฐ๊ฐ์ด ์œ„์˜ ์ƒํ˜ธ์ž‘์šฉ ๋ชจ๋ธ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋กœํ† ์ฝœ์—์„œ ์ฐธ์—ฌํ•˜๋Š” ์–‘์ชฝ์„ โ€œ์š”์ฒญ์ž(requester)โ€์™€ โ€œ์‘๋‹ต์ž(responder)โ€ ๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ์ƒํ˜ธ ์ž‘์šฉ ๋ชจ๋ธ์€ โ€œ์š”์ฒญ ์ŠคํŠธ๋ฆผ(request streams)โ€ ๋˜๋Š” ๊ฐ„๋‹จํžˆ โ€œ์š”์ฒญ(requests)โ€ ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๋‹ค์Œ์€ RSocket ํ”„๋กœํ† ์ฝœ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ๊ณผ ์ด์ ์ด๋‹ค:

  • ๋„คํŠธ์›Œํฌ ๊ฒฝ๊ณ„๋ฅผ ๊ฐ€๋กœ์ง€๋ฅด๋Š” ๋ฆฌ์•กํ‹ฐ๋ธŒ ์ŠคํŠธ๋ฆผ ์‹œ๋งจํ‹ฑ์Šค - Request-Stream๊ณผ Channel ๊ฐ™์€ ์ŠคํŠธ๋ฆฌ๋ฐ ์š”์ฒญ์„ ์œ„ํ•ด์„œ, ๋ฐฑํ”„๋ ˆ์…” ์‹ ํ˜ธ๋Š” ์š”์ฒญ์ž์™€ ์‘๋‹ต์ž ์‚ฌ์ด๋ฅผ ์˜ค๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฒญ์ž๊ฐ€ ์‘๋‹ต์ž์˜ ์†๋„๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋„คํŠธ์›Œํฌ ๊ณ„์ธต์˜ ํ˜ผ์žก ์ œ์–ด์— ๋Œ€ํ•œ ์˜์กด์„ ์ค„์ด๊ณ  ๋„คํŠธ์›Œํฌ ๋ ˆ๋ฒจ ๋˜๋Š” ์–ด๋–ค ๋ ˆ๋ฒจ์—์„œ๋“ ์ง€ ๋ฒ„ํผ๋ง์˜ ํ•„์š”์„ฑ์„ ์ค„์ธ๋‹ค.
  • ์š”์ฒญ ์กฐ์ ˆ(Request throttling) - ํ•œ ์ชฝ์—์„œ LEASE ํ”„๋ ˆ์ž„์„ ์†ก์‹ ํ•˜๋ฉด ์ง€์ •๋œ ์‹œ๊ฐ„๋™์•ˆ ๋‹ค๋ฅธ ์ชฝ์€ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์š”์ฒญ์ด ์ œํ•œ๋œ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ โ€œLeasingโ€ ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ด๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฐฑ์‹ ๋œ๋‹ค.
  • ์„ธ์…˜ ์žฌ๊ฐœ(Session resumption) - ์ปค๋„ฅ์…˜์ด ๋Š์–ด์ง€๋”๋ผ๋„ ์ผ๋ถ€ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์ค€๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ช…ํ™•ํ•˜๊ฒŒ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฐฑํ”„๋ ˆ์…”์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ƒ์‚ฐ์ž(producer)๋ฅผ ์ค‘๋‹จํ•˜๊ณ , ํ•„์š”ํ•œ ์ƒํƒœ์˜ ์–‘์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ํฐ ๋ฉ”์‹œ์ง€์˜ ๋‹จํŽธํ™”(fragmentation)์™€ ์žฌ์กฐ๋ฆฝ(re-assembly).
  • Keepalive (heartbeats).

RSocket์€ ์—ฌ๋Ÿฌ ์–ธ์–ด๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค. ์ž๋ฐ” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ „์†ก์„ ์œ„ํ•œ Project Reactor์™€ Reactor Netty๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค. ์ฆ‰, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฆฌ์•กํ‹ฐ๋ธŒ ์ŠคํŠธ๋ฆผ Publisher์˜ ์‹ ํ˜ธ๊ฐ€ Roskcet์„ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ๋ฅผ ๊ฐ€๋กœ์งˆ๋Ÿฌ ํˆฌ๋ช…ํ•˜๊ฒŒ ์ „ํŒŒ๋œ๋‹ค๋Š” ๋œป์ด๋‹ค.


5.1.1. ํ”„๋กœํ† ์ฝœ(The Protocol)

RSocket์˜ ์žฅ์  ์ค‘ ํ•˜๋‚˜๋Š” ๋„คํŠธ์›Œํฌ๋ง์—์„œ์˜ ๋™์ž‘์ด ์ž˜ ์ •์˜๋˜์–ด ์žˆ๊ณ  ์ผ๋ถ€ ํ”„๋กœํ† ์ฝœ ํ™•์žฅ(extensions)๊ณผ ํ•จ๊ป˜ ์ฝ๊ธฐ ์‰ฌ์šด ์ŠคํŽ™(specification)์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์–ธ์–ด ๊ตฌํ˜„ ๋ฐ ์ƒ์œ„ ๋ ˆ๋ฒจ ํ”„๋ ˆ์ž„์›Œํฌ API์™€ ์ƒ๊ด€์—†์ด ์ŠคํŽ™์‚ฌํ•ญ์„ ์ฝ์–ด๋ณด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” ๋งฅ๋ฝ์„ ์ •๋ฆฝํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ„๊ฒฐํ•œ ๊ฐœ์š”๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

Connecting

์ดˆ๊ธฐ์— ํด๋ผ์ด์–ธํŠธ๋Š” TCP ๋˜๋Š” ์›น์†Œ์ผ“๊ณผ ๊ฐ™์€ ์ €์ˆ˜์ค€ ์ŠคํŠธ๋ฆฌ๋ฐ ์ „์†ก์„ ํ†ตํ•ด ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐํ•˜๊ณ , ์ปค๋„ฅ์…˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •์„ ์œ„ํ•ด SETUP ํ”„๋ ˆ์ž„์„ ์„œ๋ฒ„๋กœ ์ „์†กํ•œ๋‹ค.

์„œ๋ฒ„๋Š” SETUP ํ”„๋ ˆ์ž„์„ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ์ด ํ”„๋ ˆ์ž„์„ ์ „์†ก(ํด๋ผ์ด์–ธํŠธ๊ฐ€)ํ•˜๊ณ  ์ˆ˜์‹ (์„œ๋ฒ„๊ฐ€)ํ–ˆ๋‹ค๋ฉด, ์–‘์ชฝ์—์„œ ์š”์ฒญ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ SETUP ํ”„๋ ˆ์ž„์ด ์š”์ฒญ ์ˆ˜๋ฅผ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•ด leasing ์‹œ๋งจํ‹ฑ์Šค๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด, ์š”์ฒญ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์–‘์ชฝ ๋ชจ๋‘์—์„œ๋Š” ๋‹ค๋ฅธ ์ชฝ์ด LEASE ํ”„๋ ˆ์ž„์„ ๋ณด๋‚ด ์š”์ฒญ์„ ์ˆ˜๋ฝํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค.

Making Requests

ํ•œ ๋ฒˆ ์ปค๋„ฅ์…˜์ด ๋งบ์–ด์ง€๋ฉด, ์–‘์ชฝ์€ REQUEST_RESPONSE, REQUEST_STREAM, REQUEST_CHANNEL, REQUEST_FNF ํ”„๋ ˆ์ž„ ์ค‘ ํ•˜๋‚˜๋ฅผ ํ†ตํ•ด ์š”์ฒญ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ ํ”„๋ ˆ์ž„์€ ์š”์ฒญ์ž๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์ž์—๊ฒŒ ๋ฉ”์‹œ์ง€ ํ•˜๋‚˜๋ฅผ ์ „์†กํ•œ๋‹ค.

์‘๋‹ต์ž๋Š” PAYLOAD ํ”„๋ ˆ์ž„์„ ์‘๋‹ต ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ๋ณด๋‚ด๊ณ , REQUEST_CHANNEL ์š”์ฒญ์ธ ๊ฒฝ์šฐ, ์š”์ฒญ์ž๋Š” PAYLOAD ํ”„๋ ˆ์ž„๊ณผ ํ•จ๊ป˜ ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ๋” ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

์š”์ฒญ์— Request-Stream๊ณผ Channel๊ณผ ๊ฐ™์€ ๋ฉ”์‹œ์ง€ ์ŠคํŠธ๋ฆผ์— ํฌํ•จ๋œ ๊ฒฝ์šฐ, ์‘๋‹ต์ž๋Š” ์š”์ฒญ์ž๊ฐ€ ๋ณด๋‚ธ ์š”๊ตฌ ์‹ ํ˜ธ(Demand signals)๋ฅผ ์ค€์ˆ˜ํ•ด์•ผ ํ•œ๋‹ค. ์š”๊ตฌ์‚ฌํ•ญ์€ ๋ฉ”์‹œ์ง€ ์ˆ˜๋กœ ํ‘œํ˜„๋œ๋‹ค. ์ดˆ๊ธฐ ์š”๊ตฌ์‚ฌํ•ญ์€ REQUEST_STREAM, REQUEST_CHANNEL ํ”„๋ ˆ์ž„์— ์ง€์ •ํ•œ๋‹ค. ํ›„์† ์š”๊ตฌ์‚ฌํ•ญ์€ REQUEST_N ํ”„๋ ˆ์ž„์„ ํ†ตํ•œ๋‹ค.

๊ฐ ์ธก์€ METADATA_PUSH ํ”„๋ ˆ์ž„์„ ๊ฐœ๋ณ„ ์š”์ฒญ์ด ์•„๋‹Œ ์ „์ฒด ์—ฐ๊ฒฐ๊ณผ ๊ด€๋ จ๋œ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ ์•Œ๋ฆผ์„ ์ „์†กํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

Message Format

RSocket ๋ฉ”์‹œ์ง€์—๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ๋‹ค. ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋Š” ๋ผ์šฐํŒ…, ๋ณด์•ˆ ํ† ํฐ ๋“ฑ์„ ์ „์†กํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ์™€ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋Š” ๋‹ค๋ฅธ ํฌ๋งท์„ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ๊ฐ์— ๋Œ€ํ•œ MIME ์œ ํ˜•์€ SETUP ํ”„๋ ˆ์ž„์— ์„ ์–ธ๋˜์–ด ์ง€์ •๋œ ์ปค๋„ฅ์…˜์˜ ๋ชจ๋“  ์š”์ฒญ์— ์ ์šฉ๋œ๋‹ค.

๋ชจ๋“  ๋ฉ”์‹œ์ง€๋Š” ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ผ์šฐํŒ…๊ณผ ๊ฐ™์€ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋Š” ๋ณดํ†ต ์š”์ฒญ ๋‹น ํ•˜๋‚˜๋งŒ ํ•„์š”ํ•˜๋ฏ€๋กœ, ์š”์ฒญ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฉ”์‹œ์ง€์—๋งŒ ํฌํ•จ์‹œํ‚จ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, REQUEST_RESPONSE, REQUEST_STREAM, REQUEST_CHANNEL, REQUEST_FNF.

ํ”„๋กœํ† ์ฝœ ํ™•์žฅ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ฐ˜์ ์ธ ๊ณตํ†ต ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ ํฌ๋งท์„ ์ •์˜ํ•œ๋‹ค:

  • Composite Metadata - ๋‹ค์ˆ˜์˜ ๋…๋ฆฝ์ ์œผ๋กœ ํฌ๋งทํŒ…๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์—”ํŠธ๋ฆฌ
  • Routing - ์š”์ฒญ์— ๋Œ€ํ•œ ๋ผ์šฐํŒ…


5.1.2. ์ž๋ฐ” ๊ตฌํ˜„(Java Implementation)

RSocket ์ž๋ฐ” ๊ตฌํ˜„์ฒด ๋Š”Project Reactor๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค. TCP์™€ ์›น์†Œ์ผ“ ์ „์†ก์€ Reactor Netty๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค. ๋ฆฌ์•กํ‹ฐ๋ธŒ ์ŠคํŠธ๋ฆผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ์„œ, ๋ฆฌ์•กํ„ฐ๋Š” ํ”„๋กœํ† ์ฝœ ๊ตฌํ˜„ ๊ตฌํ˜„์„ ๋‹จ์ˆœํ•˜๊ฒŒ ํ•œ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์„ ์–ธ์ ์ธ(declarative) ์—ฐ์‚ฐ์ž์™€ ํˆฌ๋ช…ํ•œ ๋ฐฑํ”„๋ ˆ์…” ์ง€์› ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ Flux์™€ Mono๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ž์—ฐ์Šค๋Ÿฝ๋‹ค.

RSocket ์ž๋ฐ” API๋Š” ์˜๋„์ ์œผ๋กœ ์ตœ์†Œ์ ์ด๊ณ  ๊ธฐ๋ณธ์ ์ด๋‹ค. API๋Š” ํ”„๋กœํ† ์ฝœ ๊ธฐ๋Šฅ์—๋งŒ ์ค‘์ ์„ ๋‘๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ(์˜ˆ๋ฅผ ๋“ค์–ด, RPC codegen, ๋‹ค๋ฅธ ์ฝ”๋“œ ๋“ฑ)์€ ๋” ๋†’์€ ์ˆ˜์ค€์˜ ๋…๋ฆฝ๋œ ๊ด€์‹ฌ์‚ฌ๋งŒ ๋ณด๋ฉด ๋œ๋‹ค.

๊ตฌํ˜„์ฒด์ธ io.rsocket.RSocket์˜ ์ฃผ์š” ์—ญํ• ์€ ๋„ค ๊ฐ€์ง€ ์ƒํ˜ธ๋™์ž‘ ํƒ€์ž…์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ๋‹จ์ผ ๋ฉ”์‹œ์ง€๋Š” Mono, ๋ฉ”์‹œ์ง€ ์ŠคํŠธ๋ฆผ์€ Flux, ๋ฐ”์ดํŠธ ๋ฒ„ํผ๋กœ ๋ฐ์ดํ„ฐ์™€ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ์‹ค์ œ ๋ฉ”์‹œ์ง€๋Š” io.rsocket.Payload๊ฐ€ ์žˆ๋‹ค. RSocket์˜ ์—ญํ• ์€ ๋Œ€์นญ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ์š”์ฒญ์— ๋Œ€ํ•ด์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์š”์ฒญ์„ ์œ„ํ•œ RSocket์ด ์ฃผ์–ด์ง€๊ณ , ์‘๋‹ต์— ๋Œ€ํ•ด์„œ๋Š” RSocket์„ ๊ตฌํ˜„ํ•˜์—ฌ ์š”์ฒญ์„ ํ•ธ๋“ค๋งํ•œ๋‹ค.

์ด๊ฒƒ๋“ค์€ ์™„์ „ํ•œ ์†Œ๊ฐœ๊ฐ€ ์•„๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด API๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์Šคํ”„๋ง๊ณผ ๋…๋ฆฝ์ ์œผ๋กœ RSocket์„ ๋ณด๊ฑฐ๋‚˜ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•  ์ˆ˜ ์žˆ๋‹ค. RSocket ์ž๋ฐ” ์ €์žฅ์†Œ์—๋Š” API์™€ ํ”„๋กœํ† ์ฝœ ๊ธฐ๋Šฅ์„ ๋ณด์—ฌ์ฃผ๋Š” ๋งŽ์€ ์ƒ˜ํ”Œ ์•ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.


5.1.3. ์Šคํ”„๋ง ์ง€์›(Spring Support)

spring-messaging ๋ชจ๋“ˆ์€ ๋‹ค์Œ์„ ํฌํ•จํ•œ๋‹ค:

  • RSocketRequester - io.rsocket.RSocket๊ณผ ๋ฐ์ดํ„ฐ, ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ์™€ ์ธ์ฝ”๋”ฉ/๋””์ฝ”๋”ฉ์„ ํ†ตํ•ด ์š”์ฒญ์„ ์ƒ์„ฑํ•˜๋Š” ์œ ์—ฐํ•œ API
  • Annotated Responders - ์‘๋‹ต์„ ์œ„ํ•œ @RequestMapping ์–ด๋…ธํ…Œ์ด์…˜์ด ์ ์šฉ๋œ ํ•ธ๋“ค๋Ÿฌ ๋ฉ”์„œ๋“œ

spring-web ๋ชจ๋“ˆ์—๋Š” RSocket ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ๋Š” Jackson, CBOR/JSON, Protobuf์™€ ๊ฐ™์€ Encoder์™€ Decoder ๊ตฌํ˜„์ฒด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. ๋˜ํ•œ ํšจ๊ณผ์ ์œผ๋กœ ๋ผ์šฐํŒ… ๋งค์นญ์„ ํ•˜๊ธฐ ์œ„ํ•œ PathPatternParser๋„ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

์Šคํ”„๋ง๋ถ€ํŠธ 2.2๋Š” TCP๋‚˜ ์›น์†Œ์ผ“์„ ์‚ฌ์šฉํ•˜์—ฌ RSocket ์„œ๋ฒ„๋ฅผ ์ง€์›ํ•˜๊ณ , ์›นํ”Œ๋Ÿญ์Šค ์„œ๋ฒ„์—์„œ ์›น์†Œ์ผ“์„ ํ†ตํ•œ RSocket์„ ๋…ธ์ถœํ•˜๋Š” ์˜ต์…˜์„ ํฌํ•จํ•œ๋‹ค. ๋˜ํ•œ RSocketRequester.Builder์™€ RSocketStrategies์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ ์ง€์› ๋ฐ ์ž๋™ ์„ค์ •๋„ ์žˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์Šคํ”„๋ง ๋ถ€ํŠธ ๋ ˆํผ๋Ÿฐ์Šค์˜ RSocket ์„น์…˜์„ ์ฐธ์กฐํ•˜๋ผ.

์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ(Spring Security) 5.2๋Š” RSocket์„ ์ง€์›ํ•œ๋‹ค.

์Šคํ”„๋ง Integration 5.2๋Š” ์ธ๋ฐ”์šด๋“œ์™€ ์•„์›ƒ๋ฐ”์šด๋“œ ๊ฒŒ์ดํŠธ ์›จ์ด๋ฅผ ์ œ๊ณตํ•˜์—ฌ RSocket ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์™€ ์ƒํ˜ธ์ž‘์šฉํ•œ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Spring Integration Reference Manual์„ ์ฐธ์กฐํ•˜๋ผ.

์Šคํ”„๋ง ํด๋ผ์šฐ๋“œ ๊ฒŒ์ดํŠธ์›จ์ด๋Š”(Spring Cloud Gateway)๋Š” RSocket ์ปค๋„ฅ์…˜์„ ์ง€์›ํ•œ๋‹ค.


๋ชฉ์ฐจ ๊ฐ€์ด๋“œ