Community

๐Ÿค” ํŒŒ์ด์ฌ์€ ๋А๋ฆฌ๋‹ค(Python is Slow)์˜ ๋ฐ˜๋ก 

ํŒŒ์ด์ฌ์€ ๋‹ค๋ฅธ ์–ธ์–ด๋“ค์ด ๋น„ํ•ด ๋А๋ฆฌ๋‹ค๋ผ๊ณ  ๋งŽ์ด ์–˜๊ธฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์œ ๋ช…ํ•œ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์ธ ์˜คํ”ˆ์Šคํƒ(Openstack)์ด๋‚˜ ์Šคํฌํ‹ฐํŒŒ์ด(Spotify), ๋“œ๋กญ๋ฐ•์Šค(Dropbox), ๋ ˆ๋”ง(Reddit)๋„ ํŒŒ์ด์ฌ์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ต๋‹ˆ๋‹ค. ์ •๋ง ํŒŒ์ด์ฌ์ด ๋А๋ฆฐ๊ฑธ๊นŒ์š”? ์ด์— ๋Œ€ํ•œ ๋ฐ˜๋ก ์„ Frank Andrade๋ผ๋Š” ๋ฐ์ดํ„ฐ ๊ณผํ•™, ์›น์Šคํฌ๋žฉํ•‘, ํŒŒ์ด์ฌ ๊ด€๋ จ ๊ธ€์„ ์ฃผ๋กœ ๋ธ”๋กœ๊น…ํ•˜๋Š” ๋ธ”๋กœ๊ฑฐ๊ฐ€ ์—…๋ฐ์ดํŠธํ•œ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์™€๋ดค์Šต๋‹ˆ๋‹ค. ๋ธ”๋กœ๊ทธ ๋‚ด์šฉ์— ์ผ๋ถ€ ๋™์˜ํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์ด ์žˆ์ง€๋งŒ ๋งŽ์€ ๋ถ€๋ถ„ ๋‚ฉ๋“์ด ๊ฐ€๋Š” ๊ธ€์ž…๋‹ˆ๋‹ค. (์˜ˆ๋ฅผ ๋“ค์–ด ๋ธ”๋กœ๊ทธ์—์„œ๋Š” ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค์ง€๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ ๋ถˆํŽธํ•˜๊ธฐ ์—†๋Š” ์ˆ˜์ค€์˜ ์„ฑ๋Šฅ์€ ๋‚˜์™€์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ฝ”๋“œ ๊ด€๋ฆฌ์— ๋Œ€ํ•ด์„œ๋„ ๋…ผ๋ฌธ์ด๋“  ์ƒ์šฉ ํ”„๋กœ๋•ํŠธ๋˜์ง€ ์žฌํ˜„๊ฐ€๋Šฅํ•œ, ์žฌ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋ชจ๋ธ๊ณผ ์—ฐ๊ตฌ, ์„œ๋น„์Šค์—ฌ์•ผ ํ•œ๋‹ค๊ณ  ์ €๋Š” ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค) โœ… "Python is a slow programming language" (ํŒŒ์ด์ฌ์€ ๋А๋ฆฐ ์–ธ์–ด์ž…๋‹ˆ๋‹ค) โ–ถ๏ธ ์‹ค์ œ๋กœ Python์€ C++์ด๋‚˜ Java์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ณด๋‹ค ๋А๋ฆฌ์ง€๋งŒ, ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(์ ์–ด๋„ ๋ชจ๋“  ๋‹จ๊ณ„์—์„œ)์ด๋‚˜ ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ์†๋„๊ฐ€ ํ•ญ์ƒ ์ตœ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. โœ… "In some cases, 0.01, 0.1, or 1 second of execution time doesnโ€™t make any difference" (์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ์‹คํ–‰ ์‹œ๊ฐ„์ด 0.01์ดˆ, 0.1์ดˆ, 1์ดˆ๊ฐ€ ์ฐจ์ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.) โ–ถ๏ธ ์–ด๋–ค ์ƒํ™ฉ์—์„œ๋Š” ์‹คํ–‰ ์†๋„๋ณด๋‹ค ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ๋” ์ค‘์š”ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํฌํ‹ฐํŒŒ์ด(Spotify)๊ฐ€ ํŒŒ์ด์ฌ์„ ์‚ฌ์šฉํ•œ ์ด์œ ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์–ธ์–ด์˜ ์†๋„๋ณด๋‹ค ๊ฐœ๋ฐœ ์†๋„๋ฅผ ์šฐ์„ ์‹œ ํ–ˆ๊ธฐ์— ์ด ์–ธ์–ด๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Python์€ ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜๋Š” ๋ฐ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์ž๋™ํ™”ํ•˜๋ ค๋Š” ์ž‘์—…์ด ์žˆ๋‹ค๋ฉด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ 0.1์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋“  1์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋“  ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ํ•ด๋‹น ์ž๋™ํ™”๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. โœ… ํŒŒ์ด์ฌ์€ ๋น ๋ฅธ ํ™•์žฅ์„ ๋„์™€์ค๋‹ˆ๋‹ค. โ–ถ๏ธ Python์€ ํฌ๋กœ์Šค ํ”Œ๋žซํผ์—์„œ ๋น ๋ฅด๊ฒŒ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ์— ์ข‹์€ ์„ ํƒ์ด ๋ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Dropbox์˜ ํ•œ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ํ”Œ๋žซํผ์—์„œ Python์„ ์„ ํƒํ•œ ์ด์œ ๋Š” ๊ฐ€๋…์„ฑ, ํฌ๋กœ์Šค ํ”Œ๋žซํผ์ง€์›, ํ•™์Šต์˜ ์šฉ์ด์„ฑ๋•Œ๋ฌธ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ , ํ…Œ์ŠคํŠธํ•˜๊ณ , ๋ฐฐํฌํ•˜๋Š” ๋ฐ ์žˆ์–ด Python์˜ ๋น ๋ฅธ ๊ฐœ๋ฐœ ์ฃผ๊ธฐ๋Š” ๋งค์šฐ ์ค‘์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ Dropbox๋Š” Go, Rust๊ฐ™์€ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ์— Python์„ ์‚ฌ์šฉํ•˜๋Š” ์Šคํฌํ‹ฐํŒŒ์ด(Spotify), ๋ ˆ๋”ง(Reddit)์€ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Spotify์˜ ๋ฐฑ์—”๋“œ๋Š” ZeroMQ๋ฅผ ํ†ตํ•ด ์ž์ฒด ๋ฉ”์‹œ์ง• ํ”„๋กœํ† ์ฝœ๋กœ ์—ฐ๊ฒฐ๋œ ์—ฌ๋Ÿฌ ์ƒํ˜ธ ์˜์กด์ ์ธ ์„œ๋น„์Šค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์„œ๋น„์Šค ์ค‘ ์•ฝ 80%๊ฐ€ Python์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์†๋„๊ฐ€ ์ค‘์š”ํ•œ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๋‹ค๋ฅธ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ์ง€๋งŒ, ํŒŒ์ด์ฌ๊ณผ ๊ด€๋ จ์„ฑ์ด ์ค„์–ด๋“ค์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. โœ… "In some fields programming is a means to an end" (์ผ๋ถ€ ๋ถ„์•ผ์—์„œ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋ชฉ์ ์˜ ์ˆ˜๋‹จ์ด ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.) โ–ถ๏ธ ํŒŒ์ด์ฌ์€ ์ปดํ“จํ„ฐ ๊ณตํ•™์„ ์ „๊ณตํ•˜์ง€ ์•Š์€ ํ†ต๊ณ„ํ•™์ž๋‚˜, ๋ฐ์ดํ„ฐ ๋ถ„์„๊ฐ€, ๋ฐ์ดํ„ฐ ๊ณผํ•™์ž, ๊ด€๋ฆฌ์ž ๋ฐ ๊ธฐํƒ€ ๋น„์ „๊ณต ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด๊ฐ€ ํŒŒ์ด์ฌ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” , ํŒŒ์ด์ฌ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•ด๋ณธ ์ ์ด ์—†๋Š” ์‚ฌ๋žŒ๋„ ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ถ„์„๊ฐ€์™€ ๊ณผํ•™์ž๋Š” ์ˆ˜๋ฐฑ์ค„์˜ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†๊ณ , ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ๋ณด๋‹ค ๋ถ„์„๊ณผ ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์ด ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. Python์€ ์ˆ˜๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜๊ณ , ์ด๊ฒƒ์„ ํ†ตํ•ด ๋น ๋ฅด๊ฒŒ ์ž‘์—…์„ ์™„๋ฃŒํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จธ์‹ ๋Ÿฌ๋‹์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์œผ๋ฉด Sklearn, TensorFlow๋ฅผ, ์›น๊ฐœ๋ฐœ์„ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด Flask๋ฅผ, ๋ฐ์ดํ„ฐ๋ถ„์„์„ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด Pandas, Numpy๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ˆซ์ž๋Š” ๊ณ„์† ๋Š˜์–ด๋‚˜๊ณ  ์žˆ๊ณ , ์ด์— ๋”ฐ๋ผ ๊ตณ์ด ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐœ๋ฐœํ•  ํ•„์š”๋„, ๊ทธ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ๋น„์‹ผ ์ „๋ฌธ๊ฐ€๋ฅผ ๊ณ ์šฉํ•  ํ•„์š”๋„ ์—†์Šต๋‹ˆ๋‹ค.

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค