Requests: ์ „์ฒด ์‹œ๊ฐ„ ์ดˆ๊ณผ

์— ๋งŒ๋“  2016๋…„ 04์›” 16์ผ  ยท  38์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: psf/requests

TCP ํŠธ๋žœ์žญ์…˜ ์‹œ๊ฐ„ ์ดˆ๊ณผ ์„ค์ •์„ ํ—ˆ์šฉํ•˜๋Š” timeout ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ด๋ฏธ ์ž˜ ํ™œ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋งค์šฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค! ๊ทธ๋Ÿฌ๋‚˜ ์—ฐ๊ฒฐ ์ „์ฒด์—์„œ ์ „์ฒด ์‹œ๊ฐ„ ์ œํ•œ๋„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ์ดˆ๊ณผ์— ๋Œ€ํ•œ ๋ฌธ์„œ๋ฅผ ์ฝ๋Š” ๊ฒƒ์€ ์ด๊ฒƒ์ด ํ˜„์žฌ ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ ์–ด๋„ ์กฐ๊ธˆ ์ „์— ๋ฌธ์ œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉด์„œ ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ์š”์ฒญ์„ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์žˆ๋‹ค๋ฉด ์‹ค๋ก€ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ํƒ€์ด๋จธ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์ถ”๊ฐ€ ์˜ค๋ฒ„ํ—ค๋“œ(์Šค๋ ˆ๋“œ๋‹น ํ•˜๋‚˜, ๋งŽ์„ ์ˆ˜ ์žˆ์Œ)์™€ ๊ฒฐ๊ตญ ์ค‘๋‹จํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์—ฐ๊ฒฐ ํ’€๋ง์— ๋Œ€ํ•œ ์—ญํšจ๊ณผ์— ๋Œ€ํ•ด ์šฐ๋ คํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์š”๊ตฌ. ์ฒ˜์Œ์— ์š”์ฒญ์„ ์ค‘๋‹จํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๋ฌธ์„œ์—์„œ ๋ช…๋ฐฑํ•œ ๊ฒƒ์„ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์žฅ๊ธฐ์ ์œผ๋กœ ์ „์ฒด ์‹œ๊ฐ„ ์ œํ•œ์„ ์š”์ฒญ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹จ๊ธฐ์ ์œผ๋กœ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ถŒ์žฅ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

Propose Close

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

@jribbens ์—ฌ๊ธฐ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒํŠธ 1์€ ๊ทธ๋Ÿฌํ•œ ํŒจ์น˜์˜ ๋ณต์žก์„ฑ์ด ๋งค์šฐ ๋†’๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋ ค๋ฉด ์†Œ์ผ“ ์ˆ˜์ค€์—์„œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ํŒจ์น˜๋ฅผ ์ด๋ฏธ ํŒจ์น˜ํ•œ httplib๋ฅผ ํ†ตํ•ด ํŒจ์น˜๋ฅผ ๋„๋ฆฌ ์ „๋‹ฌํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ๊ธฐ๋Šฅ์  ๋ณ€๊ฒฝ์„ ๋‹ฌ์„ฑํ•˜๋ ค๋ฉด httplib์— ๋„๋‹ฌํ•˜๊ณ  ๋” ๋ณต์žกํ•œ ๋ฉ”์„œ๋“œ์˜ ์•ฝ 50%๋ฅผ ๋‹ค์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒํŠธ 2๋Š” ๊ทธ๋Ÿฌํ•œ ํŒจ์น˜์˜ ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋ถ€๋‹ด๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด httplib์˜ ๋ณ‘๋ ฌ ํฌํฌ(ํ˜„์žฌ๋กœ์„œ๋Š” ๋” ์ ์ ˆํ•˜๊ฒŒ๋Š” http.client)๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ ์‹œ์ž‘ํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜๋Š” ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ๋ณ€๊ฒฝ์— ๋” ์ ํ•ฉํ•œ ๋‹ค๋ฅธ HTTP ์Šคํƒ์˜ ์œ ์ง€ ๊ด€๋ฆฌ ๋ถ€๋‹ด์„ ๋– ๋งก์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ๊ทธ๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ–๊ณ ์ž ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ํ”ํžˆ ๋†“์น˜๋Š” ๋ถ€๋ถ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ตฌํ˜„ ๋น„์šฉ์€ ๋†’์ง€๋งŒ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” ์ง€์†์ ์ธ ์œ ์ง€ ๊ด€๋ฆฌ ๋น„์šฉ์— ๋น„ํ•˜๋ฉด ๊ทธ๊ฒƒ์€ _์•„๋ฌด๊ฒƒ๋„_ ์•„๋‹™๋‹ˆ๋‹ค.

3๋ถ€์—์„œ๋Š” ๊ทธ๋Ÿฐ ํŒจ์น˜์˜ ์žฅ์ ์ด ๋ถˆ๋ถ„๋ช…ํ•˜๋‹ค. ์ „์ฒด ํƒ€์ž„์•„์›ƒ ํŒจ์น˜๋ฅผ ์›ํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ์ž์‹ ์ด ์›ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์™„์ „ํžˆ ๋ช…ํ™•ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด ์ œ ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์•„๋ฌด ์ด์œ  ์—†์ด ์™„๋ฒฝํ•˜๊ฒŒ ์–‘ํ˜ธํ•œ ์š”์ฒญ์„ ์ข…๋ฃŒํ•˜๋Š” ํšจ๊ณผ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ์•ฝ๊ฐ„์˜ ์ฝ”๋“œ๋ฅผ ์„ค๊ณ„ํ–ˆ์œผ๋ฉฐ ์ค‘๋‹จ์„ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๊ท ์ผํ•œ ์ด ์‹œ๊ฐ„ ์ œํ•œ์„ ์„ค์ •ํ•˜๊ณ  ์‹ถ์ง€๋งŒ("์š”์ฒญ์€ 30์ดˆ ์ด์ƒ ๊ฑธ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!") ์ด๋Ÿฌํ•œ ์‹œ๊ฐ„ ์ œํ•œ์€ ์š”์ ์„ ๋†“์นฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ 30MB์—์„œ 30GB๋กœ ๋ณ€๊ฒฝ๋˜๋ฉด ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์™„์ „ํžˆ ์ •์ƒ์ผ์ง€๋ผ๋„ ๊ทธ๋Ÿฌํ•œ ํŒŒ์ผ์€ ๊ทธ๋Ÿฐ ์ข…๋ฅ˜์˜ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ _์ ˆ๋Œ€_ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•ด, ์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ๋Š” ๋งค๋ ฅ์ ์ธ ๊ณจ์นซ๊ฑฐ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ํšจ๊ณผ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜์ง€๋Š” ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์— ๋” ์œ ์šฉํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์€ stream=True ๋ฐ iter_content ์™€ ๊ฒฐํ•ฉ๋œ ์†Œ์ผ“๋ณ„ ์ž‘์—… ์ œํ•œ ์‹œ๊ฐ„์„ ํ™œ์šฉํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์ฒญํฌ์— ๋Œ€ํ•œ ์ œํ•œ ์‹œ๊ฐ„์„ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. iter_content ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ œ์–ด ํ๋ฆ„์€ ๋‹ค์†Œ ๊ทœ์น™์ ์ธ ๊ฐ„๊ฒฉ์œผ๋กœ ์ฝ”๋“œ์— ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์†Œ์ผ“ ์ˆ˜์ค€ ์ œํ•œ ์‹œ๊ฐ„(์˜ˆ: 5์ดˆ)์„ ์„ค์ •ํ•œ ๋‹ค์Œ ์ƒ๋‹นํžˆ ์ž‘์€ ์ฒญํฌ(์˜ˆ: 1KB ๋ฐ์ดํ„ฐ)์— ๋Œ€ํ•ด iter_content ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ ๊ทน์ ์œผ๋กœ ๊ณต๊ฒฉ์„ ๋ฐ›์ง€ ์•Š๋Š” ํ•œ ์„œ๋น„์Šค ๊ฑฐ๋ถ€๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋น„๊ต์  ํ™•์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๊ฑฐ๋ถ€๊ฐ€ ์ •๋ง ๊ฑฑ์ •๋œ๋‹ค๋ฉด ์†Œ์ผ“ ์ˆ˜์ค€ ์ œํ•œ ์‹œ๊ฐ„์„ ํ›จ์”ฌ ๋” ๋‚ฎ๊ฒŒ ์„ค์ •ํ•˜๊ณ  ์ฒญํฌ ํฌ๊ธฐ๋ฅผ ๋” ์ž‘๊ฒŒ(0.5์ดˆ ๋ฐ 512๋ฐ”์ดํŠธ) ์„ค์ •ํ•˜์—ฌ ์ •๊ธฐ์ ์œผ๋กœ ์ œ์–ด ํ๋ฆ„์„ ๋‹ค์‹œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์‹ญ์‹œ์˜ค.

