반응형
Notice
Recent Posts
Recent Comments
관리 메뉴

간단한 개발관련 내용

GraphQL 개요와 백엔드 개발자의 회고 본문

Web & Server/GraphQL

GraphQL 개요와 백엔드 개발자의 회고

vincenzo.dev.82 2024. 12. 21. 15:13
반응형

GraphQL이란?

GraphQL은 Facebook이 2015년에 발표한 API를 위한 쿼리 언어이자 서버와 클라이언트 간의 통신 명세입니다. REST API의 단점인 오버페칭언더페칭 문제를 해결하고 클라이언트가 필요로 하는 데이터만 요청할 수 있도록 설계되었습니다. GraphQL의 핵심은 선언적 데이터 페칭으로, 클라이언트는 요청하고자 하는 데이터 구조를 명확히 정의할 수 있습니다.

  • 위계적 구조: 데이터는 중첩된 필드로 요청 가능하며, 응답도 동일한 구조로 반환됩니다.
  • 제품 중심적 설계: 클라이언트 요구에 맞춘 데이터 반환.
  • 엄격한 타입 시스템: 스키마로 정의된 데이터 타입 보장.
  • 인트로스펙션(Introspection): API 스키마를 클라이언트가 동적으로 탐색할 수 있는 기능.

GraphQL의 역사 및 REST의 한계

  • GraphQL은 Facebook의 내부 요구를 해결하기 위해 설계되었으며, REST가 가진 유연성 부족, 다수 엔드포인트 관리의 복잡성 문제를 해결하고자 등장했습니다.
  • REST의 주요 문제:
    1. 오버페칭: 불필요한 데이터까지 불러오는 비효율.
    2. 언더페칭: 필요한 데이터를 여러 요청으로 나누어 받아야 함.
    3. 엔드포인트 증가: 확장성과 유지 보수 어려움.

GraphQL의 주요 개념

  1. 스키마(Schema)
    • API의 데이터 모델을 정의.
    • 스칼라 타입(Int, String 등), 객체 타입(Object), 유니언 타입, 인터페이스 등을 포함.
  2. 쿼리(Query)
    • 클라이언트가 요청할 데이터를 정의.
    • Selection-Set을 통해 반환할 데이터 필드를 명시.
  3. 뮤테이션(Mutation)
    • 데이터를 변경하거나 애플리케이션 상태를 조작.
  4. 서브스크립션(Subscription)
    • 실시간 데이터 전송 및 Pub/Sub 디자인 패턴 구현.
  5. 리졸버(Resolver)
    • 클라이언트 요청을 처리하여 데이터를 반환.
    • 루트 리졸버, 타입 리졸버, 커스텀 스칼라 리졸버 등.
  6. GraphQL 클라이언트
    • Relay와 Apollo가 대표적이며, 데이터 요청, 캐싱, UI 업데이트 등을 지원.

GraphQL API 개발 및 적용

  • 스키마 설계: API의 데이터 모델과 구조를 명확히 정의.
  • 리졸버 작성: 데이터베이스, 외부 API, 캐시와 연결.
  • Apollo 사용: 캐싱, 인증, 서브스크립션 등 GraphQL 클라이언트를 쉽게 구성.
  • 보안 강화: 쿼리 복잡도, 깊이 제한 등을 통해 악의적인 요청 차단.

백엔드 개발자로서 GraphQL 활용 회고

  1. 장점:
    • 유연한 데이터 페칭: REST에서 발생하는 데이터 초과/부족 문제 해결.
    • 스키마 중심 개발: 클라이언트와 백엔드 간 명확한 계약으로 생산성 증대.
    • 인트로스펙션 활용: API 사용성을 높이고 문서를 자동 생성.
    • 효율적인 데이터 요청: 한 번의 요청으로 필요한 데이터 집합 반환.
  2. 도전 과제:
    • 초기 학습 곡선: GraphQL의 새로운 개념과 도구에 익숙해지는 시간 필요.
    • 복잡한 리졸버 작성: 데이터 소스가 복잡할수록 리졸버 관리가 어려울 수 있음.
    • 보안과 성능 고려: 대규모 API에서 쿼리 복잡도 관리가 중요.
  3. 적용 전략:
    • 점진적 마이그레이션: 기존 REST API에서 GraphQL로 단계적으로 전환.
    • 클라이언트 중심 설계: 다양한 프론트엔드 요구 사항을 충족하도록 설계.
    • 실시간 기능 확장: Subscription으로 실시간 데이터 전송 제공.

마무리 요약

GraphQL은 클라이언트 중심의 API 설계를 가능하게 하고, 백엔드 개발자가 클라이언트 요구에 민첩하게 대응할 수 있게 합니다. 하지만 GraphQL의 장점을 최대화하려면 철저한 스키마 설계, 성능 최적화, 보안 강화가 필수입니다. REST에서 GraphQL로 전환하려는 경우, 기존 구조를 모두 변경하기보다 단계적으로 적용하며 새로운 데이터 요구 사항에 대응하는 것이 효과적일 듯 합니다. 

반응형