본문 바로가기
개발 상식 시리즈/백엔드 상식

주요 API 아키텍처 스타일

by 신재은👩🏼‍💻 2024. 5. 16.

API 설계를 해야 되는데 해 본 적이 있어야지.

모르면 어떻게 한다? 찾는다.

https://youtu.be/4vLxWqE94l4?feature=shared

1. SOAP (Simple Object Access Protocol)

특징:

  • 프로토콜 기반: XML 기반의 메시징 프로토콜을 사용합니다.
  • 높은 보안: WS-Security와 같은 표준을 통해 높은 보안을 제공합니다.
  • 트랜잭션 지원: ACID 트랜잭션을 지원합니다.
  • 계약 기반: WSDL(Web Services Description Language)을 사용하여 서비스 계약을 정의합니다.

사용 사례:

  • 금융 서비스와 같은 높은 보안과 트랜잭션 관리가 필요한 엔터프라이즈 시스템
  • 복잡한 비즈니스 프로세스 통합

2. RESTful (Representational State Transfer)

특징:

  • 자원(Resource) 기반: 모든 것이 자원으로 간주되고, 각 자원은 고유한 URI로 식별됩니다.
  • HTTP 메서드 사용: 주로 GET, POST, PUT, DELETE 등의 메서드를 사용하여 자원을 조작합니다.
  • 상태 비저장(Stateless): 각 요청은 완전하며, 클라이언트의 상태를 서버에 저장하지 않습니다.
  • 캐시 가능(Cacheable): 응답은 캐시될 수 있으며, 성능을 향상시킵니다.
  • 계층화된 시스템(Layered System): 클라이언트는 최종 서버와 직접 통신하지 않을 수 있으며, 중간 계층(프록시, 게이트웨이)을 둘 수 있습니다.

사용 사례:

  • 일반적인 웹 서비스 및 애플리케이션
  • CRUD (Create, Read, Update, Delete) 작업

3. GraphQL

특징:

  • 클라이언트가 필요한 데이터만 요청: 클라이언트가 정확히 어떤 데이터를 요청할지 정의할 수 있습니다.
  • 단일 엔드포인트: 모든 요청이 단일 엔드포인트를 통해 이루어집니다.
  • 타입 시스템: 스키마를 통해 데이터를 정의하고 검증할 수 있습니다.
  • 실시간 업데이트: 서브스크립션을 통해 실시간 데이터 업데이트를 지원합니다.

사용 사례:

  • 복잡한 데이터 요구 사항을 가진 클라이언트 애플리케이션
  • 다양한 클라이언트에 대한 맞춤형 데이터 제공

4. gRPC (Google Remote Procedure Call)

특징:

  • HTTP/2 기반: 높은 성능과 효율적인 전송을 제공합니다.
  • Protocol Buffers: 바이너리 직렬화 포맷을 사용하여 데이터 전송의 효율성을 극대화합니다.
  • 양방향 스트리밍: 클라이언트와 서버 간의 양방향 스트리밍을 지원합니다.
  • 다중 언어 지원: 다양한 프로그래밍 언어를 지원합니다.

사용 사례:

  • 마이크로서비스 간의 고성능 통신
  • 실시간 데이터 처리 애플리케이션

5. WebSocket

특징:

  • 양방향 통신: 클라이언트와 서버 간의 실시간 양방향 통신을 지원합니다.
  • 지속적인 연결: 연결이 설정되면 지속적인 데이터 교환이 가능합니다.
  • 저지연: 빠른 데이터 전송과 낮은 지연 시간을 제공합니다.

사용 사례:

  • 실시간 채팅 애플리케이션
  • 실시간 게임
  • 실시간 데이터 피드 (예: 주식 시세)

6. Webhook

특징:

  • 이벤트 기반: 특정 이벤트가 발생할 때 다른 서비스에 알림을 보냅니다.
  • HTTP POST 요청: 일반적으로 HTTP POST 요청을 통해 데이터를 전송합니다.
  • 비동기 처리: 이벤트 발생 시 비동기로 처리됩니다.

사용 사례:

  • 결제 완료 후 알림 전송
  • CI/CD 파이프라인에서 빌드 상태 알림
  • 외부 서비스와의 통합

이 중에서 하나를 골라도 되고 섞어 써도 되시겠다.

혼합 사용

대규모 시스템에서는 위의 다양한 API 아키텍처 스타일을 혼합하여 사용하는 경우가 많습니다. 각각의 스타일은 특정 시나리오와 요구사항에 맞게 최적화되어 있으며, 이를 통해 시스템의 성능, 확장성, 유지보수성을 향상시킬 수 있습니다.

예를 들어:

  • RESTful API를 사용하여 기본 CRUD 작업을 처리하고,
  • gRPC를 통해 마이크로서비스 간의 고성능 통신을 수행하며,
  • WebSocket을 통해 실시간 데이터를 처리하고,
  • GraphQL을 사용하여 클라이언트의 복잡한 데이터 요구사항을 충족시키고,
  • Webhook을 통해 외부 서비스와의 이벤트 기반 통합을 구현할 수 있습니다.

이러한 다양한 API 아키텍처 스타일을 이해하고 적절히 조합하여 사용하는 것은 현대 소프트웨어 개발에서 중요한 능력입니다.

 

현재 진행 중인 프로젝트에서는 RESTful API를 기반으로 하되

채팅 기능에 WebSocket을 넣으면 되겠다.

GraphQL은, 상황 봐서 도입한다.