์ด ๋ชจ๋“  ๊ฒƒ์˜ ๊ฒฐ๊ณผ๋Š” ์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ์ด์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์˜ค์ž‘๋™์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ข‹์€ ์ข…๋ฅ˜์˜ ์‹œ๊ฐ„ ์ œํ•œ์€ ํฐ ์‘๋‹ต์„ ํ—ˆ์šฉํ•˜์—ฌ ํ‰ํ™”๋กญ๊ฒŒ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ์กฐ์ •๋œ ๊ฒƒ์ด๋ฉฐ ์ด๋Ÿฌํ•œ ์‹œ๊ฐ„ ์ œํ•œ์€ ์†Œ์ผ“ ์ˆ˜์ค€ ์‹œ๊ฐ„ ์ œํ•œ ๋ฐ iter_content ์— ์˜ํ•ด ๊ฐ€์žฅ ์ž˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

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

์•ˆ๋…•ํ•˜์„ธ์š” @emgerner-msft๋‹˜,

์ฐธ๊ณ ๋กœ ๋‹ค์Œ์€ ์ด ์ •ํ™•ํ•œ ๊ธฐ๋Šฅ ์š”์ฒญ์ด ์•„๋‹Œ ๊ฒฝ์šฐ ์ด ํ…Œ๋งˆ์˜ ๋ชจ๋“  ๋ณ€ํ˜•์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ https://github.com/sigmavirus24/requests-toolbelt/issues/51 ์—์„œ ์ด์— ๋Œ€ํ•ด ๋…ผ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ๋งํฌ๋Š” ์š”์ฒญ์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ์ด๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ด ํŒจํ‚ค์ง€ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์‹ค์€ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๊ฐ€ ์ด๋ฏธ ์•„์ฃผ ์ž˜ ํ•˜๊ณ  ์žˆ์„ ๋•Œ ์ด๊ฒƒ์„ ํ•˜๋„๋ก ์š”์ฒญํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฐธ์กฐํ•˜๋Š” ํŒจํ‚ค์ง€๋Š” ์›น ์š”์ฒญ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ถ„๊ธฐํ•˜์—ฌ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ผ๋Š” ๋‹จ์ˆœํ•œ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ๋งค์šฐ ์ค‘์š”ํ•œ ๋ฐฉ๋ฒ•์ด๋ฉฐ, ์ œ ์ƒ๊ฐ์—๋Š” ๊ธฐ๋ณธ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ์š”์ฒญ ์ž์ฒด๋ฅผ ์–ด๋–ค ์‹์œผ๋กœ๋“  ๋Œ€์ฒดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@jribbens ์“ฐ๋ ˆ๋“œ๋„ ํ”„๋กœ์„ธ์Šค๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ๋†€๋ผ์šด ์ผ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋•Œ๊นŒ์ง€๋Š” ๋ฒฝ์‹œ๊ณ„ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ์›ํ•  ๊ฒฝ์šฐ ํ˜„์žฌ๋กœ์„œ๋Š” ๊ฐ€์žฅ ์•ˆ์ •์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๋‹น ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.

@jribbens ๊ฐ€ ์Šค๋ ˆ๋“œ๋‚˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์›น ์š”์ฒญ๋‹น _ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณผ๋„ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ์–ธ์–ด์—๋Š” ๋‹จ์ผ ์ถ”๊ฐ€ ์Šค๋ ˆ๋“œ ๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ณต์œ ํ•˜๋Š” ์—ฌ๋Ÿฌ ํƒ€์ด๋จธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ์—์„œ ๊ฐ€์žฅ ์ž˜ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

#1928์ด ๋Œ€์•ˆ์— ๋Œ€ํ•ด ๊ฐ€์žฅ ๋งŽ์ด ๋…ผ์˜ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์€ ๋งŽ์€ ์ฃผ์˜ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค(์ด๊ฒƒ์€ ์‚ฌ์šฉ ์‚ฌ๋ก€ ๋“ฑ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ). ๋‚ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์‚ฌ์šฉ์ž ์ •์˜ ์ฝ”๋“œ๊ฐ€ ์žˆ๊ณ  ์ด๊ฒƒ์ด ์‹ค์ œ๋กœ ์š”์ฒญ์— ์†ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋‚˜๋งŒ์˜ ์‚ฌ์šฉ์ž ์ •์˜ ์†”๋ฃจ์…˜์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์š”์ฒญ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์ด์œ ๋Š” ๋‚ฎ์€ ์ˆ˜์ค€์˜ TCP ์—ฐ๊ฒฐ ํ’€๋ง ๋…ผ๋ฆฌ์—์„œ ๋ฒ—์–ด๋‚˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด์ง€๋งŒ ์ด ์‚ฌ์šฉ์ž ์ง€์ • ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ ค๋ฉด ํ•ด๋‹น ๋…ผ๋ฆฌ๋ฅผ ์•Œ์•„์•ผ ํ•˜๋Š” ํ•ด๋‹น ์Šค๋ ˆ๋“œ๋ฅผ ์ฝ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. .

@emgerner-msft๊ฐ€ ๋งž์Šต๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ๋‚˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  "์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ"๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” @sigmavirus24 ์˜ ์˜๊ฒฌ์€ ๋‹ค์†Œ ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ํ”„๋กœ์„ธ์Šค ์‹œ์ž‘ ์‹œ ๊ธฐํ•œ์„ ๊ณ„์‚ฐ(์˜ˆ: deadline = time.time() + total_timeout )ํ•œ ๋‹ค์Œ ๊ฐœ๋ณ„ ์ž‘์—…์—์„œ ์‹œ๊ฐ„ ์ œํ•œ์„ deadline - time.time() ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์Šค๋ ˆ๋“œ๋‚˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  "์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ"๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋ณดํ–‰์ž์ฒ˜๋Ÿผ ๋ณด์ด๋ฉฐ ์ „ํ˜€ "๋†€๋ž์ง€" ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์€ ๋‹ค์†Œ ์›์‹œ์ ์ž…๋‹ˆ๋‹ค. _๋Œ€๋ถ€๋ถ„์˜_ ์‚ฌ๋žŒ๋“ค์ด ์ด(๋˜๋Š” ๋ฒฝ์‹œ๊ณ„) ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ์›ํ•˜๋Š” ์ด์œ ๋Š” ์ฝ๊ธฐ๊ฐ€ "์ค‘๋‹จ"๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

r = requests.get(url, stream=True)
for chunk in r.iter_content(chunksize):
    process_data(chunk)

iter_content ์ค‘๊ฐ„์— ๊ฐ ์ฝ๊ธฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€๋งŒ ์ฝ๊ธฐ ์ œํ•œ ์‹œ๊ฐ„๋ณด๋‹ค ์งง์€ ๊ฒฝ์šฐ(์ŠคํŠธ๋ฆฌ๋ฐํ•  ๋•Œ ์ ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์ ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์ผ ์ˆ˜ ์žˆ์Œ) ์ง€์ •ํ•œ . ํ™•์‹คํžˆ ์ด๊ฒƒ์€ ์‹œ๊ณ„ ๋“œ๋ฆฌํ”„ํŠธ์™€ ์ผ๊ด‘ ์ ˆ์•ฝ ์‹œ๊ฐ„์ œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ธฐ์–ตํ•˜๊ณ  time.time() ๊ฐ€ ๋น„์ฐธํ•˜๊ฒŒ ๋ถˆ์ถฉ๋ถ„ํ•  ๋•Œ๊นŒ์ง€ ์†”๋ฃจ์…˜ @jribbens ์— ์˜ํ•ด ๋‹จ์ˆœํžˆ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ Requests์˜ API๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์„ ์—ผ๋‘์— ๋‘๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹œ๊ฐ„ ์ œํ•œ์„ ์ง€์ •ํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•˜๊ฑฐ๋‚˜ ์ผ๊ด€๋œ API๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ๋‹น์‹ ์ด ์ œ์•ˆํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค๋ฉด 1๋ถ„ ๊ธธ์ด์˜ ์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ์ง€์ •ํ•˜๋Š” ์ˆ˜๋งŽ์€ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ํ™•์ธํ–ˆ์„ ๋•Œ 1๋ถ„ ๋ฏธ๋งŒ์ด์—ˆ์ง€๋งŒ ๊ตฌ์„ฑ๋œ ์ฝ๊ธฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ์‹œ๊ฐ„ ์ดˆ๊ณผ ์•ฝ 1๋ถ„ 30์ดˆ ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด๊ฒƒ์„ ์ฐพ๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์•ฝ๊ฐ„ ๋” ๋‚˜์„ _๋งค์šฐ_ ๊ฑฐ์นœ ๋ฒฝ ์‹œ๊ฐ„ ์ดˆ๊ณผ์ด์ง€๋งŒ, ์ด๊ฒƒ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ์‚ฌ๋žŒ๊ณผ ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@sigmavirus24 ๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์‚ฌ๊ณผ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋งˆ์น˜ ๊ทธ๊ฒƒ์ด ๋ฌธ์ž ๊ทธ๋Œ€๋กœ์˜ ํŒจ์น˜๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋‚ด ์˜์‚ฌ ์ฝ”๋“œ ์›์น™ ์„ค๋ช…์„ ๋น„ํŒํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. time.time() ๋Š” ๋‹น์‹ ์ด ์ƒ๊ฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ์ง€์ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๊ด‘ ์ ˆ์•ฝ ์‹œ๊ฐ„์ œ๋Š” ๊ด€๋ จ์ด ์—†์œผ๋ฉฐ ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ์‹œ๊ฐ„ ์ฒ™๋„์˜ ์‹œ๊ณ„ ์™œ๊ณก๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์„ค๋ช…ํ•˜๋Š” ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ œ์•ˆ์„ ์˜คํ•ดํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ API๊ฐ€ ๋ฒ„์ „ 2.9.0๋งŒํผ ์ตœ๊ทผ์— ๋ณ€๊ฒฝ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— Requests API๊ฐ€ "๊ณ ์ •"๋œ๋‹ค๋Š” ๊ฒƒ์ด ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚ด ํ† ๋ก ์„ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด: ๋‚˜๋Š” ์‹ค์ œ๋กœ ์ด๊ฒƒ์ด ์‰ฝ๋‹ค๊ณ  ์ฃผ์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์™„์ „ํžˆ ๊ฐ„๋‹จํ•˜๋‹ค๋ฉด ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์“ฐ๊ณ  ๋‹น์‹ ์„ ๊ดด๋กญํžˆ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

