2022. 2. 6. 16:14ㆍ학습일지
CI (continuous integration)
소프트웨어가 항상 신뢰할 수 있는 레벨(테스트 통과 + 무난한 빌드)을 유지한 상태로 배포될 준비를 하자는 개념
CI process
- 코드 통합
- 동작 테스트
- 빌드 테스트
- 버그 발생 시 기록
CD(continuous deployment)
흔히, CD를 '무중단 배포'라고 한다. '무중단'이라는 단어 때문에 자칫 잘못하면, CD를 downtime이 없는 배포로 생각할 수도 있다(사실 이글을 쓴 내가 그렇게 받아 들였었다.). 하지만, CD의 Continuous는 '무중단' 보다는 '연속적인'의 의미로 받아들이는 것이 더 정확할 것 같다.
좀더 설명을 해보자면, 일반적으로 배포를 하기 위해, 다양한 환경을 구성하는데, 주로, Test, Stage(Production과 비슷한 환경), Production으로 구성한다. 학습 목적으로 진행하는 토이 프로젝트의 경우, 배포하기 전에 서버를 닫고, 배포한 이후 다시 서버를 가동시키면 된다. 하지만, 실제 서비스를 운영해야하는 경우, 좀 더 신중하게 환경을 구성하여, 단계별로 배포를 진행할 필요가 있다. 이 과정을 전부 수작업으로 하기에는 매우 번거롭고, 시간을 많이 소모하기 때문에, 이 과정을 자동화할 필요가 있다. 이렇게 단계별로 연속적으로(Continuous) 배포(Delivery or Deployment)를 진행하는 것을 자동화하는 것을 CD라고 한다. 즉 CD의 주 목적은 배포의 자동화라고 할 수 있다.
CD process
CD를 수행하기 위해 고안된 여러가지 기법인 있는데 대표적으로는 Rolling, Blue/Green, Canary 배포가 있다. 우선 설명을 위해 다음 이미지를 첨부했다.
Rolling
용어에서도 유추해볼 수 있듯이, 배포 과정을 여러 단계로 나눠서 배포를 진행하는 것이다. 과정은 다음과 같다.
- Server1을 로드 밸런서에서 제외한다. (서비스 가동을 중지한다로 받아들이면 될 것 같다.)
- Server1를 배포한다.
- Server1을 다시 로드 밸런서에 포함한다.
- Server2를 로드 밸런서에서 제외한다.
- Server2를 배포한다.
- Server2을 다시 로드 밸런서에 포함한다.
간단히 서술하자면, 하나씩 차근차근 배포하는 기법이다. 다만 주의해야할 점은, Rolling의 경우, 1, 4과 같이 로드 밸런서에서 서버를 제외할 때, 서버 커넥션을 확인하는 작업이 필요하다. 진행중인 클라이언트의 요청을 끊어버리는 것은 좋지 않은 사용자 경험이니, 로드 밸런서에 제외를 한 후에도 커넥션이 해소될때까지 기다린다. 그리고, 배포가 완료된 서버를 다시 로드 밸런서에 포함하기 전에, 주요 url을 호출하여, 캐싱을 하는 것과 같은 'warm up'과정도 있으면 좋을 듯 하다.
- 위 과정에서 3, 4 사이의 시점에서는 Server1과 Server2가 제공하는 서비스가 다르다. 즉, 사용자가 동일한 서비스를 받을 수 없는 시점이 생길 수 있다.
- Server 1대에 배포하는 것보다 배포 시간이 최소 2배 이상 느리다. (배포 과정에서는 무조건 서버 1대 이상을 배포하지 않은 상태로 서비스를 계속 유지하고 있어야 하기 때문에)
Canary
광부가 광산에서 일하는 중에 발생할 수 있는 사고에 대비하기 위해 독성 가스에 민감한 Canary라는 새를 광산 안에서 키웠다고 해서 유래된 배포 기법이다.
Canary 기법의 경우, 소수의 사용자만 사용하는 환경에 신규 버전을 배포하고 문제 없다고 판단이 섰을 때, 다른 모든 서버에 배포하는 기법이다.
Blue/Green
실제로 서비스 중인 환경(Blue)과 새롭게 배포할 환경(Green)을 세트로 준비해서 배포하는 방식을 말한다. 이 경우, 실 서버와, 배포 서버를 따로 분리해서 관리하고, 새로 배포를 할 때마다 각 서버의 역할을 바꾼다. 즉 Server1이 실 서버, Server2를 배포 서버로 관리하고 있다면, 새로운 버전의 코드를 Server2에 배포하고, 이상이 없으면, Server1과 Server2의 역할을 바꾼다. 이 경우..
- 새롭게 배포할 환경에만 배포를 하기 때문에, 배포 속도가 빠르며,
- 만약 Blue 환경에 잘못된 버전으로 배포를 했을 경우, 신속하게 롤백이 가능하다.
'학습일지' 카테고리의 다른 글
RabbitMQ -1- AMQP 0-9-1 프로토콜 (0) | 2022.05.19 |
---|---|
암호 알고리즘 -1- 개요 (0) | 2022.05.10 |
모니터 (0) | 2022.01.26 |
CAP 이론에 대해 알아보자 (0) | 2022.01.23 |
멀티 프로세스/스레드 환경에서 동기화를 위한 여러 전략과 차이 (0) | 2022.01.19 |