GraphQL 기초
기본적인 지식 및 Apollo를 활용한 simple project
Last updated
기본적인 지식 및 Apollo를 활용한 simple project
Last updated
페이스북에서 만든 쿼리 언어로 sql과 같은 쿼리 언어이지만 구조의 차이가 존재.
gql(graphQL)은 웹 클라이언트가 서버로부터 데이터를 효율적으로 가져오는 것이 목적.
sql은 백엔드에서 주로 작성하지만, gql의 경우 주로 클라이언트 시스템에서 작성, 호출.
OverFetching, UnderFetching
RestAPI
URL, Method(get,post,...)을 통한 다양한 Endpoint가 존재.
Endpoint에 따른 DB SQL 쿼리.
OverFetching, UnderFetching의 발생.
gql
단 하나의 Endpoint가 존재.
gql 스키마의 타입에 따른 DB SQL 쿼리.
OverFetching, UnderFetching에서 RestAPI에 비해 유리하다.
(OverFetching : 불필요한 데이터가 포함됨 / UnderFetching : 여러번의 API 호출)
쿼리(query) : DB 데이터 get(R).
뮤테이션 (mutation) : DB 데이터 수정(C,U,D).
(RESTAPI와 같은 개념적인 규약)
GraphQL은 (명세, 형식) 쿼리 언어로 구현할 솔루션이 필요하다.
백엔드에서 정보를 제공 및 처리
프론트엔드에서 요청 전송
이를 위한 라이브러리로는 GraphQL.js, GraphQL Yoga, AWS Amplift, ...
백엔드와 프론트엔드 모두 제공
간편하고 쉬운 설정
오브젝트 타입 : Team
필드 : id, manager, office, ...
스칼라 타입 : String, ID, Int 등
느낌표(!) : 필수 값을 의미(non-nullable)
대괄호([, ]) : 배열을 의미(array)
ID
기본적으로는 String, 고유 식별자 역할을 나타냄
String
UTF-8 문자열
Int
부호가 있는 32비트 정수
Float
부호가 있는 부동소수점 값
Boolean
참/거짓
Null을 반환할 수 없음.
미리 지정된 값들중에서만 반환.(ex. enum)
특정 타입의 배열을 반환.
[String]
✔
✔
✔
[String!]
✔
✔
❌
[String]!
❌
✔
✔
[String!]!
❌
✔
❌
사용자에 의해 정의된 타입들
타입 여럿을 한 배열에 반환하고자 할 때 사용
유사한 객체 타입을 만들기 위한 공통 필드 타입
추상 타입 - 다른 타입에 implements 되기 위한 타입
필터
페이징
별칭
인풋 타입
리팩토링을 위한 정리
RestAPI에 비해 Back과 Front의 협업이 한층 수월해 질 것으로 보인다. 기존 response를 Back에서 전적으로 담당하던 것에 대해 그 영역이 Front로 넘어간 것으로 overfetching이나 underfetching을 해소하기 위한 중복적인 개발도 감소 할 것으로 예상된다.