[Concurrency] ์ฑ๋๊ณผ Pipeline Pattern
Pipeline Pattern์ ์ฑ๋์ ํต์ ์๋จ์ผ๋ก ์ฌ์ฉํด์, ์ผ์ข ์ produce - consume ๊ตฌ์กฐ๋ฅผ ์์๋ด๋ ์์ํ ๊ตฌํ ํจํด ์ค ํ๋๋ค.
์๋ฅผ ๋ค์ด, Item์ด ์ฌ๋ฌ๊ฐ ์๊ณ , ๊ฐ Item์๋ ์ฒ๋ฆฌํด์ผ ํ๋ ํ๋ก์ธ์ค๊ฐ 3๊ฐ์ง ์๋ค๊ณ ํด๋ณด๊ฒ ๋ค.

์ด ๋น๋๊ธฐ ํจ์๋ค์ ์ค์ ์ธ๋ถ ์๋น์ค์ API๋ฅผ ํธ์ถํด์ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ๋ค.
๊ทธ๋ฌ๋ฉด ๋ณดํต์ ์ฝ๋๋ฅผ ์ด๋ฐ ์์ผ๋ก ๊ฐ๋จํ๊ฒ ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ด๋ค.
์ด ์ ๊ทผ ๋ฐฉ์ ์์ฒด์ ๋ญ๊ฐ ๋๋จํ ๊ฒฐ์ ์ด ์๊ฑฐ๋ ํ ๊ฒ์ ์๋๋ค.
๋ง์ฝ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๋ง์์ ๋ค์ง ์๋๋ค๋ฉด, item ๋ฃจํ์ ๊ฐ ๋ฐ๋ณต์ ์ค๋ ๋๋ก ๋์ธ ์๋ ์์ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ฑ๋์ ์ฌ์ฉํด์ ํ์ด๋ณผ ์๋ ์๋ค.
์ด ๊ฒฝ์ฐ์๋ items๊ฐ ์ด๋ฏธ ์ญ ์ ํด์ ธ์์ผ๋, ๋ฐ์ดํฐ ์์ค๊ฐ ์ง์์ ์ผ๋ก ์ ์
๋ ์ ์๋ ์ํฉ์ด๋ผ๋ฉด ์ฑ๋์ ํตํ ์ง์์ ์ธ ํ์ดํ๋ผ์ธ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ ๋ฆฌํ ์ ์๋ค.
์ด๋ฐ ์์ผ๋ก, ์ธ์๋ฅผ ์ง์ ์ ๋ฌ๋ฐ๋ ๊ฒ์ด ์๋๋ผ ์ฑ๋์ ํตํด ์ ๋ฌ๋ฐ๊ณ , ๋ฆฌํด๊ฐ๋ ๋ฐ๋ก ๋ฆฌํดํ๋ ๊ฒ์ด ์๋๋ผ ์ฑ๋์ ํตํด ๋ฆฌํดํ๋ ๊ฒ์ด๋ค.
ํธ์ถํ ๋๋ ๋ค์๊ณผ ๊ฐ์ด ์ฒด์ด๋ ํํ๋ก, ์ฑ๋์ ๋ฐ๊ณ ์ฑ๋์ ๋ฆฌํดํ๋ ์์ผ๋ก ํ ์ ์๋ค.
๊ฐ ํ์ดํ๋ผ์ธ๋ณ๋ก, ์ฑ๋ consumer ํจ์๋ค์ด ๋๋๋๋ก ์ ๋นํ ์ฒ๋ฆฌ๊ฐ ๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ ์ด ๊ตฌํ ํจํด์ด ๋ฌด์จ ์๋ฏธ๊ฐ ์์๊น?
๋ด๊ฐ ๋๋ผ๊ธฐ์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๋ถ๋ถ ์ค ํ๋๋, ์ฑ๋์ ํตํด Backpressure๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ฝ๋ค๋ ๊ฒ์ด๋ค.
์ฑ๋์ ๋ฒํผ ์ฌ์ด์ฆ๋ฅผ ๊ฑธ๋ฉด, ๋ฒํผ๊ฐ ๊ฝ ์ฐฐ ๊ฒฝ์ฐ์๋ ๋ ์ด์ send๋ฅผ ๋ฐ์ง ์๊ณ ๋๊ธฐํ๊ฒ ๋๋ค. ๊ทธ๋ผ ํน์ ์ฑ๋ pipe ์ง์ ์ ๋ณ๋ชฉ์ด ์กด์ฌํ ๊ฒฝ์ฐ๋ฅผ ์กฐ๊ธ ๋ ์ ์ฐํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
์ต์ด ๋ฐ์ดํฐ source๋ฅผ ์ฑ๋์ ํตํด ๊ณ์ ๊ตฌ๊ฒจ๋ฃ์ ์ ์๋ค๋ ๊ฒ๋ ํน์ง์ด๋ค.
๊ทผ๋ฐ ๊ทธ ์ด์ธ์๋ ํฐ ์ฅ์ ๊น์ง๋ ๋ณ๋ก ์๋ ๊ฒ ๊ฐ๋ค.
๊ฐ๋
์ฑ๋ ๊ธฐ๋ณธ์ ์ธ ๊ตฌํ ํ์๋ณด๋ค ๋จ์ด์ง๊ณ , ์ฝ๋๊ฐ ์ฅํฉํด์ง๋ ๊ฒฝํฅ์ด ์๋ค.
์ฌ์ค ๋ด๊ฐ ๋ณผ๋ async-await์ด๋ async stream ํจํด์ด ์ง์๋๋ ์ธ์ด์์๋ ํฌ๊ฒ ํ์ํ์ง ์๋ค.
await flow์ ๊ตฌํํ๊ธฐ ๋ฒ๊ฑฐ๋ก์ด Go ๊ฐ์ ์ธ์ด์์ ์ข ์ธ๋งํ ๊ฐ์น๊ฐ ์๋ ๊ฒ ๊ฐ๋ค.