Rails API 요청 버전 관리

Versioning API requests | Petr Hlavicka

작성자
발행일
2025년 06월 23일

핵심 요약

  • 1 본 문서는 Rails 애플리케이션에서 API 요청을 효과적으로 버전 관리하는 방법에 대해 다루며, 특히 기존 클라이언트에 영향을 주지 않으면서 변경 사항을 처리하는 데 중점을 둡니다.
  • 2 저자가 개발한 'verquest'라는 새로운 Ruby Gem을 소개하며, 이 Gem이 OpenAPI 지원, DRY 원칙 준수, 내부 구현 숨기기 등의 요구사항을 어떻게 충족하는지 설명합니다.
  • 3 verquest Gem은 JSON 스키마를 이용한 요청 유효성 검사 및 내부 구조 매핑 기능을 제공하며, 버전 상속을 통해 파괴적인 변경 사항을 효율적으로 관리할 수 있도록 돕습니다.

도입

이 문서는 Rails 환경에서 API 요청 버전 관리에 대한 심층적인 내용을 다루고 있습니다. 저자는 이전 글에서 유연한 API 버전 관리에 대한 해결책을 제시한 바 있으며, 본 글에서는 요청 버전 관리에 초점을 맞춰 파괴적인 변경 사항을 기존 클라이언트에 영향을 주지 않으면서 처리하는 중요성을 강조합니다. 특히, 컨트롤러를 버전별로 복제하는 일반적인 방식 대신, 동일한 컨트롤러를 사용하면서 요청 매개변수와 응답을 버전 관리하는 접근 방식에 대한 심화된 논의를 제공합니다.

API 요청 버전 관리가 필요한 주된 이유는 파괴적인 변경 사항(예: 필드 구조 변경, 필드 이름 변경, 필드 제거, 필수 필드 추가 등)을 안전하게 처리하기 위함입니다. 반면, 새로운 선택적 필드 추가나 필드를 선택적으로 변경하는 경우는 버전 업데이트가 필요하지 않을 수 있습니다. 저자는 효과적인 요청 버전 관리를 위한 네 가지 핵심 요구사항을 제시합니다. 첫째, OpenAPI 지원을 통해 API를 문서화하고 다양한 도구에서 활용할 수 있어야 합니다. 둘째, DRY(Don’t Repeat Yourself) 원칙을 준수하여 각 버전별로 요청 정의를 반복하지 않고, 이전 버전과의 차이점만 정의하도록 합니다. 셋째, 내부 구현을 숨겨 모델이나 속성 이름을 내부 명명 규칙과 다르게 외부에 노출함으로써 API의 사용자 친화성을 높여야 합니다. 넷째, 내부 오류를 외부 구조에 맞게 매핑하여 사용자가 오류 발생 시 수정 지점을 쉽게 파악할 수 있도록 해야 합니다.

이러한 요구사항을 충족하기 위해 저자는 ‘verquest’라는 새로운 Ruby Gem을 개발했습니다. verquest는 오류 매핑 기능을 제외한 대부분의 요구사항을 충족하며, 향후 오류 매핑 기능 추가를 계획하고 있습니다. verquest Gem은 JSON 스키마를 쉽게 정의할 수 있는 DSL(Domain Specific Language)을 제공하여 OpenAPI 컴포넌트 생성 및 유효성 검사에 활용됩니다. 예를 들어, UserCreateRequest 클래스를 통해 사용자 생성 요청의 스키마를 정의하고, to_validation_schema 메서드를 통해 해당 스키마의 JSON 표현을 확인할 수 있습니다. 또한, map 키워드를 사용하여 외부 요청 구조를 내부 구조로 자동 매핑하는 기능을 제공합니다.

Rails 애플리케이션에서 verquest Gem은 컨트롤러에서 process 메서드를 사용하여 들어오는 매개변수를 JSON 스키마에 대해 유효성 검사하고 내부 구조로 매핑하는 데 활용됩니다. 유효하지 않은 매개변수가 제공될 경우 Verquest::InvalidParamsError 예외를 발생시키며, 상세한 오류 정보를 포함합니다. 파괴적인 변경 사항을 처리하는 방식도 주목할 만합니다. 새로운 버전(예: ‘2025-08’)을 추가하고, 이전 버전(‘2025-06’)에서 선택적이었던 필드를 새 버전에서 필수로 변경하는 방식으로 버전 상속을 활용합니다. verquest는 정확한 버전이 없을 경우 가장 가까운 이전 버전을 사용하는 ‘다운그레이딩’ 전략을 구현하고 있습니다. 마지막으로, verquest는 component_name, to_ref, to_schema와 같은 메서드를 제공하여 rswag Gem과 같은 도구를 사용하여 OpenAPI 문서를 구축하는 데 도움을 줍니다.

결론

결론적으로, 'verquest' Gem은 Rails API 요청의 복잡한 버전 관리 문제를 해결하기 위한 유망한 솔루션입니다. 현재 이 Gem은 프로덕션 사용을 위한 준비가 완료되지 않았으며, 성능, 복잡성 대 이점, 학습 곡선, 오류 매핑과 같은 누락된 기능 등 여러 고려 사항이 존재합니다. 저자는 이 글을 통해 커뮤니티의 피드백을 구하고 있으며, 사용자들의 경험 공유와 개선 제안, 풀 리퀘스트를 환영하고 있습니다. verquest는 개발 중인 프로젝트이지만, API 버전 관리를 위한 효율적이고 DRY한 접근 방식을 제시한다는 점에서 Ruby on Rails 개발자들에게 큰 잠재력을 제공할 것으로 기대됩니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!