Git으로 OpenAPI 스펙 버전 관리하는 방법

Apidog에서 코드처럼 OpenAPI 스펙을 버전 관리하세요: 브랜치 전략, 스펙 변경에 대한 풀 리퀘스트 검토, CI 유효성 검사를 지원합니다.

Ashley Innocent

Ashley Innocent

2 June 2026

Git으로 OpenAPI 스펙 버전 관리하는 방법

Apidog 엔터프라이즈

온프레미스 배포

SSO & RBAC

SOC 2 준수

Apidog Enterprise 살펴보기

OpenAPI 스펙은 계약입니다. 스펙이 변경되면 클라이언트가 오작동하고, 목업이 오래되어 무용지물이 되며, 더 이상 존재하지 않는 API에 대해 테스트가 통과하는 문제가 발생합니다. 따라서 스펙을 다른 코드처럼 다루십시오: Git에 저장하고, 브랜치로 관리하고, 검토하고, 모든 변경 사항에 대해 유효성을 검사하세요.

이 가이드는 Git을 사용한 OpenAPI 버전 관리에 대해 처음부터 자세히 설명합니다. 파일이 어디에 위치해야 하는지, 브랜치를 어떻게 관리하는지, 검토자가 스펙 차이점에서 실제로 무엇을 확인하는지, 그리고 Apidog에서 변경 사항을 바로 푸시하는 방법에 대해 다룹니다. 이 가이드를 마치면 팀 전체가 신뢰할 수 있는 워크플로우를 갖게 될 것입니다.

버튼

OpenAPI 스펙을 버전 관리해야 하는 이유

위키나 공유 드라이브에 있는 스펙은 기록이 없습니다. 지난 화요일에 누가 POST /orders 페이로드를 변경했는지, 왜 변경했는지 알 수 없습니다. Git이 이 문제를 해결해줍니다.

openapi.yaml을 버전 관리하면 다음 네 가지를 무료로 얻을 수 있습니다:

이것은 Git-native API 워크플로우의 기반입니다. 스펙은 소스 코드이며, 소스 코드는 Git에 저장됩니다.

저장소에서 스펙 파일이 위치하는 곳

간단하고 예측 가능하게 유지하세요. 대부분의 팀은 단일 openapi.yaml 파일을 저장소 루트 또는 api/ 폴더에 둡니다:

my-service/
├── api/
│ └── openapi.yaml
├── src/
└── README.md

여러 주요 버전을 병렬로 유지 관리하는 경우, 각 주요 버전별로 파일을 나누어 관리합니다:

api/
├── api-v1.yaml
└── api-v2.yaml

이렇게 하면 파괴적 변경 사항이 격리됩니다. api-v1.yaml은 기존 클라이언트를 위해 고정된 상태로 유지되고 api-v2.yaml은 발전합니다. 또한 각 파일이 하나의 이유로만 변경되므로 차이점(diff)이 작아지고 검토가 빨라집니다. 스펙을 이러한 방식으로 다루는 것이 API spec as code의 핵심 아이디어입니다.

하나의 규칙을 선택하고 문서화하세요. 최악의 결과는 두 개의 파일이 서로 '진정한' 스펙이라고 주장하는 것입니다.

스펙 변경을 위한 브랜칭 전략

스펙을 위한 특별한 브랜칭 모델이 필요하지 않습니다. 코드에서 이미 사용하는 방식을 재사용하세요. main 브랜치에서 분기하여 변경 사항을 만들고, PR을 엽니다.

스펙 브랜치를 쉽게 스캔할 수 있도록 하는 명명 규칙:

브랜치 유형 패턴 예시
새 엔드포인트 api/add-<resource> api/add-refunds
필드 변경 api/change-<resource>-<field> api/change-order-status
파괴적 변경 api/breaking-<description> api/breaking-v2-auth
수정 / 정리 api/fix-<description> api/fix-pagination-schema

api/ 접두사는 "이 PR이 계약을 변경한다"는 것을 한눈에 알려줍니다. 검토자와 CI는 이를 기준으로 필터링할 수 있습니다. 파괴적 변경의 경우, 명시적인 breaking- 접두사는 추가적인 검토와 아마도 버전 업이 필요하다는 플래그 역할을 합니다.

브랜치를 단명하게 유지하세요. 2주 동안 유지되는 스펙 브랜치는 다른 사람들의 변경 사항과 충돌할 것입니다. 작고 집중된 브랜치는 깔끔하게 병합됩니다.

풀 리퀘스트에서 스펙 변경 사항 검토하기

이것이 버전 관리가 진가를 발휘하는 부분입니다. 스펙 PR은 계약 변경이며, 계약 변경은 실제 검토를 받아야 마땅합니다.

검토자가 서식과 씨름하지 않고 변경 사항을 읽을 수 있도록 YAML을 차이점(diff) 친화적인 방식으로 작성하세요:

