티스토리 뷰

Server/Spring

[Spring/DGS] Data Fetcher 작성

SdardewValley 2022. 8. 11. 23:20
반응형

Data Fetcher란?

  Data Fetcher은 Graphql의 쿼리에 해당하는 데이터를 반환하는 역할을 한다. Data Fetcher을 만들기 위해서 메서드에 @DgsData, @DgsQuery, @DgsMutation, @DgsSubscription 어노테이션을 사용한다. 그리고 Data Fetcher 메서드들은 @DgsComponent가 붙은 클래스 안에 위치해야 한다.

 

 

@DgsData 

  DgsData는 parentType, field 이렇게 2개의 파라미터를 받을 수 있다.

  • parentType: 필드가 포함된 부모 타입
  • field: data fetcher가 반환할 쿼리의 필드

 

예시 스키마

  위 스키마에 대해서 아래와 같은 data fetcher을 작성할 수 있다.

 

@DgsComponent
public class ShowDataFetcher {

   @DgsData(parentType = "Query", field = "shows")
   public List<Show> shows() {
       return shows;
   }
}

  DgsComponent인 ShowDataFetcher 클래스 안에 data fetcher 역할을 하는 shows 메서드가 있다. shows는 스키마에서 type Query 아래에 있기 때문에 parentType이 "Query"가 된다. 그리고 Query의 shows 필드에 대응시키기 위해서 field는 shows가 된다. 코틀린 코드에서는 field를 생략해도 된다. field가 생략된 경우 메서드명이 field로 사용되기 때문이다.

 

  Query, Mutation, Subscription과 같은 타입들은 자주 사용이 된다. 따라서 DgsData와 Query, Mutation, Subscription 타입을 합친 @DgsQuery, @DgsMutation, @DgsSubscription과 같은 어노테이션이 있다. 

 

@DgsData(parentType = "Query", field = "shows")
public List<Show> shows() { .... }

// 메서드 명이 field로 사용됨
@DgsData(parentType = "Query")
public List<Show> shows() { .... }

// DgsData와 타입을 합쳐 DgsQuery 사용
@DgsQuery(field = "shows")
public List<Show> shows() { .... }

// parentType, field모두 생략
@DgsQuery
public List<Show> shows() { .... }

  위의 shows 메서드는 모두 같은 역할을 한다. @DgsData와 parentType을 합쳐서 @DgsQuery로 대체했고, field 대신 메서드명을 사용한다.

 

 

@DgsData.List

@DgsData.List(
    DgsData(parentType = "Query", field = "movies"),
    DgsData(parentType = "Query", field = "shows")
)

  GraphQL 스키마에서 여러개의 타입에 Data Fetcher가 사용될 수 있다. 이런 경우 여러개의 DgsData 어노테이션을 @DgsData.List안에 작성하여 매핑시킬 수 있다.

 

참고

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함