Created: Updated:

API Façade 패턴

이 시점에서, 아마도 아키텍처적인 관점에서 어떻게 해야 할지 궁금해할 수 있습니다.

모든 이 가이드라인을 따르면서 내부 서비스와 시스템을 유용하게 노출시키는 동시에 API를 반복 및 유지 관리하는 방법은 무엇일까요?

백엔드 시스템들은 종종 애플리케이션 개발자들에게 직접 노출시키기에는 너무 복잡합니다. 이들은 안정적이고 (시간이 지나면서 검증되었기 때문에) 신뢰성이 있지만, 종종 기존 기술을 기반으로하며 HTTP와 같은 웹 표준에 노출시키기 쉽지 않습니다. 이러한 시스템들은 복잡한 종속성을 가지고 있을 수 있으며, 형식이 변경되는 것에 대응하려면 느리게 변화합니다.

실제로, 문제는 하나의 큰 시스템에 대한 API를 만드는 것이 아니라 API가 개발자들에게 가치있게 사용되기 위해 필요한 여러 보조 시스템에 대한 API를 만드는 것입니다.

18-1

우리는 몇 가지 안티 패턴을 살펴볼 필요가 있습니다. 왜 이러한 패턴이 잘 작동하지 않는지 알아봅시다.

빌드 업 방식

빌드 업 방식에서 개발자는 대규모 시스템의 핵심 객체를 노출시키고 위에 XML 파싱 레이어를 놓습니다.

18-2

이 접근법은 빠르게 버전 1을 출시할 수 있다는 장점이 있습니다. 또한 API 팀 구성원(내부 개발자)들이 시스템의 세부 정보를 이미 이해하고 있기 때문에 이러한 방식이 가능합니다.

하지만, 내부 시스템의 세부 객체 수준의 세부 정보는 외부 개발자에게 혼란을 줄 수 있습니다. 또한 내부 아키텍처의 세부 정보를 노출하는 것은 좋지 않은 방법입니다. 이 방식은 시스템이 작동하는 방식과 API가 노출되는 방식이 1:1 매핑되므로 융통성이 없을 수 있습니다. 즉, 레코드 시스템부터 API로 빌드하는 것은 지나치게 복잡할 수 있습니다.

표준 위원회 방식

내부 시스템은 종종 서로 다른 사람들과 부서에서 소유하고 관리하기 때문에 어떻게 작동해야 하는지에 대한 서로 다른 견해가 있을 수 있습니다. 표준 위원회 방식으로 API를 설계하는 것은 종종 스키마 및 URL과 같은 것을 정의하는 표준 문서를 작성하는 것을 포함합니다. 모든 이해 관계자들은 이 공통 목표를 향해 작업을 수행합니다.

18-3

이러한 방식의 장점은 버전 1을 빠르게 출시할 수 있다는 것입니다. 또한 조직 전체에서 통합 감각과 포괄적인 전략을 구축할 수 있으므로 대규모 조직에서 이러한 요소를 가지는 것은 상당히 중요한 성과입니다.

그러나 표준 위원회 방식의 단점은 느릴 수 있다는 것입니다. 문서를 빠르게 만들어도, 모든 사람들이 그것에 따라 구현하는 것은 느리게 이루어질 수 있으며 준수가 부족할 수 있습니다. 이러한 접근 방식은 많은 타협으로 인해 보통 그다지 좋은 설계로 이어질 수도 있습니다.

흉내쟁이 방식

우리는 종종 이 패턴을 볼 수 있습니다. 이는 조직이 늦게 시장에 진입할 때, 즉 경쟁 업체가 이미 솔루션을 출시한 경우에 발생합니다. 이 접근법은 버전 1로 빠르게 이동할 수 있으며, API를 사용할 앱 개발자가 이미 경쟁 업체의 API에 익숙한 경우 내장된 채택 곡선이 있을 수 있습니다.

18-4

그러나, 당신은 단순히 다른 회사의 API 디자인을 복제함으로써 자사의 핵심 가치와 차별화를 드러내지 못하게 될 수 있습니다. 이러한 결과, 당신의 제품은 API 시장에서 열등한 제안으로 여겨질 수 있습니다.

