인사이트

인사이트

gRPC vs REST: API 통신, 무엇을 언제 쓰나

gRPC vs REST API 통신, 무엇을 언제 쓰나

🤖 AI Summary

서비스 사이를 잇는 API를 만들 때 오랫동안 기본은 REST였습니다. 그런데 내부 서비스가 많아지고 성능이 중요해지면서 gRPC가 자주 등장합니다. 둘은 대체가 아니라 쓰임이 다릅니다. gRPC는 HTTP/2 위에서 Protocol Buffers라는 바이너리 형식으로 데이터를 주고받고, .proto로 계약을 먼저 정의해 여러 언어의 코드를 생성하며, 양방향 스트리밍까지 지원합니다. 그래서 내부 마이크로서비스 간 저지연 통신에 강하죠. 반면 REST는 자원 기반 스타일로 주로 JSON을 쓰고 브라우저에서 바로 호출할 수 있어 공개 API에 유리합니다. 큰 갈림길은 브라우저입니다. gRPC는 브라우저에서 직접 호출할 수 없어 gRPC-Web과 프록시가 필요합니다. 이 글은 그 차이와 선택 기준을 1차 출처로 정리합니다.

블로그 목차

REST가 기본이지만, gRPC가 필요한 순간

공개 API를 만들 때 REST는 여전히 좋은 기본값입니다. 사람이 읽기 쉽고, 브라우저에서 바로 부를 수 있고, 도구도 풍부하니까요. 그런데 서비스가 잘게 쪼개지고 그들 사이의 호출이 폭발적으로 늘면, 텍스트를 주고받되 하나의 연결로 요청을 동시에 흘려보내기 어려운 방식의 비용이 커집니다. 이 지점에서 gRPC가 등장합니다.

둘은 우열의 문제가 아닙니다. 누가 이 API를 부르는가, 그리고 무엇을 주고받는가에 따라 답이 갈립니다. 브라우저나 외부 개발자가 부른다면 REST가, 내부 서비스들이 빠르게 주고받아야 한다면 gRPC가 어울립니다. 먼저 각각이 무엇인지부터 보겠습니다.




gRPC: HTTP/2와 계약 우선

gRPC는 고성능 RPC(원격 프로시저 호출) 프레임워크로, 다른 머신의 서버 메서드를 마치 로컬 함수처럼 호출하게 해 줍니다. 핵심 특징은 세 가지입니다.

  • HTTP/2 기반: HTTP/2의 멀티플렉싱과 스트림 위에서 동작합니다. 하나의 연결로 여러 요청을 동시에 처리하고, 단일 요청부터 서버·클라이언트·양방향까지 네 가지 방식을 제공합니다.

  • Protocol Buffers(protobuf): 기본 직렬화로 사용하며, 데이터를 사람이 읽는 텍스트가 아니라 바이너리로 다룹니다. 공식 설명대로 JSON과 비슷하되 더 작고 빠릅니다.

  • 계약 우선(contract-first): .proto 파일에 서비스와 메시지를 먼저 정의하면, 거기서 여러 언어의 클라이언트·서버 코드를 생성합니다. 서로 다른 언어로 짜인 서비스도 같은 계약으로 맞물립니다.

이 조합 덕분에 gRPC는 여러 언어가 섞인 내부 서비스들이 빠르게, 그리고 엄격한 규격으로 통신해야 하는 환경에 강합니다. 참고로 gRPC는 구글이 사내 마이크로서비스를 잇던 인프라에서 출발했습니다.




REST: 자원 기반 스타일

REST는 프레임워크가 아니라 아키텍처 스타일(설계 제약의 집합)입니다. 데이터를 자원으로 보고 URL로 표현하며, HTTP 메서드로 다룹니다. 여기서 한 가지 오해를 짚겠습니다. REST와 JSON은 같은 말이 아닙니다. JSON은 REST에서 흔히 쓰는 데이터 형식일 뿐, REST 자체는 형식을 규정하지 않습니다. 또 HTTP API라고 해서 모두 REST 제약을 지키는 것도 아닙니다.

REST의 강점은 보편성입니다. 사람이 읽기 쉬운 텍스트를 주고받고, 브라우저에서 바로 호출할 수 있으며, 캐시와 도구 생태계가 폭넓습니다. 그래서 외부에 공개하는 API, 브라우저가 직접 부르는 인터페이스에 잘 맞습니다.

gRPC vs REST




가장 큰 갈림길은 브라우저

표에서 하나만 꼽으라면 브라우저 접근입니다. gRPC는 브라우저에서 곧바로 호출할 수 없습니다. 브라우저에는 HTTP/2 프레임을 그대로 제어할 API가 없어서, gRPC의 규격을 브라우저에서 그대로 구현할 수 없기 때문이죠. 그래서 gRPC-Web이라는 변형과 이를 변환해 주는 프록시(기본값은 Envoy)를 함께 둬야 합니다. 반면 REST는 브라우저의 fetch로 아무 준비 없이 바로 부를 수 있습니다.

누가 부르고, 무엇이 중요한가

