Predis: Predis ํŒŒ์ดํ”„๋ผ์ธ์— ๋Œ€ํ•œ ์•ฝ์†๊ณผ ๋ฏธ๋ž˜

์— ๋งŒ๋“  2020๋…„ 08์›” 19์ผ  ยท  6์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: predis/predis

์šฐ๋ฆฌ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•œ ํ•œ ๊ฐ€์ง€ ๊ธฐ์ˆ ์€ Deferred ๋ผ๋Š” Predis ์œ„์—์„œ ๊ฐœ๋ฐœํ•œ ๋ฏธ๋‹ˆ์–ด์ฒ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. RedisConf 2018์—์„œ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‹œ์—ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

Deferred๋Š” ์ˆจ๊ฒจ์ง„ Predis ํŒŒ์ดํ”„๋ผ์ธ(ํŠธ๋žœ์žญ์…˜, ํŒŒ์ดํ”„๋ผ์ธ ๋ฐ ์›์ž ํŒŒ์ดํ”„๋ผ์ธ)์„ ์‚ฌ์šฉํ•˜๋Š” ์•ฝ์†/๋ฏธ๋ž˜ ๋ชจ๋ธ์„ ๊ณต์‹ํ™”ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ดํ”„๋ผ์ด๋‹์— ๋Œ€ํ•œ ๋ณด๋‹ค ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์ด๋ฉฐ ๋ช…๋ น์„ ์กฐํ•ฉํ•˜๊ณ  ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์บก์Šํ™”๋ฅผ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

ํŠนํžˆ, ์‘๋‹ต์„ PHP ๋ณ€์ˆ˜์— ์ง์ ‘ ๋ฐ”์ธ๋”ฉํ•˜๊ณ , ๊ฐ’์„ ์ž๋™์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ๋ณ‘ํ•ฉํ•˜๊ณ , ๋กœ๊น…/ํ†ต๊ณ„์— ๋Œ€ํ•œ ์•Œ๋ฆผ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์ œ์•ˆ์€ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(๋˜๋Š” ๊ทธ ์ ‘๊ทผ ๋ฐฉ์‹)๊ฐ€ Predis์˜ ํ‘œ์ค€ ๋ถ€๋ถ„์ด ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋‘˜ ์‚ฌ์ด์—๋Š” ๋งŽ์€ ๊ณตํ†ต์ ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ Predis๋กœ ์ „ํ™˜ํ•˜๊ฑฐ๋‚˜ Deferred์˜ ๋ชจ๋ธ์„ ๋”ฐ๋ฅด๋Š” ํ•˜์œ„ โ€‹โ€‹๋ชจ๋“ˆ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ๋„์›€์„ ๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ Deferred์˜ README ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋งˆ์ง€๋ง‰์œผ๋กœ ์ƒ์„ฑ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ v2.0์—์„œ ํŒŒ์ดํ”„๋ผ์ธ ์ถ”์ƒํ™”์˜ ๋‚ด๋ถ€์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‹ค์ œ ์ฝ”๋“œ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ์œผ๋ฉฐ(์ด์ „ PHP ๋ฒ„์ „์„ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค!) ์ƒˆ๋กœ์šด ๋””์ž์ธ์ด ์‹ค์ œ๋กœ ์‹ค์šฉ์ ์ด๊ณ  ์ผ๊ด€์„ฑ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ํ…Œ์ŠคํŠธ์—์„œ ์ด์ „๋ณด๋‹ค ๋” ์œ ์—ฐํ•จ) ๋˜ํ•œ Deferred์˜ ๊ธฐ๋ณธ ์•„์ด๋””์–ด๋ฅผ ์—๋ฎฌ๋ ˆ์ดํŠธํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์œผ๋ฉฐ ๊ฒฐ๊ตญ์—๋Š” ์ค‘๊ฐ„์— ๋†“์นœ ๊ฒƒ์ด ์—†๋Š” ํ•œ Deferred์™€ ๊ฐ™์€ ๊ฒƒ์ด ์‹ค์ œ๋กœ ๊ธฐ๋ณธ Pipeline ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•˜์—ฌ ์ƒˆ ๋””์ž์ธ์— ์‰ฝ๊ฒŒ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ, ์šฐ๋ฆฌ๋Š” ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฐ€์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค) 2 ๋˜๋Š” 3๊ฐœ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ "์—๋ฎฌ๋ ˆ์ดํŠธ"๋ผ๊ณ  ๋งํ•˜๋Š” ์ด์œ ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์•ฝ์†/์„ ๋ฌผ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ATM์„ ์‚ฌ์šฉํ•  ์‹œ๊ฐ„์ด ์—†์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ๋ฉฐ์น  ๋‚ด๋กœ ์‹œ๋„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. PR ์ดˆ์•ˆ์„ ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜‰

๋ชจ๋“  6 ๋Œ“๊ธ€

๋งˆ์ง€๋ง‰์œผ๋กœ ์ƒ์„ฑ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ v2.0์—์„œ ํŒŒ์ดํ”„๋ผ์ธ ์ถ”์ƒํ™”์˜ ๋‚ด๋ถ€์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‹ค์ œ ์ฝ”๋“œ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ์œผ๋ฉฐ(์ด์ „ PHP ๋ฒ„์ „์„ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค!) ์ƒˆ๋กœ์šด ๋””์ž์ธ์ด ์‹ค์ œ๋กœ ์‹ค์šฉ์ ์ด๊ณ  ์ผ๊ด€์„ฑ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ํ…Œ์ŠคํŠธ์—์„œ ์ด์ „๋ณด๋‹ค ๋” ์œ ์—ฐํ•จ) ๋˜ํ•œ Deferred์˜ ๊ธฐ๋ณธ ์•„์ด๋””์–ด๋ฅผ ์—๋ฎฌ๋ ˆ์ดํŠธํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์œผ๋ฉฐ ๊ฒฐ๊ตญ์—๋Š” ์ค‘๊ฐ„์— ๋†“์นœ ๊ฒƒ์ด ์—†๋Š” ํ•œ Deferred์™€ ๊ฐ™์€ ๊ฒƒ์ด ์‹ค์ œ๋กœ ๊ธฐ๋ณธ Pipeline ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•˜์—ฌ ์ƒˆ ๋””์ž์ธ์— ์‰ฝ๊ฒŒ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ, ์šฐ๋ฆฌ๋Š” ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฐ€์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค) 2 ๋˜๋Š” 3๊ฐœ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ "์—๋ฎฌ๋ ˆ์ดํŠธ"๋ผ๊ณ  ๋งํ•˜๋Š” ์ด์œ ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์•ฝ์†/์„ ๋ฌผ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ATM์„ ์‚ฌ์šฉํ•  ์‹œ๊ฐ„์ด ์—†์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ๋ฉฐ์น  ๋‚ด๋กœ ์‹œ๋„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. PR ์ดˆ์•ˆ์„ ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜‰

์ข‹์Šต๋‹ˆ๋‹ค. ์ ์–ด๋„ ํŒŒ์ดํ”„๋ผ์ธ์— ๋Œ€ํ•ด์„œ๋Š” v2.0์— ๋Œ€ํ•ด ์ด ๊ธฐ๋Šฅ์„ ์ž ์ •์ ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์†”์งํžˆ ๋งํ•ด์„œ ์•„์ง ์ผ๋ฐ˜ ๊ฑฐ๋ž˜์— ๋Œ€ํ•ด์„œ๋Š” ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” Predis\Transaction\MultiExec ๊ฐ€ ํŒŒ์ดํ”„๋ผ์ธ์— ๋Œ€ํ•ด ๊ตฌ์ƒํ•œ ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ๋‚ด๋ถ€ ์„ค๊ณ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ง€๊ธˆ์€ Deferred ( reduce() ์—†์Œ, ์›์‹œ ๊ฐ’ ์—†์Œ, ...)์— ๋น„ํ•ด ๋” ๊ฐ€๋ฒผ์šด ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋ฐ”์ธ๋”ฉ, ๋ฆฌ์Šค๋„ˆ ๋ฐ trasformer๋Š” ์ง€์›๋ฉ๋‹ˆ๋‹ค. Predis\Response\FutureResponse ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” Predis\Pipeline\DeferredPipeline ์žˆ์Šต๋‹ˆ๋‹ค. DeferredPipeline::execute() ๋Š” ์•„๋ฌด ๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์ฝ์€ ๊ฐ’์€ FutureResponse ์—์„œ๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ DeferredPipeline ๋Š” ํƒ€์‚ฌ์—์„œ ์‰ฝ๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์–ด์•ผ ์‘๋‹ต ๋ž˜ํผ๋‚˜ ๋…ผ๋ฆฌ๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ๊ฐ’์„ ์ฑ„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์œ„์— ๋ณธ๊ฒฉ์ ์ธ Deferred ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ œ์•ˆํ•œ ๊ตฌํ˜„์€ ๋ฉฐ์น  ์•ˆ์— ๋”ฐ๋ฅผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฃผ์˜ ์‚ฌํ•ญ: ์ง€๋‚œ ์ฃผ์— ๋ฐ”๋นด๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„ํš์— ๋Šฆ์—ˆ๊ณ  ๋ฉฐ์น  ๋” ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํŒŒ์ดํ”„๋ผ์ธ์— ๋Œ€ํ•œ ๋งˆ์ง€๋ง‰ ์ˆ˜์ •์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๋‹ค๋“ฌ๋Š” ๋™์•ˆ(PR ์ดˆ์•ˆ์„ ํ‘ธ์‹œํ•  ์ค€๋น„๊ฐ€ ๊ฑฐ์˜ ๊ทธ๋“ค์€ ๋‚ด๊ฐ€ ํŠธ๋žœ์žญ์…˜๊ณผ ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์•„๋งˆ์žˆ์„ ๊ฒƒ์ด๋‹ค, ๊ทธ๋ž˜์„œ์ด ๊ฐ™์€ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ณต์œ ํ•˜๊ณ  ์‹ค์ œ๋กœ ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐ์ด ์‹œ์ ์—์„œ ์‹คํ—˜ ์‹œ์ž‘) ์‹œ๊ฐ„๊ณผ ์ž‘์—…์˜ ํ†ค์„ ํ•„์š”๋กœํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ํ…Œ์ŠคํŠธ ๋ˆ„๋ฝ Predis\Transaction\DeferredMultiExec ๋ฐ˜ํ™˜ Predis\Response\FutureResponse ์ธ์Šคํ„ด์Šค.

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

