μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

[CI/CD] CI/CD의 κ°œλ… 및 μ’…λ₯˜

axnuo 2024. 9. 18. 00:22

πŸ“ŒCI/CDλž€?

μ†Œν”„νŠΈμ›¨μ–΄ 개발 및 배포 과정을 μžλ™ν™”ν•˜κ³  λΉ λ₯΄κ²Œ μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ 방법둠. 이λ₯Ό 톡해 κ°œλ°œμžλ“€μ΄ μ½”λ“œ 변경을 자주, μ•ˆμ •μ μœΌλ‘œ, 그리고 μ§€μ†μ μœΌλ‘œ 배포할 수 μžˆλ„λ‘ λ•λŠ”λ‹€.

Continuous Integration (CI)

지속적인 톡합 : κ°œλ°œμžλ“€μ΄ μž‘μ„±ν•œ μ½”λ“œλ₯Ό ν†΅ν•©ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€.

λͺ©ν‘œ : μ½”λ“œ λ³€κ²½ 사항이 μ¦‰μ‹œ ν…ŒμŠ€νŠΈ 되고, 문제λ₯Ό 쑰기에 λ°œκ²¬ν•˜μ—¬ ν•΄κ²°ν•˜λŠ” 것

핡심 μš”μ†Œ : μžλ™ν™”λœ λΉŒλ“œμ™€ ν…ŒμŠ€νŠΈ

[CI의 이점]

  • μ½”λ“œ λ³€κ²½ μ‹œ λΉ λ₯΄κ²Œ ν”Όλ“œλ°±μ„ 받을 수 있음.
  • μžλ™ν™”λœ ν…ŒμŠ€νŠΈλ₯Ό 톡해 문제λ₯Ό μ΄ˆκΈ°μ— λ°œκ²¬ν•˜κ³  ν•΄κ²°ν•  수 있음.
  • νŒ€ λ‚΄ μ—¬λŸ¬ κ°œλ°œμžκ°€ λ™μ‹œμ— μž‘μ—…ν•  수 있으며, μ„œλ‘œμ˜ μ½”λ“œ 변경이 μΆ©λŒν•˜μ§€ μ•Šλ„λ‘ 관리 κ°€λŠ₯

Continuous Delivery (CD)

지속적인 배포 : ν†΅ν•©λœ μ½”λ“œλ₯Ό ν”„λ‘œλ•μ…˜ ν™˜κ²½μ— 배포할 μ€€λΉ„.

핡심 μš”μ†Œ : μ½”λ“œκ°€ 항상 배포할 μ€€λΉ„κ°€ 된 μƒνƒœλ‘œ μœ μ§€λ˜λŠ” 것, ν•˜μ§€λ§Œ μ‹€μ œ λ°°ν¬λŠ” μˆ˜λ™μœΌλ‘œ 이루어짐.

[CD의 이점]

  • μ½”λ“œλ₯Ό 자주 배포할 μ€€λΉ„κ°€ λ˜μ–΄ 있기 λ•Œλ¬Έμ—, λΉ„μ¦ˆλ‹ˆμŠ€ μš”κ΅¬μ‚¬ν•­ 변화에 λΉ λ₯΄κ²Œ λŒ€μ‘ν•  수 있음.
  • 배포 ν”„λ‘œμ„ΈμŠ€κ°€ μžλ™ν™”λ˜μ–΄ 인적 였λ₯˜λ₯Ό 쀄일 수 있음.

Continuous Deployment (CD)

Continuous Delivery의 ν™•μž₯, μ€€λΉ„λœ μ½”λ“œλ₯Ό μžλ™μœΌλ‘œ ν”„λ‘œλ•μ…˜ ν™˜κ²½μ— 배포함. 즉, 배포 과정이 μ™„μ „νžˆ μžλ™ν™”λ˜μ–΄ μ‚¬λžŒμ΄ κ°œμž…ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

[Continuous Deployment의 이점]

  • λΉ λ₯΄κ²Œ κΈ°λŠ₯ 배포 κ°€λŠ₯.
  • 인적 였λ₯˜λ₯Ό 쀄이며, 배포 μ£ΌκΈ°λ₯Ό κ·Ήλ‹¨μ μœΌλ‘œ 짧게 λ§Œλ“¦.

πŸ“ŒCI/CD νŒŒμ΄ν”„λΌμΈμ˜ μ£Όμš” 단계

μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œλΆ€ν„° λ°°ν¬κΉŒμ§€μ˜ 과정을 μžλ™ν™”ν•˜κΈ° μœ„ν•œ μ—¬λŸ¬ λ‹¨κ³„λ‘œ ꡬ성

  1. μ½”λ“œ μž‘μ„± (Code): κΈ°λŠ₯을 μΆ”κ°€ν•˜κ±°λ‚˜ 버그λ₯Ό μˆ˜μ •ν•œ ν›„ 컀밋
  2. λΉŒλ“œ (Build): μ»€λ°‹λœ μ½”λ“œκ°€ μžλ™μœΌλ‘œ λΉŒλ“œ. λΉŒλ“œμ—μ„œλŠ” 쒅속성 관리, 컴파일, νŒ¨ν‚€μ§• 등이 이루어짐.
  3. ν…ŒμŠ€νŠΈ (Test): λΉŒλ“œλœ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— λŒ€ν•΄ μžλ™ν™”λœ ν…ŒμŠ€νŠΈ μ‹€ν–‰. μœ λ‹› ν…ŒμŠ€νŠΈ, 톡합 ν…ŒμŠ€νŠΈ, κΈ°λŠ₯ ν…ŒμŠ€νŠΈ 등이 포함될 수 있음.
  4. 배포 μ€€λΉ„ (Release): ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•œ λΉŒλ“œλŠ” 배포 μ€€λΉ„ μƒνƒœλ‘œ λ³€κ²½. Continuous Deliveryμ—μ„œλŠ” μˆ˜λ™ μŠΉμΈμ„ 거치고, Continuous Deploymentμ—μ„œλŠ” μžλ™ν™”.
  5. 배포 (Deploy): μ€€λΉ„λœ μ½”λ“œλŠ” ν”„λ‘œλ•μ…˜ ν™˜κ²½μ— 배포. CI/CD에 따라 μžλ™ λ˜λŠ” μˆ˜λ™μœΌλ‘œ 배포가λŠ₯.
  6. λͺ¨λ‹ˆν„°λ§ (Monitor): 배포 ν›„, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μƒνƒœλ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ—¬ λ¬Έμ œκ°€ λ°œμƒν•˜λŠ”μ§€ 확인.

πŸ“ŒCI/CD 도ꡬ

  1. Jenkins: κ°€μž₯ 널리 μ‚¬μš©λ˜λŠ” μ˜€ν”ˆμ†ŒμŠ€ CI/CD 도ꡬ. ν”ŒλŸ¬κ·ΈμΈ 기반으둜 λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ œκ³΅ν•˜λ©°, μœ μ—°ν•˜κ²Œ μ„€μ • κ°€λŠ₯
  2. GitLab CI/CD: GitLabμ—μ„œ μ œκ³΅ν•˜λŠ” CI/CD κΈ°λŠ₯으둜, GitLab 리포지토리와 λ°€μ ‘ν•˜κ²Œ 톡합됨.
  3. CircleCI: ν΄λΌμš°λ“œ 기반 CI/CD λ„κ΅¬λ‘œ, λΉ λ₯Έ μ‹€ν–‰ 속도와 μ„€μ •μ˜ κ°„νŽΈν•¨.
  4. Travis CI: GitHubκ³Ό κΈ΄λ°€ν•˜κ²Œ ν†΅ν•©λœ CI λ„κ΅¬λ‘œ, κ°„νŽΈν•œ μ„€μ •κ³Ό μ‚¬μš©λ²•μ΄ μž₯점.
  5. AWS CodePipeline: AWS ν™˜κ²½μ— μ΅œμ ν™”λœ CI/CD λ„κ΅¬λ‘œ, AWS μ„œλΉ„μŠ€μ™€μ˜ 톡합이 κ°•λ ₯함.
  6. Github Actions: GitHubμ—μ„œ μ œκ³΅ν•˜λŠ” μžλ™ν™” μ›Œν¬ν”Œλ‘œμš° λ„κ΅¬λ‘œ, μ½”λ“œ ν‘Έμ‹œ, ν’€ λ¦¬ν€˜μŠ€νŠΈ, 이슈 생성 λ“± λ‹€μ–‘ν•œ GitHub μ΄λ²€νŠΈμ— λŒ€ν•œ μžλ™ν™”λ₯Ό μ„€μ •ν•  수 있음.

πŸ“ŒCI/CD ꡬ좕 방법

1. μ½”λ“œ 리포지토리 μ„€μ •

  • Gitκ³Ό 같은 버전 관리 μ‹œμŠ€ν…œμ„ μ‚¬μš©ν•˜μ—¬ μ½”λ“œ 리포지토리 μ„€μ •
  • μ½”λ“œκ°€ 변경될 λ•Œλ§ˆλ‹€ νŠΈλ¦¬κ±°κ°€ λ°œμƒν•˜μ—¬ CI/CD νŒŒμ΄ν”„λΌμΈμ΄ λ™μž‘ν•˜λ„λ‘ μ„€μ •

2. λΉŒλ“œ μžλ™ν™”

  • λΉŒλ“œ 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λΉŒλ“œν•˜λŠ” ν”„λ‘œμ„ΈμŠ€ μžλ™ν™”
  • CI λ„κ΅¬μ—μ„œ λΉŒλ“œ 슀크립트λ₯Ό νŠΈλ¦¬κ±°ν•  수 μžˆλ„λ‘ μ„€μ •

