์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 
์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 
BEST

Kevin์˜ ์•Œ๊ธฐ ์‰ฌ์šด RxJava 2๋ถ€

๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๋Š” ์ง„์ž… ์žฅ๋ฒฝ์„ ๋„˜๊ณ  ์‹ถ์œผ์‹ ๊ฐ€์š”? Kevin์˜ ์•Œ๊ธฐ ์‰ฌ์šด RxJava๊ฐ€ ๊ทธ ๋ฒฝ์„ ๋„˜์„ ์ˆ˜ ์žˆ๋Š” ํž˜์„ ํ‚ค์›Œ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

Thumbnail

์ดˆ๊ธ‰์ž๋ฅผ ์œ„ํ•ด ์ค€๋น„ํ•œ
[ํ’€์Šคํƒ, ๊ฐœ๋ฐœ ยท ํ”„๋กœ๊ทธ๋ž˜๋ฐ] ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ฑธ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด์š”

  • Hot Publisher์˜ ๊ฐœ๋…๊ณผ Hot Publisher์˜ ์ข…๋ฅ˜

  • RxJava์—์„œ์˜ ์“ฐ๋ ˆ๋“œ ๊ด€๋ฆฌ์ž์ธ Scheduler์˜ ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ๋ฒ•

  • RxJava ์ฝ”๋“œ์˜ ๋””๋ฒ„๊น… ๋ฐฉ๋ฒ•

  • RxJava์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•

  • SSE ํ†ต์‹ ์„ ์‚ฌ์šฉํ•œ Client์™€ Server๊ฐ„์˜ RxJava ํ™œ์šฉ

๐ŸŽ‰Kevin์˜ ์•Œ๊ธฐ ์‰ฌ์šด RxJava 2๋ถ€ ์ถœ์‹œ๐ŸŽ‰
๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
, ์ด๋ฒˆ์—๋„ ํ™•์‹คํžˆ ์•Œ๋ ค๋“œ๋ฆด๊ฒŒ์š”!

๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

  • ์ข์€ ์˜๋ฏธ๋กœ๋Š” ๋ณต์žกํ•œ ๋น„๋™๊ธฐ์‹ ์š”์ฒญ์„ ํšจ๊ณผ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•œ API๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋„“์€ ์˜๋ฏธ๋กœ๋Š” ์‹คํ–‰ํ•  ๋™์ž‘์„ ๊ตฌ์ฒด์ ์œผ๋กœ ๋ช…์‹œํ•˜๋Š” ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹๊ณผ ๋ฐ˜๋Œ€๋˜๋Š” ๊ฐœ๋…์ธ ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ์ฆ‰๊ฐ์ ์œผ๋กœ ๋ฐ˜์‘ํ•˜๋„๋ก ์„ค๊ณ„๋œ ๋ฆฌ์•กํ‹ฐ๋ธŒ ์‹œ์Šคํ…œ์— ๋นผ๋†“์„ ์ˆ˜ ์—†๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.
  • ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋น„๋™๊ธฐ ํ†ต์‹ ์ด ํ•„์š”ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ ์–ธ์–ด ๋ฐ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ํญ๋„“๊ฒŒ ์‚ฌ์šฉ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 
    ex) Angular, React ๋“ฑ์—์„œ์˜ RxJS, Java์—์„œ์˜ RxJava, Android ์—์„œ์˜ RxAndroid, Spring Framework์—์„œ ์‚ฌ์šฉํ•˜๋Š” Reactor, RxScala ๋“ฑ ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ™•์žฅ์ด ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์™œ ๋ฐฐ์›Œ์•ผ ํ• ๊นŒ์š”?

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

