DevOps

[DevOps] DevOps의 도ꡬ와 기술 μŠ€νƒ

데보 😎 2024. 8. 12. 16:42
728x90
λ°˜μ‘ν˜•

 

DevOpsλ₯Ό μ΄ν•΄ν•˜κ³  μ‹€μ²œν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μ–‘ν•œ 도ꡬ와 기술 μŠ€νƒμ„ 잘 ν™œμš©ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

DevOpsμ—μ„œ 자주 μ‚¬μš©λ˜λŠ” μ£Όμš” 도ꡬ듀을 μ‚΄νŽ΄λ³΄κ³ , 각각의 도ꡬ가 μ–΄λ–€ 역할을 ν•˜λ©°, μ–΄λ–»κ²Œ μ‚¬μš©λ˜λŠ”μ§€μ— λŒ€ν•΄ μ˜ˆμ‹œμ™€ ν•¨κ»˜ μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

1. Jenkins: 지속적인 톡합/배포의 μ—”μ§„

 

 

 

Jenkinsλž€ λ¬΄μ—‡μΈκ°€μš”?

 

JenkinsλŠ” μ†Œν”„νŠΈμ›¨μ–΄ 개발 κ³Όμ •μ—μ„œ μ½”λ“œμ˜ λ³€κ²½ 사항을 μ§€μ†μ μœΌλ‘œ 톡합(CI)ν•˜κ³  배포(CD)ν•˜λŠ” μž‘μ—…μ„ μžλ™ν™”ν•΄ μ£ΌλŠ” λ„κ΅¬μž…λ‹ˆλ‹€. κ°œλ°œμžκ°€ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜κ³  이λ₯Ό μ†ŒμŠ€ μ½”λ“œ μ €μž₯μ†Œ(Git λ“±)에 ν‘Έμ‹œν•˜λ©΄, Jenkinsκ°€ μžλ™μœΌλ‘œ μ½”λ“œλ₯Ό λΉŒλ“œν•˜κ³ , ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜λ©°, λ¬Έμ œκ°€ μ—†λ‹€λ©΄ μƒˆλ‘œμš΄ λ²„μ „μ˜ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό 배포할 수 있게 ν•΄μ€λ‹ˆλ‹€.

 

 

μ˜ˆμ‹œ

 

예λ₯Ό λ“€μ–΄, μ—¬λŸ¬ λͺ…μ˜ κ°œλ°œμžκ°€ ν˜‘μ—…ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•˜κ³  μžˆλ‹€κ³  상상해 λ΄…μ‹œλ‹€. 각 κ°œλ°œμžλŠ” μžμ‹ μ˜ μž‘μ—…μ„ 마칠 λ•Œλ§ˆλ‹€ Git에 μ½”λ“œλ₯Ό ν‘Έμ‹œν•©λ‹ˆλ‹€. JenkinsλŠ” 주기적으둜 λ˜λŠ” μ½”λ“œκ°€ ν‘Έμ‹œλ  λ•Œλ§ˆλ‹€ 이λ₯Ό κ°μ§€ν•˜μ—¬ μžλ™μœΌλ‘œ λΉŒλ“œλ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€. λ§Œμ•½ λΉŒλ“œ κ³Όμ •μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ JenkinsλŠ” ν•΄λ‹Ή 문제λ₯Ό κ°œλ°œμžμ—κ²Œ μ¦‰μ‹œ μ•Œλ¦¬κ³ , λ¬Έμ œκ°€ μ—†λ‹€λ©΄ μƒˆλ‘œμš΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 버전을 λ°°ν¬ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ μžλ™ν™”λœ ν”„λ‘œμ„ΈμŠ€ 덕뢄에 κ°œλ°œμžλŠ” μ½”λ“œ ν’ˆμ§ˆμ„ μ§€μ†μ μœΌλ‘œ μœ μ§€ν•  수 있고, 배포 κ³Όμ •μ—μ„œ λ°œμƒν•  수 μžˆλŠ” μ‹€μˆ˜λ₯Ό μ΅œμ†Œν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

