Werkzeug: ์†Œ์ผ“ ๋™์ž‘์— ๋Œ€ํ•œ werkzeug.serving์˜ ์ž˜๋ชป๋œ ๊ฐ€์ •

์— ๋งŒ๋“  2016๋…„ 05์›” 01์ผ  ยท  6์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pallets/werkzeug

์šฐ๋ฆฌ ๋ชจ๋‘ ์•Œ๊ณ  ์žˆ๋“ฏ์ด socket.send()๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์†ก๋˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด ์ค„:
https://github.com/pallets/werkzeug/blob/03faf0569861e9d8c8c94785ad5560f735ba72da/werkzeug/serving.py#L165
gevent ๋ฐ docker๋กœ ์•Œ๋ ค์ง„ ์ตœ๊ณ ์˜ ์›น์Šค์ผ€์ผ ๊ธฐ์ˆ ๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ์‘๋‹ต์ด ์ž˜๋ฆฌ๋Š” ๋™์ž‘์„ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.3

socket.SocketIO๊ฐ€ ์‹ ๊ฒฝ์จ์•ผ ํ•  ๊ฒƒ ๊ฐ™์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

Python 3.5์—์„œ ์ด ๋ฒ„๊ทธ๋ฅผ ๊ฒฝํ—˜ํ–ˆ์ง€๋งŒ ๊ธฐ๋ณธ ์†Œ์ผ“์„ ๋น„์ฐจ๋‹จ ๋ชจ๋“œ๋กœ ์„ค์ •ํ•  ๋•Œ๋งŒ(์˜ˆ: settimeout ). ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ Python 3: issue24291 ์˜ ์—…์ŠคํŠธ๋ฆผ ๋ฒ„๊ทธ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” Python 3.6์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค( issue26721 ์ฐธ์กฐ).

๋‹ค๋ฅธ ์›น ์„œ๋ฒ„์—์„œ ๊ตฌํ˜„๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ wfile ๋ฅผ io.BufferedWriter ๋กœ ๋ž˜ํ•‘ํ•˜๊ฑฐ๋‚˜(์˜ˆ: 3.5์˜ CPython wsgiref ) ๋ฒ„ํผ๋ง์„ ํ™œ์„ฑํ™”ํ•˜๋„๋ก wbufsize ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’(์˜ˆ: ์ด gevent ๋ฌธ์ œ ์ฐธ์กฐ)

werkzeug๊ฐ€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๋„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š”์ง€, ์•„๋‹ˆ๋ฉด werkzeug๊ฐ€ ์•„๋‹Œ ๋ฌธ์ œ๋กœ ๊ฐ„์ฃผํ•˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

๋‹น์‹ ์ด ์˜ณ์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ(์•„๋ฌด๋Ÿฐ ์กฐ์‚ฌ๋„ ํ•˜์ง€ ์•Š์•˜์Œ) Werkzeug์˜ ์„œ๋ฒ„๋Š” ๊ฐœ๋ฐœ์šฉ์œผ๋กœ๋งŒ ์‚ฌ์šฉ๋œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค. Docker์—์„œ gevent๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ํ•˜๋ฉด ํ•ด๋‹น ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋ฏฟ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‹ค์ œ๋กœ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ๋„์ปค๋ฅผ ์‚ฌ์šฉํ–ˆ๊ณ  ์ฝ”๋“œ์˜ ์ผ๋ถ€๋Š” gevent monkeypatches๋ฅผ ์•„์ฃผ ๊ฒฝ์†”ํ•˜๊ฒŒ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
dontpanic์ด ๊นจ์ง€์ง€ ์•Š์œผ๋ฉด ๋ˆˆ์น˜์ฑ„์ง€๋„ ๋ชปํ•  ๊ฒƒ ๊ฐ™์•„์š” :3

Python 3.5์—์„œ ์ด ๋ฒ„๊ทธ๋ฅผ ๊ฒฝํ—˜ํ–ˆ์ง€๋งŒ ๊ธฐ๋ณธ ์†Œ์ผ“์„ ๋น„์ฐจ๋‹จ ๋ชจ๋“œ๋กœ ์„ค์ •ํ•  ๋•Œ๋งŒ(์˜ˆ: settimeout ). ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ Python 3: issue24291 ์˜ ์—…์ŠคํŠธ๋ฆผ ๋ฒ„๊ทธ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” Python 3.6์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค( issue26721 ์ฐธ์กฐ).

๋‹ค๋ฅธ ์›น ์„œ๋ฒ„์—์„œ ๊ตฌํ˜„๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ wfile ๋ฅผ io.BufferedWriter ๋กœ ๋ž˜ํ•‘ํ•˜๊ฑฐ๋‚˜(์˜ˆ: 3.5์˜ CPython wsgiref ) ๋ฒ„ํผ๋ง์„ ํ™œ์„ฑํ™”ํ•˜๋„๋ก wbufsize ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’(์˜ˆ: ์ด gevent ๋ฌธ์ œ ์ฐธ์กฐ)

werkzeug๊ฐ€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๋„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š”์ง€, ์•„๋‹ˆ๋ฉด werkzeug๊ฐ€ ์•„๋‹Œ ๋ฌธ์ œ๋กœ ๊ฐ„์ฃผํ•˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ œ๊ณต๋œ ์ •๋ณด์— ๋”ฐ๋ฅด๋ฉด ์ด๊ฒƒ์ด ์‹ค์ œ๋กœ gevent ๋ฒ„๊ทธ ๋˜๋Š” stdlib ๋ฒ„๊ทธ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. werkzeug๋Š” ๋ฒ„ํผ๋ง๋œ ํŒŒ์ผ์— ์“ฐ๊ธฐ + ํ”Œ๋Ÿฌ์‹œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ•ญ์ƒ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ด๊ฒƒ์ด ์ผ๋ฐ˜ ํŒŒ์ด์ฌ์—์„œ๋„ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด ๋งŒ ์ง€๋ฒคํŠธ์—

@RonnyPfannschmidt ์˜ˆ, gevent ์—†์ด๋„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. werkzeug์˜ WSGIRequestHandler ์™€ ํ•จ๊ป˜ ๋น„์ฐจ๋‹จ ์†Œ์ผ“์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Gevent๋Š” Python 3.5์˜ ์—…์ŠคํŠธ๋ฆผ ๋ฒ„๊ทธ์— ์˜ํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๋งŽ์€ ํ”„๋กœ์ ํŠธ์˜ ๋˜ ๋‹ค๋ฅธ ์˜ˆ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค :-)

์ด๊ฒƒ์ด ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ๊ณผ Python 3.5์—์„œ ์ˆ˜์ •๋˜์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค(3.4๋Š” 3์›”์— EOL๋จ)์„ ๊ฐ์•ˆํ•  ๋•Œ ์ด ๊ธ€์„ ๋‹ซ์Šต๋‹ˆ๋‹ค.

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

๊ด€๋ จ ๋ฌธ์ œ

golf-player picture golf-player  ยท  10์ฝ”๋ฉ˜ํŠธ

mrx23dot picture mrx23dot  ยท  6์ฝ”๋ฉ˜ํŠธ

Nessphoro picture Nessphoro  ยท  6์ฝ”๋ฉ˜ํŠธ

miki725 picture miki725  ยท  10์ฝ”๋ฉ˜ํŠธ

androiddrew picture androiddrew  ยท  14์ฝ”๋ฉ˜ํŠธ