개요
- GraphQL이란 Facebook이 개발한 API 쿼리 언어(Query Language)
- REST API와 달리, 클라이언트가 원하는 데이터만 선택해서 가져올 수 있음
- REST API vs GraphQL 차이점비교 항목REST APIGraphQL
| 데이터 요청 방식 |
여러 개의 엔드포인트를 호출 |
단일 엔드포인트(/graphql)에서 모든 요청을 처리 |
| Over-fetching |
필요 없는 데이터까지 반환됨 |
원하는 데이터만 선택 가능 |
| Under-fetching |
추가 요청이 필요할 수 있음 |
한 번의 요청으로 필요한 모든 데이터 조회 가능 |
| 성능 |
여러 요청을 보내야 할 수도 있음 |
최적화된 요청 가능 |
| 문서화 |
별도 API 문서 필요 |
자체 문서화 (GraphiQL 등 지원) |
GraphQL 의존성 추가
dependencies {
...
implementation 'org.springframework.boot:spring-boot-starter-graphql'
}
application.yml 파일 추가
spring:
graphql:
graphiql:
enabled: true # '/graphiql' 경로로 접근하면 웹 브라우저에서 GraphQL API 테스트 가능
schema:
printer:
enabled: true # 수행한 쿼리를 콘솔에 출력
GraphQL 스키마 정의
- GraphQL은 스키마 기반으로 동작하므로, schema.graphqls 파일을 생성하여 API 구조를 정의
- src/main/resources/graphql/schema.graphqls
GraphQL Resolver 구현 (Controller 역할)
- GraphQL에서는 데이터 조회(Query), 데이터 변경(Mutation)을 담당하는 리졸버(Resolver)가 필요
- 역할설명어노테이션
| 데이터 조회 |
클라이언트의 Query 요청을 처리하여 데이터를 반환 |
@QueryMapping |
| 데이터 생성/수정 |
Mutation 요청을 처리하여 데이터를 추가/수정 |
@MutationMapping |
GraphQL 테스트