๐ค ํ์ด์ฌ์ ๋๋ฆฌ๋ค(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๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. ์ด๋ฐ ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ซ์๋ ๊ณ์ ๋์ด๋๊ณ ์๊ณ , ์ด์ ๋ฐ๋ผ ๊ตณ์ด ์ํ๋ ๊ธฐ๋ฅ์ ์ฒ์๋ถํฐ ๊ฐ๋ฐํ ํ์๋, ๊ทธ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๊ธฐ ์ํด ๋น์ผ ์ ๋ฌธ๊ฐ๋ฅผ ๊ณ ์ฉํ ํ์๋ ์์ต๋๋ค.