한 줄 요약
카카오 기술 블로그의 GraphQL 입문 글로, REST API와의 차이부터 쿼리·스키마·리졸버·인트로스펙션까지의 구조와 실제 결제 프로젝트 도입 경험을 정리한다.
핵심 내용
- gql은 SQL과 같은 쿼리 언어지만 목적이 다르다. SQL은 데이터베이스에서, gql은 웹 클라이언트가 서버에서 데이터를 효율적으로 가져오는 것이 목적이다.
- REST는 엔드포인트가 여럿이고 응답 묶음이 고정이지만, gql은 엔드포인트 하나에 쿼리 조합으로 받을 데이터를 정한다. 여러 번 왕복할 일을 한 번으로 줄인다.
- 구조는 네 부품이다 — 쿼리/뮤테이션(요청), 스키마·타입(선언), 리졸버(조회 구현), 인트로스펙션(스키마 실시간 공유).
- 리졸버는 직접 구현해야 하지만, 데이터 출처를 가리지 않는다. 데이터베이스·파일·HTTP·SOAP 모두 가능해 레거시 시스템을 감싸는 데도 쓸 수 있다.
- 인트로스펙션이 REST 시절의 연동규격서(API 명세서) 주고받기를 대체한다. 다만 상용 환경에서 스키마 공개는 신중해야 하며, 라이브러리마다 끄고 켜는 옵션이 있다.
- 저자가 더 크게 본 이점은 성능이 아니라 생산성과 협업 문화 변화다. 프런트엔드 쪽에 할 일과 권한이 함께 늘어난다.
- 라이브러리는 릴레이(Relay)와 Apollo GraphQL 둘을 소개하며, 저자는 아폴로가 쓰기 편했다고 밝힌다 (2019-08 기준).
주요 주장 / 데이터
- "2019년 7월 기준 얼리스테이지" — 국내에서 gql API를 Open API로 공개한 곳은 드물고, 해외도 GitHub v4 정도가 눈에 띄는 사례라고 적는다 (2019-08 기준).
- 인기 상승 근거로 State of JS 2018의 GraphQL 항목을 인용한다.
- gql은 데이터베이스·플랫폼은 물론 네트워크 방식에도 비종속이다. 보통 HTTP POST와 웹소켓을 쓰지만 TCP/UDP나 이더넷 프레임도 가능하다고 본다.
- 연쇄 리졸버 호출이 DFS로 구현돼 있으리라는 대목, 거기서 Graph라는 이름이 왔으리라는 대목은 저자가 추측으로 명시한 서술이다.
- 리졸버 인자 4개(
parent·args·context·info)와 오브젝트 타입 문법(!필수,[ ]배열)을 예제 코드로 제시한다. - 비즈니스 로직은 리졸버가 아니라 별도 레이어에 두라고 권하며, 핀플레이 결제 프로젝트의 실제 리졸버 코드를 예로 든다.
- 뮤테이션과 쿼리는 내부적으로 사실상 차이가 없고 개념적 규약일 뿐이라고 정리한다.
출처 정보
- 저자: hoon.choi (kakao tech 블로그)
- URL: https://tech.kakao.com/posts/364
- 발행일: 2019-08-01
- 수집일: 2026-08-19
- 수집 방법: 페이지가 Nuxt 기반 SPA라 본문이 HTML에 직접 없다.
__NUXT_DATA__페이로드에서 본문 HTML을 꺼내 마크다운으로 변환해 저장했다. - credibility=medium: 저자·소속이 확인되는 기업 기술 블로그의 입문 해설이고, 실제 결제 프로젝트 도입 경험을 근거로 삼는다. 다만 DFS 구현 추정과 라이브러리 선호처럼 저자가 개인 의견·추측으로 명시한 대목이 섞여 있어 high는 아니다.