๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[Programming] Backpressure

medium.com/@jayphelps/backpressure-explained-the-flow-of-data-through-software-2350b3e77ce7

 

Backpressure explainedโ€Š—โ€Šthe flow of data through software

Backpressure is something nearly every software engineer will have to deal with at some point, and for some it’s a frequent problem. But…

medium.com

 

์ดํ•ดํ•œ ๋ฐ”๋ฅผ ์ •๋ฆฌ

์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ชฉ์ ์€ ์ธํ’‹ ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•˜๋Š” ์•„์›ƒํ’‹ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.

Backpressure๋Š” ์ธํ’‹ ๋ฐ์ดํ„ฐ๋ฅผ ์•„์›ƒํ’‹ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ๊ณผ์ •์— ๋ชจ์ข…์˜ ์ด์œ ๋กœ ์ €ํ•ญ์ด ์ƒ๊ธฐ๋Š” ๋•Œ๋ฅผ ๋งํ•œ๋‹ค.

 

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

 

์˜ˆ๋“ค

I Love Lucy ์˜์ƒ์˜ ์˜ˆ

์ปจ๋ฒ ์ด์–ด ๋ฐธํŠธ๋ฅผ ํ†ตํ•ด ์ธํ’‹ ์•„์ดํ…œ์ด ๊ณ„์† ํ•ด์„œ ๋“ค์–ด์˜ค๋Š”๋ฐ ์ธํ’‹ ์•„์ดํ…œ์„ ์•„์›ƒํ’‹ ์•„์ดํ…œ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์—์„œ backpressure๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์ด backpressure์— ๋Œ€์‘ํ•˜๊ณ ์ž ์˜์ƒ์˜ ์ธ๋ฌผ๋“ค์ด ํ•œ ์ผ์€ ๋‚˜์ค‘์— ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ธํ’‹ ์•„์ดํ…œ์„ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ๋นผ๋†“๋˜๊ฐ€(buffering), ์ธํ’‹ ์•„์ดํ…œ๋“ค์„ ์ˆจ๊ธฐ๊ฑฐ๋‚˜ ์—†์• ๋ฒ„๋ ธ๋‹ค(dropping).

 

ํŒŒ์ผ ์ฝ๊ธฐ๊ณผ ์“ฐ๊ธฐ

ํŒŒ์ผ ์“ฐ๊ธฐ ์†๋„๋Š” ํŒŒ์ผ ์ฝ๊ธฐ ์†๋„๋ณด๋‹ค ๋Š๋ฆฌ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ์˜ ํŒŒ์ผ์„ ์ฝ์œผ๋ฉด์„œ ๋™์‹œ์— ์ฝ์€ ๊ฒƒ์„ ๋””์Šคํฌ์— ์“ด๋‹ค๊ณ  ํ•˜์ž.

์ฝ๋Š” ์†๋„ : 150 MB/์ดˆ

์“ฐ๋Š” ์†๋„ : 100 MB/์ดˆ

๋™์‹œ์— ํŒŒ์ผ์„ ์ฝ๊ณ  ์“ฐ๋Š”๋ฐ ๋งค์ดˆ (150 MB-100 MB = 50 MB)50MB์˜ ๋ฒ„ํผ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒฐ์†/์†์‹ค/์ ์ž(deficit)์ด๋‹ค. ํŒŒ์ผ ์ฝ๊ธฐ๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ํŒŒ์ผ ์ฝ๊ธฐ๋Š” ๋๋‚˜์ง€๋„ ๋ชปํ•˜๊ณ  ๊ฒฐ์†(์•„์ง ์ฝ์ง€ ๋ชปํ•œ ๋ฐ์ดํ„ฐ)๋„ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•œ๋‹ค.

 

6GB ํŒŒ์ผ์„ ๋Œ€์ƒ์œผ๋กœ ์ฝ๊ณ  ์“ด๋‹ค๊ณ  ํ•˜๋ฉด, ์“ฐ๊ธฐ๋ฅผ ๋‹ค ๋๋‚ด๊ธฐ ์œ„ํ•ด 2GB์˜ ๋ฒ„ํผ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

6 GB / 150 MB = 40์ดˆ

150 MB - 100 MB = 50 MB์˜ ๊ฒฐ์†

50 MB x 40 = 2 GB

 

์ด๊ฑด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋‹ค.

 

ํ•ด๊ฒฐ์ฑ… : ์“ฐ๋Š” ์†๋„๋กœ ํŒŒ์ผ์„ ์ฝ์œผ๋ฉด ๋œ๋‹ค.  

 

์„œ๋ฒ„ ํ†ต์‹ 

์„œ๋ฒ„๊ฐ„ ํ†ต์‹ ์—์„œ ์ž์ฃผ ๋ฐœ์ƒ.

ํ•œ ์„œ๋ฒ„๊ฐ€ ๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ ์š”์ฒญํ•˜๋Š” ์†๋„๊ฐ€, ์ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์†๋„๋ณด๋‹ค ๋น ๋ฅผ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

 

A ์„œ๋ฒ„ -> B ์„œ๋ฒ„ -> C ์„œ๋ฒ„

 

B์„œ๋ฒ„๊ฐ€ A์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ์š”์ฒญ์„ ๋ฐ›๋Š” ์†๋„ > B์„œ๋ฒ„๊ฐ€ A์„œ๋ฒ„์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ(ํ•ด C์„œ๋ฒ„๋กœ ์š”์ฒญ)ํ•˜๋Š” ์†๋„

B์„œ๋ฒ„์—์„œ ์ •์ฒด๊ฐ€ ์ƒ๊ธด๋‹ค. 