๋‚ด ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
1) ๋‹น์‹ ์ด ๋‚˜์—ดํ•œ ์Šค๋ ˆ๋“œ์˜ ๋ชจ๋“  ๊ฒƒ์€ ์›์ˆญ์ด ํŒจ์น˜์˜€์Šต๋‹ˆ๋‹ค. ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋กœ๋•์…˜ ํ’ˆ์งˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋ชจ๋“  ๊ฒƒ์„ ๊นจ๋œจ๋ฆฌ๋Š” ๋‚ด๋ถ€ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
2) ๋‹น์‹ ์ด ์ค€ ๋งํฌ์˜ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” ํ›Œ๋ฅญํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ์—ฐ๊ฒฐ์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์œ ์ผํ•œ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋งŽ์€ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž„์„ ์ธ์ •ํ•˜๋”๋ผ๋„ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์†Œ์ผ“์ด ์ข…๋ฃŒ๋˜๊ณ  ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋Š” ๋“ฑ์„ ์–ด๋–ป๊ฒŒ ๊ฐ•์ œํ•ฉ๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ๋งŽ์€ ์—ฐ๊ฒฐ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋Š” ์ž ์žฌ์ ์œผ๋กœ ์ƒ๋‹นํžˆ ๋ˆ„์ถœ๋˜๊ธฐ ์‰ฌ์šด. ์š”์ฒญ์—๋Š” ๋‚ด๊ฐ€ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” '์ค‘๋‹จ' ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค(์ž˜๋ชป๋œ ๊ฒฝ์šฐ ์ˆ˜์ •). ์—ฐ๊ฒฐ ์ข…๋ฃŒ๋Š” ์–ด๋–ป๊ฒŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ?

๋‚ด๊ฐ€ ์ฐพ๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ์ด ๋ฌธ์ œ๋ฅผ ์Šค์Šค๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ '์ถ•๋ณต๋ฐ›์€' ๋ฒ„์ „์ด๊ฑฐ๋‚˜, ์™„๋ฒฝํ•œ ์†”๋ฃจ์…˜์ด ์—†๋Š” ๊ฒฝ์šฐ ๊ฒฝ๊ณ ๊ฐ€ ํฌํ•จ๋œ ๋ช‡ ๊ฐ€์ง€ ์†”๋ฃจ์…˜์ด ๋…ผ์˜๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ง์ด ๋ผ?

@emgerner-msft CPython์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์š”์ฒญ์ด ๋” ์ด์ƒ ๊ณ„์†๋˜์ง€ ์•Š์œผ๋ฉด ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ ๊ธฐ๋ณธ ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ๋ชจ๋“  ์ฐธ์กฐ๊ฐ€ ์†์‹ค๋˜๊ณ  ์†Œ์ผ“์ด ๋‹ซํžˆ๊ณ  ํ๊ธฐ๋ฉ๋‹ˆ๋‹ค.

@๋ฃจ์นด์‚ฌ ๋„ค, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์š”์ฒญ์ด ๋” ์ด์ƒ ๊ณ„์†๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์–ด๋–ป๊ฒŒ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด ํƒ€์ž„์•„์›ƒ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œ ์ค‘๊ฐ„์— ๋Š๊ธด ๊ฒฝ์šฐ ์‹ค์ œ๋กœ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์–ธ์ œ ์ค‘์ง€๋ฉ๋‹ˆ๊นŒ? ์ŠคํŠธ๋ฆฌ๋ฐ ์˜ต์…˜๊ณผ ๊ด€๋ จํ•˜์—ฌ ํŠน๋ณ„ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‹ ํ˜ธ๊ฐ€ syscall์„ ์ธํ„ฐ๋ŸฝํŠธํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์†Œ์ผ“์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ํ˜ธ์ถœ์ด ์—†์Šต๋‹ˆ๋‹ค. ์š”์ฒญ์ด ๋” ์ด์ƒ ๋ฒ”์œ„์— ํฌํ•จ๋˜์ง€ ์•Š์œผ๋ฉด(์˜ˆ: ์Šคํƒ์ด requests.* ํ•จ์ˆ˜ ์™ธ๋ถ€๋กœ ํ’€๋ฆผ) ์ƒํƒœ: CPython์€ ์—ฐ๊ฒฐ ๊ฐœ์ฒด๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ์—ฐ๊ฒฐ์„ ๋Š์Šต๋‹ˆ๋‹ค. ํŠน๋ณ„ํ•œ ์ŠคํŠธ๋ฆฌ๋ฐ ์˜ต์…˜์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์™„๋ฒฝํ•œ. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋” ํ•  ๋ง์ด ์—†์œผ๋ฉด ์Šค๋ ˆ๋“œ๋ฅผ ๋‹ซ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๊ฑฑ์ •๊ฑฐ๋ฆฌ๊ฐ€ ํ•˜๋‚˜ ๋” ์žˆ์Šต๋‹ˆ๋‹ค. Python Timers(์•„๋งˆ๋„)์™€ ๋‹ฌ๋ฆฌ ์‹ ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๋งํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํƒ€์ž„์•„์›ƒ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์ฝ”๋“œ๋ฅผ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. Windows์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋„๋ก Python Signal ์— ๋ฌธ์„œํ™”๋œ SIGALRM์œผ๋กœ ์‹ ํ˜ธ๋ฅผ ํ˜ธ์ถœ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Unix ๋ฐ Windows ํ™˜๊ฒฝ์€ ๋ฌผ๋ก  Python 2.7 ๋ฐ 3.3+(์š”์ฒญ ์ž์ฒด์™€ ๋งค์šฐ ์œ ์‚ฌ)์—์„œ ์ž‘๋™ํ•˜๋ ค๋ฉด ์ด๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์กฐ๊ธˆ ๋” ๋‘˜๋Ÿฌ๋ณด๊ณ  ์ด๊ฒƒ์ด ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@emgerner-msft ๋‹ต๋‹ตํ•˜๋„ค์š”. =(

@Lukasa ์˜ˆ, ๊ธฐ๋ณธ ์‚ฌ์šฉ ์Šค๋‹ˆํŽซ ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ Windows์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ/์˜ˆ์ œ๋ฅผ ์ข€ ๋” ์ฝ๊ณ  ๋งŒ์ง€์ž‘๊ฑฐ๋ฆฌ๋ฉฐ ์‹ ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ํŒจํ‚ค์ง€๊ฐ€ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ชจ๋“  ๊ฒƒ์ด ์„ ํƒ ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ด๋Š” ๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜์žˆ๋Š” ํ•œ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” ๋‚ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@emgerner-msft Windows ์ „์šฉ ์‹ ํ˜ธ๊ฐ€ ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค๊ณ  ํ™•์‹ ํ•˜์‹ญ๋‹ˆ๊นŒ?

@Lukasa ์†”์งํžˆ ๋งํ•ด์„œ, ๋‚˜๋Š” ๋‹จ์ˆœํžˆ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ „์— ์‹ ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ, ๋‹น์‹ ์ด ๊ทธ๋“ค์ด ์š”์ฒญ์„ ๋ฐฉํ•ดํ•  ๊ฒƒ์ด๋ผ๊ณ  ๋งํ•  ๋•Œ๊นŒ์ง€ ๊นจ๋‹ซ์ง€ ๋ชปํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ฌด์—‡์ด ์ ์ ˆํ•œ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ ์ด๊ฒƒ์„ Windows์—์„œ ์ž‘๋™์‹œํ‚ค๋ ค๊ณ  ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์™„์ „ํ•œ ํฌ๋กœ์Šคํ”Œ๋žซํผ ์ง€์›(Windows ๋ฐ Unix)๊ณผ Python 2 ๋ฐ Python 3 ์ง€์›์ด ๋ชจ๋‘ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋งŽ์€ ์‹ ํ˜ธ๊ฐ€ ํ”Œ๋žซํผ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋‚˜ํƒ€๋‚˜์„œ ๋‚˜๋ฅผ ๋˜์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Timer ๋Š” ๋‚ด๊ฐ€ ๋ณด๊ณ  ์žˆ๋˜ ์†”๋ฃจ์…˜ ์ค‘ ํ•˜๋‚˜๋กœ์„œ ๋œ ๋‚ฎ์€ ์ˆ˜์ค€์œผ๋กœ ๋ณด์ด๋ฏ€๋กœ ์ œ์•ฝ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์—ฐ๊ฒฐ์„ ์–ด๋–ป๊ฒŒ ๋‹ซ์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ๊ฒƒ์„ ์ฝ์„ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์ด๊ฒƒ์ด ์—ฌ๋Ÿฌ๋ถ„์œผ๋กœ๋ถ€ํ„ฐ ์ถ”๊ฐ€ ์ง€์นจ์„ ์–ป๊ณ ์ž ํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. :)

