์์ ํ Python ์ฝ๋ ์์ฑ์ ์ํ ์ ์ /๋์ ๋ถ์, ์์กด์ฑ ๊ฒ์ฌ, ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ํฌํจํ๋ Python ๋ณด์ ์ค์บ๋ ๋ฐ ์ทจ์ฝ์ ํ๊ฐ ๋๊ตฌ ์ข ํฉ ๊ฐ์ด๋.
Python ๋ณด์ ์ค์บ๋: ์์ ํ ์ฝ๋๋ฅผ ์ํ ์ทจ์ฝ์ ํ๊ฐ ๋๊ตฌ
์ค๋๋ ์ํธ ์ฐ๊ฒฐ๋ ์ธ์์์ ๋ณด์์ ๊ฐ์ฅ ์ค์ํฉ๋๋ค. Python ๊ฐ๋ฐ์์๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์์ ๋ณด์ฅํ๋ ๊ฒ์ ๋จ์ํ ๋ชจ๋ฒ ์ฌ๋ก๊ฐ ์๋๋ผ ํ์์ ๋๋ค. ์ฝ๋์ ์ทจ์ฝ์ ์ ์ ์ฉ๋ ์ ์์ผ๋ฉฐ, ์ด๋ ๋ฐ์ดํฐ ์ ์ถ, ์์คํ ์นจํด, ๋ช ์ฑ ์์์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์ด ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ Python ๋ณด์ ์ค์บ๋ ๋ฐ ์ทจ์ฝ์ ํ๊ฐ ๋๊ตฌ์ ์ธ๊ณ๋ฅผ ํ์ํ์ฌ ๋ ์์ ํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ํ์ํ ์ง์๊ณผ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
Python ๋ณด์ ์ค์บ๋์ด ์ ์ค์ํ๊ฐ์?
๋จ์์ฑ๊ณผ ๋ค์ฉ์ฑ์ผ๋ก ์ ์๋ ค์ง Python์ ์น ๊ฐ๋ฐ ๋ฐ ๋ฐ์ดํฐ ๊ณผํ์์๋ถํฐ ๋จธ์ ๋ฌ๋ ๋ฐ ์๋ํ์ ์ด๋ฅด๊ธฐ๊น์ง ๊ด๋ฒ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฌํ ๊ด๋ฒ์ํ ์ฑํ์ ๋ํ Python์ ์ ์์ ์ธ ๊ณต๊ฒฉ์๋ค์๊ฒ ๋งค๋ ฅ์ ์ธ ๋์์ผ๋ก ๋ง๋ญ๋๋ค. ๋ค์์ Python ํ๋ก์ ํธ์์ ๋ณด์ ์ค์บ๋์ด ์ค์ํ ์ด์ ์ ๋๋ค:
- ์กฐ๊ธฐ ํ์ง: ๊ฐ๋ฐ ์๋ช ์ฃผ๊ธฐ ์ด๊ธฐ์ ์ทจ์ฝ์ ์ ์๋ณํ๋ ๊ฒ์ด ํ๋ก๋์ ์์ ํด๊ฒฐํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ์ ๋ ดํ๊ณ ์ฝ์ต๋๋ค.
- ๊ท์ ์ค์: ๋ง์ ์ฐ์ ๋ฐ ๊ท์ ์ ์ ๊ธฐ์ ์ธ ๋ณด์ ํ๊ฐ์ ๋ณด์ ํ์ค ์ค์๋ฅผ ์๊ตฌํฉ๋๋ค.
- ์ํ ์ํ: ์ทจ์ฝ์ ์ ์ฌ์ ์ ์ค์บ๋ํ์ฌ ์ฑ๊ณต์ ์ธ ๊ณต๊ฒฉ ๋ฐ ๋ฐ์ดํฐ ์ ์ถ์ ์ํ์ ์ค์ ๋๋ค.
- ์ฝ๋ ํ์ง ํฅ์: ๋ณด์ ์ค์บ๋์ ์๋ชป ์์ฑ๋์๊ฑฐ๋ ์ผ๋ฐ์ ์ธ ์ทจ์ฝ์ ์ ์ทจ์ฝํ ์ฝ๋ ์์ญ์ ๊ฐ์กฐํ์ฌ ์ฝ๋ ํ์ง์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ์์กด์ฑ ๊ด๋ฆฌ: ์ต์ Python ํ๋ก์ ํธ๋ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฌ๊ฒ ์์กดํฉ๋๋ค. ๋ณด์ ์ค์บ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์์ํฌ ์ ์๋ ์ทจ์ฝํ ์์กด์ฑ์ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
Python ๋ณด์ ์ค์บ๋ ์ ํ
Python ํ๋ก์ ํธ์ ์ ์ฉํ ์ ์๋ ์ฌ๋ฌ ๊ฐ์ง ์ ํ์ ๋ณด์ ์ค์บ๋์ด ์์ผ๋ฉฐ, ๊ฐ๊ธฐ ๊ณ ์ ํ ์ฅ์ ๊ณผ ๋จ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ฌํ ๋ค์ํ ์ ํ์ ์ดํดํ๋ ๊ฒ์ ํน์ ์๊ตฌ์ ๋ง๋ ์ฌ๋ฐ๋ฅธ ๋๊ตฌ์ ๊ธฐ์ ์ ์ ํํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
1. ์ ์ ๋ถ์ ๋ณด์ ํ ์คํธ (SAST)
์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ๋ผ๊ณ ๋ ํ๋ SAST ๋๊ตฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ ๋ก ์คํํ์ง ์๊ณ ์์ค ์ฝ๋๋ฅผ ๊ฒ์ฌํฉ๋๋ค. ์ฝ๋ ๊ตฌ์กฐ, ๊ตฌ๋ฌธ ๋ฐ ํจํด์ ๋ถ์ํ์ฌ ์ ์ฌ์ ์ธ ์ทจ์ฝ์ ์ ์๋ณํฉ๋๋ค. SAST๋ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋ฐ ์๋ช ์ฃผ๊ธฐ ์ด๊ธฐ์ ์ํ๋ฉ๋๋ค.
SAST์ ์ฅ์ :
- ์ทจ์ฝ์ ์กฐ๊ธฐ ํ์ง
- ๊ด๋ฒ์ํ ์ผ๋ฐ์ ์ธ ์ทจ์ฝ์ ์๋ณ ๊ฐ๋ฅ
- ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ๋น๊ต์ ๋น ๋ฅด๊ณ ์ฝ๊ฒ ํตํฉ ๊ฐ๋ฅ
SAST์ ๋จ์ :
- ์คํ(์ค์ ๋ก ์ ์ฉ๋ ์ ์๋ ์ ์ฌ์ ์ทจ์ฝ์ ์๋ณ)์ ์์ฑํ ์ ์์
- ๋ฐํ์ ์ทจ์ฝ์ ๋๋ ์์กด์ฑ ๋ด ์ทจ์ฝ์ ์ ํ์งํ์ง ๋ชปํ ์ ์์
- ์์ค ์ฝ๋์ ๋ํ ์ ๊ทผ ํ์
2. ๋์ ๋ถ์ ๋ณด์ ํ ์คํธ (DAST)
๋์ ์ฝ๋ ๋ถ์ ๋๊ตฌ๋ผ๊ณ ๋ ํ๋ DAST ๋๊ตฌ๋ ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ถ์ํ์ฌ ์ทจ์ฝ์ ์ ์๋ณํฉ๋๋ค. ์ค์ ๊ณต๊ฒฉ์ ์๋ฎฌ๋ ์ด์ ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด๋ป๊ฒ ๋ฐ์ํ๋์ง ํ์ธํฉ๋๋ค. DAST๋ ์ผ๋ฐ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋น๋๋์ด ํ ์คํธ ํ๊ฒฝ์ ๋ฐฐํฌ๋ ํ ๊ฐ๋ฐ ์๋ช ์ฃผ๊ธฐ ํ๋ฐ์ ์ํ๋ฉ๋๋ค.
DAST์ ์ฅ์ :
- SAST๊ฐ ๋์น ์ ์๋ ๋ฐํ์ ์ทจ์ฝ์ ํ์ง ๊ฐ๋ฅ
- SAST๋ณด๋ค ์ ํํจ (์คํ์ด ์ ์)
- ์์ค ์ฝ๋์ ๋ํ ์ ๊ทผ ๋ถํ์
DAST์ ๋จ์ :
- SAST๋ณด๋ค ๋๋ฆฌ๊ณ ๋ฆฌ์์ค ์ง์ฝ์ ์
- ํ ์คํธ๋ฅผ ์ํด ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ํ์
- ๋ชจ๋ ๊ฐ๋ฅํ ์ฝ๋ ๊ฒฝ๋ก๋ฅผ ํ ์คํธํ์ง ๋ชปํ ์ ์์
3. ์์กด์ฑ ์ค์บ๋
์์กด์ฑ ์ค์บ๋ ๋๊ตฌ๋ Python ํ๋ก์ ํธ์์ ์ฌ์ฉ๋๋ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ์์กด์ฑ์ ๋ถ์ํ์ฌ ์๋ ค์ง ์ทจ์ฝ์ ์ ์๋ณํฉ๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ ์ผ๋ฐ์ ์ผ๋ก ์๋ ค์ง ์ทจ์ฝ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค(์: ๊ตญ๊ฐ ์ทจ์ฝ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค - NVD)๋ฅผ ์ฌ์ฉํ์ฌ ์ทจ์ฝํ ์์กด์ฑ์ ์๋ณํฉ๋๋ค.
์์กด์ฑ ์ค์บ๋์ ์ฅ์ :
- ์์ง ๋ชปํ๋ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ทจ์ฝ์ ์๋ณ
- ์ต์ ๋ณด์ ํจ์น๋ก ์์กด์ฑ์ ์ต์ ์ํ๋ก ์ ์งํ๋ ๋ฐ ๋์
- ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ์ฝ๊ฒ ํตํฉ ๊ฐ๋ฅ
์์กด์ฑ ์ค์บ๋์ ๋จ์ :
- ์ทจ์ฝ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ํ์ฑ๊ณผ ์์ ์ฑ์ ์์กดํจ
- ์คํ ๋๋ ๋ฏธํ์ ์์ฑํ ์ ์์
- ์ฌ์ฉ์ ์ง์ ์์กด์ฑ์ ์ทจ์ฝ์ ์ ํ์งํ์ง ๋ชปํ ์ ์์
์ธ๊ธฐ ์๋ Python ๋ณด์ ์ค์บ๋ ๋๊ตฌ
๋ค์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฐ์ฅ ์ธ๊ธฐ ์๊ณ ํจ๊ณผ์ ์ธ Python ๋ณด์ ์ค์บ๋ ๋๊ตฌ ์ค ์ผ๋ถ์ ๋๋ค:
1. Bandit
Bandit์ Python ์ ์ฉ์ผ๋ก ์ค๊ณ๋ ๋ฌด๋ฃ ์คํ ์์ค SAST ๋๊ตฌ์ ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๋ณด์ ๋ฌธ์ ๋ฅผ ์ํด Python ์ฝ๋๋ฅผ ์ค์บํฉ๋๋ค:
- SQL ์ฝ์ ์ทจ์ฝ์
- ๊ต์ฐจ ์ฌ์ดํธ ์คํฌ๋ฆฝํ (XSS) ์ทจ์ฝ์
- ํ๋์ฝ๋ฉ๋ ๋น๋ฐ๋ฒํธ
- ์์ ํ์ง ์์ ํจ์ ์ฌ์ฉ
Bandit์ ์ค์น ๋ฐ ์ฌ์ฉ์ด ์ฝ์ต๋๋ค. ๋ช ๋ น์ค์์ ์คํํ๊ฑฐ๋ CI/CD ํ์ดํ๋ผ์ธ์ ํตํฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด:
bandit -r my_project/
์ด ๋ช ๋ น์ `my_project` ๋๋ ํฐ๋ฆฌ์ ๋ชจ๋ Python ํ์ผ์ ์ฌ๊ท์ ์ผ๋ก ์ค์บํ๊ณ ์๋ณ๋ ๋ชจ๋ ๋ณด์ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ํฉ๋๋ค.
Bandit์ ๋์ ๊ตฌ์ฑ ๊ฐ๋ฅ์ฑ์ ์ ๊ณตํ์ฌ ์๋ณ๋ ๋ฌธ์ ์ ์ฌ๊ฐ๋ ์์ค์ ์ฌ์ฉ์ ์ง์ ํ๊ณ ์ค์บ์์ ํน์ ํ์ผ ๋๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค.
2. Safety
Safety๋ Python ์์กด์ฑ์์ ์๋ ค์ง ์ทจ์ฝ์ ์ ํ์ธํ๋ ์ธ๊ธฐ ์๋ ์์กด์ฑ ์ค์บ๋ ๋๊ตฌ์ ๋๋ค. Python ํจํค์ง์ ์๋ ค์ง ์ทจ์ฝ์ ์ ๋ํ ํฌ๊ด์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ Safety DB๋ฅผ ์ฌ์ฉํฉ๋๋ค. Safety๋ ํ๋ก์ ํธ์ `requirements.txt` ๋๋ `Pipfile`์์ ์ทจ์ฝํ ํจํค์ง๋ฅผ ์๋ณํ ์ ์์ต๋๋ค.
Safety๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด pip๋ฅผ ์ฌ์ฉํ์ฌ ์ค์นํ ์ ์์ต๋๋ค:
pip install safety
๊ทธ๋ฐ ๋ค์, ํ๋ก์ ํธ์ `requirements.txt` ํ์ผ์์ ์คํํ ์ ์์ต๋๋ค:
safety check -r requirements.txt
Safety๋ ์ทจ์ฝํ ํจํค์ง๋ฅผ ๋ณด๊ณ ํ๊ณ ์ทจ์ฝ์ ์ ํด๊ฒฐํ๋ ์ ๋ฐ์ดํธ๋ ๋ฒ์ ์ ์ ์ํฉ๋๋ค.
Safety๋ ๋ํ ์ทจ์ฝ์ ๋ณด๊ณ , CI/CD ์์คํ ๊ณผ์ ํตํฉ, ๊ฐ์ธ Python ํจํค์ง ์ ์ฅ์ ์ง์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
3. Pyre-check
Pyre-check๋ Python์ฉ์ผ๋ก ์ค๊ณ๋ ๋น ๋ฅด๊ณ ์ธ๋ฉ๋ชจ๋ฆฌ ํ์ ์ฒด์ปค์ ๋๋ค. ์ฃผ๋ก ํ์ ์ฒด์ปค์ด์ง๋ง, Pyre-check๋ ์๊ฒฉํ ํ์ ์ด๋ ธํ ์ด์ ์ ์ ์ฉํ์ฌ ์ ์ฌ์ ์ธ ๋ณด์ ์ทจ์ฝ์ ์ ์๋ณํ๋ ๋ฐ๋ ๋์์ ์ค ์ ์์ต๋๋ค. ์ฝ๋๊ฐ ์ ์ ์๋ ํ์ ์์คํ ์ ์ค์ํ๋๋ก ๋ณด์ฅํจ์ผ๋ก์จ ๋ณด์ ์ทจ์ฝ์ ์ผ๋ก ์ด์ด์ง ์ ์๋ ํ์ ๊ด๋ จ ์ค๋ฅ์ ์ํ์ ์ค์ผ ์ ์์ต๋๋ค.
Pyre-check๋ Facebook์์ ๊ฐ๋ฐํ์ผ๋ฉฐ ์๋์ ํ์ฅ์ฑ์ผ๋ก ์ ์๋ ค์ ธ ์์ต๋๋ค. ์๋ฐฑ๋ง ์ค์ ์ฝ๋๋ฅผ ๊ฐ์ง ๋๊ท๋ชจ Python ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
Pyre-check๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํ๋ก์ ํธ์ ์ค์นํ๊ณ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. ์์ธํ ์ง์นจ์ Pyre-check ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
4. SonarQube
SonarQube๋ Python์ ํฌํจํ ์ฌ๋ฌ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ง์ํ๋ ํฌ๊ด์ ์ธ ์ฝ๋ ํ์ง ๋ฐ ๋ณด์ ํ๋ซํผ์ ๋๋ค. ๋ณด์ ์ทจ์ฝ์ , ์ฝ๋ ์ค๋ฉ, ๋ฒ๊ทธ๋ฅผ ํฌํจํ ๊ด๋ฒ์ํ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ธฐ ์ํด ์ ์ ๋ถ์์ ์ํํฉ๋๋ค. SonarQube๋ ์ฝ๋ ํ์ง ๋ฐ ๋ณด์ ์งํ๋ฅผ ์ถ์ ํ๊ธฐ ์ํ ์ค์ ์ง์ค์ ๋์๋ณด๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
SonarQube๋ ๋ค์ํ IDE ๋ฐ CI/CD ์์คํ ๊ณผ ํตํฉ๋์ด ์ฝ๋์ ํ์ง๊ณผ ๋ณด์์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ ์ ์์ต๋๋ค.
Python๊ณผ ํจ๊ป SonarQube๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด SonarQube ์๋ฒ๋ฅผ ์ค์นํ๊ณ SonarQube ์ค์บ๋๋ฅผ ์ค์นํ๋ฉฐ ํ๋ก์ ํธ๊ฐ SonarQube์ ์ํด ์ค์บ๋๋๋ก ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. ์์ธํ ์ง์นจ์ SonarQube ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
5. Snyk
Snyk๋ ์ฝ๋, ์์กด์ฑ, ์ปจํ ์ด๋ ๋ฐ ์ธํ๋ผ์ ์ทจ์ฝ์ ์ ์ฐพ์ ์์ ํ๊ณ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋๋ ๊ฐ๋ฐ์ ๋ณด์ ํ๋ซํผ์ ๋๋ค. Snyk๋ ์์กด์ฑ ์ค์บ๋, ์ทจ์ฝ์ ๊ด๋ฆฌ, IaC(Infrastructure as Code) ๋ณด์ ์ค์บ๋์ ์ ๊ณตํฉ๋๋ค.
Snyk๋ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ์ ํตํฉ๋์ด ๊ฐ๋ฐ ์๋ช ์ฃผ๊ธฐ ์ด๊ธฐ์ ์ทจ์ฝ์ ์ ์๋ณํ๊ณ ์์ ํ๋ก์ธ์ค๋ฅผ ์๋ํํ ์ ์์ต๋๋ค.
Snyk๋ ๋ฌด๋ฃ ๋ฐ ์ ๋ฃ ํ๋์ ๋ชจ๋ ์ ๊ณตํ๋ฉฐ, ์ ๋ฃ ํ๋์ ๋ ๋ง์ ๊ธฐ๋ฅ๊ณผ ์ง์์ ์ ๊ณตํฉ๋๋ค.
6. OWASP ZAP (Zed Attack Proxy)
OWASP ZAP์ ๋ฌด๋ฃ ์คํ ์์ค ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ์ค์บ๋์ ๋๋ค. Python ์ฝ๋์ฉ์ผ๋ก ํน๋ณํ ์ค๊ณ๋์ง๋ ์์์ง๋ง, ZAP์ Django ๋ฐ Flask์ ๊ฐ์ Python ํ๋ ์์ํฌ๋ก ๊ตฌ์ถ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์บํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ทจ์ฝ์ ์ ์๋ณํ๊ธฐ ์ํด ๋์ ๋ถ์์ ์ํํฉ๋๋ค:
- SQL ์ฝ์
- ๊ต์ฐจ ์ฌ์ดํธ ์คํฌ๋ฆฝํ (XSS)
- ๊ต์ฐจ ์ฌ์ดํธ ์์ฒญ ์์กฐ (CSRF)
- ํด๋ฆญ์ฌํน
ZAP์ ๊ณต๊ฒฉ์์๊ฒ ์ ์ฉ๋๊ธฐ ์ ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ทจ์ฝ์ ์ ์๋ณํ๋ ๋ฐ ๋์์ด ๋๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค.
๊ฐ๋ฐ ์ํฌํ๋ก์ฐ์ ๋ณด์ ์ค์บ๋ ํตํฉํ๊ธฐ
๋ณด์ ์ค์บ๋์ ํจ๊ณผ๋ฅผ ๊ทน๋ํํ๋ ค๋ฉด ์ด๋ฅผ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ์ ํตํฉํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก์ ๋๋ค:
- Shift Left: ๊ฐ๋ฐ ์๋ช ์ฃผ๊ธฐ์์ ๊ฐ๋ฅํ ํ ์ผ์ฐ ๋ณด์ ์ค์บ๋์ ์ํํ์ญ์์ค. ์ด๋ฅผ ํตํด ์ทจ์ฝ์ ์ด ๋ ์ด๋ ต๊ณ ๋น์ฉ์ด ๋ง์ด ๋ค๊ธฐ ์ ์ ์๋ณํ๊ณ ์์ ํ ์ ์์ต๋๋ค.
- ์๋ํ: CI/CD ํ์ดํ๋ผ์ธ์ ์ผ๋ถ๋ก ๋ณด์ ์ค์บ๋์ ์๋ํํ์ญ์์ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ชจ๋ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋์ผ๋ก ์ทจ์ฝ์ ์ ๋ํด ์ค์บ๋ฉ๋๋ค.
- ์ฐ์ ์์ ์ง์ : ๋ณด์ ์ค์บ๋ ๋๊ตฌ์ ์ํด ์๋ณ๋ ์ทจ์ฝ์ ์ ์ฐ์ ์์๋ฅผ ์ง์ ํ์ญ์์ค. ๊ฐ์ฅ ์ค์ํ ์ทจ์ฝ์ ์ ๋จผ์ ์์ ํ๋ ๋ฐ ์ง์คํ์ญ์์ค.
- ๊ฐ์ : ์๋ณ๋ ์ทจ์ฝ์ ์ ๊ฐ์ ํ๊ธฐ ์ํ ๊ณํ์ ์๋ฆฝํ์ญ์์ค. ์ฌ๊ธฐ์๋ ์ฝ๋ ์์ , ์์กด์ฑ ์ ๋ฐ์ดํธ ๋๋ ๊ธฐํ ๋ณด์ ์ ์ด ๊ตฌํ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
- ๊ต์ก: ๊ฐ๋ฐ์์๊ฒ ์์ ํ ์ฝ๋ฉ ๊ดํ์ ๋ํด ๊ต์กํ์ญ์์ค. ์ด๋ ์ฝ๋์ ์๋ก์ด ์ทจ์ฝ์ ์ ๋์ ํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ๋ชจ๋ํฐ๋ง: ์๋ก์ด ์ทจ์ฝ์ ์ ๋ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ์ญ์์ค. ์ทจ์ฝ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ง์์ ์ผ๋ก ์ ๋ฐ์ดํธ๋๋ฏ๋ก ์ต์ ์ํ์ ๋ํ ์ ๋ณด๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์์ ํ Python ์ฝ๋ ์์ฑ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
๋ณด์ ์ค์บ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ์ธ์๋ ์ฝ๋์ ์ทจ์ฝ์ ์ ๋์ ํ ์ํ์ ์ต์ํํ๊ธฐ ์ํด ์์ ํ ์ฝ๋ฉ ๊ดํ์ ๋ฐ๋ฅด๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก์ ๋๋ค:
- ์ ๋ ฅ ์ ํจ์ฑ ๊ฒ์ฌ: ์ฝ์ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด ํญ์ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ ํจ์ฑ ๊ฒ์ฌํ์ญ์์ค.
- ์ถ๋ ฅ ์ธ์ฝ๋ฉ: ๊ต์ฐจ ์ฌ์ดํธ ์คํฌ๋ฆฝํ (XSS) ์ทจ์ฝ์ ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ถ๋ ฅ์ ์ธ์ฝ๋ฉํ์ญ์์ค.
- ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ: ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ๊ฐ๋ ฅํ ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํ์ญ์์ค.
- ๋น๋ฐ๋ฒํธ ๊ด๋ฆฌ: ๊ฐ๋ ฅํ ๋น๋ฐ๋ฒํธ ํด์ฑ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ณ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ ํ๊ฒ ์ ์ฅํ์ญ์์ค.
- ์ค๋ฅ ์ฒ๋ฆฌ: ์ค๋ฅ๋ฅผ ์ฐ์ํ๊ฒ ์ฒ๋ฆฌํ๊ณ ์ค๋ฅ ๋ฉ์์ง์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ ธ์ถํ์ง ๋ง์ญ์์ค.
- ๋ณด์ ๊ตฌ์ฑ: ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ํ๊ฒ ๊ตฌ์ฑํ๊ณ ๊ธฐ๋ณธ ๊ตฌ์ฑ์ ์ฌ์ฉํ์ง ๋ง์ญ์์ค.
- ์ ๊ธฐ ์ ๋ฐ์ดํธ: Python ์ธํฐํ๋ฆฌํฐ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํ๋ ์์ํฌ๋ฅผ ์ต์ ๋ณด์ ํจ์น๋ก ์ต์ ์ํ๋ก ์ ์งํ์ญ์์ค.
- ์ต์ ๊ถํ: ์ฌ์ฉ์์ ํ๋ก์ธ์ค์ ์์ ์ํ์ ํ์ํ ์ต์ํ์ ๊ถํ๋ง ๋ถ์ฌํ์ญ์์ค.
๊ธ๋ก๋ฒ ๋ณด์ ๊ณ ๋ ค ์ฌํญ
๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก Python ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋๋ ๊ตญ์ ํ (i18n) ๋ฐ ์ง์ญํ (l10n) ๋ณด์ ์ธก๋ฉด์ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์ฃผ์ ๊ณ ๋ ค ์ฌํญ์ ๋๋ค:
- ์ ๋์ฝ๋ ์ฒ๋ฆฌ: ์ ๋์ฝ๋ ์ ๊ทํ ๊ณต๊ฒฉ๊ณผ ๊ฐ์ ์ทจ์ฝ์ ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ ๋์ฝ๋ ๋ฌธ์๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ์ญ์์ค.
- ๋ก์ผ์ผ๋ณ ๋ณด์: ์ซ์ ํ์ ์ง์ ๋๋ ๋ ์ง ๊ตฌ๋ฌธ ๋ถ์๊ณผ ๊ด๋ จ๋ ์ทจ์ฝ์ ๊ณผ ๊ฐ์ ๋ก์ผ์ผ๋ณ ๋ณด์ ๋ฌธ์ ์ ์ ์ํ์ญ์์ค.
- ๋ฌธํ ๊ฐ ์์ฌ์ํต: ๋ณด์ ๋ฉ์์ง ๋ฐ ๊ฒฝ๊ณ ๊ฐ ๋ค๋ฅธ ๋ฌธํ์ ๋ฐฐ๊ฒฝ์ ๊ฐ์ง ์ฌ์ฉ์๊ฐ ๋ช ํํ๊ฒ ์ดํดํ ์ ์๋๋ก ํ์ญ์์ค.
- ๋ฐ์ดํฐ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ๊ท์ : ์ ๋ฝ์ ์ผ๋ฐ ๋ฐ์ดํฐ ๋ณดํธ ๊ท์ (GDPR)๊ณผ ๊ฐ์ ๋ค๋ฅธ ๊ตญ๊ฐ์ ๋ฐ์ดํฐ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ๊ท์ ์ ์ค์ํ์ญ์์ค.
์์: ์ ๋์ฝ๋ ๋ฌธ์๋ฅผ ํฌํจํ ์ ์๋ ์ฌ์ฉ์ ์ ๊ณต ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋, ๋ณด์์ ๋ฏผ๊ฐํ ์์ ์์ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทํํด์ผ ํฉ๋๋ค. ์ด๋ ๊ณต๊ฒฉ์๊ฐ ๋์ผํ ๋ฌธ์์ ๋ค๋ฅธ ์ ๋์ฝ๋ ํํ์ ์ฌ์ฉํ์ฌ ๋ณด์ ๊ฒ์ฌ๋ฅผ ์ฐํํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
๋ณด์ ์ค์บ๋์ ์์ ํ Python ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ํ์์ ์ธ ๋ถ๋ถ์ ๋๋ค. ์ฌ๋ฐ๋ฅธ ๋๊ตฌ์ ๊ธฐ์ ์ ์ฌ์ฉํ๊ณ ์์ ํ ์ฝ๋ฉ ๊ดํ์ ๋ฐ๋ฆ์ผ๋ก์จ ์ฝ๋์ ์ทจ์ฝ์ ์ํ์ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค. ๋ณด์ ์ค์บ๋์ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ์ ํตํฉํ๊ณ , ์๋ณ๋ ์ทจ์ฝ์ ์ ์ฐ์ ์์๋ฅผ ์ง์ ํ๋ฉฐ, ์๋ก์ด ์ํ์ ๋ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค. ์ํ ํ๊ฒฝ์ด ์งํํจ์ ๋ฐ๋ผ ์ต์ ๋ณด์ ์ทจ์ฝ์ ์ ๋ํด ์ ๊ทน์ ์ผ๋ก ์ ๋ณด๋ฅผ ์ ์งํ๋ ๊ฒ์ Python ํ๋ก์ ํธ์ ์ฌ์ฉ์๋ฅผ ๋ณดํธํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
๋ณด์ ์ฐ์ ์ฌ๊ณ ๋ฐฉ์์ ์์ฉํ๊ณ Python ๋ณด์ ์ค์บ๋ ๋๊ตฌ์ ํ์ ํ์ฉํจ์ผ๋ก์จ ์ค๋๋ ๋์งํธ ์ธ๊ณ์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋ ๋ ๊ฒฌ๊ณ ํ๊ณ ์ ๋ขฐํ ์ ์์ผ๋ฉฐ ์์ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. Bandit์ ์ฌ์ฉํ ์ ์ ๋ถ์์์ Safety๋ฅผ ์ฌ์ฉํ ์์กด์ฑ ๊ฒ์ฌ์ ์ด๋ฅด๊ธฐ๊น์ง Python ์ํ๊ณ๋ ์์ ํ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ ์ฌ์ ์ธ ์ํ์ผ๋ก๋ถํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณดํธํ๋ ๋ฐ ๋์์ด ๋๋ ํ๋ถํ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ณด์์ ์ผํ์ฑ ์์ ์ด ์๋ ์ง์์ ์ธ ํ๋ก์ธ์ค์์ ๊ธฐ์ตํ์ญ์์ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ , ์ต์ ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ๋ฉฐ, ํ์์ ๋ฐ๋ผ ๋ณด์ ์กฐ์น๋ฅผ ์กฐ์ ํ์ฌ ์์ ๋๊ฐ์ญ์์ค.