2๋ถ€ ๊ฐ•์˜์—์„œ ์–ด๋–ค ๊ฒƒ๋“ค์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์„๊นŒ์š”?

  • Kevin์˜ ์•Œ๊ธฐ ์‰ฌ์šด RxJava 2๋ถ€์—์„œ๋Š” 1๋ถ€์—์„œ ์–˜๊ธฐํ•˜์ง€ ๋ชปํ–ˆ๋˜ Hot Publisher, ์Šค์ผ€์ฅด๋Ÿฌ, ๋””๋ฒ„๊น…, ํ…Œ์ŠคํŠธ ๋Œ€ํ•œ ๊ฐ•์˜๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ 1๋ถ€, 2๋ถ€์—์„œ ๋ฐฐ์šด RxJava๋ฅผ Spring Boot์—์„œ ์–ด๋–ค์‹์œผ๋กœ ํ™œ์šฉ์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹ค์Šต์„ ํ†ตํ•ด์„œ ๊ฐ์„ ์žก๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ๋จผ์ € 1๋ถ€์—์„œ ์ž ๊น ์–ธ๊ธ‰ํ•˜๊ณ  ๋„˜์–ด๊ฐ„ Cold Publisher์™€ Hot Publisher์— ๋Œ€ํ•ด์„œ ๋ฆฌ๋ทฐ๋ฅผ ํ•œ ํ›„์— Hot Publisher์˜ ์ข…๋ฅ˜์™€ ๊ฐ๊ฐ์˜ ํŠน์ง•์„ ๋งˆ๋ธ” ๋‹ค์ด์–ด๊ทธ๋žจ๊ณผ ์˜ˆ์ œ ์ฝ”๋“œ๋กœ ์ตํž ์ˆ˜ ์žˆ๋„๋กํ–ˆ์Šต๋‹ˆ๋‹ค.

[Cold Publisher ๋ฆฌ๋ทฐ ๊ฐ•์˜ ์ž๋ฃŒ ์บก์ณ]

[Hot Publisher ๋ฆฌ๋ทฐ ๊ฐ•์˜ ์ž๋ฃŒ ์บก์ณ]

  • RxJava์—์„œ ์Šค์ผ€์ฅด๋Ÿฌ๋Š” ์–ด๋–ค ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋Š” ๊ตฌ์„ฑ ์š”์†Œ์ด๊ณ , ์Šค์ผ€์ฅด๋Ÿฌ์˜ ์—ญํ• ์€ ๋ฌด์—‡์ธ์ง€ ์‚ดํŽด ๋ณผํ…๋ฐ์š”. RxJava์—์„œ์˜ ์Šค์ผ€์ฅด๋Ÿฌ๋ผ๋Š” ์˜๋ฏธ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋จผ์ € ์šด์˜์ฒด์ œ ์ƒ์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค์™€ ํ”„๋กœ์„ธ์Šค ํ•˜์œ„์˜ ์“ฐ๋ ˆ๋“œ์˜ ๊ฐœ๋…๊ณผ ๋™์ž‘ ๋ฐฉ์‹์„ ๊ทธ๋ฆผ์œผ๋กœ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜์—ฌ RxJava์—์„œ์˜ ์Šค์ผ€์ฅด๋Ÿฌ๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์ˆ˜๊ฐ•์ƒ๋“ค์ด ํ™•์‹คํ•˜๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.

[์“ฐ๋ ˆ๋“œ์˜ ๊ฐœ๋… ๊ฐ•์˜ ์ž๋ฃŒ ์บก์ณ]

  • RxJava๋Š” ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ , ๋˜ํ•œ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๊ธฐ๋•Œ๋ฌธ์— RxJava์˜ ์ฝ”๋“œ๋ฅผ ๋””๋ฒ„๊น…ํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 2๋ถ€ ๊ฐ•์˜์—์„œ๋Š” ๋””๋ฒ„๊น… ์„น์…˜์„ ํ†ตํ•ด์„œ RxJava์˜ ์ฝ”๋“œ๋ฅผ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋””๋ฒ„๊น… ํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์ตํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ ํ…Œ์ŠคํŠธ๋Š” ๋ฌด์ฒ™ ์ค‘์š”ํ•œ ์˜์—ญ ์ค‘์— ํ•˜๋‚˜๋ผ๊ณ  ์ƒ๊ฐ์„ ํ•˜๋Š”๋ฐ์š”. ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ธ RxJava์˜ ์ฝ”๋“œ๋ฅผ Java์—์„œ์˜ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ์‹์œผ๋กœ ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. RxJava์—์„œ ์ž์‹ ์ด ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ ์„น์…˜์—์„œ ์ตํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 2๋ถ€์˜ ๋งˆ์ง€๋ง‰ ์„น์…˜์—์„œ๋Š” ๊ทธ ๋™์•ˆ ๋ฐฐ์šด RxJava ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ Spring Boot ์—์„œ ์–ด๋–ค์‹์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์‹ค์Šต ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์Šต ํ”„๋กœ์ ํŠธ ์ž์ฒด๋Š” ๊ฐ„๋‹จํ•˜์ง€๋งŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— RxJava๋ฅผ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.  

