CI/CD && 무중단 배포

joseph·2023년 5월 14일
0

개념정리

목록 보기
3/16

https://www.youtube.com/watch?v=sIPU_VkrguI&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=43&pp=iAQB

  • 컴파일 : 프로그래머가 작성한 코드를 기계어로 변환하는 과정
  • 빌드 : 소스코드 파일을 컴퓨터에서 실행할 수 있는 소프트웨어 산출물로 만드는 과정
  • 배포 : 빌드의 결과물을 사용자가 사용할 수 있는 환경에 배치하는 것

CI

  • 지속적 통합(Continuous Integration)
  • 여러명이 하나의 코드에 대해서 수정을 진행해도 지속적으로 통합하면서 관리할 수 있음을 의미
  • 고객의 요구사항에 빠르게 대응하기 위해 나온 실천 방안
  • 개발을 진행하면서도 품질을 관리할 수 있다

CI가 있기 전에는 주기적으로 분기 소스 코드들을 병합해야 했다.
이는 많은 수작업을 동반해서 많은 리소스를 낭비해야 했다. 또한 코드 병합할 때 에러가 발생하면 디버깅을 하는데에도 많은 시간이 소요되었다.

CI를 활용하면 작은 단위로 나누어서 코드를 완성할 때마다 자동으로 병합해서 비용을 줄일 수 있다.

CI의 4가지 원칙

  • 모든 소스가 살아있고 누구든 현재 소스에 접근할 수 있는 단일 지점을 유지할 것
  • 빌드 프로세스를 자동화해서 누구든 소스로부터 빌드할 수 있을 것
  • 테스팅을 자동화해서 언제나 누구든 테스트를 수행할 수 있을 것
  • 누구든 현재 실행 파일을 얻으면 가장 완전한 실행 파일을 얻었다는 확신이 들도록 할 것

CD

  • 지속적 배포(Continuous Deployment)
  • 빌드의 결과물을 프로덕션으로 릴리즈 하는 작업을 자동화하는 것을 의미
  • 프로젝트의 규모가 커져서 서버가 매우 많아지면 모든 서버에 일일이 접속해서 배포 스크립트를 수동으로 실행시키는 것은 매우 비효율적인 작업이다. 이를 위해 CI의 연장선으로 나온 개념이 CD

CI/CD Tools

  • Jenkins
  • Travis CI
  • Github Actions

무중단 배포

  • 다운 타임 없이 서버를 운영할 수 있게 해주는 배포 방식

배포 자동화를 통해 서비스를 운영할 때 새로운 서비스를 추가하거나 업데이트할 때 기존 서비스를 종료하고 새로운 서비스를 시작해야 한다. 이 과정에서 기존 서비스를 종료하면 사용자들은 서비스를 이용하지 못하는데 이를 해결하기 위해 나온 개념이 무중단 배포이다

무중단 배포 구현 방법

  • AWS에서 Blue-Green 무중단 배포
  • 도커를 이용한 무중단 배포
  • L4, L7스위치를 이용한 무중단 배포
  • Nginx를 이용한 무중단 배포 → 쉽고 저렴하다는 점에서 인기가 많음

리버스 프록시

  • 인터넷과 서버 사이에 위치한 중계 서버
  • 클라이언트가 요청한 내용을 캐싱
  • 서버 정보를 클라이언트로 부터 숨길 수 있어서 보안에 용이

로드 밸런싱

  • 서버에 가해지는 부하를 분산해 주는 역할
  • 하나의 서버가 멈추더라도 서비스 중단 없이 다른 서버가 서비스를 유지할 수 있는 무중단 배포 가능

무중단 배포 방식

  • Rolling 배포
    • 무중단 배포의 가장 기본적인 방식
    • 서버를 차례로 업데이트 하는 방식
    • 업데이트 시킬 서버를 로드밸런싱 라우팅을 해제하고 해당 서버를 업데이트 한 후 다시 라우팅 설정해주는 방식으로 업데이트
    • 위 작업을 모든 서버에 반복해서 업데이트
      • 인스턴스를 추가하지 않아도 돼서 관리가 간편
      • 사용중인 인스턴스에 트래픽이 몰릴 수 있음
      • 구버전과 신버전의 공존으로 인한 호환성 문제
  • Canary 배포
    • 신버전을 소수의 사용자에게만 배포
    • 문제가 없는 것이 확인되면 점진적으로 다른 서버에 신버전 배포
    • Rolling 배포와 마친가지로 일부 서버만 업데이트를 먼저 진행한 후 모니터링을 통해 문제가 없는것이 확인되면 나머지 서버도 업데이트하는 방식
      • 문제 상황을 빠르게 감지 가능
      • A/B 테스트로 활용 가능
      • 모니터링 관리 비용이 든다
      • 구버전과 신버전의 공존으로 인한 호환성 문제
  • Blue/Green 배포
    • Blue를 구버전, Green을 신버전으로 지칭
    • 구버전과 동일하게 신버전 인스턴스 구성
    • 신버전 배포시 로드 밸런서를 통해 신버전으로만 트래픽 전환
    • 운영중인 서버와 대기중인 서버를 각각 두고 대기중인 서버에 업데이트를 진행한 후 업데이트한 서버로 트래픽을 변경시켜준다.
      • 배포하는 속도가 빠르다
      • 신속하게 롤백이 가능
      • 남아있는 기존 버전의 환경을 다음 배포에 재사용
      • 시스템 자원이 2배로 필요
profile
내일도 모레도 글피도 엉금엉금

0개의 댓글