GraphQL with Spring Boot
Spring Boot에서 GraphQL을 붙인다는 것
Spring Boot에서 GraphQL을 도입한다는 것은 REST 컨트롤러를 하나 더 만드는 일이 아니라, 스키마와 리졸버 중심으로 API 레이어를 다시 구성하는 일에 가깝다.
중심 요소는 다음과 같다.
- GraphQL 스키마
- Query/Mutation 리졸버
- 타입별 필드 리졸버
- 데이터 로딩 전략
기본 구성
Spring for GraphQL에서는 보통 다음 흐름으로 개발한다.
- 스키마 파일을 정의한다.
@QueryMapping,@MutationMapping으로 진입점을 만든다.- 복합 필드는
@SchemaMapping으로 해결한다. - 필요하면 DataLoader로 N+1 문제를 완화한다.
예를 들어 게시글 목록을 조회하는 Query와 작성자 정보를 붙이는 구조라면, 게시글 조회와 작성자 조회를 별도 리졸버로 나누는 식이다.
왜 @SchemaMapping이 중요한가
GraphQL은 클라이언트가 요청한 필드만 계산한다. 그래서 복합 필드는 별도 필드 리졸버로 분리하는 편이 좋다.
예를 들어 Post.author를 조회할 때:
- 클라이언트가
author를 요청하지 않으면 굳이 조회하지 않는다. - 요청했을 때만 작성자 조회 로직이 실행된다.
이 지점이 GraphQL의 유연성이자, 동시에 N+1 문제가 생기기 쉬운 부분이다.
실무에서 주의할 점
1. 스키마가 진짜 계약이다
컨트롤러 메서드보다 스키마가 우선이다. 필드명, nullable 여부, 리스트 구조가 곧 API 계약이 된다.
2. N+1 문제를 경계해야 한다
게시글 100개를 반환하면서 각 게시글마다 작성자를 개별 조회하면 GraphQL은 금방 비효율적이 된다. DataLoader나 배치 조회 전략이 중요하다.
3. 조회와 변경을 과하게 섞지 않기
GraphQL은 유연하지만, 도메인 경계를 무시하고 스키마를 비대하게 만들면 REST보다 더 관리하기 어려워진다.
언제 잘 맞나
- 조회 조합이 자주 바뀌는 화면
- BFF 성격의 API 레이어
- 프런트엔드가 필요한 데이터 구조를 빠르게 바꿔야 하는 환경
반대로 단순 CRUD 위주의 내부 관리 시스템이라면 REST가 더 단순할 수 있다.
정리
Spring Boot에서 GraphQL을 잘 쓰려면 “쿼리를 받는 기술”보다 스키마 설계와 데이터 로딩 전략을 먼저 봐야 한다. 생산성은 높지만, 리졸버 구조를 잘못 잡으면 복잡도도 빠르게 커진다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
댓글
아직 댓글이 없습니다