Architecture Decision Record

Active theme: Light

← 의사결정 기록 예시

아키텍처 의사결정 기록: JSON 대 gRPC를 사용하는 API

상태

수락됨

맥락

우리는 여러 클라이언트가 사용할 새 서비스를 위한 API를 설계하고 있습니다. API를 구현하는 두 가지 선택지, 즉 HTTP 기반 JSON 또는 gRPC를 검토해 왔습니다.

HTTP 기반 JSON은 API를 구축하는 데 널리 쓰이는 접근 방식이며 많은 프로그래밍 언어와 프레임워크에서 지원됩니다. 이 접근 방식은 단순하고 가벼우며 이해하기 쉬워 많은 프로젝트에 좋은 선택입니다. 그러나 특히 대량의 데이터를 처리할 때는 다른 선택지보다 덜 효율적일 수 있습니다.

반면 gRPC는 API를 구축하는 더 효율적인 방법을 제공하는 비교적 새로운 기술입니다. 데이터를 전송하는 데 바이너리 직렬화를 사용하므로 JSON을 사용하는 것보다 더 빠르고 더 작을 수 있습니다. gRPC는 양방향 스트리밍도 지원하므로 실시간 애플리케이션에 좋은 선택입니다.

결정

두 선택지의 장단점을 검토한 후, 우리는 API에 gRPC를 사용하기로 결정했습니다. HTTP 기반 JSON이 더 단순한 선택지이긴 하지만, gRPC가 우리 서비스에 더 효율적이고 확장 가능한 솔루션을 제공할 것이라고 믿습니다. 또한 우리 API가 많은 양의 데이터를 처리할 것으로 예상하며, 이 사용 사례에는 gRPC의 바이너리 직렬화가 더 효율적일 것입니다.

또한 gRPC의 양방향 스트리밍 지원이 앞으로 개발할 수 있는 실시간 애플리케이션에 유익할 것이라고 믿습니다.

결과

gRPC를 선택하면 HTTP 기반 JSON을 사용할 때와 비교해 API를 구축하는 데 다른 도구와 라이브러리 집합을 사용해야 합니다. 이러한 기술을 배우고 구현하는 데 추가 시간과 노력이 필요할 수 있습니다. 또한 우리 API를 사용하려는 클라이언트는 gRPC 호환 라이브러리를 사용해야 하는데, 이는 HTTP 기반 JSON 라이브러리만큼 널리 지원되지 않을 수 있습니다.

그러나 우리는 gRPC 사용의 이점이 이러한 잠재적 단점을 능가한다고 믿으며, 이 결정이 더 효율적이고 확장 가능한 API로 이어질 것이라고 확신합니다.