[CI/CD] GCP 서버 CI/CD 파이프라인 구축 (Github Actions)

2025. 6. 27. 18:20·Git

운영 중인 백엔드 시스템에 CI/CD를 도입하면서, 코드 배포의 시간을 50% 이상 단축할 수 있었습니다. 


1. 프로젝트 환경 구성

현재 시스템은 다음과 같은 구조로 운영되고 있습니다:

  • 로컬 개발 환경 → Bastion Host → Portal Server
    개발된 코드는 GitHub를 통해 관리되며, Bastion Host를 거쳐 Portal Server에 배포됩니다.
    • 기존 구조: Local (.war 파일 mvn build) -> .war 파일 Bastion Host 전송 -> .war 파일 Portal Server 전송 -> 배포
  • 보안 강화 구조 (GCP Private IP + IAP)
    Portal 서버는 GCP 내부 네트워크에 위치하고 있으며, 외부에서 직접 접근할 수 없고, IAP(Identity-Aware Proxy)를 통해서만 접속이 가능합니다. 모든 배포 작업은 IAP 터널링을 통해 Bastion Host를 경유합니다.

2. 의존성 이슈 대응 (googlebigquery)

배포 과정에서 googlebigquery-jdbc 관련 외부 의존성이 Maven 중앙 저장소에서 정상적으로 다운로드되지 않는 문제가 있었습니다.
이 문제는 해당 라이브러리 .jar 파일을 프로젝트 레포에 직접 포함시키는 방식으로 해결했습니다. 완전한 자동화에는 다소 한계가 있었지만, CI 파이프라인 내 의존성 충돌은 방지할 수 있었습니다.


3. CI 파이프라인 구성 (GitHub Actions)

트리거 조건

  • test, production 브랜치로 Pull Request가 생성될 때 자동으로 동작합니다.
    브랜치별로 설정된 프로파일(dev, prd)에 따라 빌드 환경이 구분됩니다.

주요 작업 흐름

  1. 코드 체크아웃 및 Java 환경 설정
    • GitHub Actions에서 Temurin JDK 11 설치
  2. Maven 빌드 실행
    • mvn clean install -Pdev 혹은 -Pprd로 WAR 파일 생성
  3. Google Cloud 인증 및 SSH 연결
    • 서비스 계정 키를 활용한 인증
      • Github 레포지토리 Settings > Secrets and variables > Actions > New repository secret 생성 -> yml 파일에서 사용
      •  
    • IAP 터널을 통해 Bastion Host에 WAR 파일 전송
  4. Bastion Host에서 배포 스크립트 실행
    • 사전에 작성된 deploy_dev.sh 또는 deploy_prod.sh 실행
    • 해당 스크립트는 내부 Portal 서버로 WAR 파일을 복사하는 역할 수행
name: Deploy WAR to Bastion (production)

on:
  pull_request:
    branches: [production]

jobs:
  deploy:
    name: Build and Deploy to Production
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v4

    - name: Set up Java
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
        java-version: '11'

    - name: Build WAR using Maven
      run: mvn -B clean install -Pprd

    - name: Set up Google Cloud SDK
      uses: google-github-actions/auth@v2
      with:
        project_id: service-account
        credentials_json: ${{ secrets.key }}
        export_default_credentials: true

    - name: Activate service account for gcloud CLI
      run: |
        gcloud auth activate-service-account --key-file="${GOOGLE_APPLICATION_CREDENTIALS}"
        gcloud config set account service-account@service-account.iam.gserviceaccount.com

    - name: Transfer WAR to Bastion Host via IAP
      run: |
        gcloud compute scp target/file.war bastion-host:/home/service-account/ \
          --zone=asia-northeast3-a \
          --tunnel-through-iap \
          --project=service-account

    - name: Run deployment script on Bastion
      run: |
        gcloud compute ssh bastion-host \
          --zone=asia-northeast3-a \
          --tunnel-through-iap \
          --project=dmdashboard-prod \
          --command="bash /home/service-account/deploy_prod.sh"

Github Repository secrets


4. CD (배포 자동화) 전략

보안상의 이유로, 최종 WAS 배포는 자동화하지 않고 운영자가 수동으로 수행하도록 했습니다.
WAR 파일만 전달된 상태에서, 직접 Tomcat을 재시작하거나 웹 애플리케이션을 교체하는 식으로 운영 환경에 반영합니다.

이렇게 설계한 이유는 다음과 같습니다:

  • 운영 서버 접근 권한 최소화
  • 실시간 장애 대응 여지를 확보
  • 배포 승인 및 리스크 확인 프로세스 유지

이번 CI/CD 구축을 통해 배포 시간과 실수를 줄이고, 운영 안정성을 높일 수 있게 되었습니다.

저작자표시 (새창열림)

'Git' 카테고리의 다른 글

[GIT] Git Flow - 가장 쉬운 깃 브랜치 전략 (생애 첫 기술 발표 영상)  (1) 2024.10.03
'Git' 카테고리의 다른 글
  • [GIT] Git Flow - 가장 쉬운 깃 브랜치 전략 (생애 첫 기술 발표 영상)
coder_
coder_
어차피 할거 즐기자
  • coder_
    Good coder
    coder_
  • 전체
    오늘
    어제
    • 분류 전체보기 (41)
      • 인공지능 [AI] (3)
      • 모의해킹 (3)
      • Git (2)
      • Cloud (4)
      • 컴퓨터 과학 [CS] (3)
      • 데이터베이스 [DB] (2)
      • Nojde.js (4)
      • Javascript (3)
      • Django (4)
      • Code up (11)
        • 코드업 기초 100제 (9)
        • 단순 반복문 (2)
      • 백준 baek_joon (1)
        • 단계별 문제풀이 (1)
      • Web Scraping (1)
  • 블로그 메뉴

    • 글쓰기
    • 관리
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    기초100제
    node.js
    모의해킹
    코드업
    GCP
    hugging face
    ubuntu
    llama3.1
    MariaDB
    Coding Test
    Bastion host
    파이썬
    기초 100제
    ubuntu 24.04
    code up
    php
    Lightsail
    Python
    nodejs
    Linux
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
coder_
[CI/CD] GCP 서버 CI/CD 파이프라인 구축 (Github Actions)
상단으로

티스토리툴바