๊ทธ๋ž˜์„œ ์ด๊ณณ์€ ์ •๋ง ๊นŒ๋‹ค๋กœ์šด ๊ณณ์ž…๋‹ˆ๋‹ค.

ํ˜„์‹ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ ํ˜ธ์ธ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์Šค๋ ˆ๋“œ๋ฅผ ์ฃฝ์ด๋Š” ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ฐฉ๋ฒ•์ด ๊ฑฐ์˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์‹ ํ˜ธ๊ฐ€ ํ”Œ๋žซํผ ๊ฐ„์— ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์œ ์ผํ•œ ๊ฒฝ๋กœ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” Windowsy Pythony ์ „๋ฌธ๊ฐ€์—๊ฒŒ ping์„ ์‹œ๋„ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค: @brettcannon , ์—ฌ๊ธฐ์— ์ข‹์€ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํฅ๋ฏธ๋กญ๊ฒŒ๋„ ๊ตฌํ˜„ ๋ฐ ํ…Œ์ŠคํŠธ์— ์ž‘์—…์ด ํ•„์š”ํ•œ ๊ฒƒ ์™ธ์— ์š”์ฒญ์— "์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ"๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์„ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด ๋ง์€, ๊ทธ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ํŒจ์น˜๊ฐ€ ์˜ค๋Š˜๋‚  ๋งˆ์ˆ ์ฒ˜๋Ÿผ ๋‚˜ํƒ€๋‚œ๋‹ค๋ฉด ์ด๋ก ์ ์œผ๋กœ ๊ฑฐ๋ถ€๋˜๊ฑฐ๋‚˜ ๋ฐ›์•„๋“ค์—ฌ์งˆ๊นŒ์š”? "๋ถˆํ•„์š”ํ•œ ๋ณต์žก์„ฑ ์ œ๊ฑฐ" ๊ด€์ ์— ๊ฐ์‚ฌํ•˜๊ณ  ๋™์˜ํ•˜์ง€๋งŒ "๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ถ„๊ธฐํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค"๋Š” ๊ฒƒ์ด ์ œ ์ƒ๊ฐ์—๋Š” ์ด ๊ธฐ๋Šฅ์„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

@jribbens ์—ฌ๊ธฐ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒํŠธ 1์€ ๊ทธ๋Ÿฌํ•œ ํŒจ์น˜์˜ ๋ณต์žก์„ฑ์ด ๋งค์šฐ ๋†’๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋ ค๋ฉด ์†Œ์ผ“ ์ˆ˜์ค€์—์„œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ํŒจ์น˜๋ฅผ ์ด๋ฏธ ํŒจ์น˜ํ•œ httplib๋ฅผ ํ†ตํ•ด ํŒจ์น˜๋ฅผ ๋„๋ฆฌ ์ „๋‹ฌํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ๊ธฐ๋Šฅ์  ๋ณ€๊ฒฝ์„ ๋‹ฌ์„ฑํ•˜๋ ค๋ฉด httplib์— ๋„๋‹ฌํ•˜๊ณ  ๋” ๋ณต์žกํ•œ ๋ฉ”์„œ๋“œ์˜ ์•ฝ 50%๋ฅผ ๋‹ค์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒํŠธ 2๋Š” ๊ทธ๋Ÿฌํ•œ ํŒจ์น˜์˜ ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋ถ€๋‹ด๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด httplib์˜ ๋ณ‘๋ ฌ ํฌํฌ(ํ˜„์žฌ๋กœ์„œ๋Š” ๋” ์ ์ ˆํ•˜๊ฒŒ๋Š” http.client)๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ ์‹œ์ž‘ํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜๋Š” ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ๋ณ€๊ฒฝ์— ๋” ์ ํ•ฉํ•œ ๋‹ค๋ฅธ HTTP ์Šคํƒ์˜ ์œ ์ง€ ๊ด€๋ฆฌ ๋ถ€๋‹ด์„ ๋– ๋งก์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ๊ทธ๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ–๊ณ ์ž ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ํ”ํžˆ ๋†“์น˜๋Š” ๋ถ€๋ถ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ตฌํ˜„ ๋น„์šฉ์€ ๋†’์ง€๋งŒ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” ์ง€์†์ ์ธ ์œ ์ง€ ๊ด€๋ฆฌ ๋น„์šฉ์— ๋น„ํ•˜๋ฉด ๊ทธ๊ฒƒ์€ _์•„๋ฌด๊ฒƒ๋„_ ์•„๋‹™๋‹ˆ๋‹ค.

3๋ถ€์—์„œ๋Š” ๊ทธ๋Ÿฐ ํŒจ์น˜์˜ ์žฅ์ ์ด ๋ถˆ๋ถ„๋ช…ํ•˜๋‹ค. ์ „์ฒด ํƒ€์ž„์•„์›ƒ ํŒจ์น˜๋ฅผ ์›ํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ์ž์‹ ์ด ์›ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์™„์ „ํžˆ ๋ช…ํ™•ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด ์ œ ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์•„๋ฌด ์ด์œ  ์—†์ด ์™„๋ฒฝํ•˜๊ฒŒ ์–‘ํ˜ธํ•œ ์š”์ฒญ์„ ์ข…๋ฃŒํ•˜๋Š” ํšจ๊ณผ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ์•ฝ๊ฐ„์˜ ์ฝ”๋“œ๋ฅผ ์„ค๊ณ„ํ–ˆ์œผ๋ฉฐ ์ค‘๋‹จ์„ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๊ท ์ผํ•œ ์ด ์‹œ๊ฐ„ ์ œํ•œ์„ ์„ค์ •ํ•˜๊ณ  ์‹ถ์ง€๋งŒ("์š”์ฒญ์€ 30์ดˆ ์ด์ƒ ๊ฑธ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!") ์ด๋Ÿฌํ•œ ์‹œ๊ฐ„ ์ œํ•œ์€ ์š”์ ์„ ๋†“์นฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ 30MB์—์„œ 30GB๋กœ ๋ณ€๊ฒฝ๋˜๋ฉด ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์™„์ „ํžˆ ์ •์ƒ์ผ์ง€๋ผ๋„ ๊ทธ๋Ÿฌํ•œ ํŒŒ์ผ์€ ๊ทธ๋Ÿฐ ์ข…๋ฅ˜์˜ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ _์ ˆ๋Œ€_ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•ด, ์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ๋Š” ๋งค๋ ฅ์ ์ธ ๊ณจ์นซ๊ฑฐ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ํšจ๊ณผ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜์ง€๋Š” ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์— ๋” ์œ ์šฉํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์€ stream=True ๋ฐ iter_content ์™€ ๊ฒฐํ•ฉ๋œ ์†Œ์ผ“๋ณ„ ์ž‘์—… ์ œํ•œ ์‹œ๊ฐ„์„ ํ™œ์šฉํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์ฒญํฌ์— ๋Œ€ํ•œ ์ œํ•œ ์‹œ๊ฐ„์„ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. iter_content ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ œ์–ด ํ๋ฆ„์€ ๋‹ค์†Œ ๊ทœ์น™์ ์ธ ๊ฐ„๊ฒฉ์œผ๋กœ ์ฝ”๋“œ์— ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์†Œ์ผ“ ์ˆ˜์ค€ ์ œํ•œ ์‹œ๊ฐ„(์˜ˆ: 5์ดˆ)์„ ์„ค์ •ํ•œ ๋‹ค์Œ ์ƒ๋‹นํžˆ ์ž‘์€ ์ฒญํฌ(์˜ˆ: 1KB ๋ฐ์ดํ„ฐ)์— ๋Œ€ํ•ด iter_content ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ ๊ทน์ ์œผ๋กœ ๊ณต๊ฒฉ์„ ๋ฐ›์ง€ ์•Š๋Š” ํ•œ ์„œ๋น„์Šค ๊ฑฐ๋ถ€๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋น„๊ต์  ํ™•์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๊ฑฐ๋ถ€๊ฐ€ ์ •๋ง ๊ฑฑ์ •๋œ๋‹ค๋ฉด ์†Œ์ผ“ ์ˆ˜์ค€ ์ œํ•œ ์‹œ๊ฐ„์„ ํ›จ์”ฌ ๋” ๋‚ฎ๊ฒŒ ์„ค์ •ํ•˜๊ณ  ์ฒญํฌ ํฌ๊ธฐ๋ฅผ ๋” ์ž‘๊ฒŒ(0.5์ดˆ ๋ฐ 512๋ฐ”์ดํŠธ) ์„ค์ •ํ•˜์—ฌ ์ •๊ธฐ์ ์œผ๋กœ ์ œ์–ด ํ๋ฆ„์„ ๋‹ค์‹œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์‹ญ์‹œ์˜ค.

