[DevOps] CI/CD 파이프라인 구상하기

Bulgogi-Pizza·2025년 1월 28일

웹 서버 구축

목록 보기
16/16

서론

서버 구축을 완료하고, 보안 설정까지 마쳤으니 이제 나만의 샌드박스에서 열심히 구축해보면 된다.
가장 먼저, CI/CD 파이프라인을 구상하고, 그 후 구축까지 완료하는 것이 첫 번째 목표이다.
그 다음으로 기존에 완성해두었던 프로젝트를 배포하여 나만의 서버에서 온전한 서비스를 제공하는 것이 두 번째 목표이다.

CI/CD 파이프라인 단계

전체 파이프라인 단계에는 다음과 같은 단계가 있다.

  1. 코드 관리 및 트리거
  2. 코드 검증 및 테스트
  3. 컨테이너화
  4. 이미지 저장
  5. 배포 전 테스트
  6. 배포
  7. 모니터링 및 로깅

각 단계별 역할과 사용할 기술 스택을 정하고, 전체 흐름을 정리하며 목표를 세워보도록 하자.

1. 코드 관리 및 트리거

역할

GitHub에 코드 변경이 발생하면 파이프라인의 시작을 담당한다.

기술 스택

  • GitHub Actions
    • GitHub에 코드 변경이 일어나므로 관리가 조금 더 직접적이다. YAML로 워크플로우를 정의한다.
  • Jenkins
    • 다양한 플러그인을 지원한다. 유연성 높은 설정이 가능하다.

나는 Jenkins는 이미 경험을 해보았고, GitHub에 코드를 올리니 트리거 작용이 더 직관적이기 때문에, GitHub Actions를 사용해보도록 한다.

2. 코드 검증 및 테스트

역할

빌드 전에 코드 품질과 기능을 검증한다.
검증 방법에는 코드 품질 검사, 단위 테스트, 테스트 커버리지 보고 등이 있다. 만약 테스트를 통과하지 못한다면 파이프라인을 중단한다.

기술 스택 (Java)

1. 코드 품질 검사

  • Checkstyle, SpotBugs

2. 단위 테스트

  • JUnit

3. 테스트 커버리지 보고

  • Jacoco 플러그인

기술 스택 (Node.js)

1. 코드 품질 검사

  • ESLint

2. 단위 테스트

  • Jest

3. 테스트 커버리지 보고

  • Jest

현재 테스트 코드에 대한 프로젝트는 진행중에 있어 추후에 추가할 예정이다. 기술 스택은 단위 테스트 도구로 JUnit과 Jest를 선택하기로 하였다.

3. 컨테이너화

역할

테스트를 통과한 코드에 대해 빌드 과정을 거쳐 Docker 이미지화하는 과정이다.

기술 스택

기술 스택은 Docker를 사용할 것이고, 자동화를 위해 Dockerfile을 작성해 스크립트를 제공할 예정이다.

4. 이미지 저장

역할

빌드한 Docker 이미지를 중앙 저장소에 저장하는 과정이다.

기술 스택

  • GitHub Container Registry(GHCR)
    • GitHub Actions와 통합이 가능하다는 장점이 있다.
  • Docker Hub
    • 전반적으로 많이 사용하고 있다.
  • AWS ECR
    • AWS를 이용하고있지 않아 사용 이유가 적다고 생각이 된다.

이미지 저장소에 대한 기술 스택 선정은 Docker Hub가 더 끌리긴 하지만, GHCR의 장점과 대중성에 대해 더 알아본 후 선택을 해야할 것 같다.

5. 배포 전 테스트

역할

생성된 컨테이너를 실제 배포 전에 테스트하는 과정이다. 주로 단위 테스트가 아닌 성능 테스트와 부하 테스트 위주로 이루어질 것이다.

기술 스택

Java의 단위/성능 테스트 도구로는 JMeter가 가장 대중적이다. ngrinder도 국내에서 많이 보이지만, 결국 JMeter기반이기 때문에, JMeter를 사용할 예정이다.
Node.js의 단위/성능 테스트 도구로는 Artillery를 사용할 예정이다. Autocannon 등의 도구도 있지만 Artillery는 스크립트 작성 등 복잡한 시나리오 작성이 가능해 여러 상황을 가정할 수 있다.

이 또한 아직은 진행 중에 있어 추후 배포까지 완료한 후에 테스트할 예정이다.

6. 배포

역할

컨테이너를 서버로 배포하는 과정이다.
지금까지 파놓은 나의 Rocky서버에 배포할 예정이다.

기술 스택

단일 서버라면 Docker Compose로 충분하고, Dev, Test, Prod 등의 서버와 트래픽 분산을 위한 추가 서버가 필요하다면 Kubernetes와 Helm을 사용하는 것이 좋다.

현재는 우선 Docker Compose로 구축한 뒤 K8s까지 확장할 예정이다.

7. 모니터링 및 로깅

역할

배포 후 애플리케이션의 상태와 성능을 모니터링할 수 있는 단계이다.

기술 스택

  • 모니터링
    • Prometheus + Grafana
  • 로그 관리
    • ELK 스택(Elasticsearch, Logstash, Kibana)
  • 트래픽 추적
    • Jaeger, Zipkin

최종

우선 첫 번째 목표로, 코드 관리 및 트리거 -> 컨테이너화 -> 이미지 저장 -> 배포 단계까지만 완성을 해두려고 한다. 두 번째 목표로 테스트 코드가 완성되는 대로 단계 중 테스트를 포함하고, 마지막으로 서버 분산과 로깅까지 진행해보려 한다.

profile
궁금증은 못참는 편, 궁금한 개발자

0개의 댓글