본 포스트는 공식 레퍼런스를 참고해 GraphQL을 공부하며 직접 작성한 가이드 입니다. 본 포스트는 2021년 7월 최신 버전인 v16.2를 기준으로 작성되어 있습니다.
GraphQL 시작하기
Spring Boot 환경에서 gql을 시작하기 위해서는 gql 라이브러리를 추가해주어야 한다. 추가하는김에 gql playground도 추가해주자.
1 2 3 4 5 6 7 8 9 10 11 <dependency> <groupId>com.graphql-java-kickstart</groupId> <artifactId>graphql-spring-boot-starter</artifactId> <version>11.1.0</version> </dependency> <dependency> <groupId>com.graphql-java-kickstart</groupId> <artifactId>playground-spring-boot-starter</artifactId> <version>11.1.0</version> </dependency>
그리고 요청을 위한 쿼리를 하나 만들어주자.
1 2 3 4 # 웹툰 정보 가져오기 type Query { getWebToon(id: ID!): WebToon }
이 쿼리는 이름이 getWebToon
이고 파라미터로 id
를 필수값으로 받으며 WebToon
을 반환한다. 따라서 반환을 위한 WebToon에 대한 스키마를 정의해주자.
1 2 3 4 5 6 7 8 9 10 type WebToon { id: ID! webToonType: WebToonType title: String } enum WebToonType { Origianls Canvas }
이제 요청을 받을 컴포넌트와 관련 모델을 만들어주자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 @Slf4j @Component public class WebToonResolver implements GraphQLQueryResolver { public WebToon getWebToon (UUID id) { log.info("getWebtoon request accepted id: {}" , id); return WebToon.builder().id(id).title("여신강림" ).webToonType(WebToonType.Origianls).build(); } } @Builder @Value public class WebToon { private UUID id; private String title; private WebToonType webToonType; } public enum WebToonType { Origianls, Canvas }
루트쿼리에서 getWebToon
을 호출하니까 GraphQLQueryResolver
를 사용한다. 특정 타입에 종속된 쿼리를 매핑하고 싶으면 GraphQLResolver
를 통해 할 수 있다. 이제 간단한 준비는 끝났다. 서버를 띄우고 playground 에 접속한다. playground에서 내가 정의한 스키마에 대한 정보도 볼 수 있다.
이제 정의한 쿼리에 대해 요청을 날려 테스트를 해보자.
1 2 3 4 5 6 7 { getWebToon(id: "3568e088-ec83-11eb-9a03-0242ac130003") { id title webToonType } }
그럼 간단하게 쿼리에 대한 응답을 볼 수 있다.
1 2 3 4 5 6 7 8 9 { "data" : { "getWebToon" : { "id" : "3568e088-ec83-11eb-9a03-0242ac130003" , "title" : "여신강림" , "webToonType" : "Origianls" } } }
Repository
모든 가이드의 예제 코드는 SongHayoung/springboot-graphql-tutorial 에서 확인할 수 있습니다.