μ™œ μ€‘μš”ν•œκ°€μš”?

  • μˆ˜μž‘μ—…μœΌλ‘œ μ§„ν–‰ν•˜λ˜ λΉŒλ“œ, ν…ŒμŠ€νŠΈ, 배포 과정을 μžλ™ν™”ν•˜μ—¬ 개발 속도와 ν’ˆμ§ˆμ„ ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.
  • μ½”λ“œ λ³€κ²½ 사항이 λ°”λ‘œ μ μš©λ˜μ–΄, λΉ λ₯΄κ²Œ ν”Όλ“œλ°±μ„ 받을 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

2. Docker: μ»¨ν…Œμ΄λ„ˆμ˜ 힘

 

 

Dockerλž€ λ¬΄μ—‡μΈκ°€μš”?

 

DockerλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό κ·Έ μ‹€ν–‰ ν™˜κ²½μ„ μ»¨ν…Œμ΄λ„ˆλΌλŠ” 독립적인 λ‹¨μœ„λ‘œ νŒ¨ν‚€μ§•ν•΄μ£ΌλŠ” λ„κ΅¬μž…λ‹ˆλ‹€. μ»¨ν…Œμ΄λ„ˆλŠ” μΌμ’…μ˜ κ°€λ²Όμš΄ 가상화 기술둜, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‹€ν–‰λ˜λŠ” 데 ν•„μš”ν•œ λͺ¨λ“  것을 ν•˜λ‚˜μ˜ νŒ¨ν‚€μ§€λ‘œ λ¬Άμ–΄ λ‹€λ₯Έ μ‹œμŠ€ν…œμ—μ„œλ„ λ™μΌν•˜κ²Œ 싀행될 수 있게 ν•΄μ€λ‹ˆλ‹€.

 

 

μ˜ˆμ‹œ

 

예λ₯Ό λ“€μ–΄, μ—¬λŸ¬λΆ„μ΄ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•˜κ³  μžˆλ‹€κ³  ν•©μ‹œλ‹€. 이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ νŠΉμ • λ²„μ „μ˜ λΌμ΄λΈŒλŸ¬λ¦¬λ‚˜ 도ꡬ에 μ˜μ‘΄ν•˜κ³  μžˆλ‹€λ©΄, 이 λͺ¨λ“  것을 μ„€μ •ν•˜λŠ” 데 λ§Žμ€ μ‹œκ°„μ΄ 걸릴 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ Dockerλ₯Ό μ‚¬μš©ν•˜λ©΄, 개발 ν™˜κ²½μ—μ„œ μ„€μ •ν•œ λͺ¨λ“  μš”μ†Œλ₯Ό μ»¨ν…Œμ΄λ„ˆμ— λ‹΄μ•„ 운영 ν™˜κ²½μ—μ„œλ„ λ˜‘κ°™μ΄ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ "λ‚΄ μ»΄ν“¨ν„°μ—μ„œλŠ” 잘 μž‘λ™ν–ˆλŠ”λ° μ™œ μ„œλ²„μ—μ„œλŠ” μ•ˆ 될까?"λΌλŠ” 문제λ₯Ό ν”Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

μ™œ μ€‘μš”ν•œκ°€μš”?

  • 개발 ν™˜κ²½κ³Ό 운영 ν™˜κ²½μ„ μΌκ΄€λ˜κ²Œ μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 배포가 κ°„νŽΈν•΄μ§€κ³ , ν™•μž₯성이 ν–₯μƒλ©λ‹ˆλ‹€.

 

3. Kubernetes: μ»¨ν…Œμ΄λ„ˆ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜

 

 

Kubernetesλž€ λ¬΄μ—‡μΈκ°€μš”?

 

Kubernetes(μΏ λ²„λ„€ν‹°μŠ€)λŠ” Docker와 같은 μ»¨ν…Œμ΄λ„ˆλ₯Ό λŒ€κ·œλͺ¨λ‘œ κ΄€λ¦¬ν•˜κ³  μ‘°μ •ν•˜λŠ” λ„κ΅¬μž…λ‹ˆλ‹€. μ—¬λŸ¬ 개의 μ»¨ν…Œμ΄λ„ˆλ₯Ό λ°°ν¬ν•˜κ³ , μ΄λ“€μ˜ μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜λ©°, μžλ™μœΌλ‘œ μŠ€μΌ€μΌλ§ν•˜κ±°λ‚˜ λ³΅κ΅¬ν•˜λŠ” λ“±μ˜ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

 

 

