์๋ ํ์ธ์, ์ฌ๋ฌ๋ถ! ๐ ํน์ ํ๋ก์ ํธ ๊ฐ๋ฐํ ๋ ํจํค์ง ์ค์น๋ ์์กด์ฑ ๊ด๋ฆฌ ๋๋ฌธ์ ๊ณจ์น ์ํ์ จ๋์? ๐คฏ ๊ฐ๊ธฐ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ค์ํ ํจํค์ง ๊ด๋ฆฌ ๋๊ตฌ๋ค์ด ์์ง๋ง, ์ด๋ค ๊ฒ์ด ๋ด ํ๋ก์ ํธ์ ๊ฐ์ฅ ์ ํฉํ์ง ๊ณ ๋ฏผ์ด ๋ง์ผ์ค ๊ฒ๋๋ค. ์ค๋์ ๊ฐ๋ฐ์๋ผ๋ฉด ๊ผญ ์์์ผ ํ ์ฃผ์ ํจํค์ง ๊ด๋ฆฌ ๋๊ตฌ๋ค์ ๋น๊ต ๋ถ์ํด ๋ณด๊ณ , ์ค๋ฌด์์ ๋ฐ๋ก ํ์ฉ ๊ฐ๋ฅํ ํ๊น์ง ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค! ๐ฏ
๐ ํจํค์ง ๊ด๋ฆฌ ๋๊ตฌ๋ ๋ฌด์์ธ๊ฐ์? ๐ง
ํจํค์ง ๊ด๋ฆฌ ๋๊ตฌ(Package Manager)๋ ์ํํธ์จ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ฌ๊ทธ์ธ ๋ฑ์ ์์กด์ฑ(dependencies)์ ์ฝ๊ฒ ์ค์น, ์ ๋ฐ์ดํธ, ์ญ์ ํ ์ ์๊ฒ ๋์์ฃผ๋ ํด์ ๋๋ค. ๐จ๐ป ์ด๋ฅผ ํตํด ๋ณต์กํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ถฉ๋ ๋ฌธ์ ๋ฅผ ์ค์ด๊ณ , ํ๋ก์ ํธ ์ ์ง๋ณด์๋ฅผ ํธ๋ฆฌํ๊ฒ ๋ง๋ค์ฃ .
- โ ์๋ ๋ฒ์ ๊ด๋ฆฌ
- โ ์์กด์ฑ ํธ๋ฆฌ ํด๊ฒฐ
- โ ๋ฐฐํฌ ๋ฐ ์ค์น ๊ฐ์ํ
์ค์: ์๋ชป๋ ํจํค์ง ๊ด๋ฆฌ๋ ํ๋ก์ ํธ ์ ์ฒด๋ฅผ ์ํ์ ๋น ๋จ๋ฆด ์ ์์ผ๋ ์ ์คํ ์ ํ๊ณผ ์ฌ์ฉ๋ฒ ์์ง๊ฐ ํ์์ ๋๋ค!
๐ ์ฃผ์ ํจํค์ง ๊ด๋ฆฌ์ ๋น๊ต ์ฒดํฌ๋ฆฌ์คํธ ๐
๋๊ตฌ ์ด๋ฆ | ์ง์ ์ธ์ด/ํ๊ฒฝ | ํน์ง | ์ฅ์ | ๋จ์ |
---|---|---|---|---|
npm | JavaScript/Node.js | ์ธ๊ณ ์ต๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ ์ง์คํธ๋ฆฌ | ๋ฐฉ๋ํ ์ปค๋ฎค๋ํฐ์ ํ๋ฌ๊ทธ์ธ | ๋๋ฆฐ ์๋, ์ค๋ณต ์ข ์์ฑ ๋ฐ์ ๊ฐ๋ฅ |
Yarn | JavaScript/Node.js | ํ์ด์ค๋ถ์์ ๋ง๋ ๋น ๋ฅธ ์ค์น ๋๊ตฌ | ๋น ๋ฅธ ์ค์น ์๋, ์์ ์ ์ ๊ธ(Lock) ํ์ผ | npm๋ณด๋ค ๋ ๋ณดํธ์ |
pip | Python | ํ์ด์ฌ ํ์ค ํจํค์ง ๊ด๋ฆฌ์ | ๊ด๋ฒ์ํ ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์ | ๊ฐ์ํ๊ฒฝ ์ค์ ํ์ |
Maven | Java | ๊ฐ๋ ฅํ ๋น๋ ๋ฐ ์์กด์ฑ ๊ด๋ฆฌ ์์คํ | ๊ธฐ์ ์ฉ์ผ๋ก ๋งค์ฐ ์์ ์ , ํ๋ฌ๊ทธ์ธ ํ๋ถ | ์ค์ ๋ณต์ก, ๋ฌ๋์ปค๋ธ ๋์ |
Gradle | Java/Kotlin | ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ ๋น๋ ๋ฐ ์์กด์ฑ ๊ด๋ฆฌ | ๋น ๋ฅธ ๋น๋ ์๋, ์ ์ฐํ ์ค์ ๊ฐ๋ฅ | ์ด๋ณด์์๊ฒ ์ด๋ ค์ |
๐งฐ ๋ํ์ ์ธ ํจํค์ง ๊ด๋ฆฌ ๋๊ตฌ ์์ธ ๋ถ์ โ
1. npm (Node Package Manager) ๐
- ์ธ์ด: JavaScript / Node.js
- ํน์ง: ์ ์ธ๊ณ์ ์ผ๋ก ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ JS ํจํค์ง ๊ด๋ฆฌ์.
- ์ฅ์ :
- ๋ฐฉ๋ํ ๋ชจ๋ ์ ์ฅ์(npm registry)
- ์ฌ์ด ์ฌ์ฉ๋ฒ ๋ฐ ๋์ ํธํ์ฑ
- ์์ฃผ ์ ๋ฐ์ดํธ๋๋ ์ต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๊ณต
- ๋จ์ :
- ๋๋ฆฐ ์ค์น ์๋
- ์ค๋ณต ์ข
์์ฑ ๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅ →
npm dedupe
๋ช ๋ น ๋ฑ์ผ๋ก ํด๊ฒฐ ๊ฐ๋ฅ
์ฐธ๊ณ ๋ก ๋ฏธ๊ตญ ๊ตญ๋ฆฝํ์ค๊ธฐ์ ์ฐ๊ตฌ์(NIST)์ ์ํํธ์จ์ด ๋ณด์ ๊ถ๊ณ ์์๋ npm ๊ฐ์ ๊ณต๊ณต ๋ ํฌ์งํ ๋ฆฌ์ ๋ณด์ ์ทจ์ฝ์ ์ ๊ฒ์ ์ ๊ธฐ์ ์ผ๋ก ๊ถ์ฅํฉ๋๋ค.
2. Yarn ๐งถ
- ์ธ์ด: JavaScript / Node.js
- ํน์ง: Facebook(ํ Meta)์์ npm์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๊ฐ๋ฐํจ.
- ์ฅ์ :
- ๋ณ๋ ฌ ๋ค์ด๋ก๋๋ก ๋น ๋ฅธ ์ค์น ์๋
yarn.lock
ํ์ผ๋ก ์์กด์ฑ ์ผ๊ด์ฑ ํ๋ณด- ์บ์ ๊ธฐ๋ฅ ๊ฐ๋ ฅ → ๋คํธ์ํฌ ์ฐ๊ฒฐ ๋ถ์์ ์์๋ ์ฌ์ค์น ๊ฐ๋ฅ
- ๋จ์ :
- npm ๋๋น ์๋์ ์ผ๋ก ์์ ์ปค๋ฎค๋ํฐ
- ์ผ๋ถ ๊ตฌ๋ฒ์ ๋ ๊ฑฐ์ ํ๋ก์ ํธ์์๋ ํธํ ์ด์
3. pip (Python Installer Package) ๐
- ์ธ์ด: Python
- ํน์ง: ๊ธฐ๋ณธ ํ์ด์ฌ ํจํค์ง ๊ด๋ฆฌ์์ด๋ฉฐ
virtualenv
๋๋venv
์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค. - ์ฅ์ :
- PyPI(Python Package Index)์ ์ฐ๋๋์ด ์๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์
- ๊ฐ๋จํ ๋ช
๋ น์ด (
pip install package
)๋ก ์ฝ๊ฒ ์ค์น ๊ฐ๋ฅ
- ๋จ์ :
- ๊ธ๋ก๋ฒ ํ๊ฒฝ์ ์ง์ ์ค์นํ๋ฉด ์์กด์ฑ ์ถฉ๋ ์ฐ๋ ค → ๊ฐ์ํ๊ฒฝ ๊ถ์ฅ
- ์๋์ฐ ํ๊ฒฝ์์ ์ด๊ธฐ ์ธํ ๋ค์ ๋ฒ๊ฑฐ๋ก์
์์ธํ ๊ฐ์ํ๊ฒฝ ์ค์ ์ ํ์ด์ฌ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ธ์.
4. Maven ๐ง
- ์ธ์ด: Java
- ํน์ง: XML ๊ธฐ๋ฐ ์ค์ ํ์ผ(
pom.xml
)์ ํตํด ํ๋ก์ ํธ ๋น๋ ๋ฐ ์์กด์ฑ์ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค. - ์ฅ์ :
- ๋๊ท๋ชจ ๊ธฐ์ ํ๋ก์ ํธ์ ์ ํฉํ๋ฉฐ ํ์คํ๋ ๊ตฌ์กฐ ์ ๊ณต
- ๋ค์ํ ํ๋ฌ๊ทธ์ธ ์ง์์ผ๋ก ๋น๋๋ถํฐ ํ ์คํธ๊น์ง ์๋ํ ๊ฐ๋ฅ
- ๋จ์ :
- ์ค์ ํ์ผ์ด ๋ณต์กํ๊ณ ์ด๋ณด์๊ฐ ๋ฐฐ์ฐ๊ธฐ ์ด๋ ค์
- ๋น๋ ์๊ฐ์ด ๊ธธ์ด์ง ์ ์์
5. Gradle โ๏ธ
- ์ธ์ด: Java / Kotlin
- ํน์ง: Groovy ํน์ Kotlin DSL์ ์ฌ์ฉํ์ฌ ์ง๊ด์ ์ธ ์คํฌ๋ฆฝํธ ์์ฑ ๊ฐ๋ฅ. Android ๊ฐ๋ฐ์์ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
- ์ฅ์ :
- ๋น ๋ฅธ ์ฆ๋ถ ๋น๋(incremental build) ์ง์์ผ๋ก ํจ์จ์ ์์ ๊ฐ๋ฅ
- ์ ์ฐํ ์ปค์คํฐ๋ง์ด์ฆ๊ฐ ์ฉ์ดํ๋ฉฐ ๋ฉํฐํ๋ก์ ํธ ๋น๋์ ์ต์ ํ๋จ
- ๋จ์ :
- ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ ํ์ต ํ์ → ๋ฌ๋์ปค๋ธ ์กด์ฌ
๐ข ํจํค์ง ๊ด๋ฆฌ์ ์ ํ๊ณผ ํ์ฉ์ ์ํ ๋จ๊ณ๋ณ ๊ฐ์ด๋ ๐ ๏ธ
- ๐ฏ ํ๋ก์ ํธ ํ๊ฒฝ ๋ถ์ํ๊ธฐ
์ฌ์ฉ ์ธ์ด, ํ๋ ์์ํฌ, ํ ๊ท๋ชจ ๋ฑ์ ๊ณ ๋ คํ์ธ์. - โ
ํ์ ๊ธฐ๋ฅ ๋ฆฌ์คํธ ๋ง๋ค๊ธฐ
์: ๋ฒ์ ๊ณ ์ (lock file), ์บ์ ๊ธฐ๋ฅ, ๋ณด์ ์ ๋ฐ์ดํธ ์๋ฆผ ๋ฑ. - ๐ ํจํค์ง ๊ด๋ฆฌ์ ํน์ฑ๊ณผ ์ํ๊ณ ์กฐ์ฌํ๊ธฐ
๊ฐ ๋๊ตฌ์ ์ฅ๋จ์ ์ ๊ณต์ ๋ฌธ์๋ ์ ๋ขฐํ ๋งํ IT ์ ๋ฌธ ๋งค์ฒด์์ ํ์ธํ์ธ์. - ๐ ํ
์คํธ ์ ์ฉํด๋ณด๊ธฐ
์์ ์ํ ํ๋ก์ ํธ์์ ์ง์ ์ค์น, ์ ๋ฐ์ดํธ ๊ฒฝํ์ ์์ผ์ธ์. - ๐ ํ์๊ณผ ํ์ ํ ๊ณต์ ์ฑํ
ํ์ ํด๊ณผ CI/CD ํ์ดํ๋ผ์ธ ์ฐ๋๊น์ง ๊ณ ๋ คํ๋ ๊ฒ ์ข์ต๋๋ค.
โญ ํต์ฌ ์ฒดํฌํฌ์ธํธ ์์ฝ โ๏ธ
โ
ํ๋ก์ ํธ ํน์ฑ๊ณผ ํ ๊ตฌ์ฑ์ ๊ธฐ์ ์์ค ๊ณ ๋ ค ํ์!
โ
์์ ์ ์ธ ๋ฒ์ ๊ณ ์ ์ ์ํ Lock ํ์ผ ํ์ฉ ์ ๊ทน ์ถ์ฒ! (์: package-lock.json
, yarn.lock
)
โ
๊ฐ์ํ๊ฒฝ ํ์ฉ์ผ๋ก ์ ์ญ ์ถฉ๋ ๋ฐฉ์ง (Python pip ์ฌ์ฉ์ ํ์!)
โ
๋ณด์ ์ทจ์ฝ์ ์ ๊ธฐ ์ ๊ฒ๊ณผ ์ต์ ์
๋ฐ์ดํธ ์ ์ง ์ค์!
โ
๋ํ ํ๋ก์ ํธ๋ Maven์ด๋ Gradle์ฒ๋ผ ๊ฒฌ๊ณ ํ ๋น๋ ์์คํ
๊ฒํ ํ์
๐ผ ์ค๋ฌด์์ ์์๋๋ฉด ์ข์ ํ ๐ก
๐น ๋ก์ปฌ ์บ์๋ฅผ ์ ๊ทน ํ์ฉํ๋ฉด ๋ฐ๋ณต ์ค์น ์๊ฐ ์ ๊ฐ ๊ฐ๋ฅํ๋ ์บ์ ๊ฒฝ๋ก ์ง์ ๋ฒ ์๋ฌํ๊ธฐ!
๐น ์ปค์คํ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ๋ง๋ค์ด ์ฌ๋ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ ํ๊ฒ ๋ฐฐํฌํ๋ ๊ฒ๋ ์ข์ ์ ๋ต์ ๋๋ค.
๐น CI/CD ๊ตฌ์ถ ์์๋ ๋ฐ๋์ lock ํ์ผ๊ณผ ํจ๊ป ๋์ํ๋๋ก ํด์ผ ์ฌํ ๊ฐ๋ฅํ ๋น๋๋ฅผ ๋ณด์ฅํ ์ ์์ต๋๋ค!
๐ ์ถ๊ฐ ์๋ฃ ๋ฐ ๊ณต์ ๋งํฌ ๐
- ํ๊ตญ์ ๋ณดํต์ ๊ธฐ์ ํํ(TTA) – ๊ตญ๋ด IT ํ์ค ๋ฐ ํ์ง ์ธ์ฆ ์ ๋ณด ์ฐธ๊ณ ์ฉ
- Python ๊ณต์ Virtual Environment ์ค๋ช
- Maven ๊ณต์ ๋ฌธ์
- Gradle ๊ณต์ ํํ์ด์ง
- OWASP Dependency Check – ์คํ์์ค ์์กด์ฑ ๋ณด์ ์ทจ์ฝ์ ๊ฒ์ฌ ํด
๐ ๋ค์ ๋จ๊ณ ์ ์ ๐ฏ
1๏ธโฃ ํ์ฌ ์ฌ์ฉํ๋ ํจํค์ง ๊ด๋ฆฌ์์ ์ฅ๋จ์ ์ ํ ๋ด ๊ณต์ ํ๊ณ ๊ฐ์ ํฌ์ธํธ ๋ ผ์ํ๊ธฐ!
2๏ธโฃ ์๋ก์ด ๋๊ตฌ๋ฅผ ์ํ ์ ์ฉํ๋ฉฐ ์ํฌํ๋ก์ฐ ์ต์ ํ ์๋ํ๊ธฐ!
3๏ธโฃ ๋ณด์ ์ทจ์ฝ์ ์ค์บ ์๋ํ์ ๋ฒ์ ์ปจํธ๋กค ์ ์ฑ ๊ฐํ ๊ณํ ์ธ์ฐ๊ธฐ!
๋ง๋ฌด๋ฆฌ ์ธ์ฌ ๐โจ
์ฌ๋ฌ๋ถ์ ๊ฐ๋ฐ ์์ฐ์ฑ์ ๊ทน๋ํํ๋ ๋ฐ ์์ด ์ ์ ํ ํจํค์ง ๊ด๋ฆฌ ๋๊ตฌ ์ ํ๊ณผ ํ์ฉ์ ์ ๋ง ์ค์ํฉ๋๋ค! ์ค๋ ์๊ฐํด ๋๋ฆฐ ๋ด์ฉ๋ค์ด ์กฐ๊ธ์ด๋๋ง ๋์์ด ๋์๊ธธ ๋ฐ๋ผ๋ฉฐ, ์์ผ๋ก๋ ํธํ๊ณ ์ฆ๊ฑฐ์ด ๊ฐ๋ฐ ์ํ ํ์๊ธธ ์์ํฉ๋๋ค! ๐๐ ์ธ์ ๋ ๊ถ๊ธํ ์ ์์ผ๋ฉด ๋๊ธ๋ก ์ง๋ฌธ ๋จ๊ฒจ ์ฃผ์ธ์~๐จ๐ป๐ฌ
ํ๋ณตํ ์ฝ๋ฉ ๋์ธ์! ๐ปโค๏ธ๐