최근 여러 면접을 보며 '이 기술 써보셨나요?'라는 질문을 받을 때 '아뇨'라고 대답하는게 너무 고통스러웠다.
물론 지원하는 모든 회사의 기술을 다 섭렵하는건 어렵겠지만, 그래도 자주 보이는 기술에 대해 '사용법 정도는 압니다'라고 대답할 수 있도록 이것 저것 더 다채롭게 건드려보기로 했다.
우선 가장 최근 고통을 안겨줬던 GraphQL부터 시작이다.
왜 사용할까?
한 마디로 축약하자면 REST API의 불편한 점을 해결하기 위해서이다.
REST API의 문제점들은 다음과 같다.
- Overfetching: 불필요한 데이터까지 가져오기 때문에 추가 비용이 발생한다.
- Underfetching: 필요한 데이터를 온전히 가져오기 위해 여러 번 추가 요청이 필요할 수 있다.
- URL 관리의 어려움: 요구사항이 복잡해지거나 URL을 통해 버전 관리를 할 경우 endpoint 수가 크게 늘어나며 관리가 어려워질 수 있다.
GraphQL은 다음과 같은 특징을 이용해 위 문제들을 해결한다.
- Client-side에서 필요한 데이터를 선언형 방식의 요청으로 한 번에 필요한 데이터만을 가져올 수 있다. 이를 통해 overfetching/underfetching 문제를 해결한다.
- 단일 endpoint를 사용한다. 따라서 endpoint 관리에 대한 고민을 할 필요가 없어진다.
GraphQL vs. REST API
언뜻 보면 REST API보다 GraphQL이 마냥 좋아보일 수 있다. 하지만 무엇이던지 trade-off는 존재한다.
GraphQL의 장점은 앞서 설명한대로 overfetching/underfetching 문제 해결과 단일 endpoint의 간편한 사용이다.
반대로 단점은 REST API 대비 백엔드 구현이 복잡해지고 요청의 depth가 깊어지면 오히려 REST API 보다 요청/응답이 무거워질 우려가 있다는 것이다. 또한, 파일 업로드나 캐싱을 위해 별도의 미들웨어를 사용해야 한다는 점과 보안에 취약하다는 단점도 있다.
따라서 프로젝트의 특성에 따라 사용 여부를 결정해야 한다.
GraphQL이 유리한 케이스
- 서비스가 크고 복잡해 여러 연관된 데이터의 처리가 필요한 경우
- 여러 컴포넌트가 비슷하지만 조금씩 다른 데이터를 필요로 할 경우
- 데이터 요청/응답을 최소화해야 하는 경우
REST API가 유리한 케이스
- 서비스 규모가 작고 비교적 간단한 요청만 필요로 할 경우
- 이미지나 비디오와 같은 파일의 업로드/다운로드
- 보안성을 필요로 하는 경우
튜토리얼
유튜브 Net Ninja 채널의 GraphQL 코스를 따라해보면 약 1.5시간 정도만에 간단한 CRUD 맛보기가 가능하다.
GraphQL를 제대로 공부하기 전 기술에 대한 전체적인 윤곽을 살펴보고 싶다면 아래 링크의 재생 목록을 쭉 따라해보길 추천한다.
https://www.youtube.com/watch?v=xMCnDesBggM&list=PL4cUxeGkcC9gUxtblNUahcsg0WLxmrK_y