์ด ๋ชจ๋“  ๊ฒƒ์˜ ๊ฒฐ๊ณผ๋Š” ์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ์ด์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์˜ค์ž‘๋™์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ข‹์€ ์ข…๋ฅ˜์˜ ์‹œ๊ฐ„ ์ œํ•œ์€ ํฐ ์‘๋‹ต์„ ํ—ˆ์šฉํ•˜์—ฌ ํ‰ํ™”๋กญ๊ฒŒ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ์กฐ์ •๋œ ๊ฒƒ์ด๋ฉฐ ์ด๋Ÿฌํ•œ ์‹œ๊ฐ„ ์ œํ•œ์€ ์†Œ์ผ“ ์ˆ˜์ค€ ์‹œ๊ฐ„ ์ œํ•œ ๋ฐ iter_content ์— ์˜ํ•ด ๊ฐ€์žฅ ์ž˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์•„๋งˆ๋„ @zooba ๋Š” Windows๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์‹ค์ œ๋กœ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•„์ด๋””์–ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

(๊ด€๋ จ ์—†์ด ๋‚ด๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ์ผ ์ค‘ ํ•˜๋‚˜๋Š” GitHub ๋ฌธ์ œ์—์„œ ์ „๋ฌธ๊ฐ€์˜ ๋ฐ์ด์ง€ ์ฒด์ธ์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

ํ•˜ํ•˜, ์ด๋ฏธ @zooba ์™€ @brettcannon์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์ด ๊ทธ๋“ค์—๊ฒŒ๋„ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ฏ€๋กœ ์—ฌ๊ธฐ ๋˜๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๊ทธ๋“ค๊ณผ ๋…ผ์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@emgerner-msft ๊ทธ๋Ÿด ์ˆ˜๋„ ์žˆ์„ ๊ฑฐ๋ผ ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค. MSFT๋Š” ํฐ ์กฐ์ง์ž…๋‹ˆ๋‹ค!

@Lukasa ๋ฐฉ๊ธˆ ์œ„์— ์“ด ํ…์ŠคํŠธ ๋ฒฝ์„ ์ฝ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„-์žฌ๋ฏธ์žˆ์Šต๋‹ˆ๋‹ค! stream=True ๋ฐ iter_content์—์„œ ๋‹ค์šด๋กœ๋“œ ์‹œ๊ฐ„์— ๋Œ€ํ•œ ๋…ผ์˜์—์„œ ๋Œ€์šฉ๋Ÿ‰ ์—…๋กœ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์ผํ•œ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

_PS_: ์œ„์˜ 'Put another way,..'๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋‹จ๋ฝ์€ ๋‚ด๊ฐ€ ๋ฌธ์„œ์—์„œ ์ฐพ๋˜ ์ผ์ข…์˜ ์ง€์นจ์ž…๋‹ˆ๋‹ค. ์ตœ๋Œ€ ์‹œ๊ฐ„ ์ดˆ๊ณผ์— ๋Œ€ํ•œ ์š”์ฒญ ์ˆ˜(๋ฐ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ์œ ํšจํ•œ ์ด์œ )๋ฅผ ๊ฐ์•ˆํ•  ๋•Œ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฌธ์„œ ์— ํ•ด๋‹น ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

lol @lukasa ์œ ์ง€๋ณด์ˆ˜์— ๋Œ€ํ•œ ๋‹น์‹ ์˜ ์š”์ ์€ ์ด๋ฏธ ๋งˆ์Œ์†์— ํ’ˆ๊ณ  ์žˆ์—ˆ์ง€๋งŒ "ํŠน์ง• ๋Œ€ ์˜ค์ž‘๋™"์— ๋Œ€ํ•ด์„œ๋Š” ๋‹น์‹ ๊ณผ ์™„์ „ํžˆ ๋ฐ˜๋Œ€์ž…๋‹ˆ๋‹ค. ์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š” ์‚ฌ๋žŒ์€ ์›ํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ์žˆ์œผ๋ฉฐ "30MB ๋‹ค์šด๋กœ๋“œ๊ฐ€ 30GB๋กœ ๋ณ€๊ฒฝ๋˜์–ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค"๋ผ๋Š” ๋ฒ„๊ทธ๋กœ ์„ค๋ช…ํ•˜๋Š” ์ƒํ™ฉ์„ ์ƒ์ƒํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์œ ์ตํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค!

stream=True ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฝ๊ฐ„ ๋น„์Šทํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ(์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ์˜ ๋Œ€๋ถ€๋ถ„์˜ ์ด์ ์ด ์—†๋Š” ๊ฒƒ์œผ๋กœ ์˜์‹ฌ๋จ) ์š”์ฒญ์˜ ์š”์ง€๋Š” ๊ทธ๊ฒƒ์ด ๋‹น์‹ ์„ ์œ„ํ•ด ์ฒ˜๋ฆฌํ–ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค...

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋‹น์‹ ์„ ์œ„ํ•ด ์ผ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ์š”์ฒญ์˜ ์š”์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋‹น์‹ ์„ ์œ„ํ•ด HTTP๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฏธ ์—ฐ๊ฒฐ ๋ฐ ์ฝ๊ธฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ช‡ ๋…„ ๋™์•ˆ ๊ธฐ๋Šฅ ์ •์ง€์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋ฉด์ œ๋ฅผ ๋ฐ›์•˜๋‹ค๋Š” ์‚ฌ์‹ค์€ ์œ ์šฉ์„ฑ, ๋ฐ”๋žŒ์งํ•จ, ์ผ๊ด€์„ฑ(์—ฌ๋Ÿฌ ํ”Œ๋žซํผ์—์„œ) ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ์„ฑ์— ๋Œ€ํ•œ ๋…ผ์˜์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ํ”ผ๋“œ๋ฐฑ๊ณผ ์˜๊ฒฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์ •๋ณด๋ฅผ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด ํ”„๋กœ์ ํŠธ์—์„œ ๊ฑฐ๋ถ€๋œ ๊ธฐ๋Šฅ ์š”์ฒญ์˜ ์ˆ˜์™€ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ๊ณตํ†ต ์‚ฌ์šฉ ํŒจํ„ด(์š”์ฒญ ๋„๊ตฌ ๋ฒจํŠธ)์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ณ„๋„์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์— ์˜ํ•ด ์š”์ฒญ์ด ๋ชจ๋“  ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ์–ด๋””์—๋‚˜ ์†ํ•œ๋‹ค๋ฉด ๊ฑฐ๊ธฐ์— ์žˆ์„ ๊ฒƒ์ด์ง€๋งŒ ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ Windows, BSD, Linux ๋ฐ OSX์—์„œ ์šฐ์ˆ˜ํ•œ ํ…Œ์ŠคํŠธ ๋ฒ”์œ„์™€ ์œ ์ง€ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ์•…๋ชฝ ์—†์ด ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

stream=True ๋ฐ iter_content์—์„œ ๋‹ค์šด๋กœ๋“œ ์‹œ๊ฐ„์— ๋Œ€ํ•œ ๋…ผ์˜์—์„œ ๋Œ€์šฉ๋Ÿ‰ ์—…๋กœ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์ผํ•œ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์—…๋กœ๋“œ๋ฅผ ์œ„ํ•œ ์ƒ์„ฑ๊ธฐ๋ฅผ ์ •์˜ํ•˜๊ณ  data ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ์ฒญํฌ ์ธ์ฝ”๋”ฉ์ด ๋‹น์‹ ์—๊ฒŒ ์œ ๋ฆฌํ•˜์ง€ ์•Š๋‹ค๋ฉด ๋งˆ๋ฒ• ๊ฐ™์€ read ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ๋ฅ˜ ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ณ  _that_ ์„ data ์— ์ „๋‹ฌํ•˜์‹ญ์‹œ์˜ค.

์กฐ๊ธˆ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ๊ธฐ๋ฅผ data ์— ์ „๋‹ฌํ•˜๋ฉด ์š”์ฒญ์ด ์ด๋ฅผ ๋ฐ˜๋ณตํ•˜๊ณ  ๊ฐ ์ฒญํฌ๋ฅผ ์ฐจ๋ก€๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ฆ‰, ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋ ค๋ฉด ๊ฐ ์ฒญํฌ์— ๋Œ€ํ•ด ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ œ์–ด ํ๋ฆ„์„ ๋ฐ˜๋“œ์‹œ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์š”์ฒญ์„ ์™„์ „ํžˆ ์ค‘๋‹จํ•˜๊ธฐ ์œ„ํ•œ ์˜ˆ์™ธ throw๋ฅผ ํฌํ•จํ•˜์—ฌ ๊ทธ ์‹œ๊ฐ„์— ์›ํ•˜๋Š” ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์ด์œ ๋กœ ์—…๋กœ๋“œ์— ์ฒญํฌ ์ „์†ก ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ(์•„๋งˆ๋„ ๋ฌธ์ œ์˜ ์„œ๋ฒ„๊ฐ€ ์‹ค์ œ๋กœ ๋‚˜์œ ๊ฒฝ์šฐ ๊ฐ€๋Šฅ), ๊ธธ์ด๊ฐ€ ์žˆ๋Š” ํŒŒ์ผ๊ณผ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“  ๋‹ค์Œ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. read ํ˜ธ์ถœ์—์„œ ๋งˆ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ํ˜ธ์ถœ์€ 8192๋ฐ”์ดํŠธ ์ฒญํฌ์— ๋Œ€ํ•ด ๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ œ์–ด ํ๋ฆ„์ด ๊ฐ„ํ—์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ํ†ต๊ณผํ•˜์—ฌ ๊ณ ์œ ํ•œ ๋…ผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”์‹ : ์œ„์˜ 'Put another way,..'๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋‹จ๋ฝ์€ ๋‚ด๊ฐ€ ๋ฌธ์„œ์—์„œ ์ฐพ๋˜ ์ผ์ข…์˜ ์ง€์นจ์ž…๋‹ˆ๋‹ค. ์ตœ๋Œ€ ์‹œ๊ฐ„ ์ดˆ๊ณผ์— ๋Œ€ํ•œ ์š”์ฒญ ์ˆ˜(๋ฐ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ์œ ํšจํ•œ ์ด์œ )๋ฅผ ๊ฐ์•ˆํ•  ๋•Œ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฌธ์„œ์— ํ•ด๋‹น ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” _์ถ”์ธกํ•œ๋‹ค_. ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ฐ˜์ ์œผ๋กœ ๋งํ•ด์„œ ๋‚˜๋Š” ๋ฌธ์„œ์— ๋‹ค์†Œ ๋ฐฉ์–ด์ ์ธ ํ…์ŠคํŠธ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ํ•ญ์ƒ ๊ธด์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. FAQ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์ง€๋งŒ, ์™œ ์šฐ๋ฆฌ์—๊ฒŒ ๋ฌด์–ธ๊ฐ€๊ฐ€ ์—†๋Š” _์—†๋Š”_ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ํ…์ŠคํŠธ๋Š” ๋ฌธ์„œ์—์„œ ๊ฑฐ์˜ ์œ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ์˜ ๊ณต๊ฐ„์€ ๋ญ”๊ฐ€๋ฅผ ํ•˜๊ธฐ ์œ„ํ•œ ๋ ˆ์‹œํ”ผ์— ์˜ํ•ด ๋” ์ž˜ ์ œ๊ณต๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š” ์‚ฌ๋žŒ์€ ์›ํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  "30MB ๋‹ค์šด๋กœ๋“œ๊ฐ€ 30GB๋กœ ๋ณ€๊ฒฝ๋˜์–ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค"๋ผ๋Š” ๋ฒ„๊ทธ๋กœ ์„ค๋ช…ํ•˜๋Š” ์ƒํ™ฉ์„ ์ƒ์ƒํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์œ ์ตํ•œ ๊ธฐ๋Šฅ!

ํ—ˆ, ๋‚œ ์•„๋‹ˆ์•ผ:

  • ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž(์˜ˆ: ์š”์ฒญ์„ ์‚ฌ์šฉํ•˜๋Š” pip), ์—ฌ๊ธฐ์„œ ํŒจํ‚ค์ง€๋Š” ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๊ฐ€ ํฌ๊ฒŒ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํฌ๊ธฐ๊ฐ€ ๋งค์šฐ ๋‹ค์–‘ํ•œ ์—ฌ๋Ÿฌ ์‚ฌ์ดํŠธ์— ๋Œ€ํ•ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ์›น ์Šคํฌ๋ ˆ์ดํผ
  • ๋งค์šฐ ๋‹ค์–‘ํ•œ ์ˆ˜์ค€์˜ ํ˜ธ์ŠคํŠธ์—์„œ ๋กœ๊ทธ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๋กœ๊ทธ ์ˆ˜์ง‘๊ธฐ(๋”ฐ๋ผ์„œ ๋กœ๊ทธ ํŒŒ์ผ ํฌ๊ธฐ)
  • ๋น„๋””์˜ค ๋‹ค์šด๋กœ๋”(๋น„๋””์˜ค๋Š” ํฌ๊ธฐ๊ฐ€ ํฌ๊ฒŒ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ)

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

ํ•˜์ง€๋งŒ ์š”์ฒญ์˜ ์š”์ง€๋Š” ๊ทธ๊ฒƒ์ด ๋‹น์‹ ์„ ์œ„ํ•ด ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค ...

์š”์ฒญ์€ ๋งค์šฐ ์˜๋„์ ์œผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ๋ชจ๋“  ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์„ ํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ผ์ด๋ฉฐ, ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ์ข‹์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ๋„ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ •๊ธฐ์ ์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด urllib3์œผ๋กœ ๋“œ๋กญ๋‹ค์šดํ•˜๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ์ž˜ํ•˜๊ฑฐ๋‚˜ ๋” ๊น”๋”ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์š”์ฒญ์— ์ฝ”๋“œ๋ฅผ ๋„ฃ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ฐ€์น˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์‚ฌ์šฉ์ž ๊ธฐ๋ฐ˜ ์ „์ฒด์—์„œ ์ง‘๊ณ„๋  ๋•Œ ์ƒ๋Œ€์ ์œผ๋กœ ํ•œ๊ณ„ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋กœ ์ธ์‹๋˜๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๊ทธ๋Ÿฌํ•œ ๊ฒƒ๋“ค ์ค‘ ํ•˜๋‚˜๋ผ๋Š” ์ ์—์„œ ์ €๋Š” ์•„์ง ๋งค๋„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ฆ‰, ๋‚˜๋Š” ๋‚ด๊ฐ€ ํ‹€๋ ธ๋‹ค๊ณ  ํ™•์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์•„์ง ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์„ค๋“๋ ฅ ์žˆ๋Š” ์ฃผ์žฅ์„ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์ด์œ ๋ฅผ ์ œ๊ณตํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค!).

