True Engineeringμμλ κ³ κ° μλ²μ μ§μμ μΌλ‘ μ λ°μ΄νΈλ₯Ό μ 곡νκΈ° μν νλ‘μΈμ€λ₯Ό μ€μ νμΌλ©° μ΄ κ²½νμ 곡μ νκ³ μΆμ΅λλ€.
μ°μ μ°λ¦¬λ κ³ κ°μ μν μ¨λΌμΈ μμ€ν μ κ°λ°νκ³ μ΄λ₯Ό μ체 Kubernetes ν΄λ¬μ€ν°μ λ°°ν¬νμ΅λλ€. μ΄μ μ°λ¦¬μ κ³ λΆν μ루μ μ κ³ κ°μ νλ«νΌμΌλ‘ μ΄λνμΌλ©°, μ΄λ₯Ό μν΄ μμ μλ μ§μμ λ°°ν¬ νλ‘μΈμ€λ₯Ό μ€μ νμ΅λλ€. λλΆμ μ°λ¦¬λ μ ν νκ²½μ λν λ³νλ₯Ό μ λ¬νλ μΆμ κΈ°κ°μ λ¨μΆνμ΅λλ€.
μ΄ λ¬Έμμμλ CD(μ§μμ λ°°ν¬) νλ‘μΈμ€μ λͺ¨λ λ¨κ³ λλ κ³ κ° νλ«νΌμ λν μ λ°μ΄νΈ μ 곡μ λν΄ μ€λͺ ν©λλ€.
- μ΄ κ³Όμ μ μ΄λ»κ² μμλλμ?
- κ³ κ°μ Git μ μ₯μμ λκΈ°ν
- λ°±μλμ νλ‘ νΈμλμ 쑰립,
- ν μ€νΈ νκ²½μμ μλ μ ν리μΌμ΄μ λ°°ν¬
- Prodμ μλ λ°°ν¬
κ·Έ κ³Όμ μμ μ€μ μΈλΆμ 보λ₯Ό 곡μ νκ² μ΅λλ€.

1. CD μμ
μ§μμ μΈ λ°°ν¬λ κ°λ°μκ° Git 리ν¬μ§ν 리μ λ¦΄λ¦¬μ€ λΆκΈ°μ λ³κ²½ μ¬νμ νΈμνλ κ²μΌλ‘ μμλ©λλ€.
μ°λ¦¬ μ ν리μΌμ΄μ μ λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²μμ μ€νλλ©° λͺ¨λ κ΅¬μ± μμλ νλμ μ μ₯μμ μ μ₯λ©λλ€. λλΆμ λ§μ΄ν¬λ‘μλΉμ€ μ€ νλκ° λ³κ²½λλλΌλ λͺ¨λ λ§μ΄ν¬λ‘μλΉμ€κ° μμ§λκ³ μ€μΉλ©λλ€.
μ°λ¦¬λ μ¬λ¬ κ°μ§ μ΄μ λ‘ νλμ μ μ₯μλ₯Ό ν΅ν΄ μμ μ ꡬμ±νμ΅λλ€.
- κ°λ° μ©μ΄μ± - μ ν리μΌμ΄μ μ΄ νλ°ν κ°λ° μ€μ΄λ―λ‘ λͺ¨λ μ½λλ₯Ό ν λ²μ μμ ν μ μμ΅λλ€.
- λ¨μΌ μμ€ν μΌλ‘μμ μ ν리μΌμ΄μ μ΄ λͺ¨λ ν μ€νΈλ₯Ό ν΅κ³Όνκ³ κ³ κ°μ νλ‘λμ νκ²½μ μ 곡λλλ‘ λ³΄μ₯νλ λ¨μΌ CI/CD νμ΄νλΌμΈμ λλ€.
- λ²μ μ νΌλμ μ κ±°ν©λλ€. λ§μ΄ν¬λ‘μλΉμ€ λ²μ λ§΅μ μ μ₯νκ³ Helm μ€ν¬λ¦½νΈμμ κ° λ§μ΄ν¬λ‘μλΉμ€μ λν ꡬμ±μ μ€λͺ ν νμκ° μμ΅λλ€.
2. κ³ κ° μμ€ μ½λμ Git μ μ₯μμ λκΈ°ν
λ³κ²½ μ¬νμ κ³ κ°μ Git μ μ₯μμ μλμΌλ‘ λκΈ°νλ©λλ€. κ±°κΈ°μμ λΆκΈ°λ₯Ό μ λ°μ΄νΈν ν μμλκ³ κ³μ λ°°ν¬λλ μ ν리μΌμ΄μ μ΄μ λΈλ¦¬κ° ꡬμ±λ©λλ€. λ νλ‘μΈμ€ λͺ¨λ Git μ μ₯μμ νκ²½μμ μμλ©λλ€.
κ°λ° λ° ν μ€νΈλ₯Ό μν΄μλ μ체 νκ²½μ΄ νμνκΈ° λλ¬Έμ κ³ κ°μ μ μ₯μμ μ§μ μμ ν μ μμ΅λλ€. μ°λ¦¬λ μ΄λ¬ν λͺ©μ μΌλ‘ Git μ μ₯μλ₯Ό μ¬μ©ν©λλ€. μ΄λ Git μ μ₯μμ λκΈ°νλ©λλ€. κ°λ°μκ° μ μ₯μμ μ μ ν λΆκΈ°μ λ³κ²½ μ¬νμ κ²μνλ©΄ GitLabμ μ¦μ μ΄λ¬ν λ³κ²½ μ¬νμ κ³ κ°μκ² νΈμν©λλ€.