3. μžλ™ν™”λœ ν…ŒμŠ€νŠΈ μ„€μ •

  • μœ λ‹› ν…ŒμŠ€νŠΈ, 톡합 ν…ŒμŠ€νŠΈ, κΈ°λŠ₯ ν…ŒμŠ€νŠΈ λ“± λ‹€μ–‘ν•œ ν…ŒμŠ€νŠΈλ₯Ό μžλ™μœΌλ‘œ μ‹€ν–‰ν•˜λ„λ‘ μ„€μ •
  • ν…ŒμŠ€νŠΈ 톡과 여뢀에 따라 λ‹€μŒ λ‹¨κ³„λ‘œ 진행될 수 μžˆλ„λ‘ μ„€μ •

4. 배포 μ„€μ •

  • ν”„λ‘œλ•μ…˜ ν™˜κ²½ λ˜λŠ” μŠ€ν…Œμ΄μ§• ν™˜κ²½μ— 배포할 μ€€λΉ„κ°€ μ™„λ£Œλ˜λ©΄, μžλ™μœΌλ‘œ 배포할 수 μžˆλ„λ‘ μ„€μ •
  • AWS, Google Cloud, Docker λ“± λ‹€μ–‘ν•œ ν”Œλž«νΌκ³Όμ˜ 톡합을 κ³ λ €ν•  수 있음.

5. λͺ¨λ‹ˆν„°λ§κ³Ό ν”Όλ“œλ°± 루프

  • 배포 ν›„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μƒνƒœλ₯Ό λͺ¨λ‹ˆν„°λ§ν•  수 μžˆλ„λ‘ μ„€μ •
  • 배포된 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ μ¦‰μ‹œ λŒ€μ‘ν•  수 μžˆλŠ” κ²½κ³  μ‹œμŠ€ν…œ ꡬ좕

5. CI/CD ꡬ좕 μ‹œ μ£Όμ˜ν•  점

  1. ν…ŒμŠ€νŠΈ ν’ˆμ§ˆ: CI/CDμ—μ„œ κ°€μž₯ μ€‘μš”ν•œ 것은 μžλ™ν™”λœ ν…ŒμŠ€νŠΈμ˜ ν’ˆμ§ˆμž…λ‹ˆλ‹€. ν…ŒμŠ€νŠΈκ°€ μ œλŒ€λ‘œ μ„€κ³„λ˜μ§€ μ•ŠμœΌλ©΄, λ¬Έμ œκ°€ μžˆλŠ” μ½”λ“œκ°€ ν”„λ‘œλ•μ…˜μ— 배포될 수 있음.
  2. 배포 λΉˆλ„: 배포λ₯Ό λ„ˆλ¬΄ 자주 ν•˜κ±°λ‚˜ λ„ˆλ¬΄ 적게 ν•˜λŠ” 것은 λͺ¨λ‘ λ¬Έμ œκ°€ 될 수 있기 λ•Œλ¬Έμ— μ μ ˆν•œ λΉˆλ„λ‘œ λ°°ν¬ν•˜λ„λ‘ μ „λž΅μ„ μˆ˜λ¦½ν•˜λŠ” 것이 μ€‘μš”
  3. λ³΄μ•ˆ: λ―Όκ°ν•œ 정보가 μœ μΆœλ˜μ§€ μ•Šλ„λ‘ μ£Όμ˜ν•΄μ•Ό ν•˜λ©°, ν•„μš”ν•œ 경우 λ³„λ„μ˜ λ³΄μ•ˆ ν…ŒμŠ€νŠΈλ₯Ό μΆ”κ°€ν•΄μ•Ό 함.

κ²°λ‘ 

CI/CDλŠ” μ†Œν”„νŠΈμ›¨μ–΄ 개발과 배포의 속도λ₯Ό λΉ λ₯΄κ²Œ ν•˜κ³ , ν’ˆμ§ˆμ„ 높이며, 인적 였λ₯˜λ₯Ό μ€„μ΄λŠ” κ°•λ ₯ν•œ λ„κ΅¬μž…λ‹ˆλ‹€. 지속적인 톡합과 배포λ₯Ό 톡해 κ°œλ°œμžλ“€μ€ 더 λΉ λ₯΄κ³  μ•ˆμ •μ μœΌλ‘œ μ œν’ˆμ„ μ œκ³΅ν•  수 μžˆλ‹€.

의문점

λ„μ»€λŠ” 뭐지? …

λ‹€μŒ κΈ€μ—μ„œ…

일단 이둠을 λŒ€μΆ©μ΄λ‚˜λ§ˆ κ³΅λΆ€ν•˜κ³  μ‹€μŠ΅ 글도 λ”°λ‘œ κΌ­κΌ­ μ˜¬λ €μ•Όμ§€!!

- μš°μ„  github actions + AWS S3둜 λ‹€λ“€ 많이 CI/CD ꡬ좕을 μ§„ν–‰ν•˜λŠ” λ“― λ³΄μž„!!