[DEV] study&learn
article thumbnail

CI/CD

πŸ“Œ μš©μ–΄μ •λ¦¬

컴파일
ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μž‘μ„±ν•œ μ†ŒμŠ€ μ½”λ“œλ₯Ό κΈ°κ³„μ–΄λ‘œ λ³€ν™˜ν•˜λŠ” κ³Όμ •

λΉŒλ“œ
μ†ŒμŠ€ μ½”λ“œ νŒŒμΌμ„ μ»΄ν“¨ν„°μ—μ„œ μ‹€ν–‰ν•  수 μžˆλŠ” μ†Œν”„νŠΈμ›¨μ–΄ μ‚°μΆœλ¬Όλ‘œ λ§Œλ“œλŠ” κ³Όμ •

배포
λΉŒλ“œμ˜ 결과물을 μ‚¬μš©μžκ°€ μ ‘κ·Όν•  수 μžˆλŠ” ν™˜κ²½μ— λ°°μΉ˜ν•˜λŠ” 것

CI (Continuous Integration) μ΄λž€?

지속적 ν†΅ν•©μ΄λΌλŠ” 뜻으둜 κ°œλ°œμ„ μ§„ν–‰ν•˜λ©΄μ„œλ„ ν’ˆμ§ˆμ„ 관리할 수 μžˆλ„λ‘ μ—¬λŸ¬ λͺ…이 ν•˜λ‚˜μ˜ μ½”λ“œμ— λŒ€ν•΄μ„œ

μˆ˜μ •μ„ 진행해도 μ§€μ†μ μœΌλ‘œ ν†΅ν•©ν•˜λ©΄μ„œ 관리할 수 μžˆμŒμ„ μ˜λ―Έν•œλ‹€.

 

CI κ°€ μžˆκΈ°μ „μ— ...
κ°œλ°œμžλ“€μ€ 머지 λ°μ΄λΌλŠ” 날을 톡해 λͺ¨λ“  λΆ„κΈ° μ†ŒμŠ€ μ½”λ“œλ₯Ό λ³‘ν•©ν•˜λŠ” 업무λ₯Ό ν•˜μ˜€λ‹€.
μ΄λŠ” 결과적으둜 λ§Žμ€ λ¦¬μ†ŒμŠ€μ˜ λ‚­λΉ„λ₯Ό μ΄ˆλž˜ν•˜κ²Œ λ˜μ—ˆλ‹€.

CI κ³Όμ •

κ°œλ°œμžκ°€ μ½”λ“œ 병합을 μš”μ²­ν•˜λ©΄

→ CI 툴이 λΉŒλ“œμ™€ ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•œλ‹€.

(성곡)→ 과정에 λ¬Έμ œκ°€ μ—†λ‹€λ©΄ μ½”λ“œ 병합을 진행해주고,

(μ‹€νŒ¨)→ 과정에 λ¬Έμ œκ°€ μžˆλ‹€λ©΄ κ°œλ°œμžμ—κ²Œ ν”Όλ“œλ°±μ„ ν•΄μ€€λ‹€.

λ§ˆν‹΄ νŒŒμšΈλŸ¬κ°€ μ œμ‹œν•˜λŠ” CI 의 κ·œμΉ™ 4가지

  • λͺ¨λ“  μ†ŒμŠ€μ½”λ“œκ°€ μ‚΄μ•„ 있고 λˆ„κ΅¬λ“  ν˜„μž¬μ˜ μ†ŒμŠ€μ— μ ‘κ·Όν•  수 μžˆλŠ” 단일 지점을 μœ μ§€ν•  것
  • λΉŒλ“œ ν”„λ‘œμ„ΈμŠ€λ₯Ό μžλ™ν™”ν•΄μ„œ λˆ„κ΅¬λ“  μ†ŒμŠ€λ‘œλΆ€ν„° μ‹œμŠ€ν…œμ„ λΉŒλ“œν•  수 있게 ν•  것
  • ν…ŒμŠ€νŒ…μ„ μžλ™ν™”ν•΄μ„œ μ–Έμ œλ“ μ§€ μ‹œμŠ€ν…œμ— λŒ€ν•œ κ±΄μ „ν•œ ν…ŒμŠ€νŠΈ 수트λ₯Ό μ‹€ν–‰ν•  수 μžˆκ²Œν•  것
  • λˆ„κ΅¬λ“  ν˜„μž¬ μ‹€ν–‰ νŒŒμΌμ„ μ–»μœΌλ©΄ μ§€κΈˆκΉŒμ§€ κ°€μž₯ μ™„μ „ν•œ μ‹€ν–‰ νŒŒμΌμ„ μ–»μ—ˆλ‹€λŠ” 확신을 ν•˜κ²Œ ν•  것

