티스토리 뷰

GraphQL 이란 Graph Query Language의 줄임말로서, 서버 API를 구성하기 위해 만든 DB 쿼리 언어입니다. GraphQL 은 단일 endpoint를 사용하므로 단 한 번의 호출로 원하는 응답을 받을 수 있어, REST API에 비해 HTTP 요청 횟수를 줄일 수 있습니다. 그럼 SpringBoot와 Postman을 이용하여 간단하게 예제로 알아보겠습니다.


1. 라이브러리 추가

dependencies {
    // basic
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-graphql'

    // lombok
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'

    // test
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework:spring-webflux'
    testImplementation 'org.springframework.graphql:spring-graphql-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
  • SpringBoot 에서 제공하는 graphql를 사용합니다.



2. 스키마작성

  • resources > graphql > schema.graphqls 파일작성
type Query {
    getBookById(id: ID!): Book
    // 추가
}

type Book {
    id: ID!
    title: String
    author: String
}
  • GraphQL에서 사용할 스키마를 정의합니다.



3. DTO 작성

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@AllArgsConstructor
public class Book {
  private String id;
  private String title;
  private String author;
}
  • 값을 주고받을 DTO 형식을 정의합니다.



4. 컨트롤러 작성

import org.springframework.graphql.data.method.annotation.Argument;
import org.springframework.graphql.data.method.annotation.QueryMapping;
import org.springframework.stereotype.Controller;

import java.util.HashMap;
import java.util.Map;

@Controller
public class BookController {

  private static Map<String, Book> books = new HashMap<>();

  static {
    books.put("1", new Book("1", "Harry Potter and the Philosopher's Stone", "J.K. Rowling"));
    books.put("2", new Book("2", "The Hobbit", "J.R.R. Tolkien"));
  }

  @QueryMapping
  public Book getBookById(@Argument String id) {
    return books.get(id);
  }
}
  • books라는 Map 객체 value에 Book DTO 객체를 담고, @QueryMapping을 통해  특정 GraphQL 쿼리에 매핑된 메서드를 정의할 수 있습니다.



5. 포스트맨 호출

  • Body 탭에서 GraphQL 을 선택하고 아래 내용을 입력하면 원하는 결과를 얻을 수 있습니다.
{
  getBookById(id: "1") {
    id
    title
    author
  }
}



감사합니다.

최근에 올라온 글
Total
Today
Yesterday