한국어

OpenAPI 명세(OAS)의 강력한 기능을 알아보세요. 이 가이드에서는 핵심 개념과 장점부터 실제 예제, API 우선 설계의 미래까지 모든 것을 다룹니다.

진화된 API 문서: OpenAPI 명세 완벽 가이드

오늘날과 같이 모든 것이 연결된 디지털 세상에서 애플리케이션 프로그래밍 인터페이스(API)는 우리의 소프트웨어와 서비스를 하나로 엮는 보이지 않는 실과 같습니다. API는 모바일 뱅킹부터 소셜 미디어 피드에 이르기까지 모든 것을 가능하게 하는 현대 디지털 경제의 엔진입니다. 하지만 API의 수가 폭발적으로 증가함에 따라 중요한 과제가 등장합니다. 개발자, 시스템, 조직이 어떻게 모호함 없이 효과적으로 소통할 수 있을까요? 세계의 한쪽에서 만들어진 API가 다른 쪽의 서비스에서 원활하게 사용될 수 있도록 어떻게 보장할 수 있을까요?

그 해답은 인간과 기계 모두가 이해할 수 있는 방식으로 API의 기능을 설명하는 공통 언어, 즉 보편적인 계약에 있습니다. 이것이 바로 OpenAPI 명세(OAS)의 역할입니다. 단순한 문서를 넘어, OAS는 RESTful API를 설계, 구축, 문서화 및 사용하는 데 있어 기초가 되는 표준입니다. 이 가이드에서는 OpenAPI 명세가 무엇인지, 왜 중요한지, 그리고 이를 활용하여 더 나은 협업 기반의 디지털 제품을 만드는 방법을 심도 있게 살펴볼 것입니다.

OpenAPI 명세란 무엇인가? API를 위한 보편적 언어

핵심적으로, OpenAPI 명세는 RESTful API를 위한 표준적이고 언어에 구애받지 않는 인터페이스 설명입니다. 이를 통해 API의 전체 구조를 일반적으로 YAML 또는 JSON으로 작성된 단일 파일에 정의할 수 있습니다. 이것을 건물의 상세한 청사진이라고 생각해보세요. 공사를 시작하기 전에 청사진은 모든 방, 모든 출입구, 모든 전기 콘센트를 설명합니다. 마찬가지로 OpenAPI 문서는 다음을 설명합니다:

간략한 역사: Swagger에서 OpenAPI까지

"Swagger"라는 용어가 OpenAPI와 혼용되는 것을 들어보셨을 겁니다. 이 둘의 관계를 이해하는 것이 중요합니다. 이 명세는 2010년 Reverb의 Tony Tam이 만든 Swagger 명세로 시작되었습니다. 큰 인기를 얻게 되자 2015년에 리눅스 재단에 기증되었고, 구글, 마이크로소프트, IBM을 포함한 업계 리더들의 컨소시엄인 OpenAPI 이니셔티브의 관리하에 진정한 개방형 표준으로 자리 잡으며 OpenAPI 명세로 이름이 변경되었습니다.

오늘날 Swagger는 대화형 문서를 생성하는 Swagger UI나 명세 자체를 작성하는 Swagger Editor와 같이 OpenAPI 명세와 함께 작동하는 강력한 오픈 소스 및 전문 도구 모음을 의미합니다.

OpenAPI 문서의 핵심 구성 요소

OpenAPI 문서는 특정 필드 집합으로 구조화되어 있습니다. 처음에는 위협적으로 보일 수 있지만, 논리적으로 잘 구성되어 있습니다. 인간의 가독성이 뛰어난 YAML을 사용하여 OpenAPI 3.x 문서의 주요 구성 요소를 살펴보겠습니다.

1. `openapi` 및 `info` 객체: 기본 사항

모든 OpenAPI 문서는 버전과 필수 메타데이터로 시작합니다.

예시:


openapi: 3.0.3
info:
  title: 글로벌 도서 카탈로그 API
  description: 전 세계 도서 카탈로그에 접근하기 위한 API입니다.
  version: 1.0.0
  contact:
    name: API 지원팀
    url: http://www.example.com/support
    email: support@example.com
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html

2. `servers` 배열: API를 찾을 수 있는 위치

servers 배열은 API의 기본 URL을 지정합니다. 개발, 스테이징, 프로덕션과 같은 다양한 환경에 대해 여러 서버를 정의할 수 있습니다. 이를 통해 도구들이 환경 간에 쉽게 전환할 수 있습니다.

예시:


servers:
  - url: https://api.example.com/v1
    description: 프로덕션 서버
  - url: https://staging-api.example.com/v1
    description: 스테이징 서버

3. `paths` 객체: API의 심장

여기에 API의 엔드포인트를 정의합니다. paths 객체는 모든 개별 URL 경로를 담고 있습니다. 각 경로 아이템은 해당 경로에서 수행할 수 있는 HTTP 오퍼레이션(get, post, put, delete 등)을 설명합니다.

각 오퍼레이션 내에서는 다음과 같은 세부 정보를 정의합니다:

4. `components` 객체: 재사용 가능한 구성 요소

반복을 피하기 위해(DRY 원칙 준수), OpenAPI는 components 객체를 제공합니다. 이것은 재사용 가능한 요소를 정의하고 $ref 포인터를 사용하여 명세 전체에서 참조할 수 있는 강력한 기능입니다.

5. `security` 객체: 인증 적용

컴포넌트에서 securitySchemes를 정의한 후에는 security 객체를 사용하여 이를 적용합니다. 보안을 전체 API에 전역적으로 적용하거나 오퍼레이션별로 적용하여 공개 및 보호 엔드포인트를 혼합하여 사용할 수 있습니다.