paths:
 /orders/{orderId}:
 get:
 summary: Get an order
 parameters:
 - name: orderId
 in: path
 required: true
 schema:
 type: string
 responses:
 "200":
 description: Order found
 content:
 application/json:
 schema:
 $ref: "#/components/schemas/Order"

일관된 들여쓰기와 한 줄에 하나의 속성을 사용하면 단일 필드 추가가 한 줄 차이점으로 나타납니다. 이것이 목표입니다.

검토자가 확인해야 할 사항:

파괴적 변경 감지를 위해서는 육안보다는 도구에 의존하세요. CI 단계(아래 설명)는 PR의 스펙을 main과 비교하여 호환되지 않는 변경 사항을 발견하면 빌드를 실패시킬 수 있습니다. 사람은 이러한 부분을 놓치지만, 차이점(diff) 도구는 그렇지 않습니다.

Apidog에서 커밋 및 푸시

원시 YAML을 수동으로 편집하는 것도 가능하지만, 실시간 유효성 검사가 있는 시각적 편집기가 더 빠르고 실수를 조기에 잡아냅니다. Apidog의 Spec-First 모드는 양방향 Git 동기화를 제공합니다. 도구를 떠나지 않고 UI에서 스펙을 편집하고, 커밋하고, 저장소로 푸시할 수 있습니다. 팀원의 변경 사항을 같은 방식으로 다시 가져올 수도 있습니다.

흐름은 다음과 같습니다:

  1. Git 저장소를 연결하고 Apidog가 스펙 파일을 가리키도록 합니다.
  2. 시각적 편집기에서 엔드포인트, 스키마 및 예시를 편집합니다.
  3. Apidog는 깔끔하고 차이점(diff) 친화적인 YAML을 파일에 다시 기록합니다.
  4. 브랜치에 커밋하고 푸시한 다음, 평소처럼 PR을 엽니다.

Apidog는 YAML을 일관되게 직렬화하므로, 차이점(diff)이 작고 검토하기 쉬우며, 불필요한 재정렬이나 재포맷팅이 없습니다. 전체 설정은 Apidog Spec-First 모드 문서에서 확인할 수 있습니다. 특정 제공업체에 파일을 저장하려면 GitHub에 OpenAPI 스펙 동기화하기를 참조하세요.

CI 유효성 검사 훅

유효하지 않은 스펙이 main에 도달하도록 허용하지 마세요. 풀 리퀘스트 검사에 유효성 검사를 연결하여 손상된 계약이 자동으로 빌드를 실패하도록 만드세요.

최소한의 GitHub Actions 단계:

name: Validate OpenAPI
on: [pull_request]
jobs:
 lint:
 runs-on: ubuntu-latest
 steps:
 - uses: actions/checkout@v4
 - name: Lint spec
 run: npx @redocly/cli lint api/openapi.yaml

성장함에 따라 더 많은 검사를 추가하세요:

이러한 검사는 몇 초 만에 실행되며, 사람이 대충 훑어볼 때 놓칠 수 있는 오류를 잡아냅니다.

모범 사례

몇 가지 습관은 시간이 지나도 스펙 버전 관리를 건전하게 유지시켜 줍니다:

자주 묻는 질문

OpenAPI 스펙에서 파괴적 변경 사항을 어떻게 감지하나요?

CI에서 풀 리퀘스트를 main의 버전과 비교하는 스펙 차이점(diff) 도구를 실행하세요. oasdiff와 같은 도구는 각 변경 사항을 파괴적 변경, 비파괴적 변경 또는 미분류로 분류하며, 파괴적 변경이 발생하면 빌드를 실패시킬 수 있습니다. 이는 수동 검토에서는 놓칠 수 있는 제거된 필드, 새로운 필수 매개변수 및 변경된 유형을 잡아냅니다.

하나의 OpenAPI 파일을 유지해야 하나요, 아니면 여러 개로 분할해야 하나요?

단일 openapi.yaml 파일로 시작하세요. 검토하고 버전 관리하기 가장 쉽습니다. 파일이 커지거나 여러 주요 버전을 병렬로 유지 관리하는 경우, 주요 버전별로(api-v1.yaml, api-v2.yaml) 분할하거나 $ref를 사용하여 스키마를 별도의 파일로 나눕니다. 너무 일찍 분할하지 마세요. 읽기 쉬운 하나의 파일이 파편화된 다섯 개의 파일보다 낫습니다.

YAML을 수동으로 작성하지 않고도 스펙을 버전 관리할 수 있나요?

네. Apidog의 Spec-First 모드를 사용하면 시각적 편집기에서 스펙을 편집하고 변경 사항을 양방향으로 Git에 동기화할 수 있습니다. 일관된 YAML을 작성하므로, 전체 Git 히스토리와 검토를 유지하면서도 차이점(diff)이 깔끔하고 풀 리퀘스트가 읽기 쉽습니다.

버튼

Apidog에서 API 설계-첫 번째 연습

API를 더 쉽게 구축하고 사용하는 방법을 발견하세요