<GraphQL> 1. 설정하기 with Spring Boot
by BFine가. 설정하기
a. Gradle
implementation 'com.graphql-java-kickstart:graphql-spring-boot-starter:12.0.0'
testImplementation 'com.graphql-java-kickstart:graphql-spring-boot-starter-test:12.0.0'
- graphql-java-kickstart 오픈소스로 관리되고 있다.
=> https://github.com/graphql-java-kickstart/graphql-spring-boot
b. Spring Boot
- 기본적으로 defalut 설정이 잘되어있기 때문에 크게 설정할 부분은 없다.
- kickstart의 graphql-spring-boot-starter는 4가지의 Graphql Tool들이 내장되어있어 필요한 Tool을 Enable해서 사용하면 된다.
나. 기본 Query 만들기
a. schema 만들기
- graphpql은 일반적으로 graphpqls 파일(확장자 주의)을 이용해 명세를 작성한다. (default schema 위치는 아래와 같다.)
- 여기서 type은 객체와 대응하지만 필요한 필드만 작성할수도 있고 또한 !표시는 null 값을 허용하지 않는다는 의미로 사용할 수 있다.
- 당연한 부분이지만 Member 객체에 없는 필드를 추가할 경우 런타임 예외가 발생한다.
- 여기서 echoMember는 메서드에 대응하며 괄호안에는 메서드의 파라미터에 대응한다. 그리고 끝에 : 뒤에는 반환 값을 나타낸다.
b. Java code
@Builder
public class Member {
private Integer id;
private String name;
}
@Component
public class MemberResolver implements GraphQLQueryResolver {
public Member echoMember(Integer id, String name){
return Member.builder()
.id(id)
.name(name)
.build();
}
}
- 여기서 중요한 부분은 GraphQLQueryResolver 인터페이스로 클라이언트에서 Query가 들어오면 이를 해석하여 대응하는 메서드를 실행하는 역할을 한다.
- 이렇게 해서 간단하게 graphql API를 만들 수 있다. REST API는 다르게 @RestController나 @GetMapping을 번거롭게 지정해주지 않아도 된다.
c. Query 실행하기
- 방금 전 enable 설정했던 tool 중에 playground 를 사용하여 테스트 해보자
- 왼쪽이 클라이언트에서 요청하는 부분으로 위의 이미지처럼 Query를 작성하여 서버로 요청 할수가 있다.
- 그리고 파라미터나 리턴값의 데이터를 클라이언트의 목적에 맞게 query를 변형해서 쓸 수 있다.
- id는 null을 허용하지 않기 때문에 오류가 발생하는데 graphql이 유효성 체크를 하며 관련 오류 내용을 응답하는 것을 볼 수 있다.
d. Voyager
- graphiql, altair, playground는 모두 grahpql 쿼리 실행 및 graphql 파일을 감지해서 Docs를 보여주는 기능을 한다.
- voyager는 graphql의 그래프를 보여주 해서 연관관계를 쉽게 파악할 수 있기 때문에 위의 tool 중 하나와 함께 사용하면 좋을 것 같다.
'공부 > GraphQL' 카테고리의 다른 글
<GraphQL> 5. 비동기 처리 / N+1 문제 with Spring Boot (0) | 2022.04.06 |
---|---|
<GraphQL> 4. 동물원 예제 만들기 with Spring Boot (0) | 2022.04.02 |
<GraphQL> 3. Exception Handling with Spring Boot (0) | 2022.03.27 |
<GraphQL> 2. Query와 Type with Spring Boot (2) | 2022.03.26 |
<GraphQL> 0. GraphQL 이란 (0) | 2022.03.14 |
블로그의 정보
57개월 BackEnd
BFine