우아한테크코스 테코톡

찬, 레넌의 CI/CD와 무중단 배포

https://youtu.be/sIPU_VkrguI

찬, 레넌의 CI/CD와 무중단 배포

CI/CD

용어 정리

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

CI(Continuous Integration)

  • 지속적 통합 이라는 뜻으로 개발을 진행하면서 품질을 관리할 수 있도록 여러 명이 하나의 코드에 대해서 수정을 진행해도 지속적으로 통합하면서 관리할 수 있음을 의미한다.
  • CI가 있기 전에는 개발자들은 일명 머지데이라는 날을 통해 모는 분기 소스코드를 병합해야 했다. 이는 굉장히 많은 수작업이 동밥되었고 많은 리소스를 낭비하게 되었다. 또한 개발자들이 코드를 병합할 때 개발자의 실수로 에러가 발생하는 코드를 병합하는 과정이 반복이 된다면 맨 마지막 코드에서 에러가 발생했을 경우 어느 부분에서 에러가 발생했는지 디버깅하기 굉장히 어렵다.
  • CI를 활용합ㄴ다면 업무를 잘게 쪼개서 코드 작성이 완료될 때마다 이를 빠르게 자동으로 병합을 할 수 있을 것이다.

CI 과정

img.png

마틴 파울러가 제시하는 CI의 4가지 규칙

  • 모든 소스코드가 살아 있고 누구든 현재의 소스에 접근할 수 있는 단일 지점을 유지 할 것
  • 빌드 프로세스를 자동화 해서 누구든 소스로부터 시스템을 빌드할 수 있게 할 것
  • 테스팅을 자동화 해서 언제든지 시스템에 대한 건전한 테스트 수트를 실행할 수 있게 할 것
  • 누근든 현재 실행 파일을 얻으면 지금까지 가장 완전한 실행 파일을 얻었다는 확신 을 하게 할 것

CD

  • 지속적 배포 라는 뜻으로 빌드의 결과물을 프로덕션으로 릴리스하는 작업을 자동화하는 것을 의미한다.

지속적 제공과 지속적 배포

img.png

CI/CD 과정

img.png

CI/CD 툴

  • Jenkins
  • Travis CI
  • Github Actions

정리

  • CI
    • 여려 명이 하나에 코드에 대해서 수정을 진행해도 지속적으로 통합하면서 관리할 수 있음을 의미
  • CD
    • CI의 연장선에 있는 개념
    • 빌드의 결과물을 프로덕션으로 지속적으로 배포하는 것을 의미

무중단 배포

img.png

  • 새로운 서비를 배포하기 위해서는 기존의 서비스를 종료하고 새로운 서비스를 시작해야한다.
    • 이 두 행위 사이에는 다운타임이 발생 , 다운타임 동안에는 사용자들이 서비스를 사용하지 못하게 된다.
      • 이를 해결하기 위해 나온 개념이 무중단배포 이다.

무중단 배포 군현 방법

  • AWS 에서 Blue-Green 무중단 배포
  • 도커를 이용한 무중단 배포
  • L4, L7 스위치를 이용한 무중단 배포
  • Nginx 를 이용한 무중단 배포
    • 쉽고 저렵해서 많이 사용한다

리벅스 프록시

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

로드 밸런싱

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

무중단 배포 방식

  • Rolling 배포
  • Canary 배포
  • Blue / Green 배포

Rolling 배포

  • 무중단 배포의 가장 기본적인 방식
  • 서버를 차례대로 업데이트 시키는 방식
  • img.png
    • 한대의 서버에 로드 밸런싱을 라우팅하지 않도록 설정하고 그 해당 서버를 새로우 버전으로 업데이트 시켜준다 그후 다시 라우팅 설정으로 통해 다시 추가 한다. 해당 작업을 모든 서버에 순차적으로 반복한다.
    • 차례대로 업데이트 시키는 방식이다.
  • 장점
    • 인스턴스를 추가하지 않아도 돼서 관리가 간편하다.
  • 단점
    • 사용중인 인스턴스에 트래픽이 몰릴 수 있다.
    • 구버전과 신버전의 공존으로 인한 호환성 문제가 있다.

Canary 배포

  • 옛날 광부들이 유독 가스에 민감한 카나리아 새를 이용해 가스 누출 위험을 감지했던 것에서 유례
  • 신버전을 소수의 사용자들에게만 배포
  • 문제가 없는 것이 확인되면 점진적으로 다른 서버에 신버전 배포
    • 장점
      • 문제 상황을 빠르게 감지 가능
      • A/B 테스트로 활용 가능
    • 단점
      • 모니터링 관리 비용
      • 구버전과 신버전의 공존으로 인한 호환성 문제

Blue / Green 배포

  • Blue 를 구버전 Green 을 신버전으로 지칭
  • 구버전과 동일하게 신버전의 인스턴스를 구성
  • 신버전 배포 시 로드 밸런서를 통해 신버전으로만 트래픽을 전환
  • img.png
    • 대기 중인 서버에 먼저 업데이트를 진행하고 트래픽을 대기중인 서버로 변경하는 방식
  • 장점
    • 배포하는 속도가 빠르다
    • 신속하게 롤백 가능하다
    • 남아 있는 기존 버전의 환경을 다음 배포에 재사용 가능하다
  • 단점
    • 시스템 자원이 2배로 필요하다

정리

  • 무중단 배포
    • 다운타임 없이 서버를 운영할 수 있게 해주는 배포 방식
    • Rolling, Canary, Blue-Green
  • 리버스 프록시
    • 클라이언트 요청을 대신 받아 서버에 전달하는 대리 서버
  • 로드 밸런싱
    • 클라언트의 요청을 여러 서버에 분산해주는 역할

© 2020. All rights reserved.

SIKSIK