μ˜ˆμ‹œ

 

μ›Ήμ‚¬μ΄νŠΈκ°€ 인기가 λ§Žμ•„μ Έ κ°‘μžκΈ° λ§Žμ€ νŠΈλž˜ν”½μ΄ λͺ°λ¦°λ‹€κ³  κ°€μ •ν•΄ λ΄…μ‹œλ‹€. KubernetesλŠ” μžλ™μœΌλ‘œ μΆ”κ°€ μ»¨ν…Œμ΄λ„ˆλ₯Ό μƒμ„±ν•˜μ—¬ νŠΈλž˜ν”½μ„ μ²˜λ¦¬ν•  수 μžˆλ„λ‘ ν™•μž₯ν•©λ‹ˆλ‹€. λ°˜λŒ€λ‘œ, νŠΈλž˜ν”½μ΄ 쀄어듀면 λΆˆν•„μš”ν•œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μžλ™μœΌλ‘œ μ œκ±°ν•˜μ—¬ λ¦¬μ†ŒμŠ€λ₯Ό 효율적으둜 μ‚¬μš©ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ KubernetesλŠ” μ‹œμŠ€ν…œμ΄ 항상 μ•ˆμ •μ μ΄κ³  졜적의 μƒνƒœλ‘œ μš΄μ˜λ˜λ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

μ™œ μ€‘μš”ν•œκ°€μš”?

  • λŒ€κ·œλͺ¨μ˜ μ»¨ν…Œμ΄λ„ˆ 기반 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 효과적으둜 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ‹œμŠ€ν…œμ˜ κ°€μš©μ„±κ³Ό μ•ˆμ •μ„±μ„ 보μž₯ν•©λ‹ˆλ‹€.

 

4. Ansible: ꡬ성 κ΄€λ¦¬μ˜ λ§ˆλ²•μ‚¬

 

 

Ansibleμ΄λž€ λ¬΄μ—‡μΈκ°€μš”?

 

Ansible은 μ„œλ²„λ‚˜ λ„€νŠΈμ›Œν¬ μž₯λΉ„ λ“±μ˜ 섀정을 μ½”λ“œλ‘œ μ •μ˜ν•˜κ³  μžλ™ν™”ν•˜λŠ” λ„κ΅¬μž…λ‹ˆλ‹€.

Ansible을 μ‚¬μš©ν•˜λ©΄ μ„œλ²„ μ„€μ •, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 배포, λ„€νŠΈμ›Œν¬ μ„€μ • 등을 μΌκ΄€λ˜κ²Œ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

μ˜ˆμ‹œ

 

μ—¬λŸ¬ λŒ€μ˜ μ„œλ²„μ— λ™μΌν•œ 섀정을 μ μš©ν•΄μ•Ό ν•˜λŠ” 상황을 상상해 λ³΄μ„Έμš”. μˆ˜μž‘μ—…μœΌλ‘œ λͺ¨λ“  μ„œλ²„μ— 섀정을 μ μš©ν•˜λ €λ©΄ μ‹œκ°„μ΄ 많이 걸리고, μ‹€μˆ˜λ„ λ°œμƒν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€. Ansible을 μ‚¬μš©ν•˜λ©΄ ν•œ λ²ˆμ— λͺ¨λ“  μ„œλ²„μ— λ™μΌν•œ 섀정을 μ μš©ν•  수 있으며, 이 과정이 μžλ™ν™”λ˜λ―€λ‘œ μ‹€μˆ˜λ₯Ό 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, Ansible ν”Œλ ˆμ΄λΆμ„ μž‘μ„±ν•˜μ—¬ μ„œλ²„μ˜ λ°©ν™”λ²½ κ·œμΉ™μ„ μ„€μ •ν•˜κ³ , μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ„€μΉ˜ν•˜λ©°, μ„œλΉ„μŠ€λ₯Ό μ‹œμž‘ν•˜λŠ” μž‘μ—…μ„ μžλ™ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

