[WebDevCurriculum] 배포 파이프라인(CI/CD)

Hyo Kyun Lee·2021년 12월 2일
0

WebDevCurriculum

목록 보기
41/44

개요

CI/CD 및 자동화 개발에 대해 이해한다.

Checklist

  • CI/CD는 무엇일까요?

application의 개발을 하는데 필요한 과정 중 하나로, 지속통합(여러 개발사항을 반영한 각각의 branch(자체적으로 진행한 개발)들을 하나로 통합하는 것)과 지속배포를 일컫는다.

CI/CD와 CI/CD 자동화는 Devops를 하는데 반드시 필요한 개발방법론이다.

CI

Continuous Integration

코드 변경사항, 각 개발자들이 진행한 개발내용 등이 정기적으로 빌드/테스트되어 하나의 branch(또는 통합 저장소)로 통합되어 관리하는 방식이다.

IT 아키텍쳐 모델에서 가장 중요하게 여겨지는 MSA, 마이크로 서비스 아키텍쳐(기능과 서비스의 분리)에서 CI를 진행하면 기능의 중복 및 충돌을 방지하고, 그만큼 긴밀함을 유지할 수 있다.

기존 코드를 관리하는 방식(개발완료 → 품질관리)에서 벗어나, 코드통합을 지속적으로 진행하면서 품질관리를 동시에 수행한다는 개념이다.

CI 자동화

다수의 개발자가 각자 branch(작업공간)에서 진행한 작업 내용은 무수히 많이 쌓여 있을 것이다.

이러한 작업내용들이 많이 쌓이게 된다면, 특히 이러한 작업을 한 개발자가 많은 큰 규모의 프로젝트라면 통합하는 과정이 번거롭고 힘들어진다.

따라서 빌드/테스트의 과정을 자동화하여 CI작업에 대한 번거로움을 최소화하고, 더 나아가 리소스 원본에 대한 충돌을 방지할 수 있다는 장점을 가질 수 있다.

CD

Continuous Delivery & Continuous Deployment

지속적인 서비스 제공, 지속적인 배포.

CI가 개발자의 변경 및 작업사항이 하나의 저장소로 통합되는 것까지 의미하였다면,

CD는 이러한 저장소로 release하는 과정을 자동화, 더 나아가 고객이 접하는 프로덕트수준의 코드까지 운영서버에 자동으로 release한다는 개념이다.

보통 CD가 이루어지는 코드는 CI과정을 거쳐 신뢰도를 검증받은 상태에서 진행되므로, CI/CD는 서로 연관이 깊고 뗄 수 없는 필수충분조건이다.

그리고 특히 중요한 것은, 사실 CI/CD 과정 그 자체와 더불어 이를 자동화하는 것이다.

CD의 자동화

배포의 자동화.

소프트웨어가 항상 최신버전을 유지하고, 고객대응(프로덕션)이 빠른 시간내 이루어질 수 있도록 배포과정(deploy)을 자동으로 진행한다는 의미이다.

Devops에서 CI/CD(특히 자동화)가 중요한 이유는 기존 개발/영업/운영을 분리한 환경이 통합된 환경으로 변화하고 Devops가 실현될 수 있는 조건이 마련되기 때문이다.

  • CI 시스템인 Travis CI, Jenkins, Circle CI, Github Actions, AWS Codebuild 의 차이점과 장단점은 무엇일까요?

AWS Codebuild

AWS에서 제공하는 툴, 완전히 managed된 build service를 제공한다.

컴파일, 실행, 프로덕션까지 수행해주기 때문에 AWS Codebuild를 채택하면 별도의 build server를 관리하고 모니터링할 필요가 없다.
→ AWS Coude build

Circle CI

CI/CD 플랫폼을 제공하는 소프트웨어이다.

소프트웨어를 활용하여 CI/CD 과정을 자동화할 수 있도록 지원한다.

→ Circle CI

Jenkins

CI system에서 가장 많이 활용하는 open source - CI server이다.

