참조
Nomad Coders의 무료 강의 'graphQL로 영화 API 만들기'를 참고하였다.
nomadcoders.co/graphql-for-beginners
원리. Resolver와 Schema에 맞게 query문을 날리면 원하는 데이터를 받는다!
아래 사진에서처럼, 왼쪽 client에서 query 문을 날리면 movies에 해당하는 "data"객체가 우측 결과화면에 표시되는 것을 볼 수 있다. 어떤 원리로 이것이 작동하는지 구조적으로 살펴보자.
1-1. resolver.js
resolver는 query 요청이 왔을 때 어떤 데이터를 넘겨줄 것인가를 정의해주는 파일이다.
resolver 내부에 Query와 Mutation이 있는데, 이는 REST API에서의 GET, POST와 유사하다고 보면 된다.
Query 안의 movies나 movie로 접근하면 getMovies()를 통해 모든 영화에 대한 정보를 get 할 수 있거나, getById()를 통해 파라미터로 넘겨준 id와 일치하는 영화값만 조회할 수 있도록 할 수 있다.
Mutation 하위에 있는 addMovie, deleteMovie는 movies라는 db 속 객체 안에 영화 정보를 추가하거나 삭제하는 post 기능을 한다고 보면 된다.
그럼 import로 받아오는 저 갖가지 함수들은 어디에 어떻게 작성된 것일까?
1-2. db.js
db.js 파일에서는 데이터 객체를 갖는 배열(movies)을 정의하고, resolver.js에서 쓰일 함수들을 정의하였다.
(아직 잘 모르지만... 아마 MYSQL과 같은 실제 DB에 연결 시에는 이러한 작업을 sequelize로 처리하거나 다른 파일에서 처리할 것 같다.)
그리고 함수들을 모두 export 처리하여 resolver.js에서 import 후 사용할 수 있도록 하였다. 꼭 db.js에 작성할 필요는 없지만 기능적으로 파일들을 구분해놓은 것 같다.
1-3. schema.graphql
schema 에서는 Query와 Mutation을 정의해줘야한다.
그리고 Query와 Mutation에 쓰일 Movie type을 지정해준다. 이는 마치 데이터가 들어갈 표를 만들어 놓는 것과 같다. id, name, score의 열 이름을 지정하고, 각 열에 들어갈 데이터의 형식(int, string), 필수 입력 여부(!)를 지정해준다.
하나 예를 들어서 이해해보자면, 7~8번줄의 query 문은
1
2
3
4
5
6
|
query {
movies {
id
name
}
}
|
cs |
으로 날릴 수 있겠다. 그럼 resolver.js에서 Query : { movies : () => getMovies() } 가 실행되는 것이고 getMovies 함수의 정의에 따라 movies라는 DB에 있는 모든 정보를 불러온다.
다만 movies DB는 각 영화의 id, name, score를 포함하고 있는데, 위의 query 문에서는 id, name만 요청했으니까 각 영화에 대해 id, name 값들만 추출해서 가져오게 된다.
실제로 그렇게 되는 것인지 다음 글에서 살펴보자!
'Programming-[Backend] > graphQL' 카테고리의 다른 글
6. 영화 API GraphQL : Query, Mutation 요청해보기 (0) | 2021.01.05 |
---|---|
4. graphQL 서버 기본 작성법 : schema, resolver (0) | 2020.12.28 |
3. 초기 세팅 1 : ES6 코드 적용을 위한 babel-node 설치 (0) | 2020.12.28 |
2. graphQL, graphql-yoga 시작 (0) | 2020.12.26 |
1. graphQL 의 목적 (0) | 2020.12.26 |