필드(field)
: 데이터를 가지고 있는 영역으로, 서버는 GraphQL을 통해 클라이언트가 요구하는 필드 정확하게 알고 있어 정확하고 같은 결과를 반환할 수 있음
전달인자(Arguments)
: 조건 같이 사용할 수 있으며, 중첩된 필드와 객체 사이에서 원하는 정보만을 가져올 수 있게 해줌
별명(Aliases)
: 중복된 이름의 필드를 존재할 때 별명을 붙여줘 구분함
{
hero(episode: EMPIRE) {
name
}
hero(episode: JEDI) {
name
}
}
오퍼레이션 네임(Operation name)
: 쿼리에서 원하는 데이터를 한번의 요청으로 가져올 수 있게하며, query mutation, subscription, describes등이 있음(타입에 맞는 이름 작성 중요)
변수(Variables)
: 동적으로 인자를 전달 받아 데이터를 가져오고 싶을 때 변수를 사용하며 인자 변수 옆에 !를 표기할 경우 반드시 해당 변수의 타입 기입한 타입이여야 한다는 뜻
query HeroNameAndFriends($episode: Episode) {
hero(episode: $episode) {
name
friends {
name
}
}
}```
### 뮤테이션(mutation, 데이터 수정)
: 서버 데이터 수정 요청
```javascript
mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) {
createReview(episode: $ep, review: $review) {
stars
commentary
}
}
: 데이터 타입의 집합
type Character { // 객체 타입
name: String! // string 타입이고 항상 값이 있음
appearsIn: [Episode!]! // 배열 타입이고 episode는 항상 값을 가지고 배열은 0개 이상의 요소를 가짐
}
const db = require("./../db")
const resolvers = {
Query: { // ** 저장된 데이터 가져오기
getUser: async (_, { email, pw }) => {
db.findOne({
where: { email, pw }
}) ... // 실제 디비에서 데이터를 가져오는 로직을 작성합니다.
...
}
},
Mutation: { // ** 저장된 데이터 수정하기 ( Create , Update , Delete )
createUser: async (_, { email, pw, name }) => {
...
}
}
Subscription: { // ** 실시간 업데이트
newUser: async () => {
...
}
}
};
-출처 코드스테이츠