@sigmavirus24

์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ์–ด๋””์—๋‚˜ ์†ํ•œ๋‹ค๋ฉด ๊ฑฐ๊ธฐ์— ์žˆ์„ ๊ฒƒ์ด์ง€๋งŒ ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ Windows, BSD, Linux ๋ฐ OSX์—์„œ ์šฐ์ˆ˜ํ•œ ํ…Œ์ŠคํŠธ ๋ฒ”์œ„์™€ ์œ ์ง€ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ์•…๋ชฝ ์—†์ด ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋™์˜!

@lukasa ๋‚ด ์ƒ๊ฐ์€ ๋‚ด๊ฐ€ ๊ทธ๊ฒƒ์„ ์›ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‹ค์ œ๋กœ ๊ฑฐ์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๋ฉด(๋˜๋Š” ์ด๋ฏธ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ์ง€ ๋ชปํ•œ๋‹ค๋ฉด) ์›ํ•  ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ”ผํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•œ ์œ„์˜ ์‚ฌ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค ์ค‘ ์ ˆ๋ฐ˜์€ ์ค‘์š”ํ•˜๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค(์›น ์Šคํฌ๋ ˆ์ดํผ ๋ฐ ๋กœ๊ทธ ์ˆ˜์ง‘๊ธฐ) - ๋‹ค๋ฅธ ๋‘ ๊ฐ€์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ์ˆ˜๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œ๋ฅผ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ ๋œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์›ํ•œ๋‹ค. UI ์—†์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰๋˜๊ณ  ์ „์ฒด ์‹œ๊ฐ„ ์ œํ•œ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ๊ฒƒ์€ ๋‚ด ๋ณด๊ธฐ์— ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค!

๋‚ด ์ƒ๊ฐ์€ ๋‚ด๊ฐ€ ๊ทธ๊ฒƒ์„ ์›ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‹ค์ œ๋กœ ๊ฑฐ์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๋ฉด(๋˜๋Š” ์ด๋ฏธ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ์ง€ ๋ชปํ•œ๋‹ค๋ฉด) ์›ํ•  ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@jribbens ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ดํ•ดํ•˜๊ณ  ๋Œ€ํ™”ํ•˜๋Š” ๋ฐ ๋ช‡ ๋…„(์šฐ๋ฆฌ ์„ธ ์‚ฌ๋žŒ์˜ ๊ฒฝํ—˜์„ ํ•ฉ์น˜๋ฉด 10๋…„ ์ด์ƒ)์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๋ชจ๋“ (์ตœ์†Œ 98%) ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•„์š”ํ•œ ๊ฒƒ์€ ์—ฐ๊ฒฐ ๋ฐ ์ฝ๊ธฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ์˜€์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž์˜ ๋ชฉ์†Œ๋ฆฌ๊ฐ€ ๋งค์šฐ ์ž‘์€ ์†Œ์ˆ˜๊ฐ€ ์ „์ฒด ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ์›ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ž ์žฌ์  ์‚ฌ์šฉ์ž ๊ทธ๋ฃน์˜ ๊ทœ๋ชจ์™€ ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž์˜ ์ž ์žฌ์  ๊ทœ๋ชจ ๋ฐ ๊ธฐ๋Šฅ์˜ ์œ ์ง€ ๊ด€๋ฆฌ ๋ฐ ๊ฐœ๋ฐœ์˜ ๋ณต์žก์„ฑ์œผ๋กœ ์ถ”์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌํ•ญ์„ ๊ฐ์•ˆํ•  ๋•Œ ์‹ค์ œ๋กœ๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ•˜๋ ค๋Š” ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ํ•  ๊ฒƒ.