조직이 OpenAPI를 채택해야 하는 이유: 비즈니스 및 기술적 이점

OpenAPI 명세를 채택하는 것은 단순히 기술적인 선택이 아니라, 전체 소프트웨어 개발 수명 주기에 걸쳐 효율성, 협업 및 품질을 향상시키는 전략적 결정입니다.

개발자에게: 단일 진실 공급원

제품 관리자 및 아키텍트에게: 설계 및 거버넌스

테스터 및 QA 팀에게: 간소화된 검증

최종 사용자 및 파트너에게: 우수한 개발자 경험(DX)

실용 가이드: 첫 OpenAPI 문서 만들기

이론을 실천에 옮겨 "글로벌 도서 카탈로그 API"에 대한 기본 OpenAPI 3.0 명세를 만들어 보겠습니다. 가독성을 위해 YAML을 사용하겠습니다.

1단계: 기본 정보 및 서버 정의

메타데이터와 프로덕션 서버 URL로 시작합니다.


openapi: 3.0.3
info:
  title: 글로벌 도서 카탈로그 API
  description: 전 세계 도서 카탈로그에 접근하기 위한 API입니다.
  version: 1.0.0
servers:
  - url: https://api.globalbooks.com/v1

2단계: `components`에 재사용 가능한 데이터 모델 정의

엔드포인트를 정의하기 전에 `Book` 객체에 대한 재사용 가능한 스키마를 만들어 보겠습니다. 이렇게 하면 설계를 깔끔하고 일관성 있게 유지할 수 있습니다.


components:
  schemas:
    Book:
      type: object
      properties:
        isbn:
          type: string
          description: 국제 표준 도서 번호입니다.
          example: '978-0321765723'
        title:
          type: string
          description: 책의 제목입니다.
          example: 'The C++ Programming Language'
        author:
          type: string
          description: 책의 저자입니다.
          example: 'Bjarne Stroustrup'
        publicationYear:
          type: integer
          description: 책이 출판된 연도입니다.
          example: 2013
      required:
        - isbn
        - title
        - author

3단계: `paths`에 엔드포인트 정의

이제 두 개의 엔드포인트를 만들 것입니다: 하나는 도서 목록을 가져오는 것이고, 다른 하나는 ISBN으로 특정 도서를 가져오는 것입니다.

$ref: '#/components/schemas/Book' 사용에 주목하세요. 이것이 우리가 재사용 가능한 `Book` 스키마를 참조하는 방법입니다.


paths:
  /books:
    get:
      summary: 모든 사용 가능한 도서 목록 조회
      description: 필터링 옵션을 포함하여 도서 목록을 반환합니다.
      operationId: listBooks
      responses:
        '200':
          description: 도서 배열을 포함한 성공적인 응답입니다.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Book'

  /books/{isbn}:
    get:
      summary: ISBN으로 도서 조회
      description: ISBN으로 식별된 단일 도서를 반환합니다.
      operationId: getBookByIsbn
      parameters:
        - name: isbn
          in: path
          required: true
          description: 조회할 도서의 ISBN입니다.
          schema:
            type: string
      responses:
        '200':
          description: 요청된 도서입니다.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Book'
        '404':
          description: 지정된 ISBN의 도서를 찾을 수 없습니다.

4단계: 보안 추가

헤더로 전송해야 하는 간단한 API 키로 API를 보호해 보겠습니다. 먼저 `components`에서 체계를 정의한 다음 전역적으로 적용합니다.


# 'components' 섹션에 이것을 추가하세요
components:
  # ... 이전의 스키마들
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-KEY

# 문서의 루트 레벨에 이것을 추가하세요
security:
  - ApiKeyAuth: []

5단계: 검증 및 시각화

완성된 YAML 파일을 사용하여 이제 다양한 도구를 사용할 수 있습니다:

OpenAPI 생태계: 도구와 기술

OAS의 힘은 방대하고 성숙한 도구 생태계에 의해 증폭됩니다. 어떤 필요가 있든, 그것을 위한 도구가 있을 가능성이 높습니다:

OpenAPI의 미래: OAS 3.1과 그 이상

OpenAPI 명세는 끊임없이 진화하고 있습니다. 최신 주요 버전인 OAS 3.1은 몇 가지 중요한 개선 사항을 도입했습니다:

이러한 발전은 현대적이고, API 우선이며, 이벤트 기반 아키텍처에서 OpenAPI의 중심적인 위치를 공고히 합니다.

결론: 현대 개발의 초석

OpenAPI 명세는 우리가 API에 대해 생각하는 방식을 바꾸어 놓았습니다. 이는 API 문서를 두렵고 종종 방치되던 사후 작업에서 전체 개발 수명 주기를 이끄는 전략적이고 살아있는 문서로 격상시켰습니다. 기계가 읽을 수 있는 계약 역할을 함으로써 OAS는 협업을 촉진하고, 강력한 자동화를 가능하게 하며, 일관성을 강제하고, 궁극적으로 더 좋고, 더 신뢰할 수 있으며, 더 쉽게 사용할 수 있는 API를 만드는 데 기여합니다.

여러분이 개발자, 아키텍트, 제품 관리자 또는 테스터이든, OpenAPI 명세를 수용하는 것은 현대 소프트웨어 개발을 마스터하기 위한 중요한 단계입니다. 아직 사용하고 있지 않다면, 다음 프로젝트부터 시작해 보세요. 먼저 계약을 정의하고, 팀과 공유하며, 디지털 협업에서 새로운 수준의 효율성과 명확성을 확보하십시오.