
GraphQL은 클라이언트가 원하는 데이터를 정확히 요청할 수 있도록 설계된 쿼리 언어이자 API를 위한 런타임이이었습니다.
기존 REST API 방식과 달리, 필요하지 않은 데이터는 제외하고 필요한 데이터만 요청할 수 있어 네트워크 사용량을 줄이고 응답 속도를 최적화할 수 있습니다.
예를 들어, 전통적인 REST API에서는 게시글과 작성자 정보를 가져오려면 /posts와 /users 같은 여러 개의 엔드포인트를 호출해야 합니다.
하지만 GraphQL에서는 단일 쿼리로 필요한 데이터만 골라서 받아올 수 있습니다.
마치 음식점에서 '오늘의 정식'을 주문하는 것이 아니라, 메뉴판에서 원하는 요리만 골라서 주문하는 느낌과 비슷합니다.
GraphQL의 핵심 개념 중 하나는 스키마(schema) 입니다.
스키마는 API에서 제공하는 데이터의 구조를 정의하고, 데이터를 요청하거나 수정하는 방식을 규정 합니다.
즉, 클라이언트와 서버 간의 계약서 같은 역할을 합니다.
이를 통해 클라이언트는 API의 구조를 한눈에 이해할 수 있고, 서버는 예측 가능한 응답을 제공할 수 있습니다.
GraphQL은 강력한 타입 시스템을 제공하여 데이터의 구조를 명확하게 정의합니다.
이를 통해 API의 신뢰성을 높이고, 클라이언트와 서버 간의 일관성을 유지할 수 있습니다.
스칼라 타입은 GraphQL에서 가장 기본적인 타입으로, 단일 값을 나타냅니다.
즉, 더 이상 나눌 수 없는 기본 데이터 유형입니다.
GraphQL에서 데이터를 표현하는 가장 중요한 타입 입니다.
여러 개의 필드를 포함할 수 있으며, 각각의 필드는 특정 타입을 가집니다.
type User {
id: ID!
name: String!
email: String!
}
위 예제에서는 User 타입을 정의했으며, id, name, email 세 개의 필드를 가지고 있습니다.
아이디 뒤에있는 !(느낌표)는 해당 필드가 필수 값임을 의미합니다.
인터페이스 타입은 여러 개의 객체 타입이 공통으로 가질 수 있는 필드를 정의하는 데 사용됩니다.
이를 통해 코드의 재사용성을 높일 수 있습니다.
interface Character {
id: ID!
name: String!
}
type Hero implements Character {
id: ID!
name: String!
power: String!
}
Character 인터페이스를 정의하고, Hero 타입이 이를 구현하도록 설정했습니다.
즉, Hero 타입은 Character가 가진 모든 필드를 반드시 포함해야 됩니다.
유니온 타입은 서로 다른 여러 타입 중 하나일 수 있는 데이터를 표현할 때 사용됩니다.
union SearchResult = User | Post
위 예제에서 SearchResult는 User 타입이거나 Post 타입일 수 있습니다.
즉, 특정 검색 결과가 사용자 정보일 수도 있고, 게시글 정보일 수도 있는 상황을 표현할 때 유용합니다.
열거형 타입은 특정 값들만 가질 수 있는 데이터 타입입니다.
예를 들어, 요일을 나타낼 때 사용할 수 있습니다.
enum Day {
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY
}
열거형 타입을 사용하면 특정 값만 허용하도록 강제할 수 있어 데이터의 일관성을 유지하는 데 도움이 됩니다.
쿼리나 뮤테이션에서 매개변수로 전달할 데이터를 구조적으로 정의할 수 있습니다.
input NewUserInput {
name: String!
email: String!
password: String!
}
이렇게 정의된 NewUserInput 타입을 활용하면, 뮤테이션에서 하나의 매개변수로 여러 개의 값을 전달할 수 있습니다.
GraphQL은 기존의 스키마를 확장할 수 있는 유연한 구조를 제공합니다.
이를 통해 점진적으로 기능을 추가하거나 기존의 타입을 확장할 수 있습니다.
extend type User {
age: Int
address: String
}
위와 같이 extend 키워드를 사용하면 기존 User 타입에 새로운 필드를 추가할 수 있습니다.
GraphQL은 REST API의 단점을 보완하고, 클라이언트가 원하는 데이터를 효율적으로 요청할 수 있도록 해줍니다.
이를 가능하게 하는 핵심 요소가 바로 스키마와 타입 시스템 이라는것을 이번 학습을 통해 배웠습니다.
GraphQL을 잘 활용하면 API 설계가 더욱 유연해지고, 불필요한 데이터 전송을 줄일 수 있어 성능 최적화에도 도움이 된다는것을 배웠습니다.