티스토리 뷰

Server/Spring

[Spring/DGS] DGS Framework란?

SdardewValley 2022. 8. 9. 22:37
반응형

DGS Framework란?

  GraphQL은 API용 쿼리 언어이다. GraphQL을 사용하면 사용자가 원하는 데이터만을 가져올 수 있기 때문에 오버페칭(사용 하지 않는 데이터까지 가져오는 것)을 방지할 수 있다.

  DGS Framework는 스프링에서 graphql을 더 편리하게 사용하기 위해 넷플릭스에서 만든 SpringBoot 기반의 서버 프레임워크이다

 

 

dependency 추가

  공식 문서를 보면 gradle 사용을 추천한다. DSG를 스프링에서 사용하기 위해서 아래와 같은 dependency를 추가해줘야 한다.

 

implementation(platform("com.netflix.graphql.dgs:graphql-dgs-platform-dependencies:latest.release"))
implementation("com.netflix.graphql.dgs:graphql-dgs-spring-boot-starter")

  각각 아래와 같은 기능을 제공한다.

  • com.netflix.graphql.dgs:graphql-dgs-platform-dependencies : 모듈과 프레임워크의 버전을 맞추기 위해 사용
  • com.netflix.graphql.dgs:graphql-dgs-spring-boot-starter : 빌드를 위해 필요한 모든 것을 포함
💡 DGS 프레임워크는 코틀린 1.5 버전을 사용하기 때문에 낮은 버전의 경우 사용 가능한 코틀린 버전을 명시해야 한다.

 

 

Schema First

  GraphQL API 개발에는 다음과 같은 2가지 방식이 있다.

  1. Schema First API Development: 스키마 파일을 먼저 작성하고 작업을 위한 서비스(코드) 구현
  2. Code First API Development: 코드를 먼저 작성하면 런타임에 graphql 파일이 생성

  DGS에서는 스키마가 먼저 작성되도록 설계되었다.

 

  스키마 파일들은 src/main/resources/schema에 위치해야 한다. 만약 다른 곳에 위치시키고 싶다면 configuration 파일에 설정을 해주면 된다. 설정은 공식문서의 Configuration을 참고하면 된다.

  스키마의 이름은 확장자가 graphqls로 한다. 즉, [스키마이름].graphqls 형태로 작성한다. 만약 파일 이름을 schema로 하고 싶다면 schema.graphqls로 작성한다.

 

 

간단한 코드

간단한 스키마

  위의 코드는 간단한 스키마이다. Show의 리스트 쿼리이고 title을 통해서 필터링한다는 것만 우선 알고 넘어가면 된다.

 

@DgsComponent
class ShowsDataFetcher {
    private val shows = listOf(
        Show("Stranger Things", 2016),
        Show("Ozark", 2017),
        Show("The Crown", 2016),
        Show("Dead to Me", 2019),
        Show("Orange is the New Black", 2013))

    @DgsQuery
    fun shows(@InputArgument titleFilter : String?): List<Show> {
        return if(titleFilter != null) {
            shows.filter { it.title.contains(titleFilter) }
        } else {
            shows
        }
    }

    data class Show(val title: String, val releaseYear: Int)
}

  Data Fetcher는 쿼리에 대한 데이터를 반환하는 역할을 한다. Data Fetcher를 만들기 위해서는 @DgsComponent 어노테이션이 붙은 DgsComponent에 동작들을 정의해야 한다.

 

  Query, Mutation, Subscription 중 어떤 요청 관련한 것인지 어노테이션로 표시해야 한다. 스키마에서 type Query를 보면 Query 요청에 대한 Data Fetcher을 정의해야 하는 것을 알 수 있다 Query이기 때문에 @DgsQuery를 사용해서 동작을 정의한다.

 

  @InputArgument로 요청때 전달한 인자를 가져올 수 있다. titleFilter를 가져왔다.

 

 

실행 결과

  http://localhost:8080/graphiql에 접속하면 아래와 같이 graphql 쿼리에디터인 GraphiQL에 접속할 수 있다.

GraphiQL

 

요청 - 결과

  왼쪽의 형태로 요청을 보내면 title, releaseYear 데이터를 받는다.

 

요청 - 결과

  releaseYear 데이터가 필요 없는 경우에는 요청으로 title만 보내면 된다.

 

 

요청 - 결과

  titleFilter를 사용하고 싶다면 show 뒤에 괄호를 넣고 titleFilter + ":" + 데이터 형식으로 사용하면 된다.

 

참고

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함