μ™œ μ€‘μš”ν•œκ°€μš”?

  • 반볡적인 μž‘μ—…μ„ μžλ™ν™”ν•˜μ—¬ μ‹œκ°„κ³Ό λ…Έλ ₯을 μ ˆμ•½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ„œλ²„ ν™˜κ²½μ„ μΌκ΄€λ˜κ²Œ μœ μ§€ν•˜μ—¬ 였λ₯˜λ₯Ό 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.

 

5. Terraform: 인프라λ₯Ό μ½”λ“œλ‘œ

 

 

Terraformμ΄λž€ λ¬΄μ—‡μΈκ°€μš”?

 

Terraform은 ν΄λΌμš°λ“œ 인프라λ₯Ό μ½”λ“œλ‘œ κ΄€λ¦¬ν•˜λŠ” λ„κ΅¬λ‘œ, μ„œλ²„, λ„€νŠΈμ›Œν¬, λ°μ΄ν„°λ² μ΄μŠ€ 등을 μ½”λ“œλ‘œ μ •μ˜ν•˜κ³  μžλ™μœΌλ‘œ 배포할 수 있게 ν•΄μ€λ‹ˆλ‹€. 이λ₯Ό 톡해 인프라 섀정을 버전 κ΄€λ¦¬ν•˜κ³ , ν•„μš”μ— 따라 μ‰½κ²Œ μž¬λ°°ν¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

μ˜ˆμ‹œ

 

AWS(Amazon Web Services)μ—μ„œ μ—¬λŸ¬ 개의 μ„œλ²„μ™€ λ°μ΄ν„°λ² μ΄μŠ€, λ„€νŠΈμ›Œν¬ 섀정을 κ΄€λ¦¬ν•œλ‹€κ³  κ°€μ •ν•΄ λ΄…μ‹œλ‹€. Terraform을 μ‚¬μš©ν•˜λ©΄ 이 λͺ¨λ“  섀정을 μ½”λ“œλ‘œ μ •μ˜ν•˜κ³ , 단 ν•œ 번의 λͺ…λ ΉμœΌλ‘œ λͺ¨λ“  λ¦¬μ†ŒμŠ€λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, 인프라에 λ³€κ²½ 사항이 생길 경우 μ½”λ“œλ§Œ μˆ˜μ •ν•˜λ©΄ μžλ™μœΌλ‘œ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μƒˆλ‘œμš΄ μ„œλ²„ μΈμŠ€ν„΄μŠ€λ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜, κΈ°μ‘΄ μΈμŠ€ν„΄μŠ€μ˜ 크기λ₯Ό μ‘°μ •ν•˜λŠ” μž‘μ—…μ΄ Terraform을 톡해 맀우 κ°„νŽΈν•˜κ²Œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.

μ™œ μ€‘μš”ν•œκ°€μš”?

  • 인프라λ₯Ό μ½”λ“œλ‘œ κ΄€λ¦¬ν•˜μ—¬ λ³€κ²½ 사항을 μ‰½κ²Œ μΆ”μ ν•˜κ³  볡ꡬ할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ‹€μ–‘ν•œ ν΄λΌμš°λ“œ ν”Œλž«νΌμ„ μ§€μ›ν•˜μ—¬ μœ μ—°ν•œ 인프라 관리λ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.

 

6. Prometheus & Grafana: λͺ¨λ‹ˆν„°λ§κ³Ό μ‹œκ°ν™”

 

 

Prometheus와 Grafanaλž€ λ¬΄μ—‡μΈκ°€μš”?

 

