GitLab을 Self-Managed 환경에서 운영하는 분이라면 깊이 공감하실 겁니다. 버전 업그레이드가 정말 번거롭고 까다롭다는 사실을요. 단순히 Docker 이미지 태그를 바꾸거나 패키지 버전을 올리면 끝날 것 같지만, 현실은 전혀 그렇지 않습니다.
GitLab 업그레이드의 핵심 난관은 바로 '순차적 버전 경유'입니다. 예를 들어, 16.7에서 17.3으로 올리려면 다음과 같은 경로를 거쳐야 합니다.
16.7.x → 16.11.x → 17.0.x → 17.1.x → 17.3.x
각 버전에서 업그레이드 → 서비스 재시작 → Background Migration 완료 대기 → 헬스 체크를 반복해야 합니다. 특히 마이그레이션이 완료될 때까지 무작정 기다려야 하는데, 이 과정에서 버그나 데이터 문제로 마이그레이션이 실패하기라도 하면 해결책을 찾기 위해 끝없는 구글링의 늪에 빠지게 됩니다.
프로덕션 환경에서 메이저 버전 업그레이드는 그야말로 긴장의 연속입니다. 한 단계라도 빠뜨리면 데이터 정합성이 깨질 수 있으니까요. 다른 업무도 산더미인데 버전 하나 올리자고 반나절 내내 모니터 앞에 붙어 있어야 하는 상황, 소모적입니다. 그래서 생각했습니다.
"이 복잡한 과정을 자동화할 순 없을까?"
자동화를 시도해 봤지만, 기존의 쉘 스크립트로는 GitLab 업그레이드 과정에서 발생하는 에러 상황에 유연하게 대응하는 데 한계가 있었습니다. 하지만 Claude Code와 Skills의 등장으로 새로운 가능성이 열렸습니다. 이제 AI가 실시간으로 상황을 판단하고, 에러가 발생하면 스스로 웹을 검색해 해결책을 찾아 적용하며, GitLab 업그레이드를 자동으로 완료할 수 있습니다.
이 글에서는 Claude Code의 Skills를 활용해 GitLab 업그레이드를 자동화한 경험을 공유합 니다. Skills의 기본 개념부터 설계 원칙, 실제 사용 예시, 마이그레이션 실패 시 AI의 문제 해결 과정까지 자세히 살펴보겠습니다.
Claude Code, Skills 개요
Claude Code는 Anthropic에서 개발한 CLI 기반 AI 코딩 도구입니다. 터미널에서 Claude와 대화하면서 코드 작성, 파일 수정, 명령어 실행 등을 할 수 있죠.
여기에 Skills라는 기능이 있습니다. Skills는 SKILL.md 파일을 포함한 폴더로, 지침뿐만 아니라 실행 스크립트, 템플릿, 참조 문서 등을 함께 포함합니다. "이런 상황에서는 이렇게 해"라고 정의해두면 Claude가 모든 Skill의 description을 컨텍스트에서 확인하고, 작업 맥락에 맞는 Skill이 있다고 판단하면 전체 콘텐츠를 로드하여 그 지침을 따라 작업을 수행합니다.
SKILL.md 구조
Skills는 SKILL.md 파일 하나로 정의됩니다. YAML frontmatter와 Markdown body로 구성되어 있습니다.
---
name: my-skill
description: 언제 이 스킬을 사용할지 설명
---
# 스킬 제목
여기에 Claude가 따 라야 할 지침 작성
- name: Skill 이름이자
/slash-command(예:/my-skill로 직접 호출 가능). 필수 필드입니다. - description: Skill이 무엇을 하고 언제 사용되는지 설명하는 필수 필드입니다. Claude가 자동으로 Skill을 로드할지 판단하는 핵심 정보로 사용됩니다.
GitLab 업그레이드 자동화 Skill 설계
앞서 설명한 Skills 구조를 바탕으로, GitLab 업그레이드 자동화 Skill을 설계했습니다. 설계 시 가장 중요하게 생각한 점은 ‘수동 업그레이드의 안전성을 유지하면서 자동화하는 것’이었습니다. 이를 중심으로 다음 다섯 가지 핵심 설계 요소를 Skill에 반영했습니다.
핵심 설계 요소
- 다양한 설치 유형 지원: RPM/DEB(Linux 패키지), Docker, Helm 등 각 환경에 맞는 업그레이드 방식을 분기 처리합니다.
- 공식 업그레이드 경로 자동 계산: GitLab Upgrade Path Tool을 활용하여 현재 버전에서 목표 버전까지 최적의 경로를 계산합니다.
- Background Migration 모니터링(가장 중요!): 다음 단계로 넘어가기 전, 모든 Background Migration이 완료되었는지 5분 간격으로 체크하며 대기합니다.
- 백업, 롤백 전략: 업그레이드 직전 스냅샷이나 백업을 생성하여 문제 발생 시 즉시 롤백할 수 있는 안전장치를 마련합니다.
- 지능적 문제 해결: 마이그레이션 실패 시 Claude가 에러 메시지를 분석하고, 공식 문서나 이슈 트래커를 검색해 해결책(예:
gitlab-rails console명령 실행)을 찾아 적용합니다.
실제 사용 예시
앞서 설계한 Skill을 사용해 GitLab을 18.3.6으로 업그레이드한 과정을 단계별로 살펴보겠습니다.
업그레이드 요청
터미널에서 Claude를 실행하고 자연어로 GitLab 18.3.6으로 업그레이드를 요청합니다.