CD (Continuous Deployment)

지속적 λ°°ν¬λΌλŠ” 뜻으둜 λΉŒλ“œμ˜ 결과물을 ν”„λ‘œλŽμ„ μœΌλ‘œ λ¦΄λ¦¬μŠ€ν•˜λŠ” μž‘μ—…μ„ μžλ™ν™”ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

 

지속적 제곡과 지속적 배포의 차이

\

지속적 제곡과 지속적 λ°°ν¬λŠ”

ν”„λ‘œλ•μ…˜μœΌλ‘œ λ¦΄λ¦¬μ¦ˆν•˜λŠ” Deploy μž‘μ—…μ˜ μžλ™ν™” μ—¬λΆ€λ‘œ λ‚˜λˆŒ 수 μžˆλ‹€!

CI/CD 의 흐름

CI/CD Tool

  • Jenkins
  • Travis CI
  • Github Actions
  • etc...

정리

CI

  •  κ³ κ°μ˜ μš”κ΅¬μ‚¬ν•­μ— λΉ λ₯΄κ²Œ λŒ€μ‘ν•˜κΈ° μœ„ν•΄ λ‚˜μ˜¨ XP(Extreme Programming)의 μ‹€μ²œλ°©μ•ˆ 쀑 1가지이닀.
  • μ—¬λŸ¬ λͺ…이 ν•˜λ‚˜μ˜ μ½”λ“œμ— λŒ€ν•΄μ„œ μˆ˜μ •μ„ 진행해도 μ§€μ†μ μœΌλ‘œ ν†΅ν•©ν•˜λ©΄μ„œ 관리할 수 μžˆμŒμ„ μ˜λ―Έν•œλ‹€.

CD

  • λΉŒλ“œμ˜ 결과물을 ν”„λ‘œλ•μ…˜μœΌλ‘œ μ§€μ†μ μœΌλ‘œ λ°°ν¬ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

무쀑단 배포

배포 μžλ™ν™”λ₯Ό 톡해 μ„œλΉ„μŠ€λ₯Ό μš΄μ˜ν•˜κ³  μžˆλ‹€κ³  κ°€μ •ν•΄λ³΄μž.

μƒˆλ‘œμš΄ 버전이 λ°°ν¬λ˜λŠ” κ³Όμ •μ—μ„œ λ‹€μš΄ νƒ€μž„μ΄ λ°œμƒν•˜κ²Œ 되고. λ‹€μš΄ νƒ€μž„ λ™μ•ˆ μ‚¬μš©μžλ“€μ€ 우리의 μ„œλΉ„μŠ€λ₯Ό μ΄μš©ν•  수 μ—†λ‹€.

 

이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œ 무쀑단 λ°°ν¬λΌλŠ” κ°œλ…μ΄ λ“±μž₯ν•˜μ˜€λ‹€.

무쀑단 배포 κ΅¬ν˜„ 방법

  • AWS μ—μ„œ Blue-Green 무쀑단 배포
  • 도컀λ₯Ό μ΄μš©ν•œ 무쀑단 배포
  • L4, L7 μŠ€μœ„μΉ˜λ₯Ό μ΄μš©ν•œ 무쀑단 배포
  • NginX λ₯Ό μ΄μš©ν•œ 무쀑단 배포 → 쉽고 λΉ„μš©μ΄ μ €λ ΄ν•˜λ‹€λŠ” μ μ—μ„œ 보편적으둜 μ‚¬μš©λœλ‹€.
πŸ“Œ μš©μ–΄μ •λ¦¬

λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ

- 인터넷과 μ„œλ²„ 사이에 μœ„μΉ˜ν•œ 쀑계 μ„œλ²„λ‘œμ¨ ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν•œ λ‚΄μš©μ„ μΊμ‹±ν•œλ‹€.
- μ„œλ²„ 정보λ₯Ό ν΄λΌμ΄μ–ΈνŠΈλ‘œλΆ€ν„° 숨길 수 μžˆμ–΄ λ³΄μ•ˆμ— μš©μ΄ν•Ÿ.

λ‘œλ“œ λ°ΈλŸ°μ‹±
- μ„œλ²„μ— κ°€ν•΄μ§€λŠ” λΆ€ν•˜λ₯Ό λΆ„μ‚°ν•΄μ£ΌλŠ” 역할을 μˆ˜ν–‰ν•œλ‹€.
- ν•˜λ‚˜μ˜ μ„œλ²„κ°€ λ©ˆμΆ”λ”λΌλ„ μ„œλΉ„μŠ€ 쀑단 없이 λ‹€λ₯Έ μ„œλ²„κ°€ μ„œλΉ„μŠ€λ₯Ό 계속 μœ μ§€ν•  수 μžˆλŠ” 무쀑단 배포가 κ°€λŠ₯ν•˜λ‹€.
(ν•™μŠ΅ ν‚€μ›Œλ“œ - λ‘œλ“œ λ°ΈλŸ°μ‹± μ•Œκ³ λ¦¬μ¦˜)

 

