페이스북에서 만든 API 를 위한 쿼리 언어 라고 할 수 있다.
그렇다면, 같은 쿼리 언어인 SQL (Structed Query Language) 비교해볼 수 있는데 둘은 목적에서부터 다르다.
GraphQL
은 웹 클라이언트가 데이터를 서버로부터 효율적으로 가져오는 것이 목적인 쿼리 언어이고,
SQL
은 데이터베이스 시스템에 저장된 데이터를 효율적으로 가져오는 것이 목적인 쿼리 언어라는 차이점이 있다.
sql
의 문장(statement)은 주로 백앤드 시스템에서 작성하고 호출 하는 반면,
gql
의 문장은 주로 클라이언트 시스템에서 작성하고 호출 한다.
SELECT plot_id, species_id, sex, weight, ROUND(weight / 1000.0, 2) FROM surveys;
{
hero {
name
friends {
name
}
}
}
GraphQL 쿼리문(좌측)과 응답 데이터 형식(우측)
쿼리와 뮤테이션 그리고 응답 내용의 구조는 상당히 직관적이고, 요청하는 쿼리문의 구조와 응답 내용의 구조는 거의 일치한다.
gql에서는 굳이 쿼리(query)
와 뮤테이션(mutation)
을 나누는데 내부적으로 들어가면 사실상 이 둘은 별 차이가 없어보인다.
쿼리는 데이터를 읽는데(R) 사용하고, 뮤테이션은 데이터를 변조(CUD) 하는데 사용한다는 개념 적인 규약을 정해 놓은 것 뿐임 (CRUD)
{
human(id: "1000") {
name
height
}
}
query HeroNameAndFriends($episode: Episode) {
hero(episode: $episode) {
name
friends {
name
}
}
}
일반적인 경우 클라이언트에서 정적인 쿼리문을 작성하지는 않을 것이다.
주로 정보를 불러올때 id 값이나, 다른 인자 값을 가지고 데이터를 불러 오게 될것이다,
gql
에는 쿼리에 변수라는 개념이 있는데, 이 개념은 이러한 용처를 위해 존재 하는것
gql
을 구현한 클라이언트에서는 이 변수에 프로그래밍으로 값을 할당 할 수 있는 함수 인터페이스가 존재
react apollo client의 경우에는 variables 라는 파라메터에 원하는 값을 넣어주면 된다!
query getStudentInfomation($studentId: ID){
personalInfo(studentId: $studentId) {
name
address1
address2
major
}
classInfo(year: 2018, studentId: $studentId) {
classCode
className
teacher {
name
major
}
classRoom {
id
maintainer {
name
}
}
}
오퍼레이션 네임 쿼리는 매우 편리, 굳이 비유하자면 쿼리용 함수 이다.
데이터베이스 에서의 프로시져(procedure) 개념과 유사하다고 생각하면 된다고 한다.
차이: 데이터베이스의 프로시져는 DBA 혹은 백앤드프로그래머가 작성하고 관리 하였지만, gql 오퍼레이션 네임 쿼리는 클라이언트 프로그래머가 작성하고 관리 합니다.
이 개념 덕분에 REST API
를 호출할때와 다르게, 한번의 인터넷 네트워크 왕복으로 여러분이 원하는 모든 데이터를 가져 올 수 있다.
gql
이 제공하는 추가 기능 덕분에 백엔드 프로그래머와 프론트엔드 프로그래머의 협업 방식 에도 영향을 준다.
이전 협업 방식(REST API
)에서는 프론트앤드 프로그래머는 백앤드 프로그래머가 작성하여 전달하는 API의 request
/ response
의 형식에 의존하게 되지만, gql
을 사용한 방식에 서는 이러한 의존도가 많이 사라진다.
다만 여전히 데이터 schema
에 대한 협업 의존성은 존재
type Character {
name: String!
appearsIn: [Episode!]!
}
오브젝트 타입 : Character
필드 : name, appearsIn
스칼라 타입 : String, ID, Int 등
느낌표(!) : 필수 값을 의미(non-nullable)
대괄호([, ]) : 배열을 의미(array)
REST API는 URL, METHOD등을 조합하기 때문에 다양한 Endpoint가 존재한다.
반면, gql은 단 하나의 Endpoint가 존재하는데, gql API에서는 불러오는 데이터의 종류를 쿼리 조합을 통해서 결정하게 된다.
쿼리 조합을 통해서 결정
이게 무슨 뜻이냐?
REST API에서는 각 Endpoint마다 데이터베이스 SQL 쿼리가 달라지는 반면, gql API는 gql 스키마의 타입마다 데이터베이스 SQL 쿼리가 달라진다.
HTTP와 gql의 기술 스택 비교
REST API와 GraphQL API의 사용
위 그림처럼, gql API를 사용하면 여러번 네트워크 호출을 할 필요 없이, 한번의 네트워크 호출로 처리 할 수 있다.
그래프 큐엘은 페이스북에서 만든 새로운 쿼리 언어다.
데이터 주고 받기가 가능하며
그래프+쿼리 언어라고 보면된다.
즉, API에 접목 시킬 수 있는 쿼리 언어이다.
그래프큐엘 docs
GraphQL이 무엇인가?
그래프큐엘 개념