κ·Έλ° λ€μ 쑰립μ ν΄μΌ ν©λλ€. λ°±μλ λ° νλ°νΈμλ 쑰립, ν
μ€νΈ λ° νλ‘λμ
μ λ¬ λ± μ¬λ¬ λ¨κ³λ‘ ꡬμ±λ©λλ€.
3. λ°±μλμ νλ‘ νΈμλ 쑰립
λ°±μλμ νλ°νΈμλ ꡬμΆμ GitLab Runner μμ€ν μμ μνλλ λ κ°μ§ λ³λ ¬ μμ μ λλ€. μλ μ΄μ λΈλ¦¬ ꡬμ±μ λμΌν μ μ₯μμ μμ΅λλ€.
.
GitLab Runnerλ νμν μ μ₯μμμ μ½λλ₯Ό κ°μ Έμμ Java μ ν리μΌμ΄μ λΉλ λͺ λ ΉμΌλ‘ μ‘°ν©νμ¬ Docker λ μ§μ€νΈλ¦¬λ‘ 보λ λλ€. μ¬κΈ°μμλ λ°±μλμ νλ°νΈμλλ₯Ό μ‘°ν©νκ³ Docker μ΄λ―Έμ§λ₯Ό μ»μ΄ κ³ κ° μΈ‘ μ μ₯μμ μ μ₯ν©λλ€. μ°λ¦¬κ° μ¬μ©νλ Docker μ΄λ―Έμ§λ₯Ό κ΄λ¦¬νκΈ° μν΄ .
μ΄λ―Έμ§ λ²μ μ Dockerμ κ²μλ λ¦΄λ¦¬μ€ λ²μ κ³Ό λκΈ°νν©λλ€. μνν μλμ μν΄ λͺ κ°μ§ μ‘°μ μ μννμ΅λλ€.
1. ν μ€νΈ νκ²½κ³Ό νλ‘λμ νκ²½ κ°μ 컨ν μ΄λκ° λ€μ λΉλλμ§ μμ΅λλ€. λμΌν 컨ν μ΄λκ° ν μ€νΈ νκ²½κ³Ό νλ‘λμ νκ²½ λͺ¨λμμ λ€μ λΉλνμ§ μκ³ λ λͺ¨λ μ€μ , νκ²½ λ³μ λ° μλΉμ€μ μλν μ μλλ‘ λ§€κ°λ³μνλ₯Ό μννμ΅λλ€.
2. Helmμ ν΅ν΄ μ ν리μΌμ΄μ μ μ λ°μ΄νΈνλ €λ©΄ ν΄λΉ λ²μ μ μ§μ ν΄μΌ ν©λλ€. μ°λ¦¬λ λ°±μλ, νλ‘ νΈμλλ₯Ό ꡬμΆνκ³ μ ν리μΌμ΄μ μ μ λ°μ΄νΈν©λλ€. μ΄λ μΈ κ°μ§ λ€λ₯Έ μμ μ΄λ―λ‘ μ΄λμμλ λμΌν λ²μ μ μ ν리μΌμ΄μ μ μ¬μ©νλ κ²μ΄ μ€μν©λλ€. μ΄ μμ μμλ K8S ν΄λ¬μ€ν° ꡬμ±κ³Ό μ ν리μΌμ΄μ μ΄ λμΌν Git μ μ₯μμ μμΌλ―λ‘ Git κΈ°λ‘μ λ°μ΄ν°λ₯Ό μ¬μ©ν©λλ€.
λͺ
λ Ή μ€ν κ²°κ³Όμμ μ ν리μΌμ΄μ
λ²μ μ μ»μ΅λλ€.
git describe --tags --abbrev=7.
4. ν μ€νΈ νκ²½(UAT)μ λν λͺ¨λ λ³κ²½ μ¬ν μλ λ°°ν¬
μ΄ λΉλ μ€ν¬λ¦½νΈμ λ€μ λ¨κ³λ K8S ν΄λ¬μ€ν°λ₯Ό μλμΌλ‘ μ λ°μ΄νΈνλ κ²μ λλ€. μ΄λ μ 체 μ ν리μΌμ΄μ μ΄ λΉλλκ³ λͺ¨λ μν°ν©νΈκ° Docker λ μ§μ€νΈλ¦¬μ κ²μλ κ²½μ°μ λ°μν©λλ€. μ΄ν ν μ€νΈ νκ²½ μ λ°μ΄νΈκ° μμλ©λλ€.
ν΄λ¬μ€ν° μ λ°μ΄νΈλ λ€μμ μ¬μ©νμ¬ μμλ©λλ€. . κ²°κ³Όμ μΌλ‘ κ³νλλ‘ μ§νλμ§ μμ κ²½μ° Helmμ λͺ¨λ λ³κ²½ μ¬νμ μλμΌλ‘ λ 립μ μΌλ‘ λ‘€λ°±ν©λλ€. κ·Έμ μμ μ ν΅μ λ νμκ° μμ΅λλ€.
μ°λ¦¬λ μ΄μ λΈλ¦¬μ ν¨κ» K8S ν΄λ¬μ€ν° ꡬμ±μ μ 곡ν©λλ€. λ°λΌμ λ€μ λ¨κ³λ configMap, λ°°ν¬, μλΉμ€, λΉλ° λ° λ³κ²½λ κΈ°ν K8S ꡬμ±μ μ λ°μ΄νΈνλ κ²μ λλ€.
κ·Έλ° λ€μ Helmμ ν μ€νΈ νκ²½μμ μ ν리μΌμ΄μ μ체μ RollOut μ λ°μ΄νΈλ₯Ό μ€νν©λλ€. μ ν리μΌμ΄μ μ΄ νλ‘λμ μ λ°°ν¬λκΈ° μ μ λλ€. μ΄λ μ¬μ©μκ° ν μ€νΈ νκ²½μ ν¬ν¨λ λΉμ¦λμ€ κΈ°λ₯μ μλμΌλ‘ ν μ€νΈν μ μλλ‘ νκΈ° μν κ²μ λλ€.
5. Prodμ λν λͺ¨λ λ³κ²½ μ¬ν μλ λ°°ν¬
νλ‘λμ νκ²½μ μ λ°μ΄νΈλ₯Ό λ°°ν¬νλ €λ©΄ GitLabμμ λ²νΌ νλλ§ ν΄λ¦νλ©΄ λ©λλ€. κ·Έλ¬λ©΄ 컨ν μ΄λκ° νλ‘λμ νκ²½μ μ¦μ μ λ¬λ©λλ€.
λμΌν μ ν리μΌμ΄μ μ λ€μ ꡬμΆνμ§ μκ³ λ ν μ€νΈ λ° νλ‘λμ λ± λ€μν νκ²½μμ μλν μ μμ΅λλ€. μ ν리μΌμ΄μ μμ μ무κ²λ λ³κ²½νμ§ μκ³ λμΌν μν°ν©νΈλ₯Ό μ¬μ©νκ³ λ§€κ°λ³μλ₯Ό μΈλΆμμ μ€μ ν©λλ€.
μ ν리μΌμ΄μ μ€μ μ μ μ°ν λ§€κ°λ³μνλ μ ν리μΌμ΄μ μ΄ μ€νλ νκ²½μ λ°λΌ λ¬λΌμ§λλ€. λͺ¨λ νκ²½ μ€μ μ μΈλΆλ‘ μ΄λνμ΅λλ€. λͺ¨λ κ²μ K8S κ΅¬μ± λ° Helm λ§€κ°λ³μλ₯Ό ν΅ν΄ λ§€κ°λ³μνλ©λλ€. Helmμ΄ ν μ€νΈ νκ²½μ μ΄μ λΈλ¦¬λ₯Ό λ°°ν¬νλ©΄ ν μ€νΈ μ€μ μ΄ ν΄λΉ μ΄μ λΈλ¦¬μ μ μ©λκ³ μ ν μ€μ μ΄ νλ‘λμ νκ²½μ μ μ©λ©λλ€.
κ°μ₯ μ΄λ €μ λ μ μ μ¬μ©λλ λͺ¨λ μλΉμ€μ νκ²½μ μμ‘΄νλ λ³μλ₯Ό λ§€κ°λ³μννκ³ μ΄λ₯Ό Helmμ© νκ²½ λ³μ λ° νκ²½ λ§€κ°λ³μμ μ€λͺ -ꡬμ±μΌλ‘ λ³ννλ κ²μ΄μμ΅λλ€.
μ ν리μΌμ΄μ μ€μ μ νκ²½ λ³μλ₯Ό μ¬μ©ν©λλ€. ν΄λΉ κ°μ Go ν νλ¦Ώμ μ¬μ©νμ¬ ν νλ¦Ώνλλ K8S configmapμ μ¬μ©νμ¬ μ»¨ν μ΄λμ μ€μ λ©λλ€. μλ₯Ό λ€μ΄ νκ²½ λ³μλ₯Ό λλ©μΈ μ΄λ¦μΌλ‘ μ€μ νλ μμ μ λ€μκ³Ό κ°μ΄ μνν μ μμ΅λλ€.
APP_EXTERNAL_DOMAIN: {{ (pluck .Values.global.env .Values.app.properties.app_external_domain | first) }}
.Values.global.env β μ΄ λ³μλ νκ²½(prod, stage, UAT)μ μ΄λ¦μ μ μ₯ν©λλ€.
.Values.app.properties.app_external_domain β μ΄ λ³μμμλ .Values.yaml νμΌμ μνλ λλ©μΈμ μ€μ ν©λλ€.
μ ν리μΌμ΄μ μ μ λ°μ΄νΈν λ Helmμ ν νλ¦Ώμμ configmap.yaml νμΌμ μμ±νκ³ μ ν리μΌμ΄μ μ λ°μ΄νΈκ° μμλλ νκ²½μ λ°λΌ APP_EXTERNAL_DOMAIN κ°μ μνλ κ°μΌλ‘ μ±μλλ€. μ΄ λ³μλ μ΄λ―Έ 컨ν μ΄λμ μ€μ λμ΄ μμ΅λλ€. μ ν리μΌμ΄μ μμ μ‘μΈμ€ν μ μμΌλ―λ‘ κ° μ ν리μΌμ΄μ νκ²½μ μ΄ λ³μμ λν΄ μλ‘ λ€λ₯Έ κ°μ κ°μ΅λλ€.
λΉκ΅μ μ΅κ·Όμλ configMaps μμ μ ν¬ν¨νμ¬ K8S μ§μμ΄ Spring Cloudμ λνλ¬μ΅λλ€. . νλ‘μ νΈκ° μ κ·Ήμ μΌλ‘ κ°λ°λκ³ κΈκ²©νκ² λ³ννλ λμ νλ‘λμ μμλ μ¬μ©ν μ μμ΅λλ€. κ·Έλ¬λ μ°λ¦¬λ μνλ₯Ό μ κ·Ήμ μΌλ‘ λͺ¨λν°λ§νκ³ μ΄λ₯Ό DEV ꡬμ±μ μ¬μ©ν©λλ€. μμ νλλ λλ‘ νκ²½ λ³μ μ¬μ©μμ νκ²½ λ³μ μ¬μ©μΌλ‘ μ ννκ² μ΅λλ€.
μ 체λ‘
λ°λΌμ μ§μμ μΈ λ°°ν¬κ° ꡬμ±λμ΄ μλν©λλ€. λͺ¨λ μ λ°μ΄νΈλ ν λ²μ ν€ μ λ ₯μΌλ‘ λ°μν©λλ€. μ ν νκ²½μ λν λ³κ²½ μ¬νμ μλμΌλ‘ μ λ¬λ©λλ€. κ·Έλ¦¬κ³ μ€μν κ²μ μ λ°μ΄νΈκ° μμ€ν μ μ€μ§νμ§ μλλ€λ κ²μ λλ€.

