지금 REST API로 서비스를 만들고 있는데 프론트 화면이 복잡해지면서 좀 답답한 지점이 생겼습니다. 목록 화면에서는 유저 이름만 필요한데 /users/1 엔드포인트가 프로필 전체를 다 내려줘서 필요 없는 필드까지 받는 오버페칭이 생기고, 반대로 유저랑 그 유저가 쓴 글 제목까지 같이 보여주려면 유저 부르고 글 목록 또 부르고 해서 요청이 계속 늘어나는 언더페칭(사실상 N+1)도 생기더라고요.
그래서 GraphQL이 대안으로 자주 나오길래 봤는데, 클라이언트가 필요한 필드만 딱 지정해서 한 번의 요청으로 가져올 수 있다는 게 매력적이더라고요.
query {
user(id: 1) {
name
posts {
title
}
}
}
이렇게 하면 위에서 말한 오버/언더페칭 둘 다 깔끔하게 해결되는 것처럼 보이는데, 실제로 도입하신 분들 보면 마냥 좋지만은 않다는 얘기도 있더라고요. 쿼리 복잡도라든가 캐싱이 REST보다 까다롭다든가 하는 트레이드오프가 있다고요. 규모가 아주 크지 않은 서비스에서도 REST 버리고 GraphQL로 가는 게 이득일까요, 아니면 필요한 부분만 부분적으로 도입하는 게 나을까요? 경험담 듣고 싶습니다.