B์„œ๋ฒ„์—์„œ ๋ฒ„ํผ๋ฅผ ์“ฐ๋ฉด(Buffering) deficit(๊ฒฐ์†)์ด ๊ณ„์† ์ฆ๊ฐ€ํ•  ํ…Œ๊ณ , ๋‹ค๋ฅธ ์š”์ฒญ๋“ค์— ๋Œ€ํ•œ ์ž‘์—…๋“ค๋„ ์ง„ํ–‰ํ•˜๋‹ค๋ณด๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์œผ๋กœ B์„œ๋ฒ„๊ฐ€ ๋ปฃ์–ด๋ฒ„๋ฆด ๊ฒƒ์ด๋‹ค. ์š”์ฒญ์„ ์žƒ์–ด๋ฒ„๋ฆฌ๋Š” ๊ฒƒ(Dropping)์„ ํ—ˆ์šฉํ•˜๊ธฐ๋Š” ํž˜๋“ค๋‹ค.

 

์ด์ƒ์ ์ธ ์„ ํƒ์€ ์„œ๋ฒ„ B๊ฐ€ ์„œ๋ฒ„ A์˜ ์š”์ฒญ ์†๋„๋ฅผ ํ†ต์ œํ•˜๋Š” ๊ฒƒ. 

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ๋ฒ„ A, ์„œ๋ฒ„ B, ์„œ๋ฒ„ C๊ฐ€ ๋™์ผํ•œ downstream ์„œ๋น„์Šค Z์— ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค. ์„œ๋ฒ„ ์ค‘ ํ•˜๋‚˜(A)์˜ ์š”์ฒญ ์†๋„๊ฐ€ ๋น ๋ฅผ ๋•Œ, ์„œ๋น„์Šค Z๋Š” A์—๊ฒŒ ์†๋„๋ฅผ ๋Šฆ์ถœ ๊ฒƒ์„ ๋งํ•ด์„œ(producer๋ฅผ ํ†ต์ œ) A๊ฐ€ ์š”์ฒญ์„ ๋ฒ„ํผ๋งํ•˜๊ณ  ๊ฒฐ๊ตญ์—” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์“ฐ๋„๋ก ํ•œ๋‹ค. ์„œ๋ฒ„ B,C์˜ ์„œ๋น„์Šค๋Š” ๋™์ผํ•˜๊ฒŒ ์œ ์ง€ํ•œ๋‹ค. ์„œ๋น„์Šค ํ•˜๋‚˜๊ฐ€ ์ž˜๋ชป๋˜๋„ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋“ค๊นŒ์ง€ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด ๊ฒฝ์šฐ ๊ธฐ๋Šฅ ์ •์ง€๊ฐ€ ๋ถˆ๊ฐ€ํ”ผํ•˜์ง€๋งŒ, ์ด ๋ฒ”์œ„๊ฐ€ ์ œํ•œ๋˜๊ณ  ์—ฐ์†์ ์ธ ์„œ๋น„์Šค ๊ฑฐ๋ถ€๋ฅผ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์€ ์‹ค์ œ producer(์œ ์ €)๋ฅผ ํ†ต์ œํ•  ์ˆ˜ ์—†๊ธฐ์— ๋ฒ„ํผ๋งํ•˜๋Š” producer๋ฅผ ํ†ต์ œํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ๋ˆ„๊ตฐ๊ฐ€(์–ด๋–ค ์„œ๋ฒ„)๋Š” ๋ฒ„ํผ๋ง์„ ํ•ด์•ผํ•˜๊ณ , ์ด '๋ˆ„๊ตฌ'๋Š”  ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด๋‹ค.

 

UI ๋ Œ๋”๋ง

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

 

Backpressure ์ „๋žต

-producer๋ฅผ ํ†ต์ œ(Control)(consumer์— ์˜ํ•ด ์†๋„๋ฅผ ๋Šฆ์ถ”๊ฑฐ๋‚˜ ๋†’์ด๊ฑฐ๋‚˜)

-Buffer(๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ธ‰๋“ฑ์„ ์ผ์‹œ์ ์œผ๋กœ ๋ชจ์€๋‹ค.)

-Drop(๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋“ค์˜ ์ผ๋ถ€๋ฅผ ์ถ”์ถœํ•œ๋‹ค.)

-backpressure๋ฅผ ๋ฌด์‹œํ•œ๋‹ค. backpressure๊ฐ€ ์น˜๋ช…์ ์ธ ์ด์Šˆ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ง์ด๋‹ค. 

 

-pruducer๋ฅผ controlling

์ตœ๊ณ ์˜ ๋ฐฉ๋ฒ•. producer๋ฅผ ํ†ต์ œํ•˜๋Š”๊ฒŒ ํ•ญ์ƒ ๊ฐ€๋Šฅํ•˜์ง€๋Š” ์•Š๋‹ค. 

-buffering

๋ฌดํ•œํ•œ ๋ฒ„ํผ๋ง์€ ์œ„ํ—˜ํ•˜๋‹ค. ๋ฌดํ•œํ•œ ๋ฒ„ํผ๋Š” ๋ฉ”๋ชจ๋ฆฌ ํฌ๋ž˜์‹œ์˜ ํ”ํ•œ ์›์ธ์ด๋‹ค.

-dropping

๋งˆ์ง€๋ง‰ ์ˆ˜๋‹จ. ์ข…์ข… ๋ฒ„ํผ๋ง ์ด์šฉ๊ณผ ๊ฒฐํ•ฉ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ดˆ๋‹น 10% ๋ฐ์ดํ„ฐ์™€ ๊ฐ™์ด, ๋Œ€๊ฐœ ์‹œ๊ฐ„์„ ๊ธฐ๋ฐ˜์œผ๋กœํ•˜๋Š” ๊ฒƒ์ด ํ”ํ•˜๋‹ค. 

 

 

UX์— ๋งž๊ฒŒ ์ „๋žต์„ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.