무쀑단 배포 방식

Rolling 배포

무쀑단 배포의 κ°€μž₯ 기본적인 λ°©μ‹μœΌλ‘œ, μ„œλ²„λ₯Ό μ°¨λ‘€λŒ€λ‘œ μ—…λ°μ΄νŠΈ μ‹œν‚€λŠ” 방식이닀.

 

μž₯점

  • μΈμŠ€ν„΄μŠ€λ₯Ό μΆ”κ°€ν•˜μ§€ μ•Šμ•„λ„ λΌμ„œ 관리가 κ°„νŽΈν•˜λ‹€.

단점

  • μ‚¬μš©μ€‘μΈ μΈμŠ€ν„΄μŠ€μ— νŠΈλž˜ν”½μ΄ λͺ°λ¦΄ 수 μžˆλ‹€.
  • ꡬ버전과 μ‹ λ²„μ „μ˜ 곡쑴으둜 μΈν•œ ν˜Έν™˜μ„± λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€.

Canary 배포

광뢀듀이 μΉ΄λ‚˜λ¦¬μ•„ μƒˆ(μœ λ… κ°€μŠ€μ— 민감)λ₯Ό μ΄μš©ν•΄ κ°€μŠ€ λˆ„μΆœ μœ„ν—˜μ„ κ°μ§€ν–ˆλ˜ κ²ƒμ—μ„œ 유래된 이름이닀.

신버전을 μ†Œμˆ˜μ˜ μ‚¬μš©μžλ“€μ—κ²Œλ§Œ λ°°ν¬ν•˜κ³ , λ¬Έμ œκ°€ μ—†λŠ” 것이 ν™•μΈλ˜λ©΄ μ μ§„μ μœΌλ‘œ λ‹€λ₯Έ μ„œλ²„μ— 신버전을 λ°°ν¬ν•˜λŠ” 방식이닀.

 

μž₯점

  • 문제 상황을 λΉ λ₯΄κ²Œ 감지 κ°€λŠ₯ν•˜λ‹€.
  • A/B ν…ŒμŠ€νŠΈλ‘œ ν™œμš© κ°€λŠ₯ν•˜λ‹€.

단점

  • λͺ¨λ‹ˆν„°λ§ 관리 λΉ„μš©μ΄ λ°œμƒν•œλ‹€.
  • ꡬ버전과 μ‹ λ²„μ „μ˜ 곡쑴으둜 μΈν•œ ν˜Έν™˜μ„± λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€.

Blue / Green 배포

Blue λŠ” ꡬ버전, Green 은 신버전을 μ§€μΉ­ν•˜λ©°. ꡬ버전과 λ™μΌν•˜κ²Œ μ‹ λ²„μ „μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό κ΅¬μ„±μ‹œν‚¨λ‹€.

신버전 배포 μ‹œ λ‘œλ“œ λ²¨λŸ°μ„œλ₯Ό 톡해 μ‹ λ²„μ „μœΌλ‘œλ§Œ νŠΈλž˜ν”½μ„ μ „ν™˜μ‹œν‚€λŠ” 방식이닀.

 

μž₯점

  • λ°°ν¬ν•˜λŠ” 속도가 λΉ λ₯΄λ‹€.
  • μ‹ μ†ν•˜κ²Œ 둀백이 κ°€λŠ₯ν•˜λ‹€.
  • 남아 μžˆλŠ” κΈ°μ‘΄ λ²„μ „μ˜ ν™˜κ²½μ„ λ‹€μŒ 배포에 μž¬μ‚¬μš©ν•  수 μžˆλ‹€.

단점

  • μ‹œμŠ€ν…œ μžμ›μ΄ 2배둜 ν•„μš”ν•˜λ‹€.

Reference

 

'ν…Œμ½”ν†‘' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

REST APIλž€?  (0) 2023.01.20
Servlet & Spring Web MVC  (0) 2023.01.12
AOP 와 Spring AOP  (0) 2023.01.11
Spring κ³Ό Spring Boot  (0) 2023.01.10
JVM Stack & Heap  (0) 2023.01.10
profile

[DEV] study&learn

@devjuni

ν¬μŠ€νŒ…μ΄ μ’‹μ•˜λ‹€λ©΄ "μ’‹μ•„μš”β€οΈ" λ˜λŠ” "κ΅¬λ…πŸ‘πŸ»" ν•΄μ£Όμ„Έμš”!