GraphQL(Graph Query Language)
API를 위한 쿼리 언어, SQL이 데이터베이스 시스템으로부터 데이터를 가져오는 목적을 가진다면, GraphQL은 클라이언트가 데이터를 서버로부터 가져오는 것을 목적으로 한다.
Underfetching 문제 → 하나의 요청으로는 충분한 데이터를 모두 받아오지 못하는 문제
Overfetching → 필요 없는 데이터까지 모두 받아오게 되는 문제
책 상세 페이지 (책 정보, 리뷰 리스트, 리뷰 유저 정보)
1. 책정보, 2. 리뷰, 3. 리뷰쓴 사용자 정보, … → 여러번 API를 호출, 이때마다 필요없는 정보도 같이 받아오게됨
api를 여러번 호출 해서 받은 데이터를 다시 조합하여 사용, 이때 필요없는 데이터도 생기게 되는 문제점을 개선 → graphQL


addbook -> 책 추가 하는 타입 -> 책 추가 하는 동작 수행
addbook 내부의 데이터로 책의 데이터를 추가
그 아래 타입의 형태로 데이터를 반환
실시간 데이터 변화를 감지하여 표시하여야 할때
subscription{
reviewAdded(bookId: "1") {
//보내줄 정보
comment
rating
user {
name
}
}
}

다양한 데이터 요구가 있는 모바일/웹 애플리케이션
소셜 미디어 앱 (예: Facebook, Instagram 등)
→ 사용자 피드, 프로필 정보, 알림 등 여러 개의 리소스중 필요한 리소스만 가져오게 하는 graphQL이 적합
복잡하고 방대한 데이터 모델을 가진 서비스
대용량 데이터를 다루는 대시보드/분석 애플리케이션
데이터 시각화/분석 도구 (예: Google Analytics, Tableau)
→ Overfetching, Underfetching으로 발생하는 오버헤드가 큰 서비스 → graphQL 적합
데이터 업데이트 실시간 반응이 필요한 서비스 (graphQL 구독 기능 활용)
채팅 애플리케이션 (예: Slack, Discord)
→ 실시간으로 많은 데이터가 업데이트되는 경우, 필요한 정보만 선택적으로 구독
클라이언트가 데이터 요청에 많은 제어권을 가진 서비스 (예시..?)