[์‹ค์Šต ํ”„๋กœ์ ํŠธ์˜ ๋™์ž‘ ํ๋ฆ„ ๊ฐ•์˜ ์ž๋ฃŒ ์บก์ณ]

  • ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ณธ ๊ฐ•์˜์˜ ํ•™์Šต์„ ๋งˆ์นœ ํ›„, ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๊ด€๋ จ๋œ ์•ž์œผ๋กœ์˜ ํ•™์Šต ๋กœ๋“œ๋งต์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค. 

์ €ํฌ ๊ฐ•์˜์˜ ํŠน์ง•์€ ๋ฌด์—‡์ผ๊นŒ์š”?

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

๊ฐ•์˜๋ฅผ ๋“ฃ๊ธฐ ์ „์— ๋ฌด์—‡์„ ์ค€๋น„ํ•ด์•ผ ํ• ๊นŒ์š”?

  • ๋‹น์—ฐํ•œ ์ด์•ผ๊ธฐ์ด๊ฒ ์ง€๋งŒ ์‚ฌ์šฉํ•˜์‹œ๋Š” PC๋‚˜ ๋…ธํŠธ๋ถ์— JDK 1.8 ์ด์ƒ์ด ์„ค์น˜๋˜์–ด์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ €ํฌ ๊ฐ•์˜์—์„œ๋Š” ๊ฐœ๋ฐœ ํˆด๋กœ IntelliJ IDE๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. IntelliJ์— ์ต์ˆ™ํ•˜์ง€ ์•Š์œผ์‹  ๋ถ„๋“ค์€ ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๊ณ  ๊ณ„์‹œ๋Š” IDE๋กœ ์‹ค์Šต์„ ํ•˜์…”๋„ ์ƒ๊ด€์€ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ €ํฌ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ธฐ ์œ„ํ•ด์„œ ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ์ค€๋น„ํ•ด์•ผํ•˜๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ค€๋น„๋ฌผ์€ ๋‹ค๋ฆ„ ์•„๋‹Œ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ๋ฐฐ์šฐ๊ณ ์ž ํ•˜๋Š” ์˜์ง€์™€ ๊ฒฐ์ฝ” ํฌ๊ธฐํ•˜์ง€ ์•Š๋Š” ๋ˆ๊ธฐ์ž…๋‹ˆ๋‹ค. ^^

์—ฌ๋Ÿฌ๋ถ„๋“ค์˜ ์˜์ง€์™€ ๋ˆ๊ธฐ๋ฅผ ์ €์—๊ฒŒ ๋ณด์—ฌ์ฃผ์„ธ์š”. ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด RxJava์˜ ์ง„์ž…์žฅ๋ฒฝ ์œ„์— ์˜ฌ๋ผ์„ค ์ˆ˜ ์žˆ๋„๋ก ์ €๋„ ์ตœ์„ ์„ ๋‹คํ•ด์„œ ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.


์ง€๋‚œ ๊ฐ•์˜ ํ•จ๊ป˜ ๋ณด๊ธฐ ๐Ÿ‘€

Kevin์˜ ์•Œ๊ธฐ ์‰ฌ์šด RxJava 1๋ถ€   ์ถ”์ฒœ๊ฐ•์˜ 
๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ™•์‹คํ•œ ๊ธฐ๋ณธ๊ธฐ

์—ฌ๋Ÿฌ๋ถ„๋“ค์€ ์–ด๋–ค ๊ฒƒ๋“ค์ด ๊ถ๊ธˆํ•˜์‹ ๊ฐ€์š”?(Q&A)๐Ÿ™‹โ€โ™€๏ธ๐Ÿ™‹โ€โ™‚๏ธ

