본문 바로가기

개발

API란 무엇인가? REST API와 GraphQL 비교 🤝

반응형

현대 소프트웨어는 혼자 동작하지 않습니다. 여러 소프트웨어 컴포넌트나 서비스가 서로 유기적으로 데이터를 주고받으며 동작합니다. 이 통신을 가능하게 하는 약속된 규칙을 API(Application Programming Interface)라고 합니다. API는 마치 식당에서 손님(클라이언트)과 주방(서버) 사이의 주문을 전달하는 웨이터와 같습니다. 손님은 메뉴판(API 문서)에 있는 대로 주문하고, 웨이터는 그 주문에 맞춰 주방에서 요리를 받아 손님에게 전달합니다.

API는 클라이언트와 서버 간의 데이터 통신을 표준화하여 개발 효율성을 높이고, 서비스 간의 결합을 용이하게 합니다. 이 글에서는 가장 널리 사용되는 API 스타일인 REST API와 최근 각광받고 있는 GraphQL을 비교 분석합니다.


API의 기본 개념

API는 두 애플리케이션이 서로 대화할 수 있는 인터페이스입니다. 개발자는 API를 통해 다른 애플리케이션의 내부 구조를 몰라도, 그 기능을 가져와 사용할 수 있습니다. 예를 들어, 소셜 로그인 기능은 각 SNS가 제공하는 API를 활용해 구현됩니다.


REST API: 표준화된 웹 통신 방식 🌐

REST(Representational State Transfer)는 웹에서 데이터를 주고받는 데 사용되는 가장 보편적인 아키텍처 스타일입니다. HTTP 표준을 최대한 활용하여 자원(Resource)을 이름(URI)으로 구분하고, HTTP 메서드(Method)를 통해 자원에 대한 행위(CRUD)를 정의합니다.

  • 핵심 원칙:
    • 자원(Resource): 모든 것은 자원입니다. 예) users, posts.
    • URI: 자원을 식별하는 고유한 이름입니다. 예) /users/123.
    • HTTP 메서드: 자원에 대한 행위(CRUD)를 정의합니다.
      • GET: 자원 조회
      • POST: 자원 생성
      • PUT/PATCH: 자원 수정
      • DELETE: 자원 삭제
  • 장점:
    • 간편성: HTTP 표준을 따르므로 배우고 사용하기 쉽습니다.
    • 범용성: 대부분의 웹 환경에서 지원하므로 다양한 클라이언트와 호환됩니다.
    • 캐싱 용이: GET 요청은 캐싱이 가능하여 성능을 최적화하기 쉽습니다.
  • 단점:
    • Over-fetching: 클라이언트가 필요 이상의 데이터를 받는 문제입니다. 예) 게시글 목록에서 제목만 필요한데, 모든 게시글의 내용까지 함께 받는 경우.
    • Under-fetching: 한 번의 요청으로 필요한 모든 데이터를 얻지 못해, 여러 번의 API 요청을 보내야 하는 문제입니다.

GraphQL: 효율적인 데이터 요청 방식 ✨

GraphQL은 Facebook이 개발한 API를 위한 쿼리 언어입니다. 클라이언트가 서버에 필요한 데이터의 구조를 직접 정의하고, 서버는 그에 맞는 데이터만 정확히 응답합니다. REST와 달리, 단일 엔드포인트(api.example.com/graphql)로 모든 요청을 처리합니다.

  • 핵심 원칙:
    • 클라이언트 주도: 클라이언트가 query를 통해 원하는 필드만 정확하게 요청합니다.
    • 단일 엔드포인트: 모든 요청이 하나의 URL로 이루어집니다.
    • 스키마(Schema): 서버가 제공할 수 있는 데이터의 타입과 관계를 사전에 정의합니다.
  • 장점:
    • Over-fetching 문제 해결: 클라이언트가 필요한 데이터만 명시적으로 요청하므로 불필요한 데이터를 받지 않습니다.
    • Under-fetching 문제 해결: 여러 자원을 한 번의 쿼리로 요청할 수 있어 네트워크 통신 횟수를 줄일 수 있습니다.
    • 유연성: API 수정 없이 클라이언트가 원하는 데이터 구조를 자유롭게 변경할 수 있습니다.
  • 단점:
    • 복잡한 구조: REST에 비해 개념이 복잡하고 학습 곡선이 가파릅니다.
    • 캐싱의 어려움: HTTP 캐싱 메커니즘을 온전히 활용하기 어려워 별도의 캐싱 전략이 필요합니다.
    • 파일 업로드 등 복잡한 기능: REST보다 구현이 더 복잡할 수 있습니다.

REST API vs. GraphQL 비교 테이블

구분 REST API GraphQL
데이터 요청 방식 자원(URI) 및 행위(HTTP 메서드)를 기반으로 요청 클라이언트가 원하는 데이터 구조를 직접 정의하여 요청
요청 횟수 여러 자원이 필요하면 여러 번 요청해야 함 단일 요청으로 필요한 모든 데이터를 획득 가능
Over/Under-fetching 발생할 가능성이 높음 발생하지 않음
엔드포인트 자원마다 여러 개의 엔드포인트 단일 엔드포인트
학습 곡선 비교적 낮음 비교적 가파름

결론: 프로젝트의 요구사항에 따라 선택하기

REST API와 GraphQL은 서로 대립하는 개념이 아닙니다. REST는 보편적이고 표준화된 방식으로, 대부분의 간단하고 예측 가능한 데이터 통신에 매우 적합합니다. 반면, GraphQL은 복잡한 데이터 관계와 유연한 클라이언트 요청이 필요한 애플리케이션에 더 큰 효율성을 제공합니다.

따라서 프로젝트의 규모와 복잡성, 그리고 개발팀의 숙련도에 따라 두 가지 방식 중 더 적합한 것을 선택하는 것이 현명합니다. 많은 기업들이 두 가지 방식을 혼용하여 사용하는 하이브리드 아키텍처를 채택하기도 합니다.

반응형