Editor’s Note: The following is an article written for and published in DZone’s 2024 Trend Report, 현대 API 관리: AI, 자동화 및 마이크로서비스와 함께 데이터 중심 아키텍처 연결.
API는 현대 소프트웨어 개발의 세계에서 주요한 역할을 한다. 다양한 유형의 API를 사용하여 여러 시스템 간의 통신 및 데이터 교환을 설정할 수 있다. 주목할 만한 것은 REST 접근 방식으로, 그 단순성과 확장성 때문에 업계에서 지배적인 위치를 차지했다. 그러나 기술이 진화함에 따라 개발자와 기업의 요구도 변화했다. 최근 몇 년 동안, GraphQL과 비동기 이벤트 기반 API와 같은 대안들도 등장했다. 이들은 기존의 REST API에 비해 독특한 이점을 제공한다.
이 기사에서는 이러한 각 API 기술을 살펴보고 비교적 이해를 높이도록 하겠다.
REST: 리소스 중심 통신의 시작
REST 아키텍처는 리소스의 개념을 중심으로 회전한다. 이들은 GET, POST, PUT, DELETE와 같은 표준 HTTP 메서드를 통해 관리될 수 있는 엔티티이다. REST의 핵심 특성 중 하나는 상태 무관성으로, 클라이언트의 각 요청에는 서버가 이를 충족시키기 위해 필요한 모든 정보가 포함된다. 이는 클라이언트와 서버를 분리하고 독립적으로 확장할 수 있게 한다.
REST의 장단점
REST API는 몇 가지 주요 이점을 가지고 있다:
- REST는 표준 HTTP 메서드에 기반한 단순하고 직관적인 디자인을 따릅니다.
- REST 접근 방식에서 각 요청은 독립적입니다. 이로 인해 확장성과 신뢰성이 향상됩니다.
- REST는 HTTP 캐싱 메커니즘을 활용하여 성능을 향상시키고 원본 서버에 대한 부하를 줄입니다.
- REST는 호환성이 있어 표준 형식으로 인해 다양한 프로그래밍 언어와 플랫폼에서 잘 작동합니다.
그러나 REST 아키텍처에도 여러 가지 단점이 있습니다:
- REST API는 과도한 가져오기로, 클라이언트가 필요보다 더 많은 데이터를 수신하게 되어 비효율성과 네트워크 대역폭 낭비를 초래할 수 있습니다.
- 첫 번째 점과 유사하게, REST API는 부족한 가져오기로 인해 복잡한 데이터 요구를 충족하기 위해 여러 개의 요청이 필요할 수 있습니다. 이로 인해 지연이 증가합니다.
- REST는 동기적 접근 방식을 따르며, 고 부하 시나리오에서 차단과 성능 문제를 유발할 수 있습니다.
- API의 데이터 스키마 변경은 클라이언트에 영향을 미칠 수 있어 강력한 결합이 발생할 수 있습니다.
REST API의 사용 사례
REST API가 다른 유형의 API에 비해 훨씬 더 적합한 이상적인 사용 사례가 있습니다. 예를 들어:
- 캐싱 집중적인 애플리케이션 – 뉴스 웹사이트나靜態 콘텐츠와 같은 읽기 집중적인 애플리케이션은 REST의 캐싱 메커니즘에서 혜택을 받을 수 있습니다. REST의 표준화된 캐싱 지시자를 통해 쉽게 구현할 수 있습니다.
- 간단한 CRUD 작업 – 기본적인 CRUD 작업을 처리할 때, REST API는 단순성과 예측 가능성을 제공합니다. 명확하고 정적인 데이터 모델을 가진 애플리케이션은 종종 REST API가 더 적합하다고 느낍니다.
GraphQL: 선언적인 데이터 가져오기를 통한 API의 부상
GraphQL은 데이터 쿼리를 위한 오픈 소스 언어와 그 쿼리를 실행하는 런타임의 결합입니다. GraphQL의 핵심 원칙은 데이터 쿼리를 정의하기 위한 계층적 구조를 가지며, 클라이언트가 단일 요청으로 필요한 데이터를 정확하게 지정할 수 있게 합니다.
그림 1. 전체적인 그래프에서의 GraphQL
많은 면에서, GraphQL은 기존 REST API 아키텍처의 문제에 대한 직접적인 반응이었습니다.
그러나 또한 강력한 타입 스키마를 촉진하여 개발자에게 기대할 수 있는 것에 대한 명확한 이미지를 제공합니다. GraphQL은 구독을 통한 실시간 데이터 업데이트를 지원합니다. 몇 년 동안, GraphQL 페더레이션과 같은 도구에 대한 많은 작업이 이루어져 GraphQL API를 대규모 기업에 대해 더 확장 가능하게 만들었습니다.
GraphQL의 장단점
GraphQL은 몇 가지 주요 장점을 제공합니다:
- GraphQL을 사용하면 클라이언트는 필요한 데이터만 요청할 수 있습니다. 이는 REST API의 과다 가져오기와 부족한 가져오기 문제를 해결합니다.
- GraphQL의 강력한 타입 스키마 접근 방식은 명확한 구조와 유효성 검사를 제공하여 개발 및 문서화 속도를 높입니다.
- GraphQL은 일반적으로 단일 엔드포인트를 통해 작동합니다. 클라이언트는 데이터 소스가 여러 개일지라도 단일 엔드포인트에만 관심을 가져도 됩니다.
- 내장된 자기 설명 기능을 통해 클라이언트는 스키마를 탐색하고 사용 가능한 데이터 및 작업을 발견할 수 있습니다.
그러나 GraphQL에는 몇 가지 단점도 있습니다:
- GraphQL을 구현하려면 기존의 REST API와 비교할 때 추가적인 노력과 전문 지식이 필요합니다.
- GraphQL의 쿼리가 유연하기 때문에 데이터 캐싱이 어려울 수 있으며 사용자 지정 솔루션이 필요할 수 있습니다.
- GraphQL은 상위 수준에서 과도한 가져오기를 줄이지만, 중첩된 쿼리는 여전히 불필요한 데이터 검색으로 이어질 수 있습니다.
- 소유권이 REST API의 명확한 경계와 달리 혼란스러울 수 있습니다.
GraphQL의 사용 사례
GraphQL이 REST API보다 더 효과적인 특정 시나리오가 있습니다. 예를 들면:
- 복잡하고 중첩된 데이터 요구 – 복잡한 관계를 가진 데이터를 가져오기 위해 GraphQL은 클라이언트가 단일 쿼리에서 필요한 데이터를 정확하게 지정할 수 있게 해줍니다.
- 실시간 데이터 업데이트 – GraphQL 구독은 채팅 애플리케이션이나 라이브 대시보드와 같은 실시간 데이터 업데이트를 처리하는 데 도움이 됩니다. GraphQL을 사용하면 클라이언트가 특정 데이터의 변경 사항에 가입할 수 있어 빈번한 폴링 없이 실시간 업데이트를 수행할 수 있습니다.
- 마이크로서비스 아키텍처 – 이 경우, 데이터는 여러 서비스에 분산되어 있습니다. GraphQL은 클라이언트가 다양한 서비스에서 데이터를 쿼리할 수 있는 통합된 인터페이스를 제공합니다. 클라이언트 애플리케이션은 여러 REST 엔드포인트를 관리할 필요가 없습니다.
비동기 API: 이벤트 기반 아키텍처로의 변화
지난 몇 년 동안, 클라우드 네이티브 아키텍처로의 채택 또는 마이그레이션을 추진하면서 이벤트 기반 아키텍처도 부상했습니다. 이들의 장점은 구성 요소 간의 논블로킹 통신의 가능성입니다. 비동기 API를 사용하면 클라이언트는 응답을 기다리지 않고 계속해서 실행 프로세스를 진행할 수 있습니다. 이러한 접근 방식은 고도의 동시성, 확장성 및 응답성이 필요한 시나리오에 유용합니다.
이벤트 기반 시스템에서 비동기 API는 Apache Kafka 및 RabbitMQ와 같은 기술의 도움을 받아 이벤트와 메시지를 처리하며, 메시지 생산자와 소비자 간의 통신 매체를 제공합니다.
이벤트 기반 API 접근 방식을 사용하는 일반적인 시스템을 고려해 보겠습니다. 생산자는 이벤트를 토픽에 게시하고, 소비자는 이러한 토픽을 구독하여 비동기적으로 이벤트를 수신하고 처리합니다. 이를 통해 생산자와 소비자가 독립적으로 진화할 수 있으므로 매끄러운 확장성과 결함 허용성이 보장됩니다. 아래 다이어그램은 이러한 시스템을 보여줍니다:
그림 2. Kafka 및 비동기 API를 사용한 이벤트 기반 시스템
비동기 API의 장단점
비동기 API의 몇 가지 주요 장점은 다음과 같습니다:
- 비동기 API는 높은 동시성과 확장성 요구 사항을 처리하기에 적합합니다. 여러 요청을 동시에 처리할 수 있기 때문입니다.
- 비동기 API는 또한 실시간 데이터 처리를 가능하게 하여 이벤트에 대한 적시한 응답을 제공합니다.
- 비동기 API는 작업을 백그라운드 프로세스로 부풀리어 시스템 자원을 보다 효율적으로 사용하도록 도와줍니다.
- 마지막으로, 비동기 API는 한 구성 요소의 실패가 전체 시스템에 영향을 미치지 않도록 일반적인 결함 허용도를 높입니다.
그러나 다른 유형의 API와 마찬가지로, 비동기 API에도 몇 가지 단점이 있습니다:
- 메시지 전달, 순서 지정 및 오류 처리 주변에 증가된복잡성이 있습니다.
- 비동기 API는 디버깅 및 테스트가 더 어렵습니다.
- 비동기 API를 사용하여 구축된 시스템은 종종 최종 일관성을 나타냅니다. 여기서 데이터 업데이트는 모든 구성 요소에 즉시 반영되지 않습니다.
- 비동기 API는 또한 메시지를 처리하기 위한 특별한 시스템에 대한 비용을 증가시킬 수 있습니다.
비동기 API의 사용 사례
REST 및 GraphQL API와 비교할 때 비동기 API의 몇 가지 이상적인 사용 사례가 있습니다.
- 실시간 데이터 스트리밍 – 비동기 API는 소셜 미디어 피드, 금융 시장 업데이트, IoT 센서 데이터와 같은 실시간 데이터 스트리밍 요구 사항에 가장 적합합니다. 이러한 애플리케이션은 많은 양의 데이터를 생성하며 이를 거의 실시간으로 클라이언트에게 처리하고 전달해야 합니다.
- 타사 시스템과의 통합 – 비동기 API는 응답 시간이나 가용성 SLA가 예측할 수 없을 수 있는 타사 시스템과의 통합에 매우 적합합니다.
- 백그라운드 작업 – 마지막으로, 이메일 발송, 알림 전송 또는 이미지/비디오 처리와 같은 백그라운드 작업을 수행해야 하는 애플리케이션은 비동기 API를 사용하여 이익을 얻을 수 있습니다.
REST, GraphQL, 및 비동기 API의 비교
우리는 세 가지 유형의 API 아키텍처를 모두 살펴보았습니다. 이제 이들을 서로 비교하여 다른 쪽을 선택하기 위한 더 나은 결정을 내릴 때입니다. 아래 표는 여러 매개변수를 통해 이 비교를 보여줍니다.
표 1. REST, GraphQL, 및 비동기 API 비교
Parameter | REST APIs | GraphQL APIs | Asynchronous APIs |
Data fetching approach | Data is fetched with predefined endpoints | Clients specify the exact data requirements in the query | Data is passed in the form of asynchronous messages |
Performance and scalability | Highly suitable for scalable applications; can suffer from overfetching and underfetching problems | Scalable; nested queries can be problematic | Highly scalable; efficient for real-time data processing |
Flexibility and ease of use | Limited flexibility in querying data | High flexibility for querying data | Limited flexibility in querying data and requires understanding of an event-driven approach |
Developer experience and learning curve | Well established and familiar to many developers | Moderate learning curve in terms of understanding the GraphQL syntax | Steeper learning curve |
Real-time capabilities | Limited real-time capabilities, relying on techniques like polling and webhooks for updates | Real-time capabilities through subscriptions | Designed for real-time data processing; highly suitable for streaming applications |
Tooling and ecosystem support | Abundant tooling and ecosystem support | Growing ecosystem | The need for specialized tools such as messaging platforms like RabbitMQ or Kafka |
결론
이 기사에서는 다양한 API 아키텍처 간의 주요 차이점을 살펴보았습니다: REST, GraphQL, 그리고 비동기 API입니다. 또한 특정 유형의 API가 다른 것들보다 더 적합할 수 있는 시나리오를 살펴보았습니다. 앞으로 나아가면, API 개발 환경은 추가적인 변화를 맞이하고 있습니다. 기계 학습, 에지 컴퓨팅, IoT와 같은 신규 기술들이 API 접근 방식의 진화를 필요로 하는 새로운 요구를 추진할 것입니다. 또한 분산 시스템의 급속한 성장으로 인해, APIs는 통신을 가능하게 하는 핵심 역할을 할 것입니다.
개발자로서, 각 API 스타일의 강점과 한계를 이해하고 특정 요구 사항에 가장 적합한 접근 방식을 선택하는 것이 매우 중요합니다. 이러한 접근 방식은 개발자가 API 환경을 자신있게 탐색할 수 있도록 도움을 줍니다.
이는 DZone의 2024년 동향 보고서, 모던 API 관리: AI, 자동화 및 마이크로서비스와 함께 데이터 중심 아키텍처 연결의 일부입니다.
Source:
https://dzone.com/articles/understand-api-technologies-comparative-analysis