Q. ๋น„์ „๊ณต์ž๋„ ๋“ค์„ ์ˆ˜ ์žˆ๋‚˜์š”?
A. ์ „๊ณต/๋น„์ „๊ณต๊ณผ๋Š” ๋ฌด๊ด€ํ•ฉ๋‹ˆ๋‹ค. Java์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ง€์‹์ด ์žˆ๋‹ค๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์ˆ˜๊ฐ• ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ ์ €๋„ ์ฒ˜์Œ ์‹œ์ž‘์€ ๋น„์ „๊ณต์ž์˜€์Šต๋‹ˆ๋‹ค. ^^ ๋‹ค๋งŒ, 2๋ถ€ ๊ฐ•์˜๋Š” 1๋ถ€ ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•œ ํ›„์— ๋“ค์œผ๋ฉด ํ•™์Šต ์ดํ•ด๋„๊ฐ€ ๋” ๋†’์•„์ง„๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Q. RxJava๋ฅผ ๋ฐฐ์šฐ๋ฉด ๋ฌด์—‡์ด ์ข‹์€๊ฐ€์š”?
A. ์•ž์„œ ์†Œ๊ฐœ๊ธ€์—์„œ๋„ ๋ง์”€๋“œ๋ ธ์ง€๋งŒ RxJava๋ฅผ ๋ฐฐ์šฐ๋ฉด ๋ณต์žกํ•œ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ง๋ถ™์—ฌ์„œ ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์ด ์•„๋‹Œ ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•œ ์‚ฌ๊ณ ์˜ ์ „ํ™˜์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ๋‚˜์€ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•˜๋Š”๊ฒƒ์€ ๋ค์ด๊ฒ ์ฃ ?^^ RxJava๋ฅผ ํ•™์Šตํ•˜๊ณ  ๋‚˜๋ฉด ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ™•์‹คํžˆ ๋‹ค์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— RxJs, RxAndroid, Spring Reactor ๋“ฑ์„ ํ•™์Šตํ•˜๊ธฐ๊ฐ€ ํ›จ์”ฌ ์ˆ˜์›”ํ•ด์ง‘๋‹ˆ๋‹ค. 

Q. ๊ฐ•์˜๋Š” ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰์ด ๋˜๋‚˜์š”?
A. ๋Œ€๋ถ€๋ถ„์˜ ์ˆ˜์—…์ด ๊ฐ•์˜ ์ž๋ฃŒ๋ฅผ ํ†ตํ•œ ๊ฐœ๋… ์ดํ•ด โ†’ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๊ฐœ๋…์„ ๋ˆˆ์œผ๋กœ ์ง์ ‘ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰์ด ๋ฉ๋‹ˆ๋‹ค. 1๋ถ€์—์„œ๋Š” ์˜ˆ์ œ ์ฝ”๋“œ ์ด์™ธ์— ์ถ”๊ฐ€์ ์œผ๋กœ ํ€ด์ฆˆ๋ฅผ ์ œ๊ณตํ•˜์˜€์œผ๋‚˜ 2๋ถ€ ๊ฐ•์˜์—๋Š” ๋ณ„๋„์˜ ํ€ด์ฆˆ๋Š” ์—†์œผ๋‹ˆ ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

Q. ๊ฐ•์˜์—์„œ ์‚ฌ์šฉ๋œ ์›๋ณธ ์˜ˆ์ œ ์ฝ”๋“œ๋Š” ์–ด๋””์—์„œ ๋‹ค์šด๋กœ๋“œ๋ฐ›์„ ์ˆ˜ ์žˆ๋‚˜์š”?
A. ์ˆ˜์—…์—์„œ ์„ค๋ช…ํ•˜๋Š” ์˜ˆ์ œ ์ฝ”๋“œ๋Š” ๋ชจ๋‘ github์— ์˜ฌ๋ผ๊ฐ€์žˆ์œผ๋ฉฐ ์•„๋ž˜ ์ฃผ์†Œ์—์„œ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์œผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข ์˜ˆ์ œ ์›๋ณธ ์†Œ์Šค ์ฝ”๋“œ
https://github.com/ITVillage-Kevin/rxjava-episode2

โ€ข ์‹ค์Šต ํ”„๋กœ์ ํŠธ ์›๋ณธ ์†Œ์Šค ์ฝ”๋“œ(์„œ๋ฒ„์ธก): https://github.com/ITVillage-Kevin/rxjava-episode2-practice

โ€ข ์‹ค์Šต ํ”„๋กœ์ ํŠธ ์›๋ณธ ์†Œ์Šค ์ฝ”๋“œ(ํด๋ผ์ด์–ธํŠธ์ธก): https://github.com/ITVillage-Kevin/rxjava-episode2-practice-client

