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의 주요 문제:
- 오버페칭: 불필요한 데이터까지 불러오는 비효율.
- 언더페칭: 필요한 데이터를 여러 요청으로 나누어 받아야 함.
- 엔드포인트 증가: 확장성과 유지 보수 어려움.
GraphQL의 주요 개념
- 스키마(Schema)
- API의 데이터 모델을 정의.
- 스칼라 타입(Int, String 등), 객체 타입(Object), 유니언 타입, 인터페이스 등을 포함.
- 쿼리(Query)
- 클라이언트가 요청할 데이터를 정의.
- Selection-Set을 통해 반환할 데이터 필드를 명시.
- 뮤테이션(Mutation)
- 데이터를 변경하거나 애플리케이션 상태를 조작.
- 서브스크립션(Subscription)
- 실시간 데이터 전송 및 Pub/Sub 디자인 패턴 구현.
- 리졸버(Resolver)
- 클라이언트 요청을 처리하여 데이터를 반환.
- 루트 리졸버, 타입 리졸버, 커스텀 스칼라 리졸버 등.
- GraphQL 클라이언트
- Relay와 Apollo가 대표적이며, 데이터 요청, 캐싱, UI 업데이트 등을 지원.
GraphQL API 개발 및 적용
- 스키마 설계: API의 데이터 모델과 구조를 명확히 정의.
- 리졸버 작성: 데이터베이스, 외부 API, 캐시와 연결.
- Apollo 사용: 캐싱, 인증, 서브스크립션 등 GraphQL 클라이언트를 쉽게 구성.
- 보안 강화: 쿼리 복잡도, 깊이 제한 등을 통해 악의적인 요청 차단.
백엔드 개발자로서 GraphQL 활용 회고
- 장점:
- 유연한 데이터 페칭: REST에서 발생하는 데이터 초과/부족 문제 해결.
- 스키마 중심 개발: 클라이언트와 백엔드 간 명확한 계약으로 생산성 증대.
- 인트로스펙션 활용: API 사용성을 높이고 문서를 자동 생성.
- 효율적인 데이터 요청: 한 번의 요청으로 필요한 데이터 집합 반환.
- 도전 과제:
- 초기 학습 곡선: GraphQL의 새로운 개념과 도구에 익숙해지는 시간 필요.
- 복잡한 리졸버 작성: 데이터 소스가 복잡할수록 리졸버 관리가 어려울 수 있음.
- 보안과 성능 고려: 대규모 API에서 쿼리 복잡도 관리가 중요.
- 적용 전략:
- 점진적 마이그레이션: 기존 REST API에서 GraphQL로 단계적으로 전환.
- 클라이언트 중심 설계: 다양한 프론트엔드 요구 사항을 충족하도록 설계.
- 실시간 기능 확장: Subscription으로 실시간 데이터 전송 제공.
마무리 요약
GraphQL은 클라이언트 중심의 API 설계를 가능하게 하고, 백엔드 개발자가 클라이언트 요구에 민첩하게 대응할 수 있게 합니다. 하지만 GraphQL의 장점을 최대화하려면 철저한 스키마 설계, 성능 최적화, 보안 강화가 필수입니다. REST에서 GraphQL로 전환하려는 경우, 기존 구조를 모두 변경하기보다 단계적으로 적용하며 새로운 데이터 요구 사항에 대응하는 것이 효과적일 듯 합니다.
반응형