PrometheusλŠ” μ‹œμŠ€ν…œμ˜ μƒνƒœλ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜κ³ , GrafanaλŠ” μ΄λŸ¬ν•œ λͺ¨λ‹ˆν„°λ§ 데이터λ₯Ό μ‹œκ°ν™”ν•΄μ£ΌλŠ” λ„κ΅¬μž…λ‹ˆλ‹€. PrometheusλŠ” λ‹€μ–‘ν•œ μ‹œμŠ€ν…œ λ©”νŠΈλ¦­μ„ μˆ˜μ§‘ν•˜μ—¬ λ¬Έμ œκ°€ λ°œμƒν–ˆμ„ λ•Œ κ²½κ³ λ₯Ό 보내주며, GrafanaλŠ” 이 데이터λ₯Ό λŒ€μ‹œλ³΄λ“œ ν˜•νƒœλ‘œ λ³΄μ—¬μ€λ‹ˆλ‹€.

 

 

μ˜ˆμ‹œ

 

예λ₯Ό λ“€μ–΄, μ›Ή μ„œλ²„μ˜ CPU μ‚¬μš©λŸ‰μ΄λ‚˜ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ λͺ¨λ‹ˆν„°λ§ν•œλ‹€κ³  κ°€μ •ν•΄ λ΄…μ‹œλ‹€. PrometheusλŠ” 주기적으둜 μ΄λŸ¬ν•œ 데이터λ₯Ό μˆ˜μ§‘ν•˜κ³ , νŠΉμ • μž„κ³„κ°’μ„ μ΄ˆκ³Όν•  경우 κ²½κ³ λ₯Ό λ³΄λ‚΄μ€λ‹ˆλ‹€. GrafanaλŠ” μ΄λŸ¬ν•œ 데이터λ₯Ό μ‹œκ°μ μœΌλ‘œ ν‘œν˜„ν•˜μ—¬, ν•œλˆˆμ— μ‹œμŠ€ν…œμ˜ μƒνƒœλ₯Ό νŒŒμ•…ν•  수 있게 ν•΄μ€λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, CPU μ‚¬μš©λŸ‰μ΄ κΈ‰μ¦ν•˜λŠ” μ‹œμ μ„ μ‰½κ²Œ μ•Œμ•„μ°¨λ¦΄ 수 있으며, 이λ₯Ό 톡해 μ„±λŠ₯ 이슈λ₯Ό 사전에 μ˜ˆλ°©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

μ™œ μ€‘μš”ν•œκ°€μš”?

  • μ‹œμŠ€ν…œμ˜ μ„±λŠ₯κ³Ό μƒνƒœλ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ λͺ¨λ‹ˆν„°λ§ν•˜μ—¬ 문제λ₯Ό 사전에 감지할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 데이터λ₯Ό μ‹œκ°ν™”ν•˜μ—¬ μš΄μ˜μžμ—κ²Œ λͺ…ν™•ν•œ 정보λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

 

마무리

DevOps의 성곡은 μ μ ˆν•œ 도ꡬλ₯Ό μ„ νƒν•˜κ³  ν™œμš©ν•˜λŠ” 데 달렀 μžˆμŠ΅λ‹ˆλ‹€.

Jenkins, Docker, Kubernetes, Ansible, Terraform, Prometheus, Grafana λ“± λ‹€μ–‘ν•œ 도ꡬ듀을 μ΄ν•΄ν•˜κ³  μ‚¬μš©ν•  수 μžˆλ‹€λ©΄, 개발과 μš΄μ˜μ„ λ”μš± 효율적으둜 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ•žμœΌλ‘œμ˜ λΈ”λ‘œκ·Έ ν¬μŠ€νŠΈμ—μ„œλŠ” 이듀 도ꡬλ₯Ό 직접 μ„€μΉ˜ν•˜κ³  μ‚¬μš©ν•˜λŠ” 방법을 λ‹¨κ³„λ³„λ‘œ μ„€λͺ…ν•  μ˜ˆμ •μž…λ‹ˆλ‹€.

 

이글이 νšŒμ‚¬μ—μ„œ DevOps μ—”μ§€λ‹ˆμ–΄λ‘œ μ‹œμž‘ν•˜λŠ” 저와 μ—¬λŸ¬λΆ„μ˜ DevOps에 λŒ€ν•œ μ²«κ±ΈμŒμ„ λ‚΄λ”›λŠ” 데 도움이 λ˜μ—ˆκΈ°λ₯Ό λ°”λžλ‹ˆλ‹€.

728x90
λ°˜μ‘ν˜•