Python ์ฝ๋ ์ฑ๋ฅ ํ๊ฐ, ๋ฉํธ๋ฆญ ์ค์ , ๊ธ๋ก๋ฒ ๋ถ์ฐ ๊ฐ๋ฐ ํ์ ์ํ ์ต์ ํ ์ ๋ต ๊ตฌํ์ ๋ํ ์์ธ ๊ฐ์ด๋์ ๋๋ค.
Python ์ฑ๋ฅ ๊ฒํ : ๊ธ๋ก๋ฒ ํ์ ์ํ ์ข ํฉ ํ๊ฐ ํ๋ ์์ํฌ
์ค๋๋ ๋น ๋ฅด๊ฒ ๋ณํํ๋ ๊ธ๋ก๋ฒ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๊ฒฝ์์ Python์ ๋ค์ฌ๋ค๋ฅํจ๊ณผ ์ฌ์ฉ ํธ์์ฑ์ ์๋ง์ ํ๋ก์ ํธ์ ์ด์์ด ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์ก์ฑ๊ณผ ๊ท๋ชจ๊ฐ ์ปค์ง์ ๋ฐ๋ผ Python ์ฑ๋ฅ์ด ์ค์ํ ๊ด์ฌ์ฌ๊ฐ ๋ฉ๋๋ค. ์ฑ๋ฅ์ ์ํํ ํ๋ฉด ์๋ต ์๊ฐ์ด ๋๋ ค์ง๊ณ ์ธํ๋ผ ๋น์ฉ์ด ์ฆ๊ฐํ๋ฉฐ ๊ถ๊ทน์ ์ผ๋ก ๋ถ์ ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์ด ๊ธฐ์ฌ์์๋ ์ฝ๋ ํ์ง์ ๋ณด์ฅํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ํจ์จ์ฑ์ ์ต์ ํํ์ฌ ๊ธ๋ก๋ฒ ๋ถ์ฐ ํ์ ๋ง์ถฐ Python ์ฑ๋ฅ ๊ฒํ ๋ฅผ ์ํํ๊ธฐ ์ํ ์ข ํฉ์ ์ธ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
Python ํ๋ก์ ํธ์์ ์ฑ๋ฅ ๊ฒํ ๊ฐ ์ค์ํ ์ด์
์ฑ๋ฅ ๊ฒํ ๋ ๋จ์ํ ๋๋ฆฐ ์ฝ๋๋ฅผ ์๋ณํ๋ ๊ฒ์ด ์๋๋ผ ์ฝ๋ ํ์ง์ ๊ฐ์ ํ๊ณ ์ต์ ํ ๋ฌธํ๋ฅผ ์กฐ์ฑํ๋ฉฐ ์ฅ๊ธฐ์ ์ธ ํ๋ก์ ํธ ์ฑ๊ณต์ ๋ณด์ฅํ๋ ์ ์ฒด์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. ๊ธ๋ก๋ฒ ๋ถ์ฐ ํ์ ๊ฒฝ์ฐ ํ์คํ๋๊ณ ํฌ๋ช ํ ์ฑ๋ฅ ๊ฒํ ํ๋ก์ธ์ค๋ ์๋ก ๋ค๋ฅธ ์๊ฐ๋์ ๊ธฐ์ ์ธํธ ์ ๋ฐ์ ๊ฑธ์ณ ์ผ๊ด์ฑ๊ณผ ํ์ ์ ์ด์งํ๋ฏ๋ก ํจ์ฌ ๋ ์ค์ํฉ๋๋ค. ์ฑ๋ฅ ๊ฒํ ๊ฐ ํ์์ ์ธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ณ๋ชฉ ํ์์ ์กฐ๊ธฐ ๊ฐ์ง: ๊ฐ๋ฐ ์ฃผ๊ธฐ ์ด๊ธฐ์ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์๋ณํ๋ฉด ๋์ค์ ์ฃผ์ ๋ฌธ์ ๋ก ํ๋๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- ๋ฆฌ์์ค ์ต์ ํ: ํจ์จ์ ์ธ ์ฝ๋๋ ๋ฆฌ์์ค๋ฅผ ๋ณด๋ค ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ์ฌ ์ธํ๋ผ ๋น์ฉ์ ์ ๊ฐํ๊ณ ํ์ฅ์ฑ์ ํฅ์์ํต๋๋ค.
- ํฅ์๋ ์ฌ์ฉ์ ๊ฒฝํ: ๋ ๋น ๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ด์ด์ ธ ์ฌ์ฉ์ ๋ง์กฑ๋์ ์ฐธ์ฌ๋๋ฅผ ๋์ ๋๋ค.
- ์ฝ๋ ํ์ง ๊ฐ์ : ์ฑ๋ฅ ๊ฒํ ๋ ๊ฐ๋ฐ์๊ฐ ๋ ๊นจ๋ํ๊ณ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ๋๋ก ์ฅ๋ คํ์ฌ ์ ๋ฐ์ ์ธ ์ฝ๋ ํ์ง๊ณผ ์ ์ง ๊ด๋ฆฌ์ฑ์ ํฅ์์ํต๋๋ค.
- ์ง์ ๊ณต์ : ๊ฒํ ํ๋ก์ธ์ค๋ ํ ๊ตฌ์ฑ์ ๊ฐ์ ์ง์ ๊ณต์ ๋ฅผ ์ด์งํ๊ณ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ ํํ๋ฉฐ ์ง์์ ์ธ ํ์ต์ ์ด์งํฉ๋๋ค.
- ํ์คํ๋ ๊ดํ: ๊ธ๋ก๋ฒ ํ์ ๊ฒฝ์ฐ ์ผ๊ด๋ ๊ฒํ ํ๋ก์ธ์ค๋ฅผ ๊ตฌ์ถํ๋ฉด ์๋ก ๋ค๋ฅธ ์์น์์ ์์ฑ๋ ์ฝ๋๊ฐ ๋์ผํ ์ฑ๋ฅ ํ์ค์ ์ค์ํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
Python ์ฑ๋ฅ ํ๊ฐ ํ๋ ์์ํฌ ๊ตฌ์ถ
๊ฒฌ๊ณ ํ ์ฑ๋ฅ ํ๊ฐ ํ๋ ์์ํฌ๋ ๋ช ๊ฐ์ง ์ฃผ์ ๊ตฌ์ฑ ์์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ฐ ๊ตฌ์ฑ ์์๋ฅผ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.1. ์ฑ๋ฅ ๋ฉํธ๋ฆญ ์ ์
์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ํ๋ก์ ํธ์ ํน์ ์๊ตฌ ์ฌํญ์ ๋ง๋ ๋ช ํํ๊ณ ์ธก์ ๊ฐ๋ฅํ ์ฑ๋ฅ ๋ฉํธ๋ฆญ์ ์ ์ํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ๋ฉํธ๋ฆญ์ ์ฝ๋ ์ฑ๋ฅ์ ํ๊ฐํ๊ณ ๊ฐ์ ์์ญ์ ์๋ณํ๊ธฐ ์ํ ๋ฒค์น๋งํฌ ์ญํ ์ ํฉ๋๋ค. Python ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ๋ฐ์ ์ธ ์ฑ๋ฅ ๋ฉํธ๋ฆญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์คํ ์๊ฐ: ํน์ ํจ์ ๋๋ ์ฝ๋ ๋ธ๋ก์ด ์คํ๋๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋๋ค. ์ด๋ ์ฑ๋ฅ์ด ๋ฎ์ ์ฝ๋๋ฅผ ์๋ณํ๊ธฐ ์ํ ๊ธฐ๋ณธ์ ์ธ ๋ฉํธ๋ฆญ์ ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋: ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ ๋๋ค. ๊ณผ๋ํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ฑ๋ฅ ์ ํ ๋ฐ ์์ ์ฑ ๋ฌธ์ ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. memory_profiler์ ๊ฐ์ ๋๊ตฌ๋ ๋งค์ฐ ์ ์ฉํ ์ ์์ต๋๋ค.
- CPU ์ฌ์ฉ๋ฅ : ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๋ CPU ๋ฆฌ์์ค์ ๋ฐฑ๋ถ์จ์ ๋๋ค. ๋์ CPU ์ฌ์ฉ๋ฅ ์ ๋นํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ ๋๋ ๊ณผ๋ํ ์ฒ๋ฆฌ๋ฅผ ๋ํ๋ผ ์ ์์ต๋๋ค.
- I/O ์์ : ์ ๋ ฅ/์ถ๋ ฅ ์์ ์ ์์ ๊ธฐ๊ฐ(์: ํ์ผ ์ฝ๊ธฐ/์ฐ๊ธฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ). I/O ์์ ์ ๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ค์ํ ๋ณ๋ชฉ ํ์์ด ๋ ์ ์์ต๋๋ค.
- ์ง์ฐ ์๊ฐ: ์์ฒญ์ด ์ฒ๋ฆฌ๋๊ณ ์๋ต์ด ๋ฐํ๋๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋๋ค. ์ด๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ API์ ํนํ ์ค์ํฉ๋๋ค.
- ์ฒ๋ฆฌ๋: ๋จ์ ์๊ฐ๋น ์ฒ๋ฆฌ๋๋ ์์ฒญ ๋๋ ํธ๋์ญ์ ์์ ๋๋ค. ์ด ๋ฉํธ๋ฆญ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ก๋ ์ฒ๋ฆฌ ์ฉ๋์ ์ธก์ ํฉ๋๋ค.
- ์ค๋ฅ์จ: ์คํ ์ค์ ๋ฐ์ํ๋ ์ค๋ฅ ๋๋ ์์ธ์ ๋น๋์ ๋๋ค. ๋์ ์ค๋ฅ์จ์ ๊ทผ๋ณธ์ ์ธ ์ฑ๋ฅ ๋ฌธ์ ๋๋ ๋ถ์์ ์ฑ์ ๋ํ๋ผ ์ ์์ต๋๋ค.
์: ์ ์ ์๊ฑฐ๋ ํ๋ซํผ์ ๊ฒฝ์ฐ ๊ด๋ จ ๋ฉํธ๋ฆญ์๋ ํ๊ท ํ์ด์ง ๋ก๋ ์๊ฐ, ์ฃผ๋ฌธ ์ฒ๋ฆฌ ์๊ฐ, ์ฑ๋ฅ ์ ํ ์์ด ์์คํ ์ด ์ฒ๋ฆฌํ ์ ์๋ ๋์ ์ฌ์ฉ์ ์๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ ๊ฒฝ์ฐ ์ฃผ์ ๋ฉํธ๋ฆญ์๋ ๋ฐ์ดํฐ ๋ฐฐ์น๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ๊ณผ ์ฒ๋ฆฌ ์์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ: ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ์ฑ๋ฅ ๋ฉํธ๋ฆญ์ ์กฐ์ ํ๊ณ ์ธก์ ๋ฐ ์ถ์ ๊ฐ๋ฅํ๋๋ก ํฉ๋๋ค. ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์์งํ๊ณ ์๊ฐํํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
2. ํ๋กํ์ผ๋ง ๋ฐ ๋ฒค์น๋งํน ๋๊ตฌ
์ฑ๋ฅ ๋ฉํธ๋ฆญ์ ์ ์ํ์ผ๋ฉด ์ ํํ๊ฒ ์ธก์ ํ ์ ์๋ ๋๊ตฌ๊ฐ ํ์ํฉ๋๋ค. Python์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ์ต์ ํ์ ์ํฅ์ ํ๊ฐํ๋ ๋ฐ ๋์์ด ๋๋ ๋ค์ํ ํ๋กํ์ผ๋ง ๋ฐ ๋ฒค์น๋งํน ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ช ๊ฐ์ง ์ธ๊ธฐ ์๋ ๋๊ตฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- cProfile: ํจ์ ํธ์ถ ํ์, ์คํ ์๊ฐ ๋ฐ ๊ธฐํ ์ฑ๋ฅ ๋ฉํธ๋ฆญ์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ Python์ ๋ด์ฅ ํ๋กํ์ผ๋ฌ์
๋๋ค.
cProfile์ ๊ฒฐ์ ๋ก ์ ํ๋กํ์ผ๋ฌ์ ๋๋ค. ์ฆ, ์ฝ๊ฐ์ ์ค๋ฒํค๋๋ฅผ ์ถ๊ฐํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์ ํํฉ๋๋ค. - line_profiler: ๊ฐ์ฅ ๋ง์ ์๊ฐ์ ์๋นํ๋ ์ ํํ ์ฝ๋ ์ค์ ์ ํํ ์ฐพ์๋ด๋ ๋ฐ ๋์์ด ๋๋ ์ค ๋จ์ ํ๋กํ์ผ๋ฌ์ ๋๋ค. ์ด๋ ํจ์ ๋ด์์ ๋ณ๋ชฉ ํ์์ ์๋ณํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. `pip install line_profiler`๋ฅผ ์ฌ์ฉํ์ฌ ์ค์นํ ๋ค์ `@profile`๋ก ํจ์๋ฅผ ๋ฐ์ฝ๋ ์ดํธํฉ๋๋ค.
- memory_profiler: ์ค ๋จ์ ์์ค์์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ถ์ ํ๋ ๋๊ตฌ์ ๋๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ต์ ํํ ์ ์๋ ์์ญ์ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. `pip install memory_profiler`๋ก ์ค์นํ๊ณ `@profile` ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- timeit: ์์ ์ฝ๋ ์กฐ๊ฐ์ ๋ฒค์น๋งํนํ์ฌ ๋ค์ํ ๊ตฌํ์ ์ฑ๋ฅ์ ๋น๊ตํ ์ ์๋ ๋ชจ๋์ ๋๋ค. ์ด๋ ๋ง์ดํฌ๋ก ์ต์ ํ์ ์ ์ฉํฉ๋๋ค.
- pytest-benchmark: ํจ์ ๋ฐ ๋ฉ์๋๋ฅผ ๋ฒค์น๋งํนํ๊ณ ์์ธํ ์ฑ๋ฅ ๋ณด๊ณ ์๋ฅผ ์ ๊ณตํ๋ฉฐ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ฑ๋ฅ ์ ํ๋ฅผ ์ถ์ ํ ์ ์๋ pytest ํ๋ฌ๊ทธ์ธ์ ๋๋ค.
- Flame ๊ทธ๋ํ: ํธ์ถ ์คํ๊ณผ ๊ฐ ํจ์์์ ์๋นํ ์๊ฐ์ ๋ณด์ฌ์ฃผ๋ ํ๋กํ์ผ๋ง ๋ฐ์ดํฐ์ ์๊ฐ์ ํํ์ ๋๋ค. Flame ๊ทธ๋ํ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ฒด ์คํ ์๊ฐ์ ๊ฐ์ฅ ๋ง์ด ๊ธฐ์ฌํ๋ ํจ์๋ฅผ ๋ ์ฝ๊ฒ ์๋ณํ ์ ์์ต๋๋ค. `py-spy`์ ๊ฐ์ ๋๊ตฌ๋ Flame ๊ทธ๋ํ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์: cProfile์ ์ฌ์ฉํ๋ฉด ๊ฐ์ฅ ์์ฃผ ํธ์ถ๋๊ณ ์คํํ๋ ๋ฐ ๊ฐ์ฅ ์ค๋ ๊ฑธ๋ฆฌ๋ ํจ์๋ฅผ ์๋ณํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ line_profiler๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ํจ์๋ฅผ ๋๋ฆด๋ค์ดํ๊ณ ๋ณ๋ชฉ ํ์์ ์ผ์ผํค๋ ํน์ ์ฝ๋ ์ค์ ์๋ณํ ์ ์์ต๋๋ค. memory_profiler๋ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ผ ์ ์๋ ์์ญ์ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ: ์๊ตฌ ์ฌํญ์ ๊ฐ์ฅ ์ ํฉํ ํ๋กํ์ผ๋ง ๋ฐ ๋ฒค์น๋งํน ๋๊ตฌ๋ฅผ ์ ํํ๊ณ ๊ฐ๋ฐ ์ํฌํ๋ก์ ํตํฉํฉ๋๋ค. ์ฑ๋ฅ์ด ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋ง๋๋๋ก ํ๋กํ์ผ๋ง ํ๋ก์ธ์ค๋ฅผ ์๋ํํฉ๋๋ค.
3. ์ฑ๋ฅ์ ์ํ ์ฝ๋ ๊ฒํ ๋ชจ๋ฒ ์ฌ๋ก
์ฝ๋ ๊ฒํ ๋ ๋ชจ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ํ์์ ์ธ ๋ถ๋ถ์ด์ง๋ง Python ์ฑ๋ฅ์ ๋ณด์ฅํ๋ ๋ฐ ํนํ ์ค์ํฉ๋๋ค. ์ฝ๋ ๊ฒํ ์ค์ ๊ฐ๋ฐ์๋ ์ ์ฌ์ ์ธ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ์ต์ ํ๋ฅผ ์ ์ํ๋ ๋ฐ ์ง์คํด์ผ ํฉ๋๋ค. ์ฑ๋ฅ ์ค์ฌ ์ฝ๋ ๊ฒํ ๋ฅผ ์ํํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์๊ณ ๋ฆฌ์ฆ ํจ์จ์ฑ์ ์ง์ค: ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ์ด ํจ์จ์ ์ด๊ณ ๋น๋ฉดํ ์์ ์ ์ ํฉํ์ง ํ์ธํฉ๋๋ค. ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ฐ ๊ณต๊ฐ ๋ณต์ก์ฑ์ ๊ณ ๋ คํ์ญ์์ค.
- ์ค๋ณต ์์ ์๋ณ: ์ต์ ํํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์๋ ์ค๋ณต ๊ณ์ฐ ๋๋ ์์ ์ ์ฐพ์ต๋๋ค.
- ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ต์ ํ: ๋น๋ฉดํ ์์ ์ ์ ํฉํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ํํฉ๋๋ค. ์๋ชป๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ด ํฌ๊ฒ ์ ํ๋ ์ ์์ต๋๋ค.
- I/O ์์ ์ต์ํ: I/O ์์ ์ ์์ ๊ธฐ๊ฐ์ ์ค์ ๋๋ค. ์บ์ฑ์ ์ฌ์ฉํ์ฌ ๋์คํฌ ๋๋ ๋คํธ์ํฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ์์ฑ์ ์ค์ ๋๋ค.
- ์์ฑ๊ธฐ ๋ฐ ๋ฐ๋ณต๊ธฐ ์ฌ์ฉ: ์์ฑ๊ธฐ์ ๋ฐ๋ณต๊ธฐ๋ ํนํ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฒ๋ฆฌํ ๋ ๋ชฉ๋ก๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ์ผ ์ ์์ต๋๋ค.
- ์ ์ญ ๋ณ์ ํผํ๊ธฐ: ์ ์ญ ๋ณ์๋ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๊ณ ์ฝ๋๋ฅผ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
- ๋ด์ฅ ํจ์ ์ฌ์ฉ: ๊ฐ๋ฅํ ํ Python์ ๋ด์ฅ ํจ์ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํฉ๋๋ค. ์ด๋ ์ข ์ข ๊ณ ๋๋ก ์ต์ ํ๋์ด ์์ต๋๋ค.
- ๋์์ฑ ๋ฐ ๋ณ๋ ฌ์ฑ ๊ณ ๋ ค: ์ ์ ํ ๊ฒฝ์ฐ ๋์์ฑ ๋๋ ๋ณ๋ ฌ์ฑ์ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค. ๊ทธ๋ฌ๋ ๋์ ํ๋ก๊ทธ๋๋ฐ์ ๋ณต์ก์ฑ๊ณผ ์ ์ฌ์ ์ธ ํจ์ ์ ์ ์ํ์ญ์์ค. `asyncio` ๋ฐ `multiprocessing`๊ณผ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- N+1 ์ฟผ๋ฆฌ ํ์ธ(๋ฐ์ดํฐ๋ฒ ์ด์ค ์ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ): ORM ์ค์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๊ณผ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ(N+1 ๋ฌธ์ )๋ฅผ ์ํํ์ง ์๋๋ก ํฉ๋๋ค. SQL ํ๋กํ์ผ๋ง๊ณผ ๊ฐ์ ๋๊ตฌ๊ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
์: ์ฝ๋ ๊ฒํ ์ค์ ๊ฐ๋ฐ์๋ ํจ์๊ฐ ํฐ ๋ชฉ๋ก์ ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณตํ๊ณ ์์์ ์ ์ ์์ต๋๋ค. ์ฌ์ ๋๋ ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ์กฐํ ์์ ์ ํจ์จ์ฑ์ ๊ฐ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ: ์ฑ๋ฅ ๊ณ ๋ ค ์ฌํญ์ ๊ฐ์กฐํ๋ ๋ช ํํ ์ฝ๋ ๊ฒํ ์ง์นจ์ ์ค์ ํฉ๋๋ค. ๊ฐ๋ฐ์๊ฐ ์๋ก์ ์ฝ๋์ ๋์ ํ๊ณ ์ต์ ํ๋ฅผ ์ ์ํ๋๋ก ์ฅ๋ คํฉ๋๋ค. ์ฝ๋ ๊ฒํ ๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ ๊ฒํ ํ๋ก์ธ์ค๋ฅผ ์๋ํํ๊ณ ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค.
4. ์ฑ๋ฅ ํ ์คํธ ๋ฐ ์ง์์ ์ธ ํตํฉ
์ฑ๋ฅ ํ ์คํธ๋ CI(์ง์์ ์ธ ํตํฉ) ํ์ดํ๋ผ์ธ์ ํ์์ ์ธ ๋ถ๋ถ์ด์ด์ผ ํฉ๋๋ค. ๋ชจ๋ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํด ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์๋์ผ๋ก ์คํํ๋ฉด ์ฑ๋ฅ ์ ํ๋ฅผ ์กฐ๊ธฐ์ ๊ฐ์งํ๊ณ ํ๋ก๋์ ์ ์ ์ฉ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. CI์์ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์ํ ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฑ๋ฅ ํ ์คํธ ์๋ํ: ๋ชจ๋ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํด ์๋์ผ๋ก ์คํ๋๋๋ก ์ฑ๋ฅ ํ ์คํธ๋ฅผ CI ํ์ดํ๋ผ์ธ์ ํตํฉํฉ๋๋ค.
- ํ์ค์ ์ธ ์ํฌ๋ก๋ ์ฌ์ฉ: ํ์ค์ ์ธ ์ํฌ๋ก๋์ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ์ฌ์ฉ ํจํด์ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค.
- ์ฑ๋ฅ ์๊ณ๊ฐ ์ค์ : ๊ฐ ๋ฉํธ๋ฆญ์ ๋ํด ํ์ฉ ๊ฐ๋ฅํ ์ฑ๋ฅ ์๊ณ๊ฐ์ ์ ์ํ๊ณ ์๊ณ๊ฐ์ ์ด๊ณผํ๋ฉด ๋น๋๋ฅผ ์คํจ์ํต๋๋ค.
- ์ฑ๋ฅ ์ถ์ธ ์ถ์ : ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ฑ๋ฅ ์ถ์ธ๋ฅผ ์ถ์ ํ์ฌ ์ ์ฌ์ ์ธ ์ ํ๋ฅผ ์๋ณํ๊ณ ์ต์ ํ์ ์ํฅ์ ๋ชจ๋ํฐ๋งํฉ๋๋ค.
- ์ ์ฉ ํ ์คํธ ํ๊ฒฝ ์ฌ์ฉ: ์ ํํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๊ฒฉ๋ฆฌ๋ ์ ์ฉ ํ ์คํธ ํ๊ฒฝ์์ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์คํํฉ๋๋ค.
- ๋ก๋ ํ ์คํธ ๊ณ ๋ ค: ๋์ ํธ๋ํฝ ์๋๋ฆฌ์ค๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๊ณ ์ ์ฌ์ ์ธ ํ์ฅ์ฑ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ธฐ ์ํด CI ํ๋ก์ธ์ค์ ๋ก๋ ํ ์คํธ๋ฅผ ํตํฉํฉ๋๋ค. Locust ๋๋ JMeter์ ๊ฐ์ ๋๊ตฌ๊ฐ ์ฌ๊ธฐ์ ์ ์ฉํฉ๋๋ค.
์: ์ฑ๋ฅ ํ ์คํธ๋ ๋ฐ์ดํฐ ๋ฐฐ์น๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์ ํ ์ ์์ต๋๋ค. ์ฒ๋ฆฌ ์๊ฐ์ด ๋ฏธ๋ฆฌ ์ ์๋ ์๊ณ๊ฐ์ ์ด๊ณผํ๋ฉด ํ ์คํธ๊ฐ ์คํจํ๊ณ ๋น๋๊ฐ ๊ฑฐ๋ถ๋์ด ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ํ๋ก๋์ ์ ๋ฐฐํฌ๋์ง ์์ต๋๋ค.
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ: ์ฑ๋ฅ ํ ์คํธ๋ฅผ CI ํ์ดํ๋ผ์ธ์ ํตํฉํ๊ณ ํ ์คํธ ํ๋ก์ธ์ค๋ฅผ ์๋ํํฉ๋๋ค. ํ์ค์ ์ธ ์ํฌ๋ก๋๋ฅผ ์ฌ์ฉํ๊ณ ์ฑ๋ฅ ์๊ณ๊ฐ์ ์ค์ ํ์ฌ ์ฑ๋ฅ ์ ํ๊ฐ ์กฐ๊ธฐ์ ๊ฐ์ง๋๋๋ก ํฉ๋๋ค.
5. ๊ธ๋ก๋ฒ ํ ๋ด์์ ์ฑ๋ฅ ๋ฌธํ ๊ตฌ์ถ
์ง์์ ์ธ ์ฑ๋ฅ ํฅ์์ ๋ฌ์ฑํ๋ ค๋ฉด ์ฑ๋ฅ ์ค์ฌ ๋ฌธํ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค. ์ฌ๊ธฐ์๋ ์ธ์ ์ ๊ณ , ๊ต์ก ์ ๊ณต, ๊ฐ๋ฐ์๊ฐ ์ฑ๋ฅ์ ์ฐ์ ์ํ๋๋ก ์ฅ๋ ค๋๋ ํ์ ํ๊ฒฝ ์กฐ์ฑ์ด ํฌํจ๋ฉ๋๋ค. ๊ธ๋ก๋ฒ ๋ถ์ฐ ํ์ ๊ฒฝ์ฐ ์์ฌ ์ํต ๋ฐ ์ง์ ๊ณต์ ์ ๋ ๋ง์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผ ํฉ๋๋ค.
- ๊ต์ก ๋ฐ ๋ฆฌ์์ค ์ ๊ณต: ๊ฐ๋ฐ์์๊ฒ Python ์ฑ๋ฅ ์ต์ ํ ๊ธฐ์ ์ ๋ํ ๊ต์ก ๋ฐ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋ชจ๋ฒ ์ฌ๋ก ๊ณต์ : ์ฑ๋ฅ์ ๊ฐ์กฐํ๋ ๋ชจ๋ฒ ์ฌ๋ก ๋ฐ ์ฝ๋ฉ ํ์ค์ ๊ณต์ ํฉ๋๋ค.
- ํ์ ์ฅ๋ ค: ๊ฐ๋ฐ์๊ฐ ํ์ ํ๊ณ ์ง์๊ณผ ๊ฒฝํ์ ๊ณต์ ํ๋๋ก ์ฅ๋ คํฉ๋๋ค. ์จ๋ผ์ธ ํฌ๋ผ, ์ํค ๋ฐ ๊ธฐํ ํ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฌ ์ํต์ ์ด์งํฉ๋๋ค.
- ์ฑ๋ฅ ํฅ์ ์ธ์ ๋ฐ ๋ณด์: ์ฑ๋ฅ ์ต์ ํ์ ํฌ๊ฒ ๊ธฐ์ฌํ ๊ฐ๋ฐ์๋ฅผ ์ธ์ ํ๊ณ ๋ณด์ํฉ๋๋ค.
- ์ ๊ธฐ์ ์ธ ์ฑ๋ฅ ๊ฒํ ํ์ ๊ฐ์ต: ์ฑ๋ฅ ๋ฌธ์ ์ ๋ํด ๋ ผ์ํ๊ณ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณต์ ํ๋ฉฐ ์งํ ์ํฉ์ ์ถ์ ํ๊ธฐ ์ํด ์ ๊ธฐ์ ์ธ ์ฑ๋ฅ ๊ฒํ ํ์๋ฅผ ๊ฐ์ตํฉ๋๋ค.
- ์ฑ๋ฅ ๋ฌธ์ ๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ ๋ฌธ์ํ: ์ง์ ๊ณต์ ๋ฅผ ์ด์งํ๊ณ ๋ฐ๋ณต์ ์ธ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฑ๋ฅ ๋ฌธ์ ๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ง์ ๊ธฐ๋ฐ์ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค.
- ๋น๋๊ธฐ์ ํต์ ์ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉ: ์๊ฐ๋ ์ฐจ์ด๋ฅผ ์ธ์ํ๊ณ ๋น๋๊ธฐ์ ํต์ ๋๊ตฌ(์: ์ด๋ฉ์ผ, ํ๋ก์ ํธ ๊ด๋ฆฌ ์ํํธ์จ์ด)๋ฅผ ํ์ฉํ์ฌ ํ ๊ตฌ์ฑ์์ด ์์น์ ๊ด๊ณ์์ด ํจ๊ณผ์ ์ผ๋ก ํ์ ํ ์ ์๋๋ก ํฉ๋๋ค.
- ๋ช ํํ ํต์ ์ฑ๋ ์ค์ : ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ํ๊ณ ์ต์ ํ ์ ๋ต์ ๊ณต์ ํ๊ธฐ ์ํ ๋ช ํํ ํต์ ์ฑ๋์ ์ ์ํฉ๋๋ค.
- ํ์ด ํ๋ก๊ทธ๋๋ฐ ๊ณ ๋ ค: ์๊ฒฉ์ผ๋ก ์ด๋ ต์ง๋ง ์๋ก ๋ค๋ฅธ ์์น์ ๊ฐ๋ฐ์๊ฐ ์ฑ๋ฅ์ด ์ค์ํ ์ฝ๋์์ ํ์ ํ ์ ์๋๋ก ํ์ด ํ๋ก๊ทธ๋๋ฐ ์ธ์ ์ ๊ณ ๋ คํฉ๋๋ค.
์: Python ์ฑ๋ฅ ์ต์ ํ ๊ธฐ์ ์ ๋ํ ์ ๊ธฐ์ ์ธ ์ํฌ์ ๋๋ ๊ต์ก ์ธ์ ์ ๊ตฌ์ฑํฉ๋๋ค. ๋ชจ๋ฒ ์ฌ๋ก ๋ฐ ์ฝ๋ฉ ํ์ค์ด ํฌํจ๋ ์ํค ํ์ด์ง๋ฅผ ๋ง๋ญ๋๋ค. ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ์์ ํ๋ ๊ฐ๋ฐ์๋ฅผ ์ธ์ ํ๊ณ ๋ณด์ํฉ๋๋ค.
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ: ๊ต์ก ์ ๊ณต, ๋ชจ๋ฒ ์ฌ๋ก ๊ณต์ , ํ์ ์ฅ๋ ค ๋ฐ ์ฑ๋ฅ ํฅ์ ์ธ์ ์ ํตํด ์ฑ๋ฅ ๋ฌธํ๋ฅผ ์กฐ์ฑํฉ๋๋ค. ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ๋ชจ๋ ์ธก๋ฉด์์ ์ฑ๋ฅ์ ์ฃผ์ ๊ณ ๋ ค ์ฌํญ์ผ๋ก ๋ง๋ญ๋๋ค.
6. ์ง์์ ์ธ ๋ชจ๋ํฐ๋ง ๋ฐ ์ต์ ํ
์ฑ๋ฅ ์ต์ ํ๋ ์ผํ์ฑ ๋ ธ๋ ฅ์ด ์๋๋๋ค. ์ง์์ ์ธ ๋ชจ๋ํฐ๋ง๊ณผ ์ต์ ํ๊ฐ ํ์ํ ์ง์์ ์ธ ํ๋ก์ธ์ค์ ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ๋ก๋์ ์ ์์ผ๋ฉด ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ๊ณ ๊ฐ์ ์์ญ์ ์๋ณํด์ผ ํฉ๋๋ค. ์ง์์ ์ธ ๋ชจ๋ํฐ๋ง ๋ฐ ์ต์ ํ๋ฅผ ์ํ ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ชจ๋ํฐ๋ง ๋๊ตฌ ์ฌ์ฉ: ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ ๋ฉํธ๋ฆญ์ ์ค์๊ฐ์ผ๋ก ์ถ์ ํฉ๋๋ค. ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋๊ตฌ์๋ Prometheus, Grafana, New Relic ๋ฐ Datadog๊ฐ ์์ต๋๋ค.
- ๊ฒฝ๊ณ ์ค์ : ์ฑ๋ฅ ์๊ณ๊ฐ์ ์ด๊ณผํ ๋ ์๋ฆฌ๋๋ก ๊ฒฝ๊ณ ๋ฅผ ์ค์ ํฉ๋๋ค.
- ์ฑ๋ฅ ๋ฐ์ดํฐ ๋ถ์: ์ฑ๋ฅ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ์ถ์ธ์ ํจํด์ ์๋ณํฉ๋๋ค.
- ์ ๊ธฐ์ ์ธ ์ฝ๋ ๊ฒํ : ์ ์ฌ์ ์ธ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ์๋์ง ์ ๊ธฐ์ ์ผ๋ก ์ฝ๋๋ฅผ ๊ฒํ ํฉ๋๋ค.
- ๋ค์ํ ์ต์ ํ ์คํ: ๋ค์ํ ์ต์ ํ ๊ธฐ์ ์ ์คํํ๊ณ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์ธก์ ํฉ๋๋ค.
- ์ต์ ํ ์์ ์๋ํ: ๊ฐ๋ฅํ ํ ์ต์ ํ ์์ ์ ์๋ํํฉ๋๋ค.
- ๊ทผ๋ณธ ์์ธ ๋ถ์ ์ํ: ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๊ทผ๋ณธ์ ์ธ ์์ธ์ ์๋ณํ๊ธฐ ์ํด ์ฒ ์ ํ ๊ทผ๋ณธ ์์ธ ๋ถ์์ ์ํํฉ๋๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํ๋ ์์ํฌ ์ ๋ฐ์ดํธ ์ ์ง: ์ฑ๋ฅ ํฅ์ ๋ฐ ๋ฒ๊ทธ ์์ ์ ์ด์ ์ ๋๋ฆด ์ ์๋๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํ๋ ์์ํฌ๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.
์: ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๊ท ์๋ต ์๊ฐ์ ์ถ์ ํฉ๋๋ค. ์๋ต ์๊ฐ์ด ๋ฏธ๋ฆฌ ์ ์๋ ์๊ณ๊ฐ์ ์ด๊ณผํ๋ฉด ๊ฒฝ๊ณ ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๊ณ ์์ธ์ ์กฐ์ฌํฉ๋๋ค. ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ด ๋ฎ์ ์ฝ๋๋ฅผ ์๋ณํ๊ณ ๋ค์ํ ์ต์ ํ ๊ธฐ์ ์ ์คํํฉ๋๋ค.
์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ: ๊ฐ๋ ฅํ ๋ชจ๋ํฐ๋ง ์์คํ ์ ๊ตฌํํ๊ณ ์ง์์ ์ผ๋ก ์ฑ๋ฅ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ๊ฐ์ ์์ญ์ ์๋ณํฉ๋๋ค. ๋ค์ํ ์ต์ ํ ๊ธฐ์ ์ ์คํํ๊ณ ๊ฐ๋ฅํ ํ ์ต์ ํ ์์ ์ ์๋ํํฉ๋๋ค.
ํน์ Python ์ฑ๋ฅ ๊ณ ๋ ค ์ฌํญ
์ผ๋ฐ์ ์ธ ํ๋ ์์ํฌ ์ธ์๋ ์ฑ๋ฅ ๊ฒํ ์ค์ ๋ฉด๋ฐํ ์กฐ์ฌํ Python ์ฝ๋์ ํน์ ์ธก๋ฉด์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฃจํ ์ต์ ํ: Python ๋ฃจํ, ํนํ ์ค์ฒฉ ๋ฃจํ๋ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ด ๋ ์ ์์ต๋๋ค. ๋ชฉ๋ก ์ดํด, map/filter ํจ์ ๋๋ ๋ฒกํฐํ๋ ์์ (NumPy์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ)์ ์ฌ์ฉํ์ฌ ๋ฃจํ๋ฅผ ์ต์ ํํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
- ๋ฌธ์์ด ์ฐ๊ฒฐ: ๋ฐ๋ณต์ ์ธ ๋ฌธ์์ด ์ฐ๊ฒฐ์ `+` ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ง ๋ง์ญ์์ค. `join()` ๋ฉ์๋๋ฅผ ๋์ ์ฌ์ฉํ์ญ์์ค. ํจ์ฌ ๋ ํจ์จ์ ์ ๋๋ค.
- ๊ฐ๋น์ง ์์ง: Python์ ๊ฐ๋น์ง ์์ง ๋ฉ์ปค๋์ฆ์ ๋๋๋ก ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํฌ ์ ์์ต๋๋ค. ๊ฐ๋น์ง ์์ง์ด ์๋ํ๋ ๋ฐฉ์์ ์ดํดํ๊ณ ๊ฐ์ฒด ํ๋ง๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๊ฐ๋น์ง ์์ง ๋น๋๋ฅผ ์ค์ด๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
- GIL(Global Interpreter Lock): GIL์ ๋ฉํฐ ์ฝ์ด ํ๋ก์ธ์์์ Python ์ค๋ ๋๊ฐ ๋ณ๋ ฌ๋ก ์คํ๋๋ ๊ธฐ๋ฅ์ ์ ํํฉ๋๋ค. CPU ๋ฐ์ด๋ ์์ ์ ๊ฒฝ์ฐ multiprocessing์ ์ฌ์ฉํ์ฌ GIL์ ์ฐํํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํธ ์์ฉ: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํํ๊ณ ์บ์ฑ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฒญ ์๋ฅผ ์ค์ ๋๋ค. ์ฐ๊ฒฐ ํ๋ง์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ์ฌ์ฌ์ฉํ๊ณ ์ฐ๊ฒฐ ์ค๋ฒํค๋๋ฅผ ์ค์ ๋๋ค.
- ์ง๋ ฌํ/์ญ์ง๋ ฌํ: ๋ฐ์ดํฐ์ ์ ํฉํ ์ง๋ ฌํ ํ์์ ์ ํํฉ๋๋ค. Protocol Buffers ๋๋ MessagePack๊ณผ ๊ฐ์ ํ์์ JSON ๋๋ Pickle๋ณด๋ค ํจ์จ์ ์ผ ์ ์์ต๋๋ค.
- ์ ๊ท์: ์ ๊ท์์ ๊ฐ๋ ฅํ ์ ์์ง๋ง ์ฑ๋ฅ ์ง์ฝ์ ์ผ ์๋ ์์ต๋๋ค. ์ ์คํ๊ฒ ์ฌ์ฉํ๊ณ ์ ์คํ๊ฒ ์ต์ ํํ์ญ์์ค. ๋ฐ๋ณต์ ์ธ ์ฌ์ฉ์ ์ํด ์ ๊ท์์ ์ปดํ์ผํฉ๋๋ค.
๊ธ๋ก๋ฒ ํ์ ์ํ ์์ ์ฑ๋ฅ ๊ฒํ ์ํฌํ๋ก
์ง๋ฆฌ์ ์ผ๋ก ๋ถ์ฐ๋ ํ์ ๋ง๊ฒ ์กฐ์ ํ ์ ์๋ ์ํ ์ํฌํ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฝ๋ ์ ์ถ: ๊ฐ๋ฐ์๊ฐ ๋ฒ์ ์ ์ด ์์คํ (์: Git)์ ํตํด ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ถํฉ๋๋ค.
- ์๋ํ๋ ํ ์คํธ: CI ์์คํ ์ ๋จ์ ํ ์คํธ, ํตํฉ ํ ์คํธ ๋ฐ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์๋์ผ๋ก ์คํํฉ๋๋ค.
- ์ฝ๋ ๊ฒํ ์์ฒญ: ๊ฐ๋ฐ์๋ ์ง์ ๋ ๊ฒํ ์(๋ค์ํ ๊ด์ ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ด์์ ์ผ๋ก๋ ๋ค๋ฅธ ์์น์ ์๋ ์ฌ๋)์๊ฒ ์ฝ๋ ๊ฒํ ๋ฅผ ์์ฒญํฉ๋๋ค.
- ๋น๋๊ธฐ์ ๊ฒํ : ๊ฒํ ์๋ ์ฝ๋, ์ฑ๋ฅ ์ธก๋ฉด์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ ์ฝ๋๋ฅผ ๊ฒ์ฌํฉ๋๋ค. ๊ทธ๋ค์ ๋น๋๊ธฐ์ ํต์ ๋๊ตฌ(์: ํ ์์ฒญ์ ๋ํ ๋๊ธ, ์ด๋ฉ์ผ)๋ฅผ ์ฌ์ฉํ์ฌ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค.
- ํผ๋๋ฐฑ ๊ตฌํ: ๊ฐ๋ฐ์๋ ๊ฒํ ์์ ํผ๋๋ฐฑ์ ์ฒ๋ฆฌํ๊ณ ํ์ํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ง๋ญ๋๋ค.
- ์ฑ๋ฅ ํ๋กํ์ผ๋ง(ํ์ํ ๊ฒฝ์ฐ): ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ์ ๊ธฐ๋๋ฉด ๊ฐ๋ฐ์๋
cProfile๋๋line_profiler์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ํ๋กํ์ผ๋งํฉ๋๋ค. ๊ทธ๋ค์ ํ๋กํ์ผ๋ง ๊ฒฐ๊ณผ๋ฅผ ๊ฒํ ์์ ๊ณต์ ํฉ๋๋ค. - ์์ ๋ ์ฝ๋ ์ ์ถ: ๊ฐ๋ฐ์๋ ์์ ๋ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ถํฉ๋๋ค.
- ์ต์ข ๊ฒํ ๋ฐ ์น์ธ: ๊ฒํ ์๋ ์ต์ข ๊ฒํ ๋ฅผ ์ํํ๊ณ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์น์ธํฉ๋๋ค.
- ๋ฐฐํฌ: CI ์์คํ ์ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ํ๋ก๋์ ํ๊ฒฝ์ ์๋์ผ๋ก ๋ฐฐํฌํฉ๋๋ค.
- ์ง์์ ์ธ ๋ชจ๋ํฐ๋ง: ํ๋ก๋์ ํ๊ฒฝ์ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ์๋์ง ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋ง๋ฉ๋๋ค.
๊ฒฐ๋ก
Python ์ฑ๋ฅ ๊ฒํ ๋ ์ฝ๋ ํ์ง์ ๋ณด์ฅํ๊ณ ๋ฆฌ์์ค ํ์ฉ๋๋ฅผ ์ต์ ํํ๋ฉฐ ๊ธ์ ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ํฌ๊ด์ ์ธ ํ๊ฐ ํ๋ ์์ํฌ๋ฅผ ๊ตฌํํ๊ณ , ๋ช ํํ ๋ฉํธ๋ฆญ์ ์ ์ํ๊ณ , ์ ์ ํ ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ณ , ์ฑ๋ฅ ์ค์ฌ ๋ฌธํ๋ฅผ ์กฐ์ฑํจ์ผ๋ก์จ ๊ธ๋ก๋ฒ ๋ถ์ฐ ํ์ ์ค๋๋ ๋น ๋ฅด๊ฒ ๋ณํํ๋ ์ธ๊ณ์ ์๊ตฌ๋ฅผ ์ถฉ์กฑํ๋ ๊ณ ์ฑ๋ฅ Python ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ์ฑ๋ฅ ์ต์ ํ๋ ์ง์์ ์ธ ๋ชจ๋ํฐ๋ง๊ณผ ๊ฐ์ ์ด ํ์ํ ์ง์์ ์ธ ํ๋ก์ธ์ค์์ ๊ธฐ์ตํ์ญ์์ค. ์ฑ๋ฅ์ ๋ํ ์ฌ์ ์๋ฐฉ์ ์ ๊ทผ ๋ฐฉ์์ ์ฑํํ๋ฉด Python ํ๋ก์ ํธ์ ์ฅ๊ธฐ์ ์ธ ์ฑ๊ณต์ ๋ณด์ฅํ ์ ์์ต๋๋ค.