Q. ๊ฐ•์˜ ์ž๋ฃŒ๋Š” ์–ด๋””์—์„œ ๋‹ค์šด๋กœ๋“œ๋ฐ›์„ ์ˆ˜ ์žˆ๋‚˜์š”?
A. ๊ฐ ์„น์…˜์˜ ์ˆ˜์—…๋งˆ๋‹ค ์ˆ˜์—…์— ์‚ฌ์šฉํ•œ ๊ฐ•์˜ ์ž๋ฃŒ๋ฅผ ์ฒจ๋ถ€ ํŒŒ์ผ๋กœ ๋“ฑ๋กํ•ด ๋‘์—ˆ์œผ๋‹ˆ ํ•„์š”ํ•˜์‹  ๋ถ„์€ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„์„œ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Q. ๊ฐ•์˜ ์ž๋ฃŒ ์ด์™ธ์— ์ถ”์ฒœํ•ด์ฃผ์‹ค ๋งŒํ•œ ์ฐธ๊ณ  ์ž๋ฃŒ๊ฐ€ ์žˆ์„๊นŒ์š”?
A. ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•™์Šตํ•˜๋Š” ๋ฐ ์žˆ์–ด ๋„์›€์ด ๋ ๋งŒํ•œ ์‚ฌ์ดํŠธ๋Š” ์•„๋ž˜์—์„œ ํ™•์ธํ•˜์‹œ๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.

โ€ข http://reactivex.io/ 
๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ณต์‹ ์‚ฌ์ดํŠธ๋กœ ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ๋‹ค์ง€๊ณ  ๋‚œ ํ›„์— ์ฐธ๊ณ ํ•˜๊ธฐ ์ •๋ง ์ข‹์€ ์‚ฌ์ดํŠธ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

โ€ข https://github.com/reactive-streams/reactive-streams-jvm 
RxJava๋Š” Reactive Streams๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”. ์ด Reactive Streams์˜ ์ŠคํŽ™์„ ์ •์˜ํ•ด ๋‘” github ๊ณต์‹ ์ž๋ฃŒ์ž…๋‹ˆ๋‹ค.

โ€ข https://gist.github.com/casamia918/93b8db69beb9ee06b92a96b2a234d48e 
๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•ด์„œ ํ•œ๊ตญ์–ด๋กœ ์ž˜ ๋ฒˆ์—ญ๋œ github ์ž๋ฃŒ์ธ๋ฐ์š”. ํ•œ๊ตญ์–ด๋กœ ๋ฒˆ์—ญํ•ด์ฃผ์…”์„œ ๋„ˆ๋ฌด ๊ฐ์‚ฌํ•˜๋‹ค๋Š” ๋ง์”€ ์ „ํ•˜๊ณ  ์‹ถ๋„ค์š”.

โ€ข https://rxmarbles.com/ 
๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•ต์‹ฌ์ค‘์— ํ•ต์‹ฌ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ์ž(Operator)๋“ค์„ ๋งˆ๋ธ” ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ์ž˜ ์ •๋ฆฌํ•ด ๋†“์€ ์ž๋ฃŒ์ž…๋‹ˆ๋‹ค.

โ€ข http://reactivex.io/RxJava/2.x/javadoc/ 
๋งˆ์ง€๋ง‰์œผ๋กœ RxJava์˜ ๊ณต์‹ javadoc ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค. 2020๋…„ ํ˜„์žฌ RxJava 3.0์ด ๋ฆด๋ฆฌ์ฆˆ๋˜์—ˆ๊ธฐ๋Š” ํ•˜๋‚˜ 3.0์—์„œ๋Š” ์ƒˆ๋กœ์šด ์—ฐ์‚ฐ์ž ํ•จ์ˆ˜๋“ค์ด ๋งŽ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค๊ณ  ๋‹จ์ˆœํ•˜๊ฒŒ ์ƒ๊ฐํ•˜์‹œ๊ณ  2.x ๋ฒ„์ „์œผ๋กœ ๊ฐœ๋…์„ ํ™•์‹คํžˆ ์žก์€ ๋‹ค์Œ์— 3.0์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒŒ ์ข‹์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”!

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • Java์˜ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์–ด๋ ค์›€์„ ๊ทน๋ณตํ•˜๊ณ  ์‹ถ์€ ๋ถ„๋“ค

  • ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์— ์ต์ˆ™ํ•ด์ง€๊ณ  ์‹ถ์€ ๋ถ„๋“ค

  • ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ง„์ž… ์žฅ๋ฒฝ์„ ๋„˜๊ณ  ์‹ถ์€ ๋ถ„๋“ค

  • Spring Reactive Web Application ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ๋‹ค์ง€๊ณ  ์‹ถ์€ ๋ถ„๋“ค

  • [Kevin์˜ ์•Œ๊ธฐ ์‰ฌ์šด RxJava 1๋ถ€] ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜์‹  ๋ถ„๋“ค

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • Java

  • ๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ฐจ์ด

์•ˆ๋…•ํ•˜์„ธ์š”
Kevin์ž…๋‹ˆ๋‹ค.

