본문 바로가기

Study Information Technology

Building a GraphQL API with Spring Boot

728x90
반응형

Building a GraphQL API with Spring Boot

Overview

GraphQL은 API를 개발하기 위한 강력한 도구로, RESTful API와는 다른 접근 방식을 제공합니다. 이 글에서는 Spring Boot와 함께 GraphQL API를 구축하는 방법에 대해 자세히 알아보겠습니다. GraphQL을 사용하면 클라이언트가 필요한 데이터를 명시적으로 요청할 수 있고, 하나의 요청으로 여러 데이터 소스에서 데이터를 효율적으로 가져올 수 있습니다.

Step-by-Step Guide

  1. 프로젝트 설정

GraphQL을 Spring Boot 프로젝트에 통합하려면, 먼저 필요한 의존성을 추가해야 합니다. spring-boot-starter-web, graphql-spring-boot-starter, graphql-java-tools 등의 의존성을 build.gradle 또는 pom.xml 파일에 추가합니다.

예시 (build.gradle):

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'com.graphql-java:graphql-spring-boot-starter'
implementation 'com.graphql-java:graphql-java-tools'
}
  1. GraphQL 스키마 정의

GraphQL API의 핵심은 스키마입니다. 스키마는 데이터 타입, 쿼리 및 뮤테이션을 정의합니다. Spring Boot에서는 .graphqls 또는 .graphql 파일을 사용하여 스키마를 정의할 수 있습니다.

예시 (schema.graphqls):

type Query {
getAllUsers: [User!]!
getUserById(id: ID!): User
}

type User {
id: ID!
username: String!
email: String!
}
  1. 데이터 제공자 구현

GraphQL 쿼리에 응답하기 위해 데이터를 제공하는 Resolver를 구현해야 합니다. Resolver는 GraphQL 스키마의 각 필드에 대한 데이터를 반환하는 역할을 합니다.

예시 (GraphQLResolver 구현):

@Component
public class UserResolver implements GraphQLQueryResolver {

private final UserRepository userRepository;

public UserResolver(UserRepository userRepository) {
this.userRepository = userRepository;
}

public List<User> getAllUsers() {
return userRepository.findAll();
}

public User getUserById(Long id) {
return userRepository.findById(id).orElse(null);
}
}
  1. Spring Boot 애플리케이션 실행

모든 설정이 완료되었으면 Spring Boot 애플리케이션을 실행하여 GraphQL API를 사용할 수 있습니다. 기본적으로 localhost:8080/graphql에서 GraphQL Playground를 사용할 수 있습니다.

  1. GraphQL Playground 사용

GraphQL Playground는 GraphQL API를 시험하고 디버깅할 수 있는 툴입니다. 이를 통해 쿼리를 작성하고 실행해 볼 수 있습니다.

예시 쿼리:

query {
getAllUsers {
id
username
}
}

이 쿼리는 모든 사용자의 idusername을 가져옵니다.

Error Handling

GraphQL API에서 발생할 수 있는 에러는 주로 데이터 요청에 대한 오류일 수 있습니다. 예를 들어 데이터베이스에서 사용자를 찾지 못하는 경우 다음과 같이 에러를 처리할 수 있습니다:

@Component
public class UserResolver implements GraphQLQueryResolver {

private final UserRepository userRepository;

public UserResolver(UserRepository userRepository) {
this.userRepository = userRepository;
}

public User getUserById(Long id) {
Optional<User> user = userRepository.findById(id);
if (user.isPresent()) {
return user.get();
} else {
throw new GraphQLException("User not found");
}
}
}

이 경우, 요청한 사용자가 없는 경우 GraphQL 예외를 발생시킵니다.

References

이와 같이 Spring Boot와 GraphQL을 결합하여 강력하고 유연한 API를 구축할 수 있습니다. GraphQL은 요청된 데이터의 정확한 형태를 클라이언트에게 제공하며, Spring Boot는 강력한 백엔드 기능을 제공하여 이러한 요구사항을 충족시키는데 이상적인 플랫폼입니다.

728x90
반응형