GraphQL이란?
발행: (2026년 3월 15일 오후 08:20 GMT+9)
4 분 소요
원문: Dev.to
Source: Dev.to
개요
- Facebook에서 개발
- API를 위한 쿼리 언어
- API 요청 및 응답의 데이터 형식이 비슷해 사용하기 쉬움
- REST는 아키텍처(디자인)이고, GraphQL은 언어(DSL)임
REST 예시
HTTP 메서드를 사용해 엔드포인트에 요청을 보냄:
curl https://api.bmf-tech.com/v1/configs[
{
"id": 1,
"name": "title",
"alias_name": "Title",
"value": "bmf-tech",
"created_at": "2017-09-25 23:08:23",
"deleted_at": null
}
]GraphQL 예시
단일 엔드포인트에 쿼리를 보냄:
curl https://api.bmf-tech.com/api{
configs {
id
name
alias_name
value
created_at
updated_at
deleted_at
}
}[
{
"id": 1,
"name": "title",
"alias_name": "Title",
"value": "bmf-tech",
"created_at": "2017-09-25 23:08:23",
"deleted_at": null
}
]비교 요약
| 기능 | REST | GraphQL |
|---|---|---|
| 엔드포인트 | 다수 | 단일 |
| HTTP 메서드 | 의존적 | 독립적 |
| 타입 시스템 | 없음 | 존재 |
| 버전 관리 필요 | 예 | 아니오 |
| 문서화 필요 | 예 | 아니오 (API 정의가 문서 역할) |
| 리소스 제한 | 주로 호출 횟수 | 리소스 양에 따라 처리 |
| 응답 유연성 | 엔드포인트당 고정 응답 | 클라이언트가 원하는 필드 지정 가능 |
| 성능 | 여러 요청이 필요할 수 있음 | 요청 수는 적고 페이로드는 커질 수 있음 |
| 모니터링 | 엔드포인트별 모니터링 가능 | 쿼리 수준 모니터링을 위한 커스텀 도구 필요 |
| 캐싱 | HTTP 캐시 사용 가능 | HTTP 캐시 의존 불가 |
실무 고려사항
- 로드 계산: GraphQL은 반환되는 객체 수 등에 기반한 로드 계산 방법이 필요할 때가 많음.
- 문서화: GraphQL 스키마 자체가 자체 문서화 역할을 하므로 외부 문서는 덜 중요함.
- 라이브러리: 구현 시 쿼리 파싱을 위한 라이브러리가 일반적으로 필요함.
- 성능: REST보다 본질적으로 빠른 것은 아니며, 라운드‑트립 감소가 주요 이점임.
- 데이터 양: 두 접근 방식 모두 페이로드 크기를 제어하기 위해 페이지네이션이나 필드 선택이 필요함.
- 모니터링: GraphQL은 단일 엔드포인트를 사용하므로 쿼리 수준 성능을 추적하기 위한 추가 도구가 필요할 수 있음.
- 캐싱: 표준 HTTP 캐싱이 적용되지 않으므로 대체 캐싱 전략을 검토해야 함.
GraphQL을 고려해야 할 상황
- 많은 컴포넌트와 복잡한 UI를 가진 애플리케이션으로, 요청 수가 병목이 되는 경우.
- 클라이언트가 여러 라운드‑트립 없이 다양한 형태의 데이터를 받아야 할 때.
참고 자료
- graphql.org – 공식 GraphQL 문서
- facebook/graphql RFCs – 사양 및 제안서
- “A small rebuttal to What is GraphQL suitable for” – 사용 사례에 대한 토론
- “Memo when implementing GraphQL API in a Rails app” – 실전 구현 노트
- “Explaining GraphQL from a beginner’s perspective” – REST와 GraphQL을 비교한 입문 가이드