코드의 build, test, deploy를 지원해주는 tool이다.

→ Jenkins

참고개념

  • Devops

개발(Development), 서비스 운영(Service Operation)을 단일화하여 사업을 운영하는, 하나의 방법론이다.

application 및 관련 service를 운영하고 유지하는 방법으로 개발서비스 제공을 빠른 속도로 진행할 수 있도록 조직 내부적으로 갖춘 기술적인 요소, 더 나아가 문화 및 철학까지 포함하는 개념이다.

그러한 방법 중, Devops 모델을 채택한 회사는 개발팀과 운영팀을 단일화하여 application 개발부터 배포까지의 과정을 최소화한다.

Devops의 핵심은 개발 프로세스의 자동화, 이를 위한 개발/운영의 단일화이다.

특히 단일화란 한 팀에서 자체적으로 개발 진행 및 service 운영까지에 대한 의사결정, 즉 독립적인 프로세스 구성과 반영을 할 수 있어야 한다.

Devops에서 가장 핵심적으로 다루는 부분이 CI/CD이고, CI/CD 자동화를 통해 고객에게 신뢰할 수 있는 프로덕트를 지속적으로 제공하고 업데이트할 수 있기 때문에 중요하다.

LINE 클라이언트를 사용자에게 배포하기 위해 market release를 하게 되면, 오류 및 버그를 수집하여 개발자가 성능 개선을 하는 과정이 진행되고 이를 반복한다.

여기서의 문제점은 아래와 같다.

→ 오류발생 및 감지, 배포 등을 수동으로 진행한다.
→ 수동으로 진행하면서 발생하는 작업의 누락
→ 릴리스까지의 과정변경, 업무추가에 따른 유관 부서의 피로도와 부담

라인 클라이언트는 release, Deploy 및 오류수집의 과정을 모두 자동화하였다.

CI system이 있더라도 각 과정을 수동으로 작업하고, 이에 따라 CD가 잘 이루어지지 않는 환경이 존재할 수 있다.

CI/CD가 어떻게 하면 자동화할 수 있고, Devops를 실현할 수 있을지 고민해보아야 할 것이다.

  • CI/CD와 docker의 연관성

CI/CD를 지원해주는 툴이 docker에서 실행되는 경우가 있다.

CI를 지원해주는 도구인 Jenkins 등은 docker 안에서 실행되고, 이후 build될때마다 이를 감지하여 내부적으로 docker를 생성(docker 안의 docker)하여 CI/CD를 자동적으로 진행할 수 있게끔 한다.

다시 말해 docker에서 실행되는 Jenkins 프로그램이 코드변화(release, git push)를 감지하고, 이를 자동으로 빌드 및 deploy한다.

정리

0. why

  • Devops에서 기본적으로 CI/CD가 왜 필요한지, 특히 여기서 자동화가 왜 반드시 도입되어야 하는지 생각해본다.

1. what

  • CI/CD가 무엇인지 이해한다.
  • Devops가 무엇인지 알아본다.
  • 개발방법론 중 가장 중요한 CI/CD, Devops에 대해 전반적으로 이해한다.

2. how

  • Devops 개념을 CI/CD개념과 어떻게 연결하면서 이해할 수 있을지 고민해본다.

3. 참조링크

NAVER LINE - Devops
https://engineering.linecorp.com/ko/blog/ci-cd-automation/

CI/CD의 개념
https://artist-developer.tistory.com/24
https://itholic.github.io/qa-cicd/

Jenkins - CI/CD와 Docker
https://velog.io/@ruddms936/Docker%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%EB%B0%B0%ED%8F%AC-%EC%9E%90%EB%8F%99%ED%99%94-1p2858xt

CI/CD tools
https://stackshare.io/stackups/aws-codebuild-vs-circleci-vs-jenkins

AWS Code build
https://stackshare.io/aws-codebuild

Circle CI
https://stackshare.io/circleci

Jenkins
https://stackshare.io/jenkins

0개의 댓글