해결책 - API Façade 패턴

가장 좋은 해결책은 제품 관리의 기본 원칙을 고려하는 것에서 시작합니다. 제품(즉, API)은 신뢰성, 관련성 및 차별성이 있어야 합니다. 제품 관리자는 API 팀의 주요 구성원 중 하나입니다.

제품 관리자가 큰 그림을 결정한 후에는 아키텍트들이 나서야 합니다.

API Façade 패턴을 구현하는 것을 권장합니다. 이 패턴은 인터페이스와 API 구현 사이에 버퍼 또는 가상 레이어를 제공합니다. 즉, Façade를 생성하여 API를 앱 개발자와 최종 사용자의 관점에서 종합적으로 보여줍니다.

18-5

API를 사용하는 개발자와 앱은 맨 위에 위치하고, API 구현은 그 밑에 있습니다. API Façade는 개발자, 앱, 그리고 API를 격리시킵니다. Façade 패턴을 구현하면 어려운 하나의 문제를 몇 개의 더 간단한 문제로 분해할 수 있습니다.

“하위 시스템에 대한 간단한 인터페이스를 제공하려면 Façade 패턴을 사용하십시오. 하위 시스템은 진화함에 따라 복잡해질 수 있습니다.”

Design Patterns - Elements of Reusable Object-Oriented Software (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides)

API Façade 패턴 구현에는 기본적으로 세 가지 단계가 필요합니다.

  1. 이상적인 API를 디자인합니다. URL, 요청 매개변수와 응답, 페이로드, 헤더, 쿼리 매개변수 등을 디자인합니다. API 디자인은 자체적으로 일관성이 있어야 합니다.
  2. 데이터 스텁을 사용하여 디자인을 구현합니다. 이를 통해 애플리케이션 개발자가 내부 시스템에 연결되기 전에도 API를 사용하고 피드백을 제공할 수 있습니다.
  3. Façade와 시스템 간의 중재 또는 통합을 수행합니다.

18-6

세 단계 접근 방식을 사용하면 하나의 큰 문제를 세 가지 더 작은 문제로 분해할 수 있습니다. 만약 하나의 큰 문제를 해결하려고 하면 코드로 시작하여 비즈니스 로직(기록 시스템)에서 시작하여 깨끗한 API 인터페이스를 구축하려고 할 것입니다. 각 데이터 저장소에서 객체 또는 테이블 또는 RSS 피드를 노출하여 앱에서 사용할 수 있도록 올바른 형식의 XML로 매핑하고 노출합니다. 이는 앱을 중심으로 한 기계 간 지향성이며 이를 올바르게 처리하기 어렵습니다.

이러한 Façade 패턴 접근 방식을 적용하면 몇 가지 중요한 방식으로 분할된 지점 접근 방식(silo approach)에서의 사고를 바꿀 수 있습니다. 먼저, 각각의 세 단계에 대해 구매 협상을 할 수 있으며, 설계에 실용적인 접근 방식을 취하고 있다는 것을 더욱 명확하게 이해할 수 있습니다. 둘째로, 방향이 앱에서 앱 개발자로 변경됩니다. 목표는 설계가 일관성 있고 직관적이기 때문에 앱 개발자가 API를 사용할 수 있도록 보장하는 것입니다.

아키텍처에서 위치한 이유 때문에, Façade는 흥미로운 게이트웨이가 됩니다. 이제 Façade에서 일반적인 패턴(페이지네이션, 쿼리, 정렬, 인증, 권한 부여, 버전 관리 등) 처리를 일관되게 구현할 수 있습니다. (이는 큰 주제이며, 이 글의 범위를 벗어납니다.)

API 팀에게는 다음과 같은 추가적인 이점이 있습니다. 내부 개발자, 파트너 또는 공개 시나리오와 상관없이 다양한 사용 사례에 보다 쉽게 적응할 수 있습니다. API 팀은 개발자의 계속 변화하는 요구사항, 프로토콜 및 언어에 대응할 수 있습니다. 기업의 추가 기능을 더하여 API를 확장하거나, 기존 시스템을 추가로 통합할 수도 있습니다.

댓글남기기