GraphQL 스키마와 타입
GraphQL 스키마와 타입 (Schemas and Types)
GraphQL 서비스는 어떤 데이터를 조회할 수 있는지를 타입 시스템으로 표현해요. 그 타입들의 모음이 바로 **스키마(schema)**인데, 클라이언트는 이 스키마를 보고 예측 가능한 응답을 받아오는 쿼리를 만들 수 있어요.
스키마를 이루는 기본 요소는 **객체 타입(Object type)**이에요. 객체 타입은 가져올 수 있는 객체 하나와 그 필드들을 나타내죠.
type Character {
name: String!
appearsIn: [Episode!]!
}
String!처럼!가 붙으면 NonNull이에요. 이 필드를 쿼리하면 반드시 값이 온다는 보장이에요.[Episode!]!는 Episode 객체들의 리스트 타입이에요. 리스트 자체와 리스트 안 항목 모두!라서, 항상 배열이 오고 배열의 각 항목은 반드시 Episode 객체라는 뜻이에요.- 필드는 0개 이상의 인자(argument)를 받을 수 있어요.
length(unit: LengthUnit = METER): Float처럼 인자에 기본값도 줄 수 있어요.
모든 스키마는 반드시 query를 지원해야 하고, 그 진입점은 기본으로 Query라는 객체 타입이에요. 쓰기·실시간이 필요하면 Mutation, Subscription 타입도 두죠.
GraphQL이 기본 제공하는 스칼라는 다섯 가지예요.
Int: 32비트 부호 정수Float: 배정밀도 부동소수점String: UTF-8 문자 시퀀스Boolean: true/falseID: 고유 식별자 (객체 재조회·캐시 키로 자주 사용)
그 외에도 이늄(enum Episode { NEWHOPE EMPIRE JEDI }), 인터페이스(interface Character, 이를 implements하는 Human/Droid), 유니언(공유 필드 없는 추상 타입), 입력 객체 타입(Input Object), 지시자(directive) 같은 타입 시스템 기능이 있어요. 설명(description)을 달면 introspection 쿼리와 GraphiQL 같은 개발 도구에 그대로 노출돼서, 클라이언트 개발자가 스키마를 이해하기 쉬워져요.
더 알아보기
- 타입 시스템의 여섯 종류 정의와 문법: GraphQL spec
- 실제 스키마를 조회하는 법: Introspection