์ƒˆ๋กœ์šด ํŒŒ์ดํ”„๋ผ์ธ ์ถ”์ƒํ™”๋Š” #663์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‚ด์ผ Predis\Pipeline\DeferredPipeline ๋Œ€ํ•œ ๊ฐœ๋… ์ฆ๋ช…๊ณผ ํ•จ๊ป˜ ์š”์ง€๋ฅผ ๊ฒŒ์‹œํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค(#663์ด ์ฝ”๋“œ์™€ ๋‚ด๋ถ€ ๋””์ž์ธ ๋ชจ๋‘์—์„œ ์ถฉ๋ถ„ํžˆ ์•ˆ์ •์ ์ธ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋  ๋•Œ ์‹ค์ œ์ ์ด๊ณ  ๋” ์„ ๋ณ„๋œ PR์ด ๋’ค๋”ฐ๋ฅผ ๊ฒƒ์ž…๋‹ˆ๋‹ค). ๊ทธ๋Ÿฌ๋‚˜ ์ ์–ด๋„ ์šฐ๋ฆฌ๋Š” ๋ฌผ๊ฑด์„ ๊ฐ€์ง€๊ณ  ๋†€๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์„ ์–ผ๋งˆ๋‚˜ ๋ฉ€๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ๋Š”์ง€ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋ฐฉ๊ธˆ ์ด ์š”์  ์— ๋Œ€ํ•œ ๊ฐœ๋… ์ฆ๋ช…์„ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ํฌํ•จ๋œ README ํŒŒ์ผ๋„ ์ฐธ์กฐํ•˜์„ธ์š”. ๊ฒฐ์ •์ ์ด์ง€๋Š” ์•Š์ง€๋งŒ ์ ์–ด๋„ ์‹œ์ž‘์ ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ๋‚ด๊ฐ€ ๊ณ„ํšํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋ฅผ ์ฃผ๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณธ๊ฒฉ์ ์ธ ์ €์žฅ์†Œ๋ฅผ ํ”ผํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” ์ด๊ฒƒ์ด ์ ์ ˆํ•œ PR์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฏธ๋ž˜. #663์— ์˜ํ•ด ์ถ”์ ๋˜๋Š” ๊ฐœ๋ฐœ ๋ถ„๊ธฐ์— ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํ‘ธ์‹œ๋˜๋ฉด ์š”์ ์„ ๊ณ„์† ์—…๋ฐ์ดํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์š”์ ์„ ๋” ๋นจ๋ฆฌ ์—ฐ๊ตฌํ•  ๊ธฐํšŒ๋ฅผ ์–ป์ง€ ๋ชปํ•œ ๊ฒƒ์— ๋Œ€ํ•ด ์‚ฌ๊ณผ๋“œ๋ฆฝ๋‹ˆ๋‹ค. Deferred ์—์„œ ๊ตฌํ˜„ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์ด ๊ท€ํ•˜์˜ ๊ฐœ๋… ์ฆ๋ช…์— ํ‘œ์‹œ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

๊ฐ€๋ณ๊ฒŒ ์‚ดํŽด๋ณด๋‹ˆ asArray() ๋ฐ asGenerator() ํŠน๋ณ„ํ•œ ๋Œ€์šฐ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•˜๊ณ  ์™„๋ฃŒ ์ค‘์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ˆœํžˆ ์ž์‹ ์„ ๋ณ€ํ™˜๊ธฐ๋กœ ์ง์ ‘ ๋“ฑ๋กํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๊นŒ? ๋˜๋Š” ๋ณ€ํ™˜๊ธฐ ์ˆœ์„œ๋ฅผ ์ ์šฉํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๊นŒ(ํ•ญ์ƒ ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐ€๋Š” ์œ„์น˜)? ์—ฌ๊ธฐ์—์„œ๋Š” ๋‹จ์ˆœํ•จ๋งŒ ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