Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

과거의 내가 미래의 나에게

자유롭게 CI/CD에 대해 공부해볼래(2) 본문

카테고리 없음

자유롭게 CI/CD에 대해 공부해볼래(2)

양바삭 2024. 1. 24. 23:51

저번에 CI에 대해 알아보다가 샜는데, 오늘은 CI가 무엇인지 제대로 정의하고 또한 CD의 개념까지 알아본다음에 CI/CD를 하기 위해 사용되는 도구들을 살펴보겠다.

 

 

CI/CD 개념

CI/CD는 소프트웨어의 개발 단계부터 사용자에게 보여질 수 있는 배포단계까지 최대한 효율적으로 구성하는 작업을 말한다.


개발자들이 하나의 소프트웨어를 완성시키기 위해 각자 코드를 작성하고 해당 코드들을 모으게 되는데, 이 때 서로 다른 코드들을 합치는 작업은 결코 쉬운 일은 아닐 것이다. 게다가 어찌저찌 코드들을 잘 모았다치더라도 이 모여진 코드들이 실행될 수 있도록 빌드를 해야하는데, 이 때 합쳐진 코드들이 빌드가 잘 되는지 확인하여야 하고, 또 빌드 후에도 새로 추가된 이 코드들이 잘 동작하는지, 기존 시스템에서 문제가 일어나진 않을 지 테스트도 필요하다.
이렇게 복잡하고 많은 것을 쉽게 만드는 것을 CI 과정이라 한다. 일반적으로는 먼저 개발자가 코드를 작성하고 코드를 github에 올린다. 물론 그 전에 코드를 작성할 때 코드를 얼마나 작은 단위로 가져가느냐 또 코드를 검증 하는 과정을 어떻게 하느냐 고민하는 것도 CI의 과정 중 하나 일 것이다. github에 올라가게 되면 이제 각 팀에서 만들어진 CI 과정이 펼쳐질 것인데, 위에서 말했던 코드가 합쳐지고 빌드되고 또 테스트까지 자동으로 진행되는 과정을 CI라고 할 수 있겠다. 

CI가 완료되었다면 이제 CD의 과정으로 넘어간다 할 수 있겠다.
CD의 어원은 저번 글에서 풀지 않았으니 여기서 정의해보자면, Continuous Delivery 혹은 Continuous Deployment의 줄임말로써 지속적인 배달 혹은 지속적인 배포로 풀이할 수 있겠다. 배달의 의미는 개발팀에서 실제 사용자 앞으로까지 소프트웨어가 배달된다는 개념으로 생각하면 될 것이고 또 배포의 경우도 사실 위와 같은 의미로 사용된다.
개발 과정의 코드가 모두 준비가 완료되었으면 이 개발된 소프트웨어가 기능적으로 그리고 비기능적으로 모두 만족하며 잘 돌아가는지 살펴보아야 할 것이다. 어떤 곳에서는 이 과정을 수동으로 진행하여 사용자에게 배포되기 전에 더 완벽하게 다듬을 수 있는 환경을 마련하기도 하고, 또 어떤 곳에서는 CI가 통과되면 바로 사용자에게 다이렉트로 배포될 수 있도록 자동화를 해놓았을 수도 있다. 
이처럼 CD 환경은 팀 혹은 소프트웨어의 특징에 따라 다를 수 있으며 가장 적합한 CD 환경은 어떤 것인가 고민해봐야하는 것이다. 

CI/CD는 이상적인 환경이 있다기보단 소프트웨어마다 팀마다 상황에 따라 최적의 CI/CD가 존재하게 된다. 평소에 더 다양한 CI/CD 방법론과 도구들에 계속 관심을 두어 알아둔다면 언제든 더 나은 개발 향상성을 추구할 수 있게 될 것 같다.

 

 

CI/CD 도구들

CI/CD의 개념에 대해서 살펴보았으니 이제 내 프로젝트의 CI/CD는 어떻게 꾸릴 것이냐 고민을 해볼 차례이다.
CI/CD를 손쉽게 구축하기 위해 여러가지 도구가 시장에 나와있고, CI/CD를 구축하는 사람들은 내 프로젝트의 환경이 어떤지 고려해서 가장 적절한 도구를 선정해야할 것이다.

CI/CD 과정을 도와주는 도구를 다음과 같이 정리했다.


1. 버전 관리 시스템
소프트웨어의 코드와 문서 등의 변경사항을 추적하고 기록하는 도구이다. 여러 개발자들이 협업할 때 코드의 일관성을 유지시키는데 꼭 필요하다고 할 수 있다.

EX: GIT

 

< GIT, GITHUB 그리고 GITLAB  >
GIT은 버젼 관리 시스템으로 코드 및 문서의 버전을 추적하고 기록하는 도구이다. 그리고 GITHUB과 GITLAB은 이러한 GIT 기반의 코드 호스팅 플랫폼(소스 코드 저장해주는 온라인 서비스)이라 할 수 있다.
GITHUB과 GITLAB의 주 차이점은 CI/CD 기능이라 할 수 있는데, GITHUB은 코드 호스팅과 협업에 중점을 두며, GITLAB은 코드 호스팅과 함께 CI/CD와 다양한 데브옵스 기능을 포함한 통합된 플랫폼이라 할 수 있다.

 


2. 빌드 및 테스트 자동화 도구(Jenkins, github action...)
통합된 개발 코드들을 컴파일하고 테스트하는 등 빌드하는데 도움을 주고 발생되는 문제에 대해서 사전에 대처할 수 있도록 하는 도구이다. 해당 과정을 일일이 하는 것이 아닌 자동화함으로써 높은 품질의 코드를 생산성있게 관리할 수 있게 된다

EX: Git Action, Travis CI, Circle CI, Jenckins

 


3. 배포 자동화 도구(Docker...)
소프트웨어를 개발 환경에서 실제 환경에서 작동할 수 있도록 서버나 클라우드 환경에 자동으로 전달하고 설정을 관리할 수 있도록 해주는 도구이다. 

EX: Docker, Kubernetes

 

 

여러가지 사항을 고려해야하지만 다행히도 지금 내가 하는 프로젝트는 사이드 프로젝트이기때문에 도구 선택에 큰 제한은 없었고, 따라서 내가 간접적으로 가장 많이 접했던 GIT, Github Action, Docker을 기준으로 CI/CD 파이프라인을 구축해보려 한다. 
아직 위의 세가지 도구가 어떤식으로 연결되는지조차 명백하지 않음으로 다음 글에서는 세 도구의 특징을 알아본 후 프로젝트에 천천히 적용시키는 방법을 고려해보겠다.

Comments