ν₯ν κ³ν: μλ λ°μ΄ν°λ² μ΄μ€ λ§μ΄κ·Έλ μ΄μ
μ°λ¦¬λ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ κ·Έλ μ΄λνκ³ μ΄λ¬ν λ³κ²½ μ¬νμ λ‘€λ°±ν κ°λ₯μ±μ κ³ λ €νμ΅λλ€. κ²°κ΅ λ κ°μ§ μλ‘ λ€λ₯Έ λ²μ μ μ ν리μΌμ΄μ μ΄ λμμ μ€νλκ³ μμ΅λλ€. μ΄μ λ²μ μ μ€ν μ€μ΄κ³ μ λ²μ μ μ€ν μ€μ λλ€. κ·Έλ¦¬κ³ μ λ²μ μ΄ μλνλ€κ³ νμ νλ κ²½μ°μλ§ μ΄μ λ²μ μ λ κ²μ λλ€. λ°μ΄ν°λ² μ΄μ€ λ§μ΄κ·Έλ μ΄μ μ ν΅ν΄ λ λ²μ μ μ ν리μΌμ΄μ λͺ¨λμμ μμ ν μ μμ΄μΌ ν©λλ€.
λ°λΌμ λ¨μν μ»¬λΌ μ΄λ¦μ΄λ κΈ°ν λ°μ΄ν°λ₯Ό λ³κ²½ν μλ μμ΅λλ€. κ·Έλ¬λ μ μ΄μ λ§λ€κ³ μ΄μ μ΄μ λ°μ΄ν°λ₯Ό ν΄λΉ μ΄μ 볡μ¬ν λ€μ, λ°μ΄ν°λ₯Ό μ λ°μ΄νΈν λ λμμ λ€λ₯Έ μ΄μ 볡μ¬νκ³ μ λ°μ΄νΈνλ νΈλ¦¬κ±°λ₯Ό μμ±ν μ μμ΅λλ€. κ·Έλ¦¬κ³ μ λ²μ μ μ ν리μΌμ΄μ μ΄ μ±κ³΅μ μΌλ‘ λ°°ν¬λ ν μΆμ ν μ§μ κΈ°κ°μ΄ μ§λλ©΄ λΆνμν΄μ§ μ΄μ μ΄κ³Ό νΈλ¦¬κ±°λ₯Ό μμ ν μ μμ΅λλ€.
μ λ²μ μ μ ν리μΌμ΄μ μ΄ μ λλ‘ μλνμ§ μμΌλ©΄ μ΄μ λ²μ μ λ°μ΄ν°λ² μ΄μ€λ₯Ό ν¬ν¨νμ¬ μ΄μ λ²μ μΌλ‘ λ‘€λ°±ν μ μμ΅λλ€. κ°λ¨ν λ§ν΄μ, μ°λ¦¬μ λ³κ²½ μ¬νμ ν΅ν΄ μ¬λ¬ λ²μ μ μ ν리μΌμ΄μ μ λμμ μμ ν μ μκ² λμμ΅λλ€.
K8S μμ
μ ν΅ν΄ λ°μ΄ν°λ² μ΄μ€ λ§μ΄κ·Έλ μ΄μ
μ μλννκ³ μ΄λ₯Ό CD νλ‘μΈμ€μ ν΅ν©ν κ³νμ
λλ€. κ·Έλ¦¬κ³ μ°λ¦¬λ μ΄ κ²½νμ HabrΓ©μμ νμ€ν 곡μ ν κ²μ
λλ€.
μΆμ² : habr.com