정리하면 이렇습니다. 내부 서비스들 사이의 빠른 통신이 목표라면 gRPC의 바이너리·스트리밍·계약이 빛나고, 브라우저와 외부가 부르는 공개 인터페이스라면 REST의 보편성과 편의가 앞섭니다. 실제로 많은 시스템이 둘을 함께 씁니다. 바깥은 REST로 열어 두고, 안쪽 서비스끼리는 gRPC로 잇는 식이죠. 성능 차이는 데이터와 환경에 따라 달라지므로, "무조건 빠른 쪽"이 아니라 "누가 부르는가"부터 보는 것이 실용적입니다.




이것만 기억하세요

gRPC와 REST는 대체가 아니라 쓰임이 다른 도구입니다. gRPC는 HTTP/2와 Protocol Buffers(바이너리)에 계약 우선·양방향 스트리밍이라 내부 마이크로서비스 간 저지연 통신에 강하고, REST는 자원 기반 스타일에 JSON·브라우저 네이티브라 공개 API에 유리합니다. 가장 큰 갈림길은 브라우저입니다. gRPC는 브라우저에서 직접 호출할 수 없어 gRPC-Web과 프록시가 필요합니다. 그래서 "누가 이 API를 부르는가"부터 정하면 답이 보입니다.




자주 묻는 질문 (FAQ)

Q. gRPC가 REST보다 무조건 나은가요?

아니에요. 대체 관계가 아니라 쓰임이 다른 도구입니다. gRPC는 HTTP/2와 바이너리 직렬화(Protocol Buffers)로 내부 서비스 간 저지연 통신과 스트리밍에 강하지만, 브라우저에서 직접 호출할 수 없고 페이로드가 사람이 읽기 어려워요. REST는 자원 기반 스타일로 JSON을 주고받아 사람이 읽기 쉽고 브라우저에서 바로 쓸 수 있어, 공개 API와 폭넓은 호환성이 필요한 곳에 유리합니다.

Q. gRPC는 왜 HTTP/2가 필요한가요?

gRPC는 HTTP/2 위에서 동작하도록 설계됐어요. HTTP/2의 멀티플렉싱과 스트림 덕분에 하나의 연결에서 여러 요청을 동시에 처리하고, 단일·서버·클라이언트·양방향의 네 가지 스트리밍을 제공할 수 있습니다. 그래서 gRPC를 쓰려면 서버와 경로가 HTTP/2를 지원해야 해요.

Q. 브라우저에서 gRPC를 바로 호출할 수 있나요?

직접은 어려워요. 브라우저는 gRPC가 쓰는 HTTP/2 프레임을 그대로 다루지 못해서, gRPC-Web이라는 변형과 이를 변환해 주는 프록시(기본값 Envoy)를 함께 써야 합니다. 그래서 브라우저가 직접 부르는 공개 API에는 REST가 더 단순한 경우가 많고, gRPC는 주로 백엔드 서비스 사이에서 쓰여요.

Q. REST와 JSON은 같은 말인가요?

아니에요. REST는 자원을 URL로 표현하고 HTTP 메서드로 다루는 아키텍처 스타일(설계 제약의 집합)이고, JSON은 그 위에서 흔히 쓰는 데이터 형식일 뿐이에요. REST를 다른 형식으로 구현할 수도 있고, HTTP API라고 다 REST인 것도 아닙니다. 반면 gRPC는 프레임워크로, 기본 직렬화에 Protocol Buffers라는 바이너리 형식을 씁니다.

Q. 언제 gRPC를 고르면 좋나요?

내부 마이크로서비스 사이의 통신처럼 저지연과 처리량이 중요하고, 여러 언어의 서비스가 엄격한 계약(.proto)으로 맞물려야 하며, 양방향 스트리밍이 필요할 때 gRPC가 잘 맞아요. 반대로 브라우저나 외부 개발자가 호출하는 공개 API, 읽고 디버깅하기 쉬운 인터페이스가 중요하면 REST가 더 나은 출발점입니다.

비용 절감부터 차별화된 속도와 안정적 운영까지
기업에 최적화된 IT 환경을 지원합니다

비용 절감부터 차별화된 속도와
안정적 운영까지 기업에 최적화된 IT 환경을 지원합니다

비용 절감부터
차별화된 속도와 안정적 운영까지
기업에 최적화된 IT 환경을 지원합니다

(주)스피디

경기도 성남시 수정구 위례서일로 18, 1101호 (위례 더존메디컬타워)

TEL 031-697-8413

FAX 02-6455-4743

E.mail sales@speedykorea.com

© SPEEDY. All rights reserved

(주)스피디

경기도 성남시 수정구 위례서일로 18, 1101호
(위례 더존메디컬타워)


TEL 031-697-8413

FAX 02-6455-4743

E.mail sales@speedykorea.com

© SPEEDY. All rights reserved

(주)스피디

경기도 성남시 수정구 위례서일로 18, 1101호
(위례 더존메디컬타워)


TEL 031-697-8413

FAX 02-6455-4743

E.mail sales@speedykorea.com

© SPEEDY. All rights reserved