728x90
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
}
}
감사합니다.
728x90
'프레임워크 > SpringBoot' 카테고리의 다른 글
[SpringBoot+Next.js] JWT 토큰 인증 예제 (0) | 2024.08.01 |
---|---|
[SpringBoot] h2 consloe localhost에서 연결을 거부했습니다. (0) | 2024.07.31 |
[SpringBoot] jpg파일을 webp 파일로 변경하기(twelvemonkeys) (0) | 2024.06.18 |
[SpringBoot] 리눅스 SVN 으로 war 파일 배포하기 (0) | 2024.06.17 |
[SpringBoot] MSA+JPA로 간단한 소스 구현하기 (0) | 2024.06.14 |