GraphQL이 등장한 지 10년이 넘었다. Facebook이 2015년에 공개한 이후 많은 기업이 채택했다. 하지만 REST가 여전히 대부분의 API에서 사용된다. GraphQL이 정말 더 나은가?
GraphQL의 장점은 명확하다. 클라이언트가 필요한 데이터만 요청할 수 있다. 오버페칭과 언더페칭 문제가 해결된다. 여러 리소스를 한 번의 요청으로 가져올 수 있다. 타입 시스템으로 API 계약이 명확해진다.
숨겨진 복잡성
하지만 단점도 있다. 캐싱이 복잡하다. HTTP 캐싱을 그대로 활용할 수 없다. CDN 캐싱도 설정이 까다롭다. 별도의 캐싱 전략이 필요하다.
보안 문제도 있다. 복잡한 쿼리로 서버에 과부하를 줄 수 있다. 쿼리 복잡성 제한, 깊이 제한, 비용 분석 같은 추가적인 보호 조치가 필요하다. REST보다 설정할 것이 많다.
언제 GraphQL을 선택할까
다양한 클라이언트(웹, 모바일, IoT)가 같은 API를 사용할 때 유용하다. 각 클라이언트가 다른 데이터를 필요로 할 때 GraphQL이 빛난다. 복잡한 관계형 데이터를 많이 다룰 때도 좋다.
하지만 단순한 CRUD API라면 REST가 더 적합하다. 팀이 작고 API가 단순하면 GraphQL의 오버헤드가 이점을 상쇄한다. 파일 업로드나 실시간 스트리밍이 주요 기능이라면 REST나 WebSocket이 낫다.
결론
GraphQL은 특정 문제를 잘 해결한다. 하지만 모든 상황에서 REST보다 나은 것은 아니다. 문제에 맞는 도구를 선택하자. 대부분의 프로젝트에서 REST는 여전히 합리적인 기본 선택이다.