๊ณต์œ ํ•  _์ƒˆ๋กœ์šด_ ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ง€๊ธˆ๊นŒ์ง€ ๋ง์”€ํ•˜์‹  ๊ฒƒ์€ ์ „์ฒด ์‹œ๊ฐ„ ์ œํ•œ ์—†์ด ์š”์ฒญ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์ด ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์˜ ๋””์ž์ธ ๊ฒฐ์ •์ด ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋‹ค๋Š” ๋‹น์‹ ์˜ ์ฃผ์žฅ์— ํ™”๋ฅผ ๋‚ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž์˜ ์ง€์„ฑ์„ ๋ชจ์š•ํ•˜๋Š” ๊ฒƒ์€ ์‚ผ๊ฐ€ํ•ด ์ฃผ์‹ญ์‹œ์˜ค.

@sigmavirus24 ์ด ์Šค๋ ˆ๋“œ ์ „์ฒด์—์„œ ๋‹น์‹ ์€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ชจ์š•์ ์ด๊ณ  ์„ ๋™์ ์ด๋ฉฐ ๋ฌด๋ก€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ •์ค‘ํ•˜๊ฒŒ ๋ถ€ํƒํ•˜๋Š” ๋ฐ”์ž…๋‹ˆ๋‹ค. ์ œ๋ฐœ ๊ทธ๋งŒํ•ด ์ฃผ์„ธ์š”.

@Lukasa ์ŠคํŠธ๋ฆฌ๋ฐ ์—…๋กœ๋“œ ๋ฐ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์ด๋Ÿฌํ•œ ์ฃผ์ œ์— ๋Œ€ํ•œ ๋ฌธ์„œ๋ฅผ ์ฝ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์ œ์•ˆ์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋‚ด ๊ฐ€์ •/์งˆ๋ฌธ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. ์ŠคํŠธ๋ฆฌ๋ฐ ๋‹ค์šด๋กœ๋“œ์˜ ๊ฒฝ์šฐ ์ฝ๊ธฐ ์ œํ•œ ์‹œ๊ฐ„ '(์˜ˆ: 5s) ๋ฐ ์ƒ๋‹นํžˆ ์ž‘์€ ์ฒญํฌ(์˜ˆ: 1KB ๋ฐ์ดํ„ฐ)'์— ๋Œ€ํ•œ iter_content'๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์š”์ฒญ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ 1KB์˜ ๊ฐ ์ฝ๊ธฐ์— ๋Œ€ํ•ด 5์ดˆ ์ œํ•œ ์‹œ๊ฐ„์„ ์ ์šฉํ•˜๊ณ  ๋งŒ์•ฝ ๊ทธ๋ ‡๋‹ค๋ฉด ์ œํ•œ ์‹œ๊ฐ„์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. 5์ดˆ ์ด์ƒ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ์˜ณ์€?
  2. ์ŠคํŠธ๋ฆฌ๋ฐ ์—…๋กœ๋“œ์˜ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ์ฒญํฌ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ์ฒด์™€ ๊ฐ™์€ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  ์ฝ๊ธฐ ์ œํ•œ ์‹œ๊ฐ„์„ 5์ดˆ๋กœ ์„ค์ •ํ•˜๋ฉด ์š”์ฒญ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ ์ฒญํฌ์— ๋Œ€ํ•ด 5์ดˆ ์ œํ•œ ์‹œ๊ฐ„์„ ์ ์šฉํ•˜๊ณ  ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ ์ œํ•œ ์‹œ๊ฐ„์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ณ์€?
  3. ์—…๋กœ๋“œ๋ฅผ ์œ„ํ•ด ์ƒ์„ฑ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ˆœํžˆ ๋ฐ”์ดํŠธ๋ฅผ ์ง์ ‘ ์ „๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ ์š”์ฒญ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋‚ด๊ฐ€ ์„ค์ •ํ•œ ์ฝ๊ธฐ ์ œํ•œ ์‹œ๊ฐ„์„ ์ ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด ํฌ๊ธฐ๊ฐ€ 4MB์ธ ์ฒญํฌ์™€ 5์ดˆ์˜ ์ฝ๊ธฐ ์ œํ•œ ์‹œ๊ฐ„์„ ์ „๋‹ฌํ•˜๋ฉด ํ•ด๋‹น ์ฝ๊ธฐ ์ œํ•œ ์‹œ๊ฐ„์ด ์ •ํ™•ํžˆ ์–ธ์ œ ์ ์šฉ๋ฉ๋‹ˆ๊นŒ?
  4. iter_content๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ฝ๊ธฐ ์ œํ•œ ์‹œ๊ฐ„์ด 5์ดˆ์ธ ์š”์ฒญ์œผ๋กœ ๋ชจ๋“  ์ฝ˜ํ…์ธ ๋ฅผ ์ง์ ‘ ๋‹ค์šด๋กœ๋“œํ•˜๋„๋ก ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์ฝ๊ธฐ ์ œํ•œ ์‹œ๊ฐ„์ด ์ •ํ™•ํžˆ ์–ธ์ œ ์ ์šฉ๋ฉ๋‹ˆ๊นŒ?

์†Œ์ผ“/TCP ํ”„๋กœํ† ์ฝœ/๋“ฑ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์ดํ•ด๊ฐ€ ์žˆ์ง€๋งŒ urllib๊ฐ€ ๋‚ฎ์€ ์ˆ˜์ค€์—์„œ ์ด๋Ÿฌํ•œ ๊ฐœ๋…๊ณผ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋˜๋Š” ์š”์ฒญ์ด ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ ์™ธ์— ํŠน๋ณ„ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ์ •ํ™•ํžˆ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ์ œ์–ด ํ๋ฆ„์„ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ค๊ณ  ์Šค๋ ˆ๋“œ ์ข…๋ฃŒ์™€ ๊ด€๋ จ๋œ ํฌ๋กœ์Šคํ”Œ๋žซํผ ๋ฌธ์ œ๋ฅผ ๊ฐ์•ˆํ•  ๋•Œ ์ž์ฒด ์ œํ•œ ์‹œ๊ฐ„ ์ฒด๊ณ„๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ž‘๋™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ œํ•œ ์‹œ๊ฐ„์ด ์–ด๋–ป๊ฒŒ ์ ์šฉ๋˜๋Š”์ง€ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‚ด ์งˆ๋ฌธ์— ๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€ ์ฝ๊ธฐ ์ž๋ฃŒ๊ฐ€ ์žˆ์œผ๋ฉด ์–ธ์ œ๋“ ์ง€ ์ €๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค! ์–ด์จŒ๋“  ์ด๊ฒƒ์ด ๋‚˜์˜ ๋งˆ์ง€๋ง‰ ์งˆ๋ฌธ์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. :)

์ง€๊ธˆ๊นŒ์ง€ ๋„์™€์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@emgerner-msft ํ™•์ธ:

  1. ์•„๋‹ˆ์š”. ์Šฌํ”„๊ฒŒ๋„ ๊ทธ๋ณด๋‹ค ๋” ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ๋…ผ์˜๋œ ๋ฐ”์™€ ๊ฐ™์ด ๊ฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋Š” _์†Œ์ผ“ ํ˜ธ์ถœ๋‹น_ ์ ์šฉ๋˜์ง€๋งŒ ์ฃผ์–ด์ง„ ์ฒญํฌ์— ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์†Œ์ผ“ ํ˜ธ์ถœ์ด ์žˆ๋Š”์ง€ ๋ณด์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋งค์šฐ ๋ณต์žกํ•œ ์ด์œ ๋Š” ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ฐฑ์—… ์†Œ์ผ“์„ ๋ฒ„ํผ ๊ฐ์ฒด(๋ณดํ†ต io.BufferedReader ์™€ ๊ฐ™์€ ๊ฒƒ)์— ๋ž˜ํ•‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ถฉ๋ถ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•  ๋•Œ๊นŒ์ง€ ํ•„์š”ํ•œ ๋งŒํผ์˜ recv_into ํ˜ธ์ถœ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ 0๋งŒํผ ์ ๊ฑฐ๋‚˜(๋ฒ„ํผ์— ์ถฉ๋ถ„ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ) ์›๊ฒฉ ํ”ผ์–ด๊ฐ€ ํ•œ ๋ฒˆ์— ํ•œ ๋ฐ”์ดํŠธ๋ฅผ ๋“œ๋ฆฝ-ํ”ผ๋“œ(drip-feed)ํ•˜๋Š” ๊ฒฝ์šฐ ์ˆ˜์‹ ํ•œ ๋ฐ”์ดํŠธ ์ˆ˜๋งŒํผ ์ •ํ™•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฒ„ํผ๋ง๋œ ๊ฐœ์ฒด์— ๋Œ€ํ•œ read() ํ˜ธ์ถœ์˜ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ๊ฐ recv_into ํ˜ธ์ถœ ๊ฐ„์— ์ œ์–ด ํ๋ฆ„์„ ๋‹ค์‹œ ์–ป์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, n์ดˆ ์ด์ƒ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋„๋ก ํ•˜๋Š” _์œ ์ผํ•œ_ ๋ฐฉ๋ฒ•์€ 1 iter_content ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ํ„ฐ๋ฌด๋‹ˆ์—†์ด ๋น„ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ(Python ์ฝ”๋“œ์—์„œ ๋„ˆ๋ฌด ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•จ) ์›ํ•˜๋Š” ๋ณด์žฅ์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

  1. ๋‚˜๋Š” ๋˜ํ•œ ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ๋Œ€๋‹ต์ด ์•„๋‹ˆ์˜ค๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ _send_ ์‹œ๊ฐ„ ์ดˆ๊ณผ์— ๋Œ€ํ•œ ๊ฐœ๋…์ด ์—†์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•์€ socket.setdefaulttimeout ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  2. ์ฝ๊ธฐ ์ œํ•œ ์‹œ๊ฐ„์€ ์ฝ๊ธฐ์—๋งŒ ์ ์šฉ๋˜๋ฏ€๋กœ ๋ณธ๋ฌธ์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  3. ์ฝ๊ธฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋Š” iter_content ๊ฒฝ์šฐ์™€ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๊ฒช์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋ผ๋Š” ์š”์ฒญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ณธ๋ฌธ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋งŒํผ์˜ recv_into ํ˜ธ์ถœ์„ ๋‚ด๋ณด๋‚ด๊ณ  ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฐจ๋ก€๋Œ€๋กœ ๊ฐ์ž์—๊ฒŒ.

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

