2021. 4. 1. 01:50ㆍDev/Node
[클립명]
1. GraphQL이란?
2. Express연동
3. 데이터 읽기
GraphQL
이번에는 Node 웹 프로그래밍 올인원 패키지 과정 중에서 GraphQL 강의 시청을 시작하였다.
GraphQL은 페이스북에서 만든 쿼리용 언어이다. 쿼리용 언어라고 표현을 하다보니, SQL을 다뤄본 백엔드 개발자라면 'SELECT FROM USER WHERE ....' 같은 쿼리문을 떠올릴 것이다. 하지만, GraphQL은 일반 SQL과 구조가 많이 다르다.
SQL은 데이터베이스에 저장된 데이터를 효율적으로 조회하는 것이 목적이고, GraphQL은 클라이언트에서 서버로부터 데이터를 효율적으로 가져오는 것이 주 목적이다. 따라서 GraphQL의 쿼리는 주로 클라이언트단에서 작성한다.
//SQL 구조
SELECT name
, age
FROM user
WHERE id = 10
//GraphQL 구조
{
me {
name
}
}
웹애플리케이션을 개발하면 데이터베이스에 접근하여 데이터를 조회하는 로직은 백엔드 개발자가 만든다.
그리고 이렇게 만들어진 로직은 보통 REST API 형태로 구현되며, 프론트엔드 개발자는 백엔드 개발자가 설계하고 만들어준 API에 대한 명세를 받아서 개발을 진행하게 되는데, 이 때 불편한 점이 발생한다.
GraphQL과 REST API에 대해 비교해보자.
📍 REST API vs GraphQL
■ REST API
1. 추가로 필요한 데이터가 있을 때, 서버 API가 수정돼야 한다.
(ex) 화면에 이름, 나이, 별명만 보여주기로 했다가, 주소 데이터가 필요한 경우, 사용자의 데이터를 조회하는 서버 API의 로직에 주소를 가져오는 부분이 없었다면 서버 API 수정이 필요하며 백엔드 개발자가 API를 수정하여 반영해줄때까지 기다려야 한다.
2. REST API는 수많은 End-Point가 존재한다.
만약, 사용자정보와 포인트 정보가 필요한 경우, REST API에서는 아래와 같이 사용자정보를 조회하는 API와 포인트를 조회하는 API를 각각 호출하여 데이터를 조회해야 한다. (물론 한 API에 두 정보가 함께 조회되도록 할 수도 있긴 있다.)
GET /user/info/1
GET /user/point/1
3. REST API에서는 불필요한 데이터까지 모두 조회한다.
만약 사용자 이름만 조회하는 REST API가 없다면, 우리는 사용자 정보를 모두 조회하는 API를 호출해야만 하고, 이 때 리턴되는 데이터에는 불필요한 데이터까지 모두 포함되어 리턴된다.
■ GraphQL
1. 추가로 필요한 데이터가 있을 때, 서버 API를 수정할 필요가 없다.
GraphQL은 클라이언트에서 데이버베이스에 직접 접근하여 데이터를 조회하기 위해 만들어진 쿼리언어이다. 따라서, 서버 API를 수정할 필요 없이, 클라이언트단에서 GraphQL의 쿼리 부분만 수정하면 된다.
2. GraphQL은 1개의 End-Point만 존재한다.
GraphQL에는 /graphql 이라는 1개의 엔드포인트만 존재하며, 요청하는 쿼리 구조에 따라 응답이 달라진다.
3. REST API에서는 불필요한 데이터까지 모두 조회한다.
사용자 이름만 조회하고 싶다면, 요청하는 쿼리에 사용자 이름만 요청하면 된다. 불필요한 주소, 나이 같은 데이터를 응답받지 않아도 된다. 따라서, HTTP 응답의 사이즈를 줄일 수 있다.
3. 원하는 데이터를 한 번의 요청으로 얻을 수 있다.
내가 원하는 데이터가 있다면 요청하는 쿼리에 모두 담아서 한 번에 요청하는 것이 가능하다. 예를 들어, 사용자정보, 장바구니 데이터를 조회하고 싶을 때 각각의 API를 호출할 필요 없이, 쿼리에 모두 담아서 한번만 요청하면 원하는 데이터를 모두 얻을 수 있다.
'Dev > Node' 카테고리의 다른 글
[NODE 강의] AWS 프리티어 EC2 인스턴스 생성 (0) | 2021.04.08 |
---|---|
[NODE 강의] GraphQL 데이터 CRUD (0) | 2021.04.03 |
[NODE 강의] 크롤링 (Crawling) - 배송위치 추적 (0) | 2021.03.27 |
[NODE 강의] Promise (0) | 2021.03.24 |
[NODE 강의] 데이터베이스 수정, 삭제 (0) | 2021.03.19 |