PyPy๋ฅผ ์ฌ์ฉํ Just-in-Time (JIT) ์ปดํ์ผ์ ์ดํด๋ณด๊ณ , Python ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํค๋ ์ค์ฉ์ ์ธ ํตํฉ ์ ๋ต์ ๋ฐฐ์๋ณด์ธ์. ๊ธ๋ก๋ฒ ๊ฐ๋ฐ์์ฉ.
Python ์ฑ๋ฅ ์ ๊ธ ํด์ : PyPy ํตํฉ ์ ๋ต ์ฌ์ธต ๋ถ์
์์ญ ๋ ๋์ ๊ฐ๋ฐ์๋ค์ Python์ ์ฐ์ํ ๊ตฌ๋ฌธ, ๊ด๋ํ ์ํ๊ณ ๋ฐ ๋๋ผ์ด ์์ฐ์ฑ์ ์์คํ ์ฌ๊ฒผ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ง์์ ์ธ ์ด์ผ๊ธฐ๊ฐ ๋ค๋ฐ๋ฆ ๋๋ค. Python์ "๋๋ฆฝ๋๋ค." ์ด๊ฒ์ ๋จ์ํ๋ ๊ฒ์ด์ง๋ง CPU ์ง์ฝ์ ์ธ ์์ ์ ๊ฒฝ์ฐ ํ์ค CPython ์ธํฐํ๋ฆฌํฐ๊ฐ C++ ๋๋ Go์ ๊ฐ์ ์ปดํ์ผ๋ ์ธ์ด๋ณด๋ค ๋ค์ณ์ง ์ ์์ต๋๋ค. ํ์ง๋ง ์ข์ํ๋ Python ์ํ๊ณ๋ฅผ ํฌ๊ธฐํ์ง ์๊ณ ์ด๋ฌํ ์ธ์ด์ ๊ฐ๊น์ด ์ฑ๋ฅ์ ์ป์ ์ ์๋ค๋ฉด ์ด๋จ๊น์? PyPy์ ๊ฐ๋ ฅํ Just-in-Time (JIT) ์ปดํ์ผ๋ฌ๋ฅผ ๋ง๋๋ณด์ธ์.
์ด ๊ธฐ์ฌ๋ ๊ธ๋ก๋ฒ ์ํํธ์จ์ด ์ค๊ณ์, ์์ง๋์ด ๋ฐ ๊ธฐ์ ๋ฆฌ๋๋ฅผ ์ํ ํฌ๊ด์ ์ธ ๊ฐ์ด๋์ ๋๋ค. ์ฐ๋ฆฌ๋ "PyPy๋ ๋น ๋ฅด๋ค"๋ผ๋ ๋จ์ํ ์ฃผ์ฅ์ ๋์ด ์ด๋ป๊ฒ ์๋๋ฅผ ๋ฌ์ฑํ๋์ง์ ๋ํ ์ค์ ๋ฉ์ปค๋์ฆ์ ์์ธํ ์ดํด๋ณผ ๊ฒ์ ๋๋ค. ๋ ์ค์ํ ๊ฒ์ PyPy๋ฅผ ํ๋ก์ ํธ์ ํตํฉํ๊ณ , ์ด์์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์๋ณํ๊ณ , ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ตฌ์ฒด์ ์ด๊ณ ์คํ ๊ฐ๋ฅํ ์ ๋ต์ ์ดํด๋ณผ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ์ ๋ชฉํ๋ PyPy๋ฅผ ํ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐํํ๋ ์๊ธฐ์ ๋ฐฉ๋ฒ์ ๋ํ ์ ๋ณด์ ์ ๊ฐํ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์๋ ์ง์์ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค.
๋ ์ธํฐํ๋ฆฌํฐ ์ด์ผ๊ธฐ: CPython vs. PyPy
PyPy๋ฅผ ํน๋ณํ๊ฒ ๋ง๋๋ ๊ฒ์ ์ดํดํ๋ ค๋ฉด ๋จผ์ ๋๋ถ๋ถ์ Python ๊ฐ๋ฐ์๊ฐ ์์ ํ๋ ๊ธฐ๋ณธ ํ๊ฒฝ์ธ CPython์ ์ดํดํด์ผ ํฉ๋๋ค.
CPython: ์ฐธ์กฐ ๊ตฌํ
python.org์์ Python์ ๋ค์ด๋ก๋ํ๋ฉด CPython์ ์ป๊ฒ ๋ฉ๋๋ค. ์คํ ๋ชจ๋ธ์ ๊ฐ๋จํฉ๋๋ค.
- ๊ตฌ๋ฌธ ๋ถ์ ๋ฐ ์ปดํ์ผ: ์ฌ๋์ด ์ฝ์ ์ ์๋
.pyํ์ผ์ ๊ตฌ๋ฌธ ๋ถ์๋์ด ๋ฐ์ดํธ์ฝ๋๋ผ๋ ํ๋ซํผ ๋ ๋ฆฝ์ ์ธ ์ค๊ฐ ์ธ์ด๋ก ์ปดํ์ผ๋ฉ๋๋ค. ์ด๊ฒ์.pycํ์ผ์ ์ ์ฅ๋๋ ๊ฒ์ ๋๋ค. - ํด์: ๊ทธ๋ฐ ๋ค์ ๊ฐ์ ๋จธ์ (Python ์ธํฐํ๋ฆฌํฐ)์ด ์ด ๋ฐ์ดํธ์ฝ๋๋ฅผ ํ ๋ฒ์ ํ๋์ ๋ช ๋ น์ผ๋ก ์คํํฉ๋๋ค.
์ด ๋ชจ๋ธ์ ๋๋ผ์ด ์ ์ฐ์ฑ๊ณผ ์ด์์ฑ์ ์ ๊ณตํ์ง๋ง ํด์ ๋จ๊ณ๋ ๊ธฐ๋ณธ ๋จธ์ ๋ช ๋ น์ผ๋ก ์ง์ ์ปดํ์ผ๋ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒ๋ณด๋ค ๋ณธ์ง์ ์ผ๋ก ๋๋ฆฝ๋๋ค. CPython์๋ ๋ํ ํ ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง Python ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ ์ ์๋๋ก ํ๋ ๋ฎคํ ์ค์ธ ์ ๋ช ํ Global Interpreter Lock (GIL)์ด ์์ด CPU ๋ฐ์ด๋ ์์ ์ ๋ํ ๋ค์ค ์ค๋ ๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ ํํฉ๋๋ค.
PyPy: JIT ๊ธฐ๋ฐ ๋์
PyPy๋ ๋์์ ์ธ Python ์ธํฐํ๋ฆฌํฐ์ ๋๋ค. ๊ฐ์ฅ ํฅ๋ฏธ๋ก์ด ํน์ง์ RPython (Restricted Python)์ด๋ผ๋ ์ ํ๋ Python ํ์ ์งํฉ์ผ๋ก ๋๋ถ๋ถ ์์ฑ๋์๋ค๋ ๊ฒ์ ๋๋ค. RPython ํด์ฒด์ธ์ ์ด ์ฝ๋๋ฅผ ๋ถ์ํ๊ณ Just-in-Time ์ปดํ์ผ๋ฌ๊ฐ ํฌํจ๋ ์ฌ์ฉ์ ์ ์๋ ๊ณ ๋๋ก ์ต์ ํ๋ ์ธํฐํ๋ฆฌํฐ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๋จ์ํ ๋ฐ์ดํธ์ฝ๋๋ฅผ ํด์ํ๋ ๋์ PyPy๋ ํจ์ฌ ๋ ์ ๊ตํ ์์ ์ ์ํํฉ๋๋ค.
- CPython๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฝ๋๋ฅผ ํด์ํ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
- ๋์์ ์คํ ์ค์ธ ์ฝ๋๋ฅผ ํ๋กํ์ผ๋งํ์ฌ ์์ฃผ ์คํ๋๋ ๋ฃจํ์ ํจ์๋ฅผ ์ฐพ์ต๋๋ค. ์ด๋ฅผ ์ข ์ข "ํซ ์คํ"์ด๋ผ๊ณ ํฉ๋๋ค.
- ํซ ์คํ์ด ์๋ณ๋๋ฉด JIT ์ปดํ์ผ๋ฌ๊ฐ ์์๋ฉ๋๋ค. ํด๋น ํน์ ํซ ๋ฃจํ์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ํด๋น ์๊ฐ์ ์ฌ์ฉ๋๋ ํน์ ๋ฐ์ดํฐ ์ ํ์ ๋ง๊ฒ ์กฐ์ ๋ ๊ณ ๋๋ก ์ต์ ํ๋ ๋จธ์ ์ฝ๋๋ก ๋ณํํฉ๋๋ค.
- ์ด ์ฝ๋์ ๋ํ ํ์ ํธ์ถ์ ์ธํฐํ๋ฆฌํฐ๋ฅผ ์์ ํ ์ฐํํ์ฌ ๋น ๋ฅด๊ณ ์ปดํ์ผ๋ ๋จธ์ ์ฝ๋๋ฅผ ์ง์ ์คํํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์๊ฐํ์ญ์์ค. CPython์ ์ฐ์ค์ ๋งค๋ฒ ํ ์ค์ฉ ๊ผผ๊ผผํ๊ฒ ๋ฒ์ญํ๋ ๋์ ํต์ญ์ฌ์ ๊ฐ์ต๋๋ค. PyPy๋ ํน์ ๋จ๋ฝ์ด ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณต๋๋ ๊ฒ์ ๋ฃ๊ณ ๋์ ์๋ฒฝํ๊ฒ ๋ฏธ๋ฆฌ ๋ฒ์ญ๋ ๋ฒ์ ์ ๊ธฐ๋กํ๋ ๋ฒ์ญ๊ฐ์ ๋๋ค. ๋ค์์ ํ์๊ฐ ํด๋น ๋จ๋ฝ์ ๋งํ๋ฉด PyPy ๋ฒ์ญ๊ธฐ๋ ๋ฏธ๋ฆฌ ์์ฑ๋ ์ ์ฐฝํ ๋ฒ์ญ์ ์ฝ๊ธฐ๋ง ํ๋ฉด ๋๋ฏ๋ก ๋ช ๋ฐฐ ๋ ๋น ๋ฆ ๋๋ค.
Just-in-Time (JIT) ์ปดํ์ผ์ ๋ง๋ฒ
"JIT"๋ผ๋ ์ฉ์ด๋ PyPy์ ๊ฐ์น ์ ์์ ํต์ฌ์ ๋๋ค. ํธ๋ ์ด์ฑ JIT์ ํน์ ๊ตฌํ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์์๋ด ์๋ค.
PyPy์ ํธ๋ ์ด์ฑ JIT ์๋ ๋ฐฉ์
PyPy์ JIT๋ ์ ์ฒด ํจ์๋ฅผ ๋ฏธ๋ฆฌ ์ปดํ์ผํ๋ ค๊ณ ํ์ง ์์ต๋๋ค. ๋์ ๊ฐ์ฅ ๊ฐ์น ์๋ ๋์์ธ ๋ฃจํ์ ์ง์คํฉ๋๋ค.
- ์ค๋น ๋จ๊ณ: ์ฝ๋๋ฅผ ์ฒ์ ์คํํ๋ฉด PyPy๋ ํ์ค ์ธํฐํ๋ฆฌํฐ๋ก ์๋ํฉ๋๋ค. CPython๋ณด๋ค ์ฆ์ ๋น ๋ฅด์ง๋ ์์ต๋๋ค. ์ด ์ด๊ธฐ ๋จ๊ณ์์๋ ๋ฐ์ดํฐ๋ฅผ ์์งํฉ๋๋ค.
- ํซ ๋ฃจํ ์๋ณ: ํ๋กํ์ผ๋ฌ๋ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ๋ฃจํ์์ ์นด์ดํฐ๋ฅผ ์ ์งํฉ๋๋ค. ๋ฃจํ์ ์นด์ดํฐ๊ฐ ํน์ ์๊ณ๊ฐ์ ์ด๊ณผํ๋ฉด "ํซ"์ผ๋ก ํ์๋์ด ์ต์ ํํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
- ์ถ์ : JIT๋ ํซ ๋ฃจํ์ ํ ๋ฒ์ ๋ฐ๋ณต ๋ด์์ ์คํ๋๋ ์์ ์ ์ ํ ์ํ์ค๋ฅผ ๊ธฐ๋กํ๊ธฐ ์์ํฉ๋๋ค. ์ด๊ฒ์ด "์ถ์ "์ ๋๋ค. ์์ ๋ฟ๋ง ์๋๋ผ ๊ด๋ จ๋ ๋ณ์์ ์ ํ๋ ์บก์ฒํฉ๋๋ค. ์๋ฅผ ๋ค์ด "์ด ๋ ๋ณ์๋ฅผ ๋ํ๊ธฐ"๊ฐ ์๋๋ผ "์ด ๋ ์ ์๋ฅผ ๋ํ๊ธฐ"๋ฅผ ๊ธฐ๋กํ ์ ์์ต๋๋ค.
- ์ต์ ํ ๋ฐ ์ปดํ์ผ: ๋จ์ํ ์ ํ ๊ฒฝ๋ก์ธ ์ด ์ถ์ ์ ์ฌ๋ฌ ๋ถ๊ธฐ๊ฐ ์๋ ๋ณต์กํ ํจ์๋ณด๋ค ์ต์ ํํ๊ธฐ๊ฐ ํจ์ฌ ์ฝ์ต๋๋ค. JIT๋ ์๋ง์ ์ต์ ํ (์: ์์ ํด๋ฉ, ๋ฐ๋ ์ฝ๋ ์ ๊ฑฐ ๋ฐ ๋ฃจํ ๋ถ๋ณ ์ฝ๋ ์ด๋)๋ฅผ ์ ์ฉํ ๋ค์ ์ต์ ํ๋ ์ถ์ ์ ๊ธฐ๋ณธ ๋จธ์ ์ฝ๋๋ก ์ปดํ์ผํฉ๋๋ค.
- ๊ฐ๋ ๋ฐ ์คํ: ์ปดํ์ผ๋ ๋จธ์ ์ฝ๋๋ ๋ฌด์กฐ๊ฑด ์คํ๋์ง ์์ต๋๋ค. ์ถ์ ์์ ์ JIT๋ "๊ฐ๋"๋ฅผ ์ฝ์ ํฉ๋๋ค. ์ด๋ ์ถ์ ์ค์ ์ด๋ฃจ์ด์ง ๊ฐ์ ์ด ์ฌ์ ํ ์ ํจํ์ง ํ์ธํ๋ ์๊ณ ๋น ๋ฅธ ๊ฒ์ฌ์ ๋๋ค. ์๋ฅผ ๋ค์ด ๊ฐ๋๋ "๋ณ์ `x`๊ฐ ์ฌ์ ํ ์ ์์ ๋๊น?"๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ๋ชจ๋ ๊ฐ๋๊ฐ ํต๊ณผ๋๋ฉด ์ด๊ณ ์ ๋จธ์ ์ฝ๋๊ฐ ์คํ๋ฉ๋๋ค. ๊ฐ๋๊ฐ ์คํจํ๋ฉด (์: `x`๊ฐ ์ด์ ๋ฌธ์์ด์) ์คํ์ด ํด๋น ํน์ ๊ฒฝ์ฐ์ ๋ํด ์ธํฐํ๋ฆฌํฐ๋ก ์ ์์ ์ผ๋ก ๋์๊ฐ๊ณ ์ด ์๋ก์ด ๊ฒฝ๋ก์ ๋ํด ์ ์ถ์ ์ด ์์ฑ๋ ์ ์์ต๋๋ค.
์ด ๊ฐ๋ ๋ฉ์ปค๋์ฆ์ PyPy์ ๋์ ํน์ฑ์ ํต์ฌ์ ๋๋ค. Python์ ๋ชจ๋ ์ ์ฐ์ฑ์ ์ ์งํ๋ฉด์ ๋๊ท๋ชจ ์ ๋ฌธํ ๋ฐ ์ต์ ํ๋ฅผ ํ์ฉํฉ๋๋ค.
์ค๋น์ ์ค์์ฑ
์ค์ํ ์ ์ PyPy์ ์ฑ๋ฅ ์ด์ ์ด ์ฆ๊ฐ์ ์ด์ง ์๋ค๋ ๊ฒ์ ๋๋ค. JIT๊ฐ ํซ ์คํ์ ์๋ณํ๊ณ ์ปดํ์ผํ๋ ์ค๋น ๋จ๊ณ๋ ์๊ฐ๊ณผ CPU ์ฃผ๊ธฐ๊ฐ ํ์ํฉ๋๋ค. ์ด๋ ๋ฒค์น๋งํน๊ณผ ์ ํ๋ฆฌ์ผ์ด์ ์ค๊ณ ๋ชจ๋์ ์ค์ํ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋งค์ฐ ์งง์ ์คํฌ๋ฆฝํธ์ ๊ฒฝ์ฐ JIT ์ปดํ์ผ ์ค๋ฒํค๋๋ก ์ธํด PyPy๊ฐ CPython๋ณด๋ค ๋๋ ค์ง ์ ์์ต๋๋ค. PyPy๋ ์ด๊ธฐ ์ค๋น ๋น์ฉ์ด ์์ฒ ๋๋ ์๋ฐฑ๋ง ๊ฑด์ ์์ฒญ์ผ๋ก ๋ถ์ฐ๋๋ ์ฅ๊ธฐ ์คํ ์๋ฒ ์ธก ํ๋ก์ธ์ค์์ ์ง์ ์ผ๋ก ๋น์ ๋ฐํฉ๋๋ค.
PyPy๋ฅผ ์ ํํด์ผ ํ๋ ๊ฒฝ์ฐ: ์ ์ ํ ์ฌ์ฉ ์ฌ๋ก ์๋ณ
PyPy๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ด์ง๋ง ๋ณดํธ์ ์ธ ๋ง๋ณ ํต์น์ฝ์ ์๋๋๋ค. ์ฌ๋ฐ๋ฅธ ๋ฌธ์ ์ ์ ์ฉํ๋ ๊ฒ์ด ์ฑ๊ณต์ ์ด์ ์ ๋๋ค. ์ฑ๋ฅ ํฅ์์ ์ํฌ๋ก๋์ ๋ฐ๋ผ ๋ฌด์ํ ์ ๋์์ 100๋ฐฐ ์ด์๊น์ง ๋ค์ํ ์ ์์ต๋๋ค.
๊ฐ์ฅ ์ ํฉํ ๋ถ๋ถ: CPU ๋ฐ์ด๋, ์๊ณ ๋ฆฌ์ฆ, ์์ Python
PyPy๋ ๋ค์ ํ๋กํ์ ๋ง๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํด ๊ฐ์ฅ ๊ทน์ ์ธ ์๋ ํฅ์์ ์ ๊ณตํฉ๋๋ค.
- ์ฅ๊ธฐ ์คํ ํ๋ก์ธ์ค: ๋ช ๋ถ, ๋ช ์๊ฐ ๋๋ ๋ฌด๊ธฐํ์ผ๋ก ์คํ๋๋ ์น ์๋ฒ, ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ํ๋ก์ธ์, ๋ฐ์ดํฐ ๋ถ์ ํ์ดํ๋ผ์ธ ๋ฐ ๊ณผํ ์๋ฎฌ๋ ์ด์ . ์ด๋ ๊ฒ ํ๋ฉด JIT๊ฐ ์ค๋นํ๊ณ ์ต์ ํํ ์ถฉ๋ถํ ์๊ฐ์ ์ ๊ณตํฉ๋๋ค.
- CPU ๋ฐ์ด๋ ์ํฌ๋ก๋: ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณ๋ชฉ ํ์์ ๋คํธ์ํฌ ์์ฒญ์ด๋ ๋์คํฌ I/O๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ ํ๋ก์ธ์์ ๋๋ค. ์ฝ๋๋ ๋ฃจํ์์ ์๊ฐ์ ๋ณด๋ด๊ณ ๊ณ์ฐ์ ์ํํ๊ณ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์กฐ์ํฉ๋๋ค.
- ์๊ณ ๋ฆฌ์ฆ ๋ณต์ก์ฑ: ๋ณต์กํ ๋ ผ๋ฆฌ, ์ฌ๊ท, ๋ฌธ์์ด ๊ตฌ๋ฌธ ๋ถ์, ๊ฐ์ฒด ์์ฑ ๋ฐ ์กฐ์, ์์น ๊ณ์ฐ (์ด๋ฏธ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์คํ๋ก๋๋์ง ์์ ๊ฒฝ์ฐ)์ ํฌํจํ๋ ์ฝ๋์ ๋๋ค.
- ์์ Python ๊ตฌํ: ์ฝ๋์ ์ฑ๋ฅ์ ์ค์ํ ๋ถ๋ถ์ Python ์์ฒด๋ก ์์ฑ๋ฉ๋๋ค. JIT๊ฐ ๋ณผ ์ ์๊ณ ์ถ์ ํ ์ ์๋ Python ์ฝ๋๊ฐ ๋ง์์๋ก ๋ ๋ง์ด ์ต์ ํํ ์ ์์ต๋๋ค.
์ด์์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ก๋ ์ฌ์ฉ์ ์ง์ ๋ฐ์ดํฐ ์ง๋ ฌํ/์ญ์ง๋ ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํ ํ๋ฆฟ ๋ ๋๋ง ์์ง, ๊ฒ์ ์๋ฒ, ๊ธ์ต ๋ชจ๋ธ๋ง ๋๊ตฌ ๋ฐ ํน์ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ ์ ๊ณต ํ๋ ์์ํฌ (๋ ผ๋ฆฌ๊ฐ Python์ ์๋ ๊ฒฝ์ฐ)๊ฐ ์์ต๋๋ค.
์ฃผ์ํด์ผ ํ ์ฌํญ: ์ํฐ ํจํด
์ผ๋ถ ์๋๋ฆฌ์ค์์๋ PyPy๊ฐ ๊ฑฐ์ ๋๋ ์ ํ ์ด์ ์ ์ ๊ณตํ์ง ์์ ์ ์์ผ๋ฉฐ ๋ณต์ก์ฑ์ ์ผ๊ธฐํ ์๋ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ํฉ์ ์ฃผ์ํ์ญ์์ค.
- CPython C ํ์ฅ ํ๋ก๊ทธ๋จ์ ๋ํ ๊ณผ๋ํ ์์กด์ฑ: ์ด๊ฒ์ด ๊ฐ์ฅ ์ค์ํ ๊ณ ๋ ค ์ฌํญ์ ๋๋ค. NumPy, SciPy ๋ฐ Pandas์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Python ๋ฐ์ดํฐ ๊ณผํ ์ํ๊ณ์ ์ด์์ ๋๋ค. ์ด๋ค์ CPython C API๋ฅผ ํตํด ์ก์ธ์ค๋๋ ๊ณ ๋๋ก ์ต์ ํ๋ C ๋๋ Fortran ์ฝ๋๋ก ํต์ฌ ๋ ผ๋ฆฌ๋ฅผ ๊ตฌํํ์ฌ ์๋๋ฅผ ๋ฌ์ฑํฉ๋๋ค. PyPy๋ ์ด ์ธ๋ถ C ์ฝ๋๋ฅผ JIT ์ปดํ์ผํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ํ๊ธฐ ์ํด PyPy์๋ `cpyext`๋ผ๋ ์๋ฎฌ๋ ์ด์ ๊ณ์ธต์ด ์๋๋ฐ, ์ด๋ ๋๋ฆฌ๊ณ ๊นจ์ง๊ธฐ ์ฝ์ต๋๋ค. PyPy์๋ ์์ฒด ๋ฒ์ ์ NumPy ๋ฐ Pandas (`numpypy`)๊ฐ ์์ง๋ง ํธํ์ฑ ๋ฐ ์ฑ๋ฅ์ ์ค์ํ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณ๋ชฉ ํ์์ด ์ด๋ฏธ C ํ์ฅ ํ๋ก๊ทธ๋จ ๋ด๋ถ์ ์๋ ๊ฒฝ์ฐ PyPy๋ ์๋๋ฅผ ๋์ผ ์ ์์ผ๋ฉฐ `cpyext` ์ค๋ฒํค๋๋ก ์ธํด ์๋๊ฐ ๋๋ ค์ง ์๋ ์์ต๋๋ค.
- ๋จ๊ธฐ ์คํฌ๋ฆฝํธ: ๋ช ์ด ์์ ์คํ๋๊ณ ์ข ๋ฃ๋๋ ๊ฐ๋จํ ๋ช ๋ น์ค ๋๊ตฌ๋ ์คํฌ๋ฆฝํธ๋ JIT ์ค๋น ์๊ฐ์ด ์คํ ์๊ฐ์ ์ง๋ฐฐํ๋ฏ๋ก ์ด์ ์ ๋ณผ ์ ์์ต๋๋ค.
- I/O ๋ฐ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ : ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๊ฐ ๋ฐํ๋๊ฑฐ๋ ๋คํธ์ํฌ ๊ณต์ ์์ ํ์ผ์ ์ฝ์ ๋๊น์ง 99%์ ์๊ฐ์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒฝ์ฐ Python ์ธํฐํ๋ฆฌํฐ์ ์๋๋ ์ค์ํ์ง ์์ต๋๋ค. ์ธํฐํ๋ฆฌํฐ๋ฅผ 1๋ฐฐ์์ 10๋ฐฐ๋ก ์ต์ ํํด๋ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ๋ฏธ๋ฏธํ ์ํฅ๋ง ๋ฏธ์นฉ๋๋ค.
์ค์ฉ์ ์ธ ํตํฉ ์ ๋ต
์ ์ฌ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ํ์ธํ์ต๋๋ค. ์ค์ ๋ก PyPy๋ฅผ ์ด๋ป๊ฒ ํตํฉํฉ๋๊น? ๋ค์์ ๊ฐ๋จํ ๊ฒ๋ถํฐ ์ํคํ ์ฒ์ ์ผ๋ก ์ ๊ตํ ๊ฒ๊น์ง ์ธ ๊ฐ์ง ์ฃผ์ ์ ๋ต์ ๋๋ค.
์ ๋ต 1: "๋๋กญ์ธ ๋์ฒด" ์ ๊ทผ ๋ฐฉ์
์ด๊ฒ์ด ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ์ง์ ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ชฉํ๋ ๊ธฐ์กด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด๋ฅผ CPython ์ธํฐํ๋ฆฌํฐ ๋์ PyPy ์ธํฐํ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์คํํ๋ ๊ฒ์ ๋๋ค.
ํ๋ก์ธ์ค:
- ์ค์น: ์ ์ ํ PyPy ๋ฒ์ ์ ์ค์นํฉ๋๋ค. ์ฌ๋ฌ Python ์ธํฐํ๋ฆฌํฐ๋ฅผ ๋๋ํ ๊ด๋ฆฌํ๋ ค๋ฉด `pyenv`์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์๋ฅผ ๋ค์ด: `pyenv install pypy3.9-7.3.9`.
- ๊ฐ์ ํ๊ฒฝ: PyPy๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ์ ๋ํ ์ ์ฉ ๊ฐ์ ํ๊ฒฝ์ ๋ง๋ญ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ข ์์ฑ์ด ๊ฒฉ๋ฆฌ๋ฉ๋๋ค. ์: `pypy3 -m venv pypy_env`.
- ํ์ฑํ ๋ฐ ์ค์น: ํ๊ฒฝ์ ํ์ฑํ (`source pypy_env/bin/activate`)ํ๊ณ `pip`๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ์ ์ข ์์ฑ์ ์ค์นํฉ๋๋ค. `pip install -r requirements.txt`.
- ์คํ ๋ฐ ๋ฒค์น๋งํน: ๊ฐ์ ํ๊ฒฝ์์ PyPy ์ธํฐํ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ ์ ์ ์คํํฉ๋๋ค. ์ค์ํ ๊ฒ์ ์ํฅ์ ์ธก์ ํ๊ธฐ ์ํด ์๊ฒฉํ๊ณ ํ์ค์ ์ธ ๋ฒค์น๋งํน์ ์ํํ๋ ๊ฒ์ ๋๋ค.
๊ณผ์ ๋ฐ ๊ณ ๋ ค ์ฌํญ:
- ์ข ์์ฑ ํธํ์ฑ: ์ด๊ฒ์ด ์ฑ๊ณต ๋๋ ์คํจ ๋จ๊ณ์ ๋๋ค. ์์ Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฑฐ์ ํญ์ ์๋ฒฝํ๊ฒ ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ C ํ์ฅ ๊ตฌ์ฑ ์์๊ฐ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค์น ๋๋ ์คํ์ ์คํจํ ์ ์์ต๋๋ค. ๋ชจ๋ ์ข ์์ฑ์ ํธํ์ฑ์ ์ ์คํ๊ฒ ํ์ธํด์ผ ํฉ๋๋ค. ๋๋ก๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ต์ ๋ฒ์ ์์ PyPy ์ง์์ด ์ถ๊ฐ๋์์ผ๋ฏ๋ก ์ข ์์ฑ์ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ด ์ข์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ์ ๋๋ค.
- C ํ์ฅ ๋ฌธ์ : ์ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํธํ๋์ง ์์ผ๋ฉด ์ด ์ ๋ต์ ์คํจํฉ๋๋ค. ๋์ฒด ์์ Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ๊ฑฐ๋, ์๋ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ์ฌ PyPy ์ง์์ ์ถ๊ฐํ๊ฑฐ๋, ๋ค๋ฅธ ํตํฉ ์ ๋ต์ ์ฑํํด์ผ ํฉ๋๋ค.
์ ๋ต 2: ํ์ด๋ธ๋ฆฌ๋ ๋๋ Polyglot ์์คํ
์ด๊ฒ์ ํฌ๊ณ ๋ณต์กํ ์์คํ ์ ์ํ ๊ฐ๋ ฅํ๊ณ ์ค์ฉ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ PyPy๋ก ์ด๋ํ๋ ๋์ PyPy๊ฐ ๊ฐ์ฅ ํฐ ์ํฅ์ ๋ฏธ์น๋ ํน์ ์ฑ๋ฅ์ ์ค์ํ ๊ตฌ์ฑ ์์์๋ง ์ธ๊ณผ์ ์ผ๋ก ์ ์ฉํฉ๋๋ค.
๊ตฌํ ํจํด:
- ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ: CPU ๋ฐ์ด๋ ๋ ผ๋ฆฌ๋ฅผ ์์ฒด ๋ง์ดํฌ๋ก์๋น์ค๋ก ๋ถ๋ฆฌํฉ๋๋ค. ์ด ์๋น์ค๋ ๋ ๋ฆฝ ์คํํ PyPy ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋น๋ ๋ฐ ๋ฐฐํฌํ ์ ์์ต๋๋ค. CPython์์ ์คํ๋ ์ ์๋ ์์คํ ์ ๋๋จธ์ง ๋ถ๋ถ (์: Django ๋๋ Flask ์น ํ๋ฐํธ์๋)์ ์ ์ ์๋ API (์: REST, gRPC ๋๋ ๋ฉ์์ง ํ)๋ฅผ ํตํด ์ด ๊ณ ์ฑ๋ฅ ์๋น์ค์ ํต์ ํฉ๋๋ค. ์ด ํจํด์ ๋ฐ์ด๋ ๊ฒฉ๋ฆฌ๋ฅผ ์ ๊ณตํ๊ณ ๊ฐ ์์ ์ ๊ฐ์ฅ ์ ํฉํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
- ํ ๊ธฐ๋ฐ ์์ ์: ์ด๊ฒ์ ๊ณ ์ ์ ์ด๊ณ ๋งค์ฐ ํจ๊ณผ์ ์ธ ํจํด์ ๋๋ค. CPython ์ ํ๋ฆฌ์ผ์ด์ ("์์ฐ์")์ ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ ๋ฉ์์ง ํ (์: RabbitMQ, Redis ๋๋ SQS)์ ๋ฐฐ์นํฉ๋๋ค. PyPy ("์๋น์")์์ ์คํ๋๋ ๋ณ๋์ ์์ ์ ํ๋ก์ธ์ค ํ์ ์ด๋ฌํ ์์ ์ ์ ํํ๊ณ ๋น ๋ฅธ ์๋๋ก ๋ง์ ์์ ์ ์คํํ๊ณ ๊ธฐ๋ณธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ก์ธ์คํ ์ ์๋ ์์น์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํฉ๋๋ค. ์ด๊ฒ์ ๋น๋์ค ํธ๋์ค์ฝ๋ฉ, ๋ณด๊ณ ์ ์์ฑ ๋๋ ๋ณต์กํ ๋ฐ์ดํฐ ๋ถ์๊ณผ ๊ฐ์ ์์ ์ ์ ํฉํฉ๋๋ค.
ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ ๋ฐฉ์์ ์ํ์ ์ต์ํํ๊ณ ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค์ ๋ํ ์์ ํ ์ฌ์์ฑ ๋๋ ๊ณ ํต์ค๋ฌ์ด ์ข ์์ฑ ๋ง์ด๊ทธ๋ ์ด์ ์์ด PyPy๋ฅผ ์ ์ง์ ์ผ๋ก ์ฑํํ ์ ์๋๋ก ํ๋ฏ๋ก ๊ธฐ์กด ํ๋ก์ ํธ์ ๊ฐ์ฅ ํ์ค์ ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ ๋ต 3: CFFI ์ฐ์ ๊ฐ๋ฐ ๋ชจ๋ธ
์ด๊ฒ์ ๋์ ์ฑ๋ฅ๊ณผ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ํธ ์์ฉ (์: ๋ ๊ฑฐ์ ์์คํ ๋๋ ๊ณ ์ฑ๋ฅ SDK ๋ํ)์ด ๋ชจ๋ ํ์ํ ํ๋ก์ ํธ๋ฅผ ์ํ ์ฌ์ ์๋ฐฉ์ ์ ๋ต์ ๋๋ค.
๊ธฐ์กด CPython C API๋ฅผ ์ฌ์ฉํ๋ ๋์ C Foreign Function Interface (CFFI) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. CFFI๋ ์ธํฐํ๋ฆฌํฐ์ ๊ตฌ์ ๋ฐ์ง ์๋๋ก ์ฒ์๋ถํฐ ์ค๊ณ๋์์ผ๋ฉฐ CPython๊ณผ PyPy ๋ชจ๋์์ ์ํํ๊ฒ ์๋ํฉ๋๋ค.
PyPy์์ ํจ๊ณผ์ ์ธ ์ด์ :
PyPy์ JIT๋ CFFI์ ๋ํด ๋งค์ฐ ์ง๋ฅ์ ์ ๋๋ค. CFFI๋ฅผ ํตํด C ํจ์๋ฅผ ํธ์ถํ๋ ๋ฃจํ๋ฅผ ์ถ์ ํ ๋ JIT๋ ์ข ์ข CFFI ๊ณ์ธต์ "ํต๊ณผ"ํ ์ ์์ต๋๋ค. ํจ์ ํธ์ถ์ ์ดํดํ๊ณ C ํจ์์ ๋จธ์ ์ฝ๋๋ฅผ ์ปดํ์ผ๋ ์ถ์ ์ ์ง์ ์ธ๋ผ์ธํ ์ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ํซ ๋ฃจํ ๋ด์์ Python์์ C ํจ์๋ฅผ ํธ์ถํ๋ ์ค๋ฒํค๋๊ฐ ๊ฑฐ์ ์ฌ๋ผ์ง๋๋ค. ๋ณต์กํ CPython C API๋ฅผ ์ฌ์ฉํ๋ฉด JIT๊ฐ ํจ์ฌ ๋ ์ด๋ ต์ต๋๋ค.
์คํ ๊ฐ๋ฅํ ์กฐ์ธ: C/C++/Rust/Go ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ธํฐํ์ด์คํด์ผ ํ๊ณ ์ฑ๋ฅ์ด ๋ฌธ์ ๊ฐ ๋ ๊ฒ์ผ๋ก ์์๋๋ ์ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ ๊ฒฝ์ฐ ์ฒ์๋ถํฐ CFFI๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ๋ต์ ์ ํ์ ๋๋ค. ์ต์ ์ ์ด์ด๋๊ณ ์ฑ๋ฅ ํฅ์์ ์ํด PyPy๋ก์ ํฅํ ์ ํ์ ๊ฐ๋จํ ์ฐ์ต์ผ๋ก ๋ง๋ญ๋๋ค.
๋ฒค์น๋งํน ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ: ์ด์ ์ ์ฆ
PyPy๊ฐ ๋ ๋น ๋ฅผ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ์ง ๋ง์ญ์์ค. ํญ์ ์ธก์ ํ์ญ์์ค. PyPy๋ฅผ ํ๊ฐํ ๋ ์ ์ ํ ๋ฒค์น๋งํน์ ํ์์ ์ฌ์ง๊ฐ ์์ต๋๋ค.
์ค๋น ๊ณ ๋ ค
๋จ์ํ ๋ฒค์น๋งํฌ๋ ์คํด์ ์์ง๊ฐ ์์ ์ ์์ต๋๋ค. `time.time()`์ ์ฌ์ฉํ์ฌ ํจ์์ ๋จ์ผ ์คํ ์๊ฐ์ ์ธก์ ํ๋ฉด JIT ์ค๋น๊ฐ ํฌํจ๋๊ณ ์ค์ ์ ์ ์ํ ์ฑ๋ฅ์ด ๋ฐ์๋์ง ์์ต๋๋ค. ์ฌ๋ฐ๋ฅธ ๋ฒค์น๋งํฌ๋ ๋ค์์ ์ํํด์ผ ํฉ๋๋ค.
- ์ธก์ ํ ์ฝ๋๋ฅผ ๋ฃจํ ๋ด์์ ์ฌ๋ฌ ๋ฒ ์คํํฉ๋๋ค.
- ํ์ด๋จธ๋ฅผ ์์ํ๊ธฐ ์ ์ ์ฒ์ ๋ช ๋ฒ์ ๋ฐ๋ณต์ ์ญ์ ํ๊ฑฐ๋ ์ ์ฉ ์ค๋น ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
- JIT๊ฐ ๋ชจ๋ ๊ฒ์ ์ปดํ์ผํ ๊ธฐํ๋ฅผ ๊ฐ์ง ํ ๋ง์ ์คํ ํ์์ ๊ฑธ์ณ ํ๊ท ์คํ ์๊ฐ์ ์ธก์ ํฉ๋๋ค.
๋๊ตฌ ๋ฐ ๊ธฐ์
- ๋ง์ดํฌ๋ก ๋ฒค์น๋งํฌ: ์๊ณ ๊ฒฉ๋ฆฌ๋ ํจ์์ ๊ฒฝ์ฐ Python์ ๋ด์ฅ `timeit` ๋ชจ๋์ ๋ฃจํ๊ณผ ํ์ด๋ฐ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ฏ๋ก ์ข์ ์์์ ์ ๋๋ค.
- ๊ตฌ์กฐํ๋ ๋ฒค์น๋งํน: ํ ์คํธ ์ค์ํธ์ ํตํฉ๋ ๋ณด๋ค ๊ณต์์ ์ธ ํ ์คํธ์ ๊ฒฝ์ฐ `pytest-benchmark`์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์คํ ๊ฐ ๋น๊ต๋ฅผ ํฌํจํ์ฌ ๋ฒค์น๋งํฌ๋ฅผ ์คํํ๊ณ ๋ถ์ํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ํฝ์ค์ฒ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์์ค ๋ฒค์น๋งํน: ์น ์๋น์ค์ ๊ฒฝ์ฐ ๊ฐ์ฅ ์ค์ํ ๋ฒค์น๋งํฌ๋ ํ์ค์ ์ธ ๋ถํ์์์ ์๋ ํฌ ์๋ ์ฑ๋ฅ์ ๋๋ค. `locust`, `k6` ๋๋ `JMeter`์ ๊ฐ์ ๋ถํ ํ ์คํธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ CPython๊ณผ PyPy์์ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ค์ ํธ๋ํฝ์ ์๋ฎฌ๋ ์ด์ ํ๊ณ ์ด๋น ์์ฒญ ์, ๋๊ธฐ ์๊ฐ ๋ฐ ์ค๋ฅ์จ๊ณผ ๊ฐ์ ๋ฉํธ๋ฆญ์ ๋น๊ตํฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ํ๋กํ์ผ๋ง: ์ฑ๋ฅ์ ์๋์ ๊ดํ ๊ฒ๋ง์ด ์๋๋๋ค. ๋ฉ๋ชจ๋ฆฌ ํ๋กํ์ผ๋ง ๋๊ตฌ (`tracemalloc`, `memory-profiler`)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ๋น๊ตํฉ๋๋ค. PyPy๋ ์ข ์ข ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ํ๋กํ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ณด๋ค ๊ณ ๊ธ ๊ฐ๋น์ง ์์ง๊ธฐ๋ ๋ง์ ๊ฐ์ฒด๊ฐ ์๋ ์ฅ๊ธฐ ์คํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ์ต๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ผ ์ ์์ง๋ง ๊ธฐ์ค ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฝ๊ฐ ๋ ๋์ ์ ์์ต๋๋ค.
PyPy ์ํ๊ณ์ ์์ผ๋ก์ ์ฌ์
์งํํ๋ ํธํ์ฑ ์ด์ผ๊ธฐ
PyPy ํ๊ณผ ๋ ๋์ ์ปค๋ฎค๋ํฐ๋ ํธํ์ฑ์์ ์์ฒญ๋ ์ง์ ์ ์ด๋ฃจ์์ต๋๋ค. ํ๋ ๋ฌธ์ ๊ฐ ์์๋ ๋ง์ ์ธ๊ธฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด์ PyPy ์ง์์ด ๋ฐ์ด๋ฉ๋๋ค. ์ต์ ํธํ์ฑ ์ ๋ณด๋ ํญ์ ๊ณต์ PyPy ์น ์ฌ์ดํธ์ ์ฃผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ค๋ช ์๋ฅผ ํ์ธํ์ญ์์ค. ์ํฉ์ ๋์์์ด ๊ฐ์ ๋๊ณ ์์ต๋๋ค.
๋ฏธ๋์ ๋ชจ์ต: HPy
C ํ์ฅ ๋ฌธ์ ๋ ์ฌ์ ํ PyPy์ ๋ณดํธ์ ์ธ ์ฑํ์ ๊ฐ์ฅ ํฐ ์ฅ๋ฒฝ์ ๋๋ค. ์ปค๋ฎค๋ํฐ๋ ์ฅ๊ธฐ์ ์ธ ์๋ฃจ์ ์ธ HPy (HpyProject.org)๋ฅผ ์ ๊ทน์ ์ผ๋ก ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค. HPy๋ Python์ ์ํ ์๋กญ๊ณ ์ฌ์ค๊ณ๋ C API์ ๋๋ค. CPython ์ธํฐํ๋ฆฌํฐ์ ๋ด๋ถ ์ธ๋ถ ์ ๋ณด๋ฅผ ๋ ธ์ถํ๋ CPython C API์ ๋ฌ๋ฆฌ HPy๋ ๋ณด๋ค ์ถ์์ ์ด๊ณ ๋ณดํธ์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
HPy์ ์ฝ์์ ํ์ฅ ๋ชจ๋ ์์ฑ์๊ฐ HPy API์ ๋ํด ํ ๋ฒ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด CPython, PyPy ๋ฐ ๊ธฐํ ์ธํฐํ๋ฆฌํฐ๋ฅผ ํฌํจํ ์ฌ๋ฌ ์ธํฐํ๋ฆฌํฐ์์ ํจ์จ์ ์ผ๋ก ์ปดํ์ผํ๊ณ ์คํ๋๋ค๋ ๊ฒ์ ๋๋ค. HPy๊ฐ ๋๋ฆฌ ์ฑํ๋๋ฉด "์์ Python"๊ณผ "C ํ์ฅ" ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ ๊ตฌ๋ถ์ด ์ฑ๋ฅ ๋ฌธ์ ์ ๋ํ ์ฐ๋ ค๊ฐ ์ค์ด๋ค์ด ์ธํฐํ๋ฆฌํฐ ์ ํ์ ๊ฐ๋จํ ๊ตฌ์ฑ ์ค์์น๋ก ๋ง๋ค ์ ์์ต๋๋ค.
๊ฒฐ๋ก : ํ๋ ๊ฐ๋ฐ์๋ฅผ ์ํ ์ ๋ต์ ๋๊ตฌ
PyPy๋ ๋งน๋ชฉ์ ์ผ๋ก ์ ์ฉํ ์ ์๋ CPython์ ๋์ฒดํ ๋ง๋ฒ์ด ์๋๋๋ค. ์ฌ๋ฐ๋ฅธ ๋ฌธ์ ์ ์ ์ฉํ๋ฉด ๋๋ผ์ด ์ฑ๋ฅ ํฅ์์ ๊ฐ์ ธ์ฌ ์ ์๋ ๊ณ ๋๋ก ์ ๋ฌธํ๋ ๋๋๋๋ก ๊ฐ๋ ฅํ ์์ง๋์ด๋ง์ ๋๋ค. Python์ ๊ด๋ฒ์ํ CPU ๋ฐ์ด๋ ์์ ์ ๋ํด ์ ์ ์ผ๋ก ์ปดํ์ผ๋ ์ธ์ด์ ๊ฒฝ์ํ ์ ์๋ ๊ณ ์ฑ๋ฅ ํ๋ซํผ์ผ๋ก ๋ณํํฉ๋๋ค.
PyPy๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ํ์ฉํ๋ ค๋ฉด ๋ค์ ์ฃผ์ ์์น์ ๊ธฐ์ตํ์ญ์์ค.
- ์์ ๋ถํ ์ดํด: CPU ๋ฐ์ด๋์ ๋๊น, ์๋๋ฉด I/O ๋ฐ์ด๋์ ๋๊น? ์ฅ๊ธฐ ์คํ๋ฉ๋๊น? ๋ณ๋ชฉ ํ์์ ์์ Python ์ฝ๋์ ์์ต๋๊น, ์๋๋ฉด C ํ์ฅ์ ์์ต๋๊น?
- ์ฌ๋ฐ๋ฅธ ์ ๋ต ์ ํ: ์ข ์์ฑ์ด ํ์ฉํ๋ ๊ฒฝ์ฐ ๊ฐ๋จํ ๋๋กญ์ธ ๋์ฒด๋ก ์์ํฉ๋๋ค. ๋ณต์กํ ์์คํ ์ ๊ฒฝ์ฐ ๋ง์ดํฌ๋ก์๋น์ค ๋๋ ์์ ์ ํ๋ฅผ ์ฌ์ฉํ๋ ํ์ด๋ธ๋ฆฌ๋ ์ํคํ ์ฒ๋ฅผ ์์ฉํฉ๋๋ค. ์ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ CFFI ์ฐ์ ์ ๊ทผ ๋ฐฉ์์ ๊ณ ๋ คํ์ญ์์ค.
- ์ข ๊ต์ ์ผ๋ก ๋ฒค์น๋งํน: ์ธก์ ํ๊ณ ์ถ์ธกํ์ง ๋ง์ญ์์ค. ์ค์ ์ ์ ์ํ ์คํ์ ๋ฐ์ํ๋ ์ ํํ ์ฑ๋ฅ ๋ฐ์ดํฐ๋ฅผ ์ป๊ธฐ ์ํด JIT ์ค๋น๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
๋ค์์ Python ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ง๋ฉดํ์ ๋ ๋ค๋ฅธ ์ธ์ด์ ์ฆ์ ์ ๊ทผํ์ง ๋ง์ญ์์ค. PyPy๋ฅผ ์ง์งํ๊ฒ ์ดํด๋ณด์ญ์์ค. ๊ฐ์ ์ ์ดํดํ๊ณ ํตํฉ์ ๋ํ ์ ๋ต์ ์ ๊ทผ ๋ฐฉ์์ ์ฑํํ๋ฉด ์๋ก์ด ์์ค์ ์ฑ๋ฅ์ ์ ๊ธ ํด์ ํ๊ณ ์๊ณ ์ฌ๋ํ๋ ์ธ์ด๋ก ๋๋ผ์ด ๊ฒ์ ๊ณ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.