GraphQL 이란?
- SQL 과 마찬가지로 쿼리 언어이다.
GraphQL 의 구조 - 뮤테이션 (Mutation) 과 쿼리 (Query)
- 뮤테이션 (Mutation) : 데이터를 변조할때 사용한다.
- 쿼리 (Query) : 데이터를 읽을때 사용한다.
- 일반 쿼리와 오퍼레이션 네임 쿼리가 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
{
human(id: "1000") {
name
height
}
}
query HeroNameAndFriends($episode: Episode) {
hero(episode: $episode) {
name
friends {
name
}
}
}
|
cs |
- 오퍼레이션 네임 쿼리를 사용하면 변수에 인자값을 넘겨서 사용할수 있다. 쿼리용 함수라고 생각하면 편하다.
GraphQL 의 구조 - 스키마/타입 (schema/type)
1
2
3
4
|
type Character {
name: String!
appearsIn: [Episode!]!
}
|
cs |
- 오브젝트 타입 : Character
- 필드 : name, appearsIn
- 스칼라 타입 : String, ID, Int 등
- 느낌표(!) : 필수 값을 의미(non-nullable)
- 대괄호([, ]) : 배열을 의미(array)
GraphQL 의 구조 - 리졸버 (resolver)
- 리졸버는 함수이다.
- gql 은 데이터를 가져오는 구체적인 과정을 직접 구현해야 한다. 그 구체적인 과정을 리졸버가 담당한다.
- gql 쿼리에서 필드가 스칼라 타입이 아닌 우리가 정의한 타입이라면, 그 필드는 함수를 반환한다.
- gql 에서 우리가 정의한 타입 (컴퓨티드 필드) 는 리졸버를 가지고 있다.
1
2
3
4
5
6
7
8
9
10
11
12
|
Query: {
paymentsByUser: async (parent, { userId }, context, info) => {
const limit = await Limit.findOne({ where: { UserId: userId } })
const payments = await Payment.findAll({ where: { LimitId: limit.id } })
return payments
},
},
Payment: {
limit: async (payment, args, context, info) => {
return await Limit.findOne({ where: { id: payment.LimitId } })
}
}
|
cs |
- 첫번째 인자는 parent로 연쇄적 리졸버 호출에서 부모 리졸버가 리턴한 객체입니다. 이 객체를 활용해서 현재 리졸버가 내보낼 값을 조절 할 수 있습니다.
- 두번째 인자는 args로 쿼리에서 입력으로 넣은 인자이다.
- 세번째 인자는 context로 모든 리졸버에게 전달이 됩니다. 주로 미들웨어를 통해 입력된 값들이 들어 있습니다. 로그인 정보 혹은 권한과 같이 주요 컨텍스트 관련 정보를 가지고 있습니다.
- 네번째 인자는 info로 스키마 정보와 더불어 현재 쿼리의 특정 필드 정보를 가지고 있습니다. 잘 사용하지 않는 필드입니다.
- 참고
https://tech.kakao.com/2019/08/01/graphql-basic/
GraphQL 개념잡기
GraphQL은 페이스북에서 만든 쿼리 언어입니다. GrpahQL은 요즘 개발자들 사이에서 자주 입에 오르내리고 있으나, 2019년 7월 기준으로 얼리스테이지(early-stage)임은 분명합니다. 국내에서 GraphQL API를 O
tech.kakao.com
'Apollo GraphQL Prisma' 카테고리의 다른 글
Apollo (0) | 2021.06.18 |
---|---|
인스타그램 클론코딩 BACKEND 만들기 #11 - Login (0) | 2021.06.17 |
인스타그램 클론코딩 BACKEND 만들기 #10 - Create Account (0) | 2021.06.17 |
인스타그램 클론코딩 BACKEND 만들기 #9 - Dotenv (0) | 2021.06.16 |
인스타그램 클론코딩 BACKEND 만들기 #8 - graphql-tools (0) | 2021.06.16 |