
스프링 부트와 함께 GraphQL을 사용하면 서버 사이드에서 GraphQL 스키마 작성과 리졸버를 쉽게 구현할 수 있습니다.
여기서 몇 가지 핵심 포인트와 예제 코드를 함께 설명할려고합니다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-graphql'
implementation 'com.graphql-java:graphql-java-tools:11.1.0' // 버전은 필요에 맞게 조정
// 그 외 필요한 의존성 (예: Spring Web 등)
}
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-graphql</artifactId>
</dependency>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java-tools</artifactId>
<version>11.1.0</version>
</dependency>
<!-- 그 외 필요한 의존성 -->
</dependencies>
src/main/resources 폴더에 schema.graphqls 파일을 생성하고, 다음과 같이 타입과 쿼리를 정의합니다.
type Query {
books: [Book]
}
type Book {
id: ID!
title: String!
author: String!
}
GraphQL에서 사용할 데이터를 담을 간단한 엔티티 클래스를 만듭니다.
package com.example.graphql.model;
public class Book {
private String id;
private String title;
private String author;
// 생성자, getter, setter
public Book(String id, String title, String author) {
this.id = id;
this.title = title;
this.author = author;
}
// getter & setter 생략 가능(롬복 사용해도 좋음)
public String getId() {
return id;
}
public String getTitle() {
return title;
}
public String getAuthor() {
return author;
}
}
GraphQL 쿼리를 처리할 리졸버를 생성합니다.
GraphQLQueryResolver를 구현하면 간단하게 사용할 수 있습니다.
package com.example.graphql.resolver;
import com.coxautodev.graphql.tools.GraphQLQueryResolver;
import com.example.graphql.model.Book;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
@Component
public class BookQueryResolver implements GraphQLQueryResolver {
public List<Book> books() {
return Arrays.asList(
new Book("1", "GraphQL for Beginners", "Author A"),
new Book("2", "Spring Boot and GraphQL", "Author B")
);
}
}
스프링 부트 애플리케이션을 실행하기 위한 메인 클래스를 작성 합니다.
package com.example.graphql;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class GraphqlApplication {
public static void main(String[] args) {
SpringApplication.run(GraphqlApplication.class, args);
}
}
이제 애플리케이션을 실행하면 GraphQL Playground 또는 Apollo Studio 같은 툴을 통해
http://localhost:8080/graphql 엔드포인트로 쿼리를 보내 테스트할 수 있습니다.
GraphQL은 REST API의 한계를 극복하고, 클라이언트가 원하는 데이터를 정확하게 요청할 수 있도록
해주는 강력한 API 기술이입니다.
특히 스프링과 연동 시, 위에서 설명한 의존성 추가, 스키마 파일 작성, 리졸버 및 엔티티 클래스를
통해 쉽게 구현할 수 있습니다.
보안, 성능, 모니터링 측면에서 추가 개선 사항을 반영하면, 실제 서비스 환경에서도 안정적이고 효율적인 API를 운영할 수 있을 겁니다.
기존 @RestController 방식이 아니라 @Controller + @QueryMapping, @MutationMapping을
사용해 요청을 처리 합니다.
GraphQL 스키마를 통해 타입을 정의하니 API 문서 없이도 직관적인 데이터 구조를 설계할 수 있습니다.
@Component
public class BookQueryResolver {
private final BookService bookService;
public BookQueryResolver(BookService bookService) {
this.bookService = bookService;
}
@QueryMapping
public Book getBook(@Argument Long id) {
return bookService.findById(id);
}
}