GitLab CI/CD Pipeline
Projects | | Links:

SVN 형상관리 + Jenkins/Hudson 수동 빌드 환경을 GitLab CI 자동 빌드 + S3 아티팩트 + 서버 배포 스크립트 체계로 전환하고, 10개+ 서비스(Spring Boot, Ant 데몬)에 적용한 프로젝트입니다.
프로젝트 기여도 100%
1. Overview
기존 SVN 형상관리 + Jenkins/Hudson 수동 빌드·배포 환경을, GitLab CI 자동 빌드 + S3 아티팩트 관리 + 서버 배포 스크립트(prepare/deploy/rollback) 체계로 전환했습니다.
서비스 유형(Spring Boot fat JAR, Ant 데몬 JAR+lib)에 관계없이 동일한 CI/CD 패턴을 적용할 수 있도록 설계하여 10개+ 서비스에 확장 적용했습니다.
2. Problem Statement
| 문제 | 영향 |
|---|---|
| SVN 레거시 VCS + Jenkins/Hudson | 브랜치 전략 불가, 빌드 서버 노후화 |
| 수동 배포 (SCP + SSH) | 배포 시간 30분+, 휴먼 에러 빈발 |
| 롤백 체계 부재 | 장애 시 복구 시간 길어짐 |
| 배포 이력 추적 불가 | 누가 언제 무엇을 배포했는지 모름 |
3. CI/CD Architecture
배포 흐름

CICD Pipeline Diagram
배포 전략
| 환경 | 트리거 | 방식 | 이유 |
|---|---|---|---|
| TEST | test 브랜치 push | 자동 (SSH + SCP) | 빠른 검증 |
| PRD | main 브랜치 push | S3 업로드만 자동, 배포는 수동 | 금융권 안전성 확보 |
4. PRD 배포 스크립트 (3종)
서버에 설치된 셸 스크립트로 S3 아티팩트를 관리하며 안전하게 배포:
| 스크립트 | 기능 |
|---|---|
prepare-release.sh | S3에서 최신 아티팩트 다운로드 + 현재 버전을 backup에 백업 |
deploy-release.sh | 프로세스 중지 → 재시작 → Health Check |
rollback.sh | backup에서 이전 버전 복원 → 재시작 |
배포 절차
# 1. S3에서 다운로드 + 현재 버전 백업
./prepare-release.sh
# 2. 프로세스 재시작
./deploy-release.sh
# 3. 문제 발생 시 즉시 롤백 (backup에서 복원)
./rollback.sh
5. 적용 서비스 유형
Type A: Spring Boot (Gradle, fat JAR)
| 항목 | 내용 |
|---|---|
| 빌드 | Gradle bootJar |
| 산출물 | 단일 JAR (타임스탬프 태깅) |
| 런타임 | Amazon Corretto Java 21 |
| 배포 단위 | 단일 JAR 교체 → 재시작 |
Type B: Ant Daemon (JAR + lib)
| 항목 | 내용 |
|---|---|
| 빌드 | Ant jar |
| 산출물 | JAR + lib/ (의존성 20~30개) tar.gz 패키징 |
| 런타임 | Amazon Corretto Java 8 |
| 배포 단위 | tar.gz 풀어서 JAR+lib 교체 → 재시작 |
6. SVN → GitLab 이관
git-svn을 이용해 커밋 이력을 유지하면서 Git으로 전환- 기존 Jenkins/Hudson 빌드를 GitLab CI로 대체
- 브랜치 전략 도입:
main/test/develop
7. Key Results
| 지표 | Before | After |
|---|---|---|
| 형상관리 | SVN | GitLab (브랜치 전략) |
| 빌드 | Jenkins/Hudson (수동) | GitLab CI (push 자동) |
| 배포 시간 | 30분+ (수동) | 5분 이내 |
| 롤백 시간 | 수십 분 | 10초 이내 (rollback.sh) |
| CI/CD 대상 | 0개 | 10개+ 서비스 |
| 배포 이력 | 추적 불가 | S3 타임스탬프 버전 관리 |
| PRD 안전성 | 없음 | 수동 트리거 + 자동 백업 + Health Check |
8. Used Skills
- GitLab CI/CD (.gitlab-ci.yml)
- Amazon S3 (아티팩트 버전 관리)
- Bash (배포 스크립트: prepare / deploy / rollback)
- Gradle (Spring Boot) / Ant (레거시 데몬)
- SSH / SCP (TEST 자동 배포)
- Spring Actuator (Health Check)
- EC2 (Amazon Linux 2)
- git-svn (SVN → GitLab 이관)
- ECR (CI Runner 이미지 관리)