티스토리 뷰
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가지 방식이 있다.
- Schema First API Development: 스키마 파일을 먼저 작성하고 작업을 위한 서비스(코드) 구현
- 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에 접속할 수 있다.
왼쪽의 형태로 요청을 보내면 title, releaseYear 데이터를 받는다.
releaseYear 데이터가 필요 없는 경우에는 요청으로 title만 보내면 된다.
titleFilter를 사용하고 싶다면 show 뒤에 괄호를 넣고 titleFilter + ":" + 데이터 형식으로 사용하면 된다.
참고
- Total
- Today
- Yesterday
- pm.expect
- 네이버 2022 공채
- java
- postman collection
- 주생성자
- 2차 인터뷰
- git
- hashcode
- 확장 함수
- Kotlin
- solidity
- Kotlin In Action
- Squash and merge
- pm.test
- 코딩테스트
- squash merge
- string
- postman tests
- python3
- mysql
- graphql
- postman
- downTo
- github
- Python
- DGS Framework
- Basic Type
- 코틀린
- 1차 인터뷰
- go 특징
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |