GraphQL 스키마는 서버가 클라이언트에게 제공할 수 있는 데이터의 종류, 데이터의 형태, 데이터 간의 관계 등을 명세한다. 스키마는 서버의 데이터 그래프를 정의하며, 이를 통해 클라이언트는 어떤 쿼리를 보낼 수 있는지 알 수 있다. 또한, 서버는 클라이언트의 쿼리를 스키마에 따라 검증하고 처리할 수 있다.
스키마는 타입 시스템을 이용하여 정의되며, 주요한 타입으로는 객체 타입(Object Type), 스칼라 타입(Scalar Type), 열거 타입(Enum Type), 인터페이스 타입(Interface Type), 유니온 타입(Union Type) 등이 있다.
타입 시스템은 GraphQL의 핵심적인 요소 중 하나로, 쿼리의 결과가 어떤 형태를 가질지를 정의하며 이를 통해 타입 안전성을 보장한다. 스키마 내의 모든 데이터는 특정 타입에 속하게 된다.
객체 타입(Object Type) : 가장 흔히 사용되는 타입으로, 서버에서 제공하는 객체와 그 객체의 필드를 정의.
type User {
id: ID!
name: String!
email: String!
}
스칼라 타입(Scalar Type) : Int, Float, String, Boolean, ID 등의 기본 데이터 타입을 정의. 사용자가 직접 정의할 수도 있다.
열거 타입(Enum Type) : 특정 필드가 가질 수 있는 값들을 제한하며, 그 값들 중 하나를 반환하도록 정의.
enum Role {
ADMIN
USER
GUEST
}
인터페이스 타입(Interface Type)와 유니온 타입(Union Type) : 여러 객체 타입들이 공통적으로 가져야 할 필드를 정의하거나, 여러 객체 타입 중 하나를 반환하도록 정의.