IT

REST API, Graph QL, gRPC란?

Shong Studio 2024. 9. 14. 08:36
728x90
반응형

1. REST API

REST API (Representational State Transfer API)는 클라이언트와 서버 간의 상호작용을 위해 사용되는 아키텍처 스타일로, 웹 서비스 설계 원칙 중 하나입니다. REST는 자원을 URI로 식별하고, HTTP 메서드(GET, POST, PUT, DELETE 등)를 통해 자원에 대한 작업을 수행합니다.

  • 주요 특징:
    • 무상태성 (Stateless): 서버는 각 요청을 독립적으로 처리하며, 이전 요청의 상태를 기억하지 않습니다.
    • 자원 기반 (Resource-Based): 모든 것은 자원으로 간주되며, URI를 통해 자원을 식별합니다.
    • 표현 (Representation): 자원의 상태는 XML, JSON, HTML 등 다양한 포맷으로 표현될 수 있습니다.
    • 클라이언트-서버 구조: 클라이언트는 사용자 인터페이스를 담당하고, 서버는 데이터 저장 및 비즈니스 로직을 처리합니다.
    • 캐싱 가능: HTTP의 캐시 기능을 활용하여 성능을 향상시킬 수 있습니다.

2. GraphQL

GraphQL은 Facebook에서 개발한 쿼리 언어로, 클라이언트가 필요로 하는 데이터만을 명확하게 요청할 수 있는 API를 설계하는 데 사용됩니다. REST의 한계를 극복하기 위해 만들어졌으며, 특히 데이터 페칭 최적화에 중점을 둡니다.

  • 주요 특징:
    • 유연한 데이터 요청: 클라이언트는 필요한 자원과 필드를 정확히 지정할 수 있습니다.
    • 단일 엔드포인트: 모든 요청이 단일 엔드포인트로 처리됩니다.
    • 타입 시스템: 강력한 타입 시스템을 통해 요청과 응답 구조를 명확히 정의합니다.
    • 계층형 데이터 요청: 네스트된 관계형 데이터를 한 번의 요청으로 가져올 수 있습니다.
    • 효율적인 데이터 페칭: 과도한 데이터 전송(과다 또는 과소 페칭)을 방지할 수 있습니다.

3. gRPC

gRPC는 Google에서 개발한 오픈 소스 원격 프로시저 호출(Remote Procedure Call) 프레임워크로, 프로토콜 버퍼스(Protocol Buffers)를 사용하여 직렬화된 데이터를 전송합니다. 주로 고성능, 이진 데이터 통신이 필요한 마이크로서비스 환경에서 사용됩니다.

  • 주요 특징:
    • 이진 프로토콜: 텍스트 기반이 아닌 이진 형식으로 데이터를 전송하여 성능이 뛰어납니다.
    • 다양한 언어 지원: C++, Java, Python 등 여러 언어에서 클라이언트와 서버를 구현할 수 있습니다.
    • 양방향 스트리밍: 클라이언트와 서버 간의 양방향 스트리밍이 가능하여 실시간 데이터 전송에 유리합니다.
    • 서비스 정의: .proto 파일을 통해 서비스와 메시지를 정의합니다.
    • 로드 밸런싱 및 인증: 기본적인 로드 밸런싱과 인증 기능을 제공합니다.

4. API Gateway

API Gateway는 마이크로서비스 아키텍처에서 클라이언트의 요청을 적절한 서비스로 라우팅하는 역할을 하는 서버입니다. API Gateway는 여러 마이크로서비스를 통합하여 클라이언트에게 단일 접점을 제공합니다.

  • 주요 기능:
    • 요청 라우팅: 클라이언트의 요청을 적절한 마이크로서비스로 라우팅합니다.
    • 보안: 인증 및 권한 부여를 관리합니다.
    • 로드 밸런싱: 트래픽을 분산시켜 시스템의 안정성을 높입니다.
    • 데이터 변환: 클라이언트와 서버 간 데이터 형식을 변환합니다.
    • API 컴포지션: 여러 서비스로부터 데이터를 모아 하나의 응답으로 조합할 수 있습니다.

5. MSA 환경

MSA (Microservices Architecture) 환경은 애플리케이션을 작은 독립적인 서비스들로 나누어 개발하고 배포하는 아키텍처 스타일입니다. 각 서비스는 고유의 기능을 담당하며, 독립적으로 배포되고 확장될 수 있습니다.

  • 주요 특징:
    • 독립적 배포: 각 서비스는 독립적으로 배포될 수 있어 개발과 배포의 유연성을 높입니다.
    • 폴리글롯 환경: 각 서비스가 서로 다른 기술 스택을 사용할 수 있습니다.
    • 고가용성: 개별 서비스가 실패해도 전체 시스템의 가용성에 큰 영향을 미치지 않습니다.
    • 자율적 개발팀: 각 팀이 특정 서비스의 설계, 개발, 배포를 자율적으로 관리할 수 있습니다.
    • 경량 프로토콜: 서비스 간 통신은 주로 HTTP/REST, gRPC 등을 사용하여 경량화된 방식으로 이루어집니다.
728x90
반응형