Inflearn brand logo image
Inflearn brand logo image
์ฑ„๋„ํ†ก ์•„์ด์ฝ˜
BEST

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

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

Thumbnail

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

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

  • ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ™•์‹คํ•œ ๊ธฐ๋ณธ๊ธฐ

  • ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ดํ•ด

  • RxJava๋ฅผ ์‚ฌ์šฉํ•œ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • Java ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋žŒ๋‹ค ํ‘œํ˜„์‹

  • ๋งˆ๋ธ” ๋‹ค์ด์–ด๊ทธ๋žจ์„ ํ†ตํ•œ ๋ฆฌ์•กํ‹ฐ๋ธŒ ์—ฐ์‚ฐ์ž ์ดํ•ดํ•˜๊ธฐ

  • ํ€ด์ฆˆ๋ฅผ ํ†ตํ•œ ๋ฆฌ์•กํ‹ฐ๋ธŒ ์—ฐ์‚ฐ์ž ์‹ฌํ™” ํ•™์Šต

๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ์•Œ๊ธฐ ์‰ฝ๊ณ  ํ™•์‹คํ•˜๊ฒŒ ๋ฐฐ์›Œ๋ณด์„ธ์š”!

 

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

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

 

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

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

 

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

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

 

[๋งˆ๋ธ” ๋‹ค์ด์–ด๊ทธ๋žจ ๋ณด๋Š” ๋ฒ• ๊ฐ•์˜ ์ž๋ฃŒ ์บก์ณ]

 

  • RxJava๋Š” ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ŠคํŽ™์ธ Reactive Streams์˜ ๊ตฌํ˜„์ฒด์ธ๋ฐ์š”. ์ด Reactive Streams์—์„œ ์ •์˜ํ•œ Publisher์™€ Subscriber ๊ฐ„์˜ ๋™์ž‘ ํ๋ฆ„์„ ๊ทธ๋ฆผ์„ ํ†ตํ•ด ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

[Publisher์™€ Subscriber๊ฐ„์˜ ๋™์ž‘ ํ๋ฆ„ ๊ฐ•์˜ ์ž๋ฃŒ ์บก์ณ]

 

  • Flowable๊ณผ Observable์˜ ๊ฒฐ์ •์ ์ธ ์ฐจ์ด์ ์ธ ๋ฐฐ์••(Back Pressure)์— ๋Œ€ํ•ด์„œ ์ตœ๋Œ€ํ•œ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

 

[๋ฐฐ์••์˜ ๊ฐœ๋…์— ๋Œ€ํ•œ ๊ฐ•์˜ ์ž๋ฃŒ ์บก์ณ]

 

  • RxJava์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ๋ฐฐ์›Œ๋ด…๋‹ˆ๋‹ค. Java 8์—์„œ ์ƒˆ๋กญ๊ฒŒ ๋„์ž…๋œ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋žŒ๋‹ค ํ‘œํ˜„์‹์€ RxJava์—์„œ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์œผ๋กœ ๊ทธ ๊ฐœ๋…์„ ๊ผญ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
  • RxJava์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์—ฐ์‚ฐ์ž(Operator)ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ ์„ค๋ช…์„ ํ•˜๊ณ  RxJava 1๋ถ€๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค. RxJava๋Š” ์—ฐ์‚ฐ์ž ํ•จ์ˆ˜๋กœ ์‹œ์ž‘ํ•ด์„œ ์—ฐ์‚ฐ์ž ํ•จ์ˆ˜๋กœ ๋๋‚œ๋‹ค๊ณ ํ•ด๋„ ๊ณผ์–ธ์ด ์•„๋‹ ์ •๋„๋กœ ์—ฐ์‚ฐ์ž ํ•จ์ˆ˜๋Š” RxJava์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ฐ•์˜์—์„œ ์—ฐ์‚ฐ์ž ํ•จ์ˆ˜์˜ ์œ ํ˜•๋ณ„๋กœ ๋‹ค์–‘ํ•œ ์—ฐ์‚ฐ์ž ํ•จ์ˆ˜๋ฅผ ๋งˆ๋ธ” ๋‹ค์ด์–ด๊ทธ๋žจ ํ•จ๊ป˜ ์ดํ•ดํ•˜๊ณ , ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์‹คํ–‰์‹œ์ผœ๋ณด๋ฉด์„œ ๊ฐ๊ฐ์˜ ์—ฐ์‚ฐ์ž ํ•จ์ˆ˜๋“ค์ด ์–ด๋–ค ๊ธฐ๋Šฅ์„ ํ•˜๊ณ  ์–ด๋–ค์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ์ดํ•ด์‹œ์ผœ ๋“œ๋ฆด ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

 

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

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

 

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

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

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

 

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

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

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

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

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

์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์˜ˆ์ œ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ํƒ€์ดํ•‘ ํ•ด๋ณด์‹œ๋Š” ๋ถ„๋“ค์€ github ์˜ˆ์ œ ์ฝ”๋“œ์—์„œ common ํŒจํ‚ค์ง€์™€ utils ํŒจํ‚ค์ง€๋ฅผ ๊ผญ ๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•˜์‹  ํ›„, ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ ํ•˜์‹œ๊ธธ ๋ถ€ํƒ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

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 Boot์—์„œ Reactor, WebFlux๋ฅผ ๋” ์ž˜ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ™•์‹คํžˆ ๋‹ค์ง€๊ณ  ์‹ถ์€ ๋ถ„๋“ค

  • [Kevin์˜ ์•Œ๊ธฐ ์‰ฌ์šด Java ๊ฐœ๋ฐœ์ž ๋กœ๋“œ๋งต ์ด์•ผ๊ธฐ] ๊ฐ•์˜๋ฅผ ๊ธฐ์–ตํ•ด์ฃผ์‹œ๋Š” ๋ถ„๋“ค

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

  • Java

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

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

5,968

๋ช…

์ˆ˜๊ฐ•์ƒ

212

๊ฐœ

์ˆ˜๊ฐ•ํ‰

103

๊ฐœ

๋‹ต๋ณ€

4.8

์ 

๊ฐ•์˜ ํ‰์ 

5

๊ฐœ

๊ฐ•์˜

- ์ฃผ๋ ฅ ์–ธ์–ด ๋˜๋Š” ๊ธฐ์ˆ  : 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)๋กœ ํŽธํ•˜๊ฒŒ ์–˜๊ธฐํ•ด์ฃผ์„ธ์š”.

 

๋”๋ณด๊ธฐ

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

์ „์ฒด

18๊ฐœ โˆ™ (7์‹œ๊ฐ„ 30๋ถ„)

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

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

์ˆ˜๊ฐ•ํ‰

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