6,082

๋ช…

์ˆ˜๊ฐ•์ƒ

220

๊ฐœ

์ˆ˜๊ฐ•ํ‰

104

๊ฐœ

๋‹ต๋ณ€

4.8

์ 

๊ฐ•์˜ ํ‰์ 

6

๊ฐœ

๊ฐ•์˜

- ์ฃผ๋ ฅ ์–ธ์–ด ๋˜๋Š” ๊ธฐ์ˆ  : Java, Spring Framework, RxJava, Reactor, Spring WebFlux

- (์ฃผ)์ฝ”๋“œ์Šคํ…Œ์ด์ธ (https://www.codestates.com)์—์„œ Senior Educational Software Engineer(Backend)๋กœ ํ™œ๋™
(From 2022.03 To 2024.01.31)

- ํ”„๋ฆฌ๋žœ์„œ ๊ฐœ๋ฐœ์ž ๋ฐ ๊ฐ•์‚ฌ๋กœ ํ™œ๋™(From 2024.02)

- ์ €์„œ

์•ˆ๋…•ํ•˜์„ธ์š”? Kevin์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ^^

์ธํ”„๋Ÿฐ์—์„œ ์ด๋ ‡๊ฒŒ ๊ฐ•์‚ฌ๋กœ์„œ ์—ฌ๋Ÿฌ๋ถ„๋“ค์„ ๋งŒ๋‚˜๊ฒŒ ๋˜์–ด์„œ ๋„ˆ๋ฌด ๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ๋ถ„์•ผ๋“  ๋งˆ์ฐฌ๊ฐ€์ง€๊ฒ ์ง€๋งŒ ํŠนํžˆ๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž๋Š” ๋Š์ž„์—†์ด ๋ณ€ํ™”ํ•˜๋Š” ํŠธ๋ Œ๋“œ์— ๋’ค์ฒ˜์ง€์ง€ ์•Š๋„๋ก ํ•ญ์ƒ ์ž๊ธฐ ์ž์‹ ์„ ๊ฐˆ๊ณ  ๋‹ฆ๋Š”๊ฒƒ์ด ๊ฐœ๋ฐœ์ž๋กœ์จ ์‚ด์•„๋‚จ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ ํ•ญ์ƒ ๋ฐฐ์šฐ๋Š” ์ž์„ธ๋กœ ์ฆ๊ฒ๊ฒŒ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์„ ํ•˜๊ณ  ์žˆ๋Š” ๊ฐœ๋ฐœ์ž ์ค‘ ํ•œ ๋ช…์ž…๋‹ˆ๋‹ค.

์ œ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ง€์‹๊ณผ ๊ฒฝํ—˜์ด ๋‹ค๋ฅธ ๋ถ„๋“ค์—๊ฒŒ ์กฐ๊ธˆ์ด๋‚˜๋งˆ ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ผ๋ฉด์„œ ์ธํ”„๋Ÿฐ์—์„œ ๊ฐ•์ขŒ๋ฅผ ์‹œ์ž‘ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์•ž์œผ๋กœ ์ˆ˜๊ฐ•์ƒ๋ถ„๋“ค์—๊ฒŒ ํ˜„์‹ค์ ์œผ๋กœ ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ๊ฐ•์ขŒ๋กœ ๊พธ์ค€ํžˆ ์ฐพ์•„๋ต™๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

 

์งˆ๋ฌธ์ด๋‚˜ ์˜๊ฒฌ์€ ์–ธ์ œ๋“ ์ง€ ํ™˜์˜ํ•˜๋‹ˆ, ์ด๋ฉ”์ผ(it.village.host@gmail.com)๋กœ ํŽธํ•˜๊ฒŒ ์–˜๊ธฐํ•ด์ฃผ์„ธ์š”.

 

๋”๋ณด๊ธฐ

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

23๊ฐœ โˆ™ (3์‹œ๊ฐ„ 46๋ถ„)

ํ•ด๋‹น ๊ฐ•์˜์—์„œ ์ œ๊ณต:

์ˆ˜์—…์ž๋ฃŒ
๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์•„์ง ์ถฉ๋ถ„ํ•œ ํ‰๊ฐ€๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.
๋ชจ๋‘์—๊ฒŒ ๋„์›€์ด ๋˜๋Š” ์ˆ˜๊ฐ•ํ‰์˜ ์ฃผ์ธ๊ณต์ด ๋˜์–ด์ฃผ์„ธ์š”!