본문 바로가기
코딩/코딩에서 중요한 개념들

Graph ql, Firebase data connect

by 일기월장 2025. 1. 3.
반응형

Firebase의 data connect 를 백엔드로 정했습니다. 하지만 Postgres Sql인줄 알았는데,,, Graph ql 이더라구요. 

생소한 개념이라 공부를 시작했습니다. 

 

 

 

GraphQL 개요

 

GraphQL은 페이스북에서 2012년에 개발되었으며, 2015년에 오픈소스로 공개된 데이터 쿼리 언어 및 런타임 환경입니다. 주로 클라이언트와 서버 간의 데이터 요청 방식을 최적화하는 데 사용됩니다. REST API의 대안으로 인기를 얻었으며, 특정 데이터만 요청할 수 있는 유연성, 데이터 과다/부족 문제 해결, 효율적인 데이터 처리 등이 특징입니다.

 

GraphQL의 주요 특징

1. 클라이언트가 필요한 데이터만 요청 가능

REST API는 여러 엔드포인트를 호출해야 하는 반면, GraphQL은 단일 엔드포인트를 통해 필요한 데이터를 쿼리합니다.

예: GET /user 호출로 사용자 정보만 가져오는 대신, GraphQL에서는 한 번의 요청으로 사용자 정보와 관련 데이터를 모두 요청할 수 있습니다.

2. 타입 시스템(Type System)

GraphQL은 명확한 **스키마(Schema)**를 사용하여 데이터 구조를 정의합니다.

이를 통해 클라이언트와 서버 간의 계약(Contract)을 명확히 하고, 사전에 데이터 타입과 형식을 검증합니다.

3. 계층형 데이터 요청

GraphQL은 데이터 관계를 표현하기 쉽게 설계되어, 중첩된 데이터를 계층적으로 요청할 수 있습니다.

예: 사용자 정보와 사용자와 연결된 게시물 리스트를 한 번에 요청 가능.

4. 단일 엔드포인트

REST와 달리, GraphQL API는 단일 엔드포인트(예: /graphql)를 통해 모든 요청을 처리합니다.

요청의 종류(Query, Mutation, Subscription)에 따라 필요한 데이터를 제공.

5. 버전 관리 불필요

REST API는 버전 관리가 필요하지만(GraphQL은 v1, v2 등 필요 없음), GraphQL은 스키마 변경으로 새로운 필드를 추가하거나 수정할 수 있어 API의 변경에 유연합니다.

 

GraphQL의 구성 요소

1. 스키마(Schema)

GraphQL 서버에서 사용되는 데이터 구조와 쿼리를 정의한 청사진(정의서).

주로 **SDL(Schema Definition Language)**로 작성.

예:

 

type User {

  id: ID!

  name: String!

  age: Int

}

 

type Query {

  user(id: ID!): User

  allUsers: [User]

}

 

 

2. 쿼리(Query)

데이터를 읽어오기 위한 요청.

예:

 

 

query GetUser {
  user(id: "1") {
    name
    age
  }
}

 

 

 

위 요청으로 id가 “1”인 사용자의 nameage만 가져올 수 있습니다.

 

3. 변경(Mutation)

데이터를 생성, 수정 또는 삭제하기 위한 요청.

예:

 

 

mutation AddUser {
  addUser(name: "John", age: 30) {
    id
    name
    age
  }
}

 

 

 

4. 구독(Subscription)

데이터 변경 사항을 실시간으로 구독.

주로 WebSocket을 사용하여 실시간 데이터 처리를 구현.

예:

 

subscription {
  userAdded {
    id
    name
  }
}

 

GraphQL과 REST의 차이점

 

특징 GraphQL REST

  1. 데이터 요청 방식 클라이언트가 필요한 데이터 요청 서버가 고정된 데이터 제공
  2. 엔드포인트 개수 단일 엔드포인트(/graphql) 여러 엔드포인트(/users, /posts)
  3. 데이터 과다/부족 문제 없음(필요한 데이터만 요청 가능) 있음
  4. 버전 관리 불필요(스키마로 관리) 필요
  5. 관계형 데이터 처리 계층형 데이터 요청 가능 여러 요청으로 처리 필요

 

GraphQL의 장점

1. 유연성

필요한 데이터만 요청 가능하여, 네트워크 대역폭을 줄이고 성능을 최적화할 수 있음.

2. 단일 엔드포인트

여러 API를 호출할 필요 없이, 하나의 엔드포인트에서 모든 요청을 처리.

3. 스키마 기반 개발

명확한 스키마로 클라이언트와 서버 간 데이터 교환을 예측 가능하게 함.

4. 버전 관리 불필요

필드를 추가하거나 삭제하여 변경 사항을 쉽게 반영 가능.

5. 강력한 커뮤니티

GraphQL은 페이스북을 비롯한 많은 기업에서 채택하며, 점점 더 많은 오픈소스 라이브러리와 도구가 개발되고 있음.

 

GraphQL의 단점

1. 복잡성 증가

REST API에 비해 초기 구현과 설정이 복잡할 수 있음.

스키마 설계와 유지보수 필요.

2. 캐싱 어려움

REST API는 HTTP 캐싱을 쉽게 사용할 수 있지만, GraphQL은 특정 쿼리에 대해 캐싱이 어렵거나 추가 도구(Apollo 등)가 필요.

3. 오버헤드

쿼리를 처리하는 런타임 환경(GraphQL 서버)이 추가되면서 약간의 성능 손실이 발생할 수 있음.

 

GraphQL의 주요 도구 및 라이브러리

1. 서버 구현

Apollo Server: Node.js 기반의 GraphQL 서버.

Express-GraphQL: Express.js와 통합된 GraphQL 서버 라이브러리.

Hasura: GraphQL API를 자동 생성해주는 서비스.

Nexus: 코드 기반 스키마 정의를 지원.

2. 클라이언트 라이브러리

Apollo Client: 강력한 GraphQL 클라이언트.

Relay: Facebook에서 만든 GraphQL 클라이언트.

urql: React와 호환 가능한 GraphQL 클라이언트.

3. 도구

GraphiQL: 브라우저 기반 GraphQL IDE.

Postman: GraphQL 지원을 포함한 API 테스트 도구.

Altair: GraphQL 쿼리를 테스트할 수 있는 도구.

 

GraphQL 사용 사례

1. 페이스북

GraphQL은 페이스북의 뉴스 피드에서 유저 정보와 관련 데이터를 효율적으로 가져오기 위해 개발됨.

2. GitHub API

GitHub은 REST API와 함께 GraphQL API를 제공하여 사용자 지정 쿼리를 지원.

3. Shopify

GraphQL을 통해 전자상거래 플랫폼의 유연한 데이터 요청과 복잡한 데이터 구조 처리.

4. 트위터, 넷플릭스, Airbnb 등

대규모 데이터를 다루는 서비스에서 GraphQL 사용 증가.

 

GraphQL을 배울 때 참고 자료

공식 문서: https://graphql.org/

Apollo Docs: https://www.apollographql.com/docs/

GraphQL Korea: https://graphql-kr.github.io/

YouTube 강의: 다양한 GraphQL 강좌 및 튜토리얼.

GitHub: GraphQL 관련 프로젝트 및 샘플 코드.

 

https://www.youtube.com/watch?v=rEqQtOCb_wA

 

반응형