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”인 사용자의 name과 age만 가져올 수 있습니다.
3. 변경(Mutation)
• 데이터를 생성, 수정 또는 삭제하기 위한 요청.
• 예:
mutation AddUser {
addUser(name: "John", age: 30) {
id
name
age
}
}
4. 구독(Subscription)
• 데이터 변경 사항을 실시간으로 구독.
• 주로 WebSocket을 사용하여 실시간 데이터 처리를 구현.
• 예:
subscription {
userAdded {
id
name
}
}
GraphQL과 REST의 차이점
특징 GraphQL REST
- 데이터 요청 방식 클라이언트가 필요한 데이터 요청 서버가 고정된 데이터 제공
- 엔드포인트 개수 단일 엔드포인트(/graphql) 여러 엔드포인트(/users, /posts)
- 데이터 과다/부족 문제 없음(필요한 데이터만 요청 가능) 있음
- 버전 관리 불필요(스키마로 관리) 필요
- 관계형 데이터 처리 계층형 데이터 요청 가능 여러 요청으로 처리 필요
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
'코딩 > 코딩에서 중요한 개념들' 카테고리의 다른 글
Flutter Bloc 공부 1 (0) | 2024.02.28 |
---|---|
Flutter - supabase 회원가입 로직 구현 할 때 배웠던 개념들 (0) | 2024.02.18 |
비전공자가 이해하는 DB의 세계 (2) | 2023.12.03 |
Oauth2 (0) | 2023.11.15 |
GPT를 이용한 블로그 수익에 대한 내 개인적인 생각 (1) | 2023.02.17 |