GraphQL은 API에서 사용할 데이터의 타입과 관계를 정의하고, 클라이언트가 필요한 필드를 선택해 요청하는 질의 언어이자 실행 방식이다. 특정 데이터베이스 제품을 의미하지 않는다. 서버는 공개한 스키마에 맞춰 요청을 검증하고 각 필드의 값을 구한다. GraphQL 질의 문서
필요한 필드 선택
위키 목록에 제목과 작성자 이름만 필요하다면 본문 전체를 받지 않고 해당 필드를 선택할 수 있다. 다음은 개념을 보여주는 가상의 스키마 예시다.
query {
article(id: "42") {
title
author {
name
}
}
}
응답 구조는 요청한 필드 구조를 따른다. 서버가 어떤 필드와 인자를 허용하는지는 스키마에 달려 있으며, 클라이언트가 임의의 저장소 정보를 꺼낼 수 있다는 뜻은 아니다. 변수와 재사용 가능한 선택 묶음을 이용하면 요청을 구조적으로 관리할 수 있다.
API와 데이터베이스의 관계
한 필드가 PostgreSQL에서 값을 읽고 다른 필드가 외부 API를 호출할 수도 있다. 따라서 질의가 한 번이라는 사실이 저장소 접근도 한 번이라는 뜻은 아니다. REST API와는 공개 인터페이스를 표현하는 방식이 다르며, 같은 서비스에서 역할을 나눠 병행할 수도 있다.
비용과 권한 관리
관계를 깊게 중첩하거나 많은 목록을 요청하면 서버 작업량이 커질 수 있다. 목록 크기, 질의 깊이와 비용, 호출량에 제한을 두고 필드에 접근할 권한을 확인해야 한다. 스키마 조회를 숨기는 것만으로 데이터 보호가 완성되지는 않는다. GraphQL 보안 안내
통합 테스트에서는 반환 구조뿐 아니라 권한이 다른 사용자의 결과와 부분 오류도 검사하는 것이 유용하다. 데이터 타입이 일치하더라도 해당 정보의 공개 여부와 업무 규칙까지 타입 시스템이 자동으로 판단해주지는 않는다.