📝 CI / CD 란?

  • CI와 CD는 지속적인 통합과 지속적인 배포로서 개발 생산성을 위해 자동화하는 과정을 말합니다.

  • CI / CD는 지속적 통합 및 지속적 배포로 말할 수 있습니다. 여기서 지속적 통합은 개발된 코드를 지속적으로 통합하여 소프트웨어를 개발하는 과정을 자동화하는 것을 의미하며, 지속적 배포는 통합된 코드를 자동으로 테스트 하고, 배포할 수 있도록 하는 것입니다.

  • 이러한 과정을 통해서 소프트웨어 개발 및 배포 프로세스를 자동화하고 개발자 팀이 보다 효율적으로 작업할 수 있도록 지원합니다.



📝 CI / CD를 접하게 되는 경우

⚽ Github 오픈 소스 프로젝트

  • CI가 사용되는 가장 대표적인 공간은 바로 Github 입니다. 깃허브는 소스코드들을 버전별로 관리하고 공유하는 공간입니다. 이는 여러 소스코드가 개발되고, 이들이 하나로 합쳐진다는 의미입니다.

  • 특히 깃허브의 여러 오픈 소스 프로젝트는 회사 직원 뿐만 아니라 다른 개발자들도 기여할 수 있기 떄문에 CI 같은 통합 자동화가 이루어져야 합나디.


⚽ 실제 회사의 프로젝트들

  • CI / CD 는 개발 프로세스에 많은 시간을 단축해 주고, 개발자들이 온전히 개발에만 집중할 수 있게 합니다. 그렇기 때문에 많은 회사가 CI와 CD를 활용해 개발을 진행합니다.

  • 작업한 코드를 퇴근하기 전에 업로드하면 자동으로 테스트를 진행하고, 테스트에 성공하면 빌드 과정을 거쳐 실제 서비스에 Deploy하는 환경을 구축합니다. 이러한 환경을 최초 설계하는 것은 많은 시간이 들기 때문에 이 방법을 사용하지 않는 회사들도 존재하지만, 이 환경을 구축해두면 시간을 크게 단축할 수 있기 때문에 많은 회사가 이 개발 프로세스를 사용하기 위해 다양한 시도를 하고 있습니다.



📝 CI

  • CI는 지속적인 통합을 의미합니다. 개발자들은 깃을 사용함으로써 코드들을 메일 혹은 카카오톡 등을 통해 공유하지 않고 빠르게 합칠 수 있습니다. 과거에는 이렇게 합친 파일들은 단순히 코드들이고 이상 여부를 확인하는 것은 개발자들의 몫이었습니다. CI는 이런 문제점을 해결하기 위해 개발된 프로세스입니다.

  • 미리 코드 검사를 진행 가능한 테스팅 코드들을 작성해서 코드에 이상이 있는지 확인하는 작업인 디버깅을 진행하고, 실제 소프트웨어를 공급하는 가공물로 만들어 주는 빌드 과정을 자동으로 진행합니다.



📝 CD

  • CD는 지속적 배포를 의미합니다. CI로 개발자들이 작성한 코드들을 하나로 묶어 완성된 코드를 사용자에게 자동으로 제공합니다. 개발자들이 작업하는 각자의 작업 환경을 로컬 환경이라고 얘기합니다. 그런데 실제로 사용자가 이용하는 페이지는 개발자의 로컬 환경이 아니라 회사의 서버 혹은 AWS, Azure에서 제공하는 클라우드 환경입니다.

  • CD는 서버에 하나로 묶은 파일을 올리는 작업을 자동으로 진행합니다. 언제 어떤 파일을 어디에 올릴지 정의해 두면 특정 작업을 마친 후 자동으로 테스트부터 빌드, 배포까지 진행할 것이고, 개발자는 개발에만 집중 가능하게 됩니다.



📝 컴파일

  • 프로그래밍 언어는 컴퓨터가 읽을 수 있는 기계어, 기계어의 한 단계 위의 언어로 기계어와 일대일로 대응되는 어셈블리어, 일반적인 개발자가 사용하는 프로그래밍 언어가 속하는 고급 언어로 나눌 수 있습니다.


📝 빌드

  • 개발한 코드들을 사용자가 실행 가능한 하나의 가공물로 생성하는 과정입니다. 컴파일하여 개발자가 작성한 코드들을 기계어로 변환해도 이를 사용자가 바로 실행시킬 수는 없습니다. 빌드를 통해 해당 기계어 파일들을 하나의 파일로 묶어 사용자가 실행 가능한 파일로 만들어 주는 과정을 거쳐야 비로소 사용자를 위한 프로그램이 완성되는 것입니다. 이 때, 빌드는 단순히 파일을 하나로 묶어 줄 뿐만 아니라, 테스트 혹은 Deploy까지 한 번에 진행해도 됩니다.


📝 CI / CD를 우리가 사용하는 이유

  • 팀 프로젝트를 준비하다 보면 각자 맡은 역할을 준비하는 것보다 모든 작업물을 합치는 데 더 많은 시간을 투자해야 합니다.

  • 모든 작업물을 분류해 좋은 작업물을 선별하고, 하나의 결과물로 합쳐야 하기 때문입니다. 이 과정이 자동화된다면 팀원들은 각자 맡은 역할에 더 집중이 가능해집니다. 프로그래밍에서도 이 부분은 마찬가지입니다. 개발자들은 CI를 통해 작업물들을 합치는 과정을 진행하고, CD를 통해 작업물들을 자동화하여 배포할 수 있습니다.

profile
나 혼자 보려고 만든 개발 일기

0개의 댓글