미뤄왔던 graphQL에 대해 알아보자.
"graphQL을 잘 사용하면 프론트엔드 개발자에게 response 수정 요청을 덜 받을 수 있지 않을까..?"
에서 출발하는 정리글이다!
/graphql 하나로 처리 Q: 프론트엔드가 디비를 알아야 한다는 단점도 있네?
- 해결 방법: DB 모델을 그대로 노출하지 않고 비즈니스 도메인 단위로 추상화
# 나쁜 예시 (DB 구조 그대로 노출)
type User {
id: ID!
name: String
password: String
orders: [Order]
}
# 좋은 예시 (비즈니스 단위 추상화)
type UserProfile {
id: ID!
displayName: String
orderHistory: [OrderSummary]
}
• 클라이언트마다 필요한 데이터가 다를 때
• 여러 리소스를 한 번에 조회해야 할 때
• 스키마 기반 계약(API 명세) 관리가 필요할 때
• 관계형 데이터 조회가 많을 때
• 여러 클라이언트에서 동일 API를 다양하게 소비할 때
• API 단순 CRUD 위주일 때
• 성능/캐싱 최적화가 중요한 경우
• 내부 시스템 통신 등 정해진 데이터만 주고받을 때
• 팀에서 GraphQL 경험이 적고 학습/운영 비용이 부담될 때
RestApi 처럼 GraphQL도 형식이다.
Spring Boot에서는 spring-boot-starter-graphql로 쉽게 GraphQL 서버 구성 가능
다양한 라이브러리와 도구는 공식 사이트에서 확인 가능
https://graphql.org/community/tools-and-libraries/?tags=
참고: 얄팍한 GraphQL과 Apollo https://inf.run/YH988