์ฐ๋ฆฌ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ฌ์ฉํ ํ ๊ฐ์ง ๊ธฐ์ ์ Deferred ๋ผ๋ Predis ์์์ ๊ฐ๋ฐํ ๋ฏธ๋์ด์ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ด๋ จ์ด ์์ต๋๋ค. RedisConf 2018์์ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฐํ์ต๋๋ค.
Deferred๋ ์จ๊ฒจ์ง Predis ํ์ดํ๋ผ์ธ(ํธ๋์ญ์ , ํ์ดํ๋ผ์ธ ๋ฐ ์์ ํ์ดํ๋ผ์ธ)์ ์ฌ์ฉํ๋ ์ฝ์/๋ฏธ๋ ๋ชจ๋ธ์ ๊ณต์ํํฉ๋๋ค. ํ์ดํ๋ผ์ด๋์ ๋ํ ๋ณด๋ค ๊ฐ์ฒด ์งํฅ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ด๋ฉฐ ๋ช ๋ น์ ์กฐํฉํ๊ณ ์๋ต์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์บก์ํ๋ฅผ ๊ฐ์ ํฉ๋๋ค.
ํนํ, ์๋ต์ PHP ๋ณ์์ ์ง์ ๋ฐ์ธ๋ฉํ๊ณ , ๊ฐ์ ์๋์ผ๋ก ๋ณํํ๊ณ ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ๋ณํฉํ๊ณ , ๋ก๊น /ํต๊ณ์ ๋ํ ์๋ฆผ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
๋ด ์ ์์ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ(๋๋ ๊ทธ ์ ๊ทผ ๋ฐฉ์)๊ฐ Predis์ ํ์ค ๋ถ๋ถ์ด ๋๋ ๊ฒ์ ๋๋ค. ์๋ํ๋ฉด ๋ ์ฌ์ด์๋ ๋ง์ ๊ณตํต์ ์ด ์๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ธฐ์กด ์ฝ๋๋ฅผ Predis๋ก ์ ํํ๊ฑฐ๋ Deferred์ ๋ชจ๋ธ์ ๋ฐ๋ฅด๋ ํ์ โโ๋ชจ๋์ ๊ตฌ์ถํ๋ ๋ฐ ๋์์ ๋๋ฆฌ๊ณ ์ถ์ต๋๋ค.
์์ธํ ๋ด์ฉ์ Deferred์ README ์์ ์ฐพ์ ์ ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ์์ฑ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ 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()
ํน๋ณํ ๋์ฐ๊ฐ ํ์ํ ์ด์ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ด๋ถ ํ๋๊ทธ๋ฅผ ์ค์ ํ๊ณ ์๋ฃ ์ค์ ์ถ๊ฐํ์ง ์๊ณ ๋จ์ํ ์์ ์ ๋ณํ๊ธฐ๋ก ์ง์ ๋ฑ๋กํ ์ ์์์ต๋๊น? ๋๋ ๋ณํ๊ธฐ ์์๋ฅผ ์ ์ฉํ๋ ค๊ณ ํฉ๋๊น(ํญ์ ๋ง์ง๋ง์ผ๋ก ๊ฐ๋ ์์น)? ์ฌ๊ธฐ์์๋ ๋จ์ํจ๋ง ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ง์ง๋ง์ผ๋ก ์์ฑ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ v2.0์์ ํ์ดํ๋ผ์ธ ์ถ์ํ์ ๋ด๋ถ์ ๋ํ ์๋ก์ด ์ ๊ทผ ๋ฐฉ์์ ์ค์ ์ฝ๋๋ก ํ ์คํธํ๊ณ ์์ผ๋ฉฐ(์ด์ PHP ๋ฒ์ ์ ์ญ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค!) ์๋ก์ด ๋์์ธ์ด ์ค์ ๋ก ์ค์ฉ์ ์ด๊ณ ์ผ๊ด์ฑ์ด ์๋์ง ํ์ธํ๊ธฐ ์ํ ๋ค์ํ ํ ์คํธ์์ ์ด์ ๋ณด๋ค ๋ ์ ์ฐํจ) ๋ํ Deferred์ ๊ธฐ๋ณธ ์์ด๋์ด๋ฅผ ์๋ฎฌ๋ ์ดํธํ๋ ค๊ณ ์๋ํ์ผ๋ฉฐ ๊ฒฐ๊ตญ์๋ ์ค๊ฐ์ ๋์น ๊ฒ์ด ์๋ ํ Deferred์ ๊ฐ์ ๊ฒ์ด ์ค์ ๋ก ๊ธฐ๋ณธ Pipeline ํด๋์ค๋ฅผ ํ์ฅํ์ฌ ์ ๋์์ธ์ ์ฝ๊ฒ ์ฐ๊ฒฐํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์, ์ฐ๋ฆฌ๋ ํด๋์ค์ ๋ํด์๋ง ๊ฐ์ง ๊ฒ์ ๋๋ค) 2 ๋๋ 3๊ฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํฉ๋๋ค. ๋ด๊ฐ "์๋ฎฌ๋ ์ดํธ"๋ผ๊ณ ๋งํ๋ ์ด์ ๋ ํ ์คํธ๋ฅผ ๊ฐ๋จํ๊ฒ ์ ์งํ๊ธฐ ์ํด ์ฝ์/์ ๋ฌผ์ ์ฌ์ฉํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋๋ค. ATM์ ์ฌ์ฉํ ์๊ฐ์ด ์์ต๋๋ค. ์์ผ๋ก ๋ฉฐ์น ๋ด๋ก ์๋ํด ๋ณด๊ฒ ์ต๋๋ค. PR ์ด์์ ํธ์ํฉ๋๋ค ๐