@๋ฃจ์นด์‚ฌ

์•„, ์—‰๋ง์ด์•ผ, ํ•˜ํ•˜. ๊ทธ๋Ÿด ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ์‚ฌ์‹ค์€ ๋‚ด๊ฐ€ ํ‹€๋ ธ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ค.

๋จผ์ € send timeout์ด ์ ˆ์‹คํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์—๊ฒŒ ์—…๋กœ๋“œ๊ฐ€ ๋ฌดํ•œ์ • ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๊ณ„ํš์ด ์—†๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. :/

ํ˜„์žฌ๋กœ์„œ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํ™ฉ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ์— ๋Œ€ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง€์›์ด ์—†์Šต๋‹ˆ๋‹ค(์ด๋ฅผ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค). ๊ธฐ์กด ์‹œ๊ฐ„ ์ œํ•œ์ด ๋‹ค์–‘ํ•œ ์ฒญํฌ ํฌ๊ธฐ์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ •ํ™•ํžˆ ๋ณด์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์žˆ๋‹ค๋ฉด ์‹œ๊ฐ„์„ ์š”์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: ์—ฐ๊ฒฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ + ์ฝ๊ธฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ * ์ฒญํฌ ํฌ๊ธฐ. ์ŠคํŠธ๋ฆผ ๋ชจ๋“œ์™€ ์ƒ์„ฑ๊ธฐ๋กœ ํ๋ฆ„์„ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์ข‹์ง€๋งŒ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ฐฉ์‹์œผ๋กœ ์Šค๋ ˆ๋“œ๋ฅผ ์‹ค์ œ๋กœ ์ค‘๋‹จํ•˜๋Š” ์†”๋ฃจ์…˜์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ๋„ ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ๋‚˜์•„๊ฐˆ ๋‹ค๋ฅธ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์€ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด์—‡์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๋จผ์ € send timeout์ด ์ ˆ์‹คํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์—๊ฒŒ ์—…๋กœ๋“œ๊ฐ€ ๋ฌดํ•œ์ • ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๊ณ„ํš์ด ์—†๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. :/

๋”ฐ๋ผ์„œ ์š”์ฒญ์— ์‚ฌ์šฉ๋˜๋Š” ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋…ผ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ urllib3์˜ ๋…ผ๋ฆฌ์ด๋ฏ€๋กœ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์œ ๋กญ๊ฒŒ ๊ธฐ๋Šฅ ์š”์ฒญ์„ ์—ด๋ฉด ๋ณ€๊ฒฝ์„ ํ†ตํ•ด ๋„์›€์„ ๋“œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹จ๊ธฐ์ ์œผ๋กœ๋Š” setdefaulttimeout ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์œ ๋กญ๊ฒŒ ์กฐ์‚ฌํ•˜์‹ญ์‹œ์˜ค.

์•ž์œผ๋กœ ๋‚˜์•„๊ฐˆ ๋‹ค๋ฅธ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์€ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด์—‡์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

์—ฌ๊ธฐ์— ์žˆ๋Š” ์˜ต์…˜์€ ํŠน์ • ์ œ์•ฝ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๊ฒฐ์ •์  ํƒ€์ž„์•„์›ƒ์ด _๋ฐ˜๋“œ์‹œ_ ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ(์ฆ‰, ์š”์ฒญ์ด _n_์ดˆ ์ด์ƒ ๊ฑธ๋ฆฌ์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ) ์˜ค๋Š˜๋‚  ์กด์žฌํ•˜๋Š” Python ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์‰ฝ๊ฒŒ ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Python 2.7์—์„œ๋Š” ๊ฐ recv ํ˜ธ์ถœ์— ๋Œ€ํ•ด ์ˆœ์ฐจ์ ์ธ ์‹œ๊ฐ„ ์ œํ•œ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก socket._fileobject ๋ฅผ ํŒจ์น˜ํ•ด์•ผ ํ•˜์ง€๋งŒ Python 3์—์„œ๋Š” ๊ตฌํ˜„๋œ ํด๋ž˜์Šค์— ํŒจ์น˜ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ›จ์”ฌ ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค. C( io.BufferedReader )์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์•…๋ชฝ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋ฒ„ํผ๋ง์„ _ํ•ด์ œ_ ํ•ด์ œํ•˜๋Š” ๊ฒƒ์ด ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ httplib์™€ ๊ทธ ์œ„์— ์žˆ๋Š” ๋ชจ๋“  ํŒจ์น˜๋ฅผ ๊นจ๋œจ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์†Œ์ผ“์—์„œ read ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜์ง€ ์•Š๊ณ  ๋Œ€์‹  $#์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋Š” read(x) ํ˜ธ์ถœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค read ํŒŒ์ผ์— ๋Œ€ํ•œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ(์ฆ‰, ๊ฒฐ์ •์  ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜).

๋‹ค์‹œ ๋งํ•ด, ๊ฒฐ์ •์  ํƒ€์ž„์•„์›ƒ์ด _ํ•„์š”ํ•˜๋ฉด_ ์—„์ฒญ๋‚œ ์ˆ˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ httplib ๋˜๋Š” socket.makefile ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์šด์ด ๋‚˜์  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ฐœํ–‰ํ•˜๋Š” ๊ธธ์ด๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ •์˜๋œ ์‹œ๊ฐ„์— ์ œ์–ด๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜๋˜๋„๋ก ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค. -1 ์ฝ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ _ํ•  ์ˆ˜_ ์žˆ์ง€๋งŒ, ๋‹น์‹ ์˜ ์„ฑ๊ณผ์— ํ•ด๋ฅผ ๋ผ์น  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์—ฌ๊ธฐ์— ์ ˆ์ถฉ์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ์ •์  ์‹œ๊ฐ„ ์ œํ•œ์„ ์›ํ•  ๊ฒฝ์šฐ Python ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(๋ฐ ์š”์ฒญ์—์„œ)์—์„œ ๋ฒ„ํผ๋ง์ด ๊ตฌํ˜„๋˜๋Š” ๋ฐฉ์‹์€ ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ฒ„ํผ๋ง์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•˜์—ฌ ์ด๋ฅผ ๋‹ค์‹œ ์–ป์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฒ„ํผ๋ง์„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š” ํ•œ ์ž ์žฌ์ ์œผ๋กœ ์„ฑ๋Šฅ์ด ์ƒ๋‹นํžˆ ๋‚˜๋น ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

BufferedReader ํด๋ž˜์Šค์˜ Python ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Python ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ด€์‹ฌ์ด ์žˆ๋Š”์ง€ ํ™•์‹คํžˆ ๋ฌผ์–ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์ˆจ์„ ์ฐธ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์š”์ฒญ์— ์‚ฌ์šฉ๋˜๋Š” ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋…ผ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ urllib3์˜ ๋…ผ๋ฆฌ์ด๋ฏ€๋กœ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์œ ๋กญ๊ฒŒ ๊ธฐ๋Šฅ ์š”์ฒญ์„ ์—ด๋ฉด ๋ณ€๊ฒฝ์„ ํ†ตํ•ด ๋„์›€์„ ๋“œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹จ๊ธฐ์ ์œผ๋กœ๋Š” setdefaulttimeout์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์œ ๋กญ๊ฒŒ ์กฐ์‚ฌํ•˜์‹ญ์‹œ์˜ค.

urllib3 ๋˜๋Š” ์—ฌ๊ธฐ์—์„œ ๊ธฐ๋Šฅ ์š”์ฒญ? ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ํ•˜๋‚˜(๋˜๋Š” ๋‘˜ ๋‹ค)๋ฅผ ์—ด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

urllib3์˜ ๊ธฐ๋Šฅ ์š”์ฒญ: ์š”์ฒญ์—์„œ ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋…ธ์ถœํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

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