π λΉλ(Build) κ³Όμ μ λ§€μ° μ½κ² μ 볡νλ 5λ¨κ³ μ΄κ°λ¨ κ°μ΄λ
λ μμΈν λ΄μ©μ μλ νλλ°μ€ ν΄λ¦!
λ μμΈν μλ£ λ°λ‘보기
λͺ©μ°¨
- λΉλλ 무μμ΄λ©° μ νμνκ°?
- λΉλ μ€λΉ: νκ²½ μ€μ μ A to Z
- μλν λꡬ μ ν: λΉμ μ νλ‘μ νΈμ λ§λ μ΅μ μ 무기
- μ΄λ³΄μλ₯Ό μν ν΅μ¬ λΉλ λͺ λ Ήμ΄ λ° μ€ν λ°©λ²
- λΉλ μ±κ³΅ ν κ²μ¦ λ° λ°°ν¬ μ λ΅
1. λΉλλ 무μμ΄λ©° μ νμνκ°?
μννΈμ¨μ΄ κ°λ° κ³Όμ μμ 'λΉλ(Build)'λ λ¨μν μ½λλ₯Ό μ€ν νμΌλ‘ λ§λλ νμ μ΄μμ μλ―Έλ₯Ό μ§λλλ€. λΉλλ μμ€ μ½λλ₯Ό μ»΄ν¨ν°κ° μ§μ μ€νν μ μλ νν(λ°μ΄λ리 νμΌ, μ€ν νμΌ, λΌμ΄λΈλ¬λ¦¬ λ±)λ‘ λ³ννλ μ 체 κ³Όμ μ μΌμ»«μ΅λλ€. μ΄ κ³Όμ μλ μ»΄νμΌ(Compile) μΈμλ νμν μΈλΆ λΌμ΄λΈλ¬λ¦¬λ μ’ μμ±(Dependencies)μ λ€μ΄λ‘λνκ³ , νμΌλ€μ ν¨ν€μ§(Packaging)νλ©°, μ΅μ’ μ μΈ μ€ν νκ²½μ λ§κ² μ€λΉνλ λͺ¨λ μμ μ΄ ν¬ν¨λ©λλ€.
λΉλκ° νμν κ·Όλ³Έμ μΈ μ΄μ λ κ°λ°μκ° μμ±ν κ³ κΈ μΈμ΄(μ: Java, C++, Python μ€ν¬λ¦½νΈ)λ μ»΄ν¨ν°μ CPUκ° μ§μ μ΄ν΄ν μ μκΈ° λλ¬Έμ λλ€. CPUλ 0κ³Ό 1λ‘ μ΄λ£¨μ΄μ§ κΈ°κ³μ΄λ§ μ½μ μ μμ΅λλ€. λΉλ κ³Όμ μ μ΄ μΈμ΄μ κ°κ·Ήμ λ©μμ£Όλ νμμ μΈ λ€λ¦¬ μν μ ν©λλ€. λν, λΉλλ κ°λ° νκ²½κ³Ό μ€μ μλΉμ€ νκ²½μ μ°¨μ΄λ₯Ό μ€μ΄κ³ , λͺ¨λ κ°λ°μκ° λμΌν νκ²½μμ μΌκ΄λ κ²°κ³Όλ¬Όμ λ§λ€μ΄λΌ μ μλλ‘ λ³΄μ₯νλ μννΈμ¨μ΄ 곡νμ ν΅μ¬ λ¨κ³μ λλ€.
2. λΉλ μ€λΉ: νκ²½ μ€μ μ A to Z
μ±κ³΅μ μΈ λΉλλ₯Ό μν 첫걸μμ μ¬λ°λ₯Έ κ°λ° νκ²½μ μ€μ νλ κ²μ λλ€. μ΄ λ¨κ³λ νλ‘μ νΈμ μΈμ΄μ νλ μμν¬μ λ°λΌ λ¬λΌμ§μ§λ§, ν΅μ¬ μμΉμ λμΌν©λλ€.
A. νμ λꡬ μ€μΉ:
- μ»΄νμΌλ¬/μΈν°ν리ν°: μ¬μ© μΈμ΄μ λ§λ μ΅μ λ²μ μ μ€μΉν΄μΌ ν©λλ€. (μ: Java Development Kit(JDK) for Java, Node.js for JavaScript, Python μΈν°ν리ν°).
- λ²μ κ΄λ¦¬ μμ€ν (VCS): μμ€ μ½λλ₯Ό κ΄λ¦¬νκΈ° μν΄ Gitκ³Ό κ°μ VCSλ₯Ό μ€μ νκ³ , μ μ₯μ(Repository)μμ μ΅μ μ½λλ₯Ό λ‘μ»¬λ‘ λ°μμμΌ ν©λλ€.
- λΉλ λꡬ: Maven, Gradle (Java), npm, Yarn (JavaScript), pip (Python) λ± νλ‘μ νΈμ μ ν©ν λΉλ λꡬλ₯Ό μ€μΉνκ³ νκ²½ λ³μμ λ±λ‘ν΄μΌ ν©λλ€.
B. μ’ μμ± κ΄λ¦¬:
κ±°μ λͺ¨λ νλ μννΈμ¨μ΄ νλ‘μ νΈλ μΈλΆ λΌμ΄λΈλ¬λ¦¬μ μμ‘΄ν©λλ€. λΉλ λꡬλ νλ‘μ νΈ μ€μ νμΌ(μ: pom.xml, build.gradle, package.json)μ μ½μ΄ νμν λͺ¨λ μ’
μμ± λΌμ΄λΈλ¬λ¦¬λ₯Ό μλμΌλ‘ λ€μ΄λ‘λνκ³ λ‘컬 μΊμμ μ μ₯ν©λλ€. μ΄ κ³Όμ μ νλ‘μ νΈκ° μ λλ‘ μλνλ λ° νμμ μ
λλ€. μ’
μμ±μ΄ λλ½λκ±°λ λ²μ μΆ©λμ΄ λ°μνλ©΄ λΉλλ μ€ν¨νκ² λ©λλ€.
C. νκ²½ λ³μ νμΈ:
λΉλ νλ‘μΈμ€λ νΉμ νκ²½ λ³μ(μ: $JAVA_HOME$, $M2_HOME$)μ μμ‘΄νλ κ²½μ°κ° λ§μ΅λλ€. μ΄λ¬ν λ³μλ€μ΄ μ¬λ°λ₯Έ κ²½λ‘λ₯Ό κ°λ¦¬ν€κ³ μλμ§ νμΈν΄μΌ λΉλ λκ΅¬κ° νμν λꡬλ€μ μ°Ύμ μ¬μ©ν μ μμ΅λλ€.
3. μλν λꡬ μ ν: λΉμ μ νλ‘μ νΈμ λ§λ μ΅μ μ 무기
μλμΌλ‘ λͺ¨λ νμΌμ μ»΄νμΌνκ³ ν¨ν€μ§νλ κ²μ λΉν¨μ¨μ μ΄λ©° μ€λ₯ κ°λ₯μ±μ΄ λμ΅λλ€. λ°λΌμ 'λ§€μ° μ¬μ΄ λ°©λ²'μΌλ‘ λΉλλ₯Ό νκΈ° μν΄μλ κ°λ ₯ν λΉλ μλν λꡬμ μ¬μ©μ΄ νμμ μ λλ€. λꡬμ μ νμ μ£Όλ‘ μ¬μ© μΈμ΄μ λ°λΌ κ²°μ λ©λλ€.
| μΈμ΄/νλ«νΌ | μΆμ² λΉλ λꡬ | μ£Όμ νΉμ§ |
|---|---|---|
| Java | Maven | XML κΈ°λ° μ€μ , μμ μ μ΄κ³ κ΄λ²μνκ² μ¬μ©λ¨, μ ννλ νλ‘μ νΈ κ΅¬μ‘°. |
| Java | Gradle | Groovy/Kotlin DSL κΈ°λ° μ€μ , μ μ°νκ³ μ±λ₯μ΄ μ°μνλ©°, λκ·λͺ¨ λ©ν° νλ‘μ νΈμ μ ν©. |
| JavaScript/Node.js | npm / Yarn | ν¨ν€μ§ κ΄λ¦¬ λ° μ€ν¬λ¦½νΈ μ€ν, μΉν©(Webpack)μ΄λ λ‘€μ (Rollup)κ³Ό ν¨κ» μ¬μ©λμ΄ λ²λ€λ§/νΈλμ€νμΌλ§ μν. |
| C/C++ | CMake / Make | νλ«νΌ λ 립μ μΈ λΉλ νμΌ μμ±, 볡μ‘ν μμ€ν λΉλμ κ°μ . |
| .NET | MSBuild | Visual Studioμ ν΅ν©, .NET μνκ³μ νμ€ λΉλ μμ€ν . |
μμ: Mavenμ μ¬μ©ν λΉλ μλν
Java νλ‘μ νΈμμ Mavenμ μ¬μ©νλ€λ©΄, λΉμ μ΄ ν΄μΌ ν μΌμ νλ‘μ νΈ λ£¨νΈ λλ ν 리μ pom.xml νμΌμ μμ±νκ³ κ·Έ μμ νλ‘μ νΈ μ 보, μ’
μμ± λͺ©λ‘, λΉλ νλ¬κ·ΈμΈ μ€μ λ±μ μ μνλ κ²λΏμ
λλ€. Mavenμ μ΄ νμΌμ κΈ°λ°μΌλ‘ λͺ¨λ 볡μ‘ν μμ
μ μλμΌλ‘ μ²λ¦¬ν΄ μ€λλ€.
4. μ΄λ³΄μλ₯Ό μν ν΅μ¬ λΉλ λͺ λ Ήμ΄ λ° μ€ν λ°©λ²
λΉλ μλν λꡬλ₯Ό μ€μΉνκ³ νλ‘μ νΈ μ€μ μ λ§μ³€λ€λ©΄, μ€μ λΉλ μ€νμ λ§€μ° κ°λ¨ν©λλ€. λλΆλΆμ κ²½μ° λ¨ νλμ λͺ λ Ήμ΄λ‘ μ 체 λΉλ νλ‘μΈμ€λ₯Ό μμν μ μμ΅λλ€.
A. ν΄λ¦° (Clean):
μ΄ λͺ λ Ήμ΄λ μ΄μ μ λΉλνμ¬ μμ±λ λͺ¨λ κ²°κ³Όλ¬Ό(λ°μ΄λ리 νμΌ, μμ λλ ν 리 λ±)μ μμ νμ¬ κΉ¨λν μνμμ λΉλλ₯Ό μμν μ μλλ‘ ν©λλ€. μ΄λ μ΄μ λΉλμ μμ¬λ‘ μΈν΄ λ°μν μ μλ μ€λ₯λ₯Ό λ°©μ§νλ μ€μν λ¨κ³μ λλ€.
Maven:
mvn cleanGradle:
gradle cleannpm:
npm run clean(μ€ν¬λ¦½νΈλ‘ μ μλ κ²½μ°)
B. λΉλ (Build/Compile/Package):
μ΄κ²μ΄ ν΅μ¬ λͺ λ Ήμ΄μ λλ€. μμ€ μ½λλ₯Ό μ»΄νμΌνκ³ , μ’ μμ±μ μ²λ¦¬νλ©°, ν μ€νΈλ₯Ό μ€ννκ³ (μ€μ λ κ²½μ°), μ΅μ’ μ€ν κ°λ₯ν ν¨ν€μ§(JAR, WAR, EXE λ±)λ₯Ό μμ±ν©λλ€.
Maven:
mvn package(λλmvn install- λ‘컬 μ μ₯μμ κ²°κ³Όλ¬Όμ λ°°ν¬)Gradle:
gradle buildnpm:
npm run build(λλΆλΆμ νλ‘μ νΈμμ μ½λλ₯Ό λ²λ€λ§νκ³ μ΅μ ν)
λͺ
λ Ήμ΄λ₯Ό μ€ννλ©΄, λꡬλ μ€μ νμΌμ λ°λΌ νμν λ¨κ³λ₯Ό μμ°¨μ μΌλ‘ μ§ννλ©° μ§ν μν©κ³Ό μ±κ³΅/μ€ν¨ μ¬λΆλ₯Ό μ½μμ μΆλ ₯ν©λλ€. μ±κ³΅μ μΌλ‘ λΉλκ° μλ£λλ©΄ λ³΄ν΅ νλ‘μ νΈ λ΄μ target/ λλ build/ λλ ν 리μ μ΅μ’
κ²°κ³Ό νμΌμ΄ μμ±λ©λλ€.
5. λΉλ μ±κ³΅ ν κ²μ¦ λ° λ°°ν¬ μ λ΅
λΉλκ° μ±κ³΅μ μΌλ‘ μλ£λμλ€κ³ ν΄μ λμ΄ μλλλ€. μμ±λ κ²°κ³Όλ¬Όμ΄ μλν λλ‘ μλνλμ§ νμΈνκ³ , μ΄λ₯Ό μ¬μ©μμκ² μ 곡ν μ μλλ‘ λ°°ν¬ν΄μΌ ν©λλ€.
A. κ²°κ³Όλ¬Ό κ²μ¦:
- λ¨μ/ν΅ν© ν μ€νΈ: λΉλ κ³Όμ μ ν μ€νΈ μ€νμ΄ ν¬ν¨λμ΄ μλ€λ©΄, λͺ¨λ ν μ€νΈκ° ν΅κ³Όνλμ§ νμΈν΄μΌ ν©λλ€.
- μλ μ€ν λ° νμΈ: μμ±λ μ€ν νμΌ(μ: JAR νμΌ)μ μ§μ μ€ννμ¬ κΈ°λ³Έμ μΈ κΈ°λ₯μ΄ μ μ μλνλμ§ νμΈν©λλ€.
- νμΌ ν¬κΈ° λ° λ΄μ© νμΈ: μμ±λ ν¨ν€μ§ νμΌμ ν¬κΈ°κ° μμ λ²μ λ΄μ μλμ§, νμν λͺ¨λ νμΌ(리μμ€, μ€μ νμΌ)μ΄ ν¬ν¨λμ΄ μλμ§ νμΈν©λλ€.
B. μ§μμ ν΅ν©/μ§μμ λ°°ν¬ (CI/CD) λμ :
'λ§€μ° μ¬μ΄ λ°©λ²'μ κΆκ·Ήμ λΉλ κ³Όμ μ μμ ν μλννλ κ²μ λλ€. Jenkins, GitHub Actions, GitLab CI, CircleCIμ κ°μ CI/CD λꡬλ₯Ό μ¬μ©νλ©΄, κ°λ°μκ° μ½λλ₯Ό μ μ₯μμ νΈμ(Push)νλ μκ° μλμΌλ‘ ν΄λ¦°, λΉλ, ν μ€νΈ, μ¬μ§μ΄ λ°°ν¬κΉμ§ λͺ¨λ κ³Όμ μ΄ μ€νλλλ‘ μ€μ ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ λΉλ μ€λ₯λ₯Ό μ¦μ κ°μ§νκ³ , μμ μ μΈ μννΈμ¨μ΄λ₯Ό λΉ λ₯΄κ² μ 곡ν μ μμ΅λλ€.
CI/CD νμ΄νλΌμΈμ ꡬμΆνλ©΄, κ°λ°μλ λͺ λ Ήμ΄ λͺ μ€μ μ λ ₯νλ μλμ μΈ μμ μμ λ²μ΄λ, μ½λ μμ±μλ§ μ§μ€ν μ μκ² λμ΄ λΉλ κ΄λ¦¬κ° ν¨μ¬ μ¬μμ§κ³ κ°λ° μλκ° νκΈ°μ μΌλ‘ ν₯μλ©λλ€. μ΄λ νλ μννΈμ¨μ΄ κ°λ°μμ λΉλλ₯Ό μ½κ² λ§λλ κ°μ₯ κ°λ ₯ν μ λ΅μ λλ€.
λ μμΈν λ΄μ©μ μλ νλλ°μ€ ν΄λ¦!
λ μμΈν μλ£ λ°λ‘보기