[라즈베리파이] CI/CD 환경을 구축해보자(1)

NNIJGNUS·2025년 6월 9일

이전 게시글에서는 Docker를 설치하고 작동 테스트까지 완료했다.
이제 애플리케이션을 개발하고, 배포하면 될 것 같지만 아직 한 발 남았다. CI/CD 환경을 구축해보자.
그전에 잠깐, CI/CD란 도대체 뭘까?

CI/CD

CI/CD는 소프트웨어 개발과 배포를 자동화하고 효율화하는 DevOps 개념이며,
CI(Continuous Integration, 지속적 통합)CD(Continuous Deployment, 지속적 배포)로 나뉘어진다.

CI(Continuous Integration, 지속적 통합)

수정된 코드를 공유 저장소에 통합하는 과정을 일컫는다.
코드 변경 시 자동으로 빌드 후 테스트를 통해 문제가 발생했는지 즉시 확인한다.

CD(Continuous Deployment)

CI 이후 수정된 코드를 운영 서버 혹은 테스트 서버에 자동 배포하는 과정을 일컫는다.
사람의 개입 없이 코드가 Merge될 때 곧바로 서비스에 적용된다.
CD를 통해 빠르고 안정적이게 배포를 진행할 수 있으며, 자동화로 휴먼에러를 감소시킬 수 있다.

간단히 말하면 수정된 코드를 빌드하고 테스트 후, 서버에 배포하는 과정을 자동화하는 것을 말한다.
대표적인 도구로는 GitHub Actions, Jenkins, GitLab CI/CD가 있다.

만약 코드를 수정 후 이를 배포하는 과정을 손수 진행한다면

  1. 코드를 수정 후 Pull Request를 날린다.
  2. main(혹은 dev) 브랜치에서 프로젝트를 빌드하고 테스트를 수행한다.
  3. 테스트를 성공했다면 이를 Docker HubPush한다.
  4. 배포 환경에서 (예를 들면AWS EC2) 어플리케이션 이미지를 Pull한 후 실행한다.

매우 귀찮고 휴먼 에러의 가능성도 굉장히 높다.
반면 CI/CD 환경이 잘 구축된 프로젝트의 경우 Pull Request 딸깍 한 번으로 위의 모든 과정이 자동으로 처리된다.

각 도구별 비교

이제 CI/CD에 대해서 대충 이해했다. 이제 각 도구별 특징을 비교해보고, 환경을 직접 구축해보자.

GitHub Actions

GitHub에 내장된 CI/CD 도구로, .github/workflows/*.yml 경로에 워크플로우를 작성한다면 자동 실행된다.
Marketplace에 내장된 다양한 액션을 통해 테스트, 배포 등을 미리 구성할 수 있다.
GitHub 사용자라면 누구나 쉽게 설정할 수 있으며, 클라우드 기반으로 동작하며 별도 인프라가 필요하지 않다.
하지만 GitHub를 사용하지 않는 환경에서는 사용하지 못한다.

Jenkins

가장 오래되고 강력한 오픈소스 CI/CD 도구로, 다양한 플러그인 기반으로 확장될 수 있다.
수천개의 플러그인으로 개발자 임의로 커스터마이징이 쉽다.
또, 다른 형상 관리 시스템에 종속적이지 않아 독립적으로 사용 가능하다.
하지만 설정이 비교적 복잡하며, 별도의 인프라를 필요로 하며 개발자가 보안 설정을 직접 관리해야 한다.

GitLab CI/CD

GitLab에 내장된 CI/CD 도구로, GitLab의 리포지토리, 이슈 관리, 배포 등을 모두 통합한다.
.yml 파일 기반으로 파이프라인을 구성할 수 있으며, 자체 GitLab Runner를 설정 가능하다.
하지만 GitHub보다 사용자가 적으며 비교적 초기 설정이 복잡하다.

0개의 댓글