개념 정리

GraphQL 개념 정리

조요피 2022. 12. 12. 21:26

GraphQL 이란?

Graph Query Language.

페이스북이 GraphQL을 만들었다.

2012년부터 페이스북 앱들을 지원하고 있다.

2015년에 페이스북이 GraphQL Specification을 오픈소스화 했다.

GraphQL은 개념 또는 스펙이기 때문에 GraphQL이라는 것을 다운로드 받거나 설치할 수는 없다.

실제로 다운로드 받을 수 있는 건 GraphQL Implementations 이다.

여기서 Implementations 이란, GraphQL 스펙을 코드로 번역한 것.

즉, GraphQL은 특정 언어에 종속되지 않는다는 뜻.

GraphQL은 왜 생겨났을까?

REST API 문제를 해결하기 위한 대안으로 만들어졌다.

RESTful API란 무엇인가요?

RESTful API는 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스.

API란 무엇인가요?

다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙(인터페이스).

REST란 무엇인가요?

Representational State Transfer(REST)는 API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처.

REST 아키텍처 스타일을 따르는 API를 REST API라고 한다.

REST 아키텍처를 구현하는 웹 서비스를 RESTful 웹 서비스라고 한다.

RESTful API라는 용어는 일반적으로 RESTful 웹 API를 나타낸다.

하지만, REST API와 RESTful API라는 용어는 같은 의미로 사용할 수 있다.

REST API의 문제점

  1. Over Fetching
  2. Under Fetching

이 두 가지를 해결하기 위해 GraphQL을 만들었다!

Over Fetching

내가 원하는 것보다 많은 정보를 가져오는 것.

실제로 필요한 정보만 요청한다면 컴퓨터, 네트워크 리소스를 최소한으로 사용할 수 있다.

Under Fetching

내가 원하는 것보다 적은 정보를 가져오는 것.

하나의 페이지에 2개의 정보를 출력해야 한다면? (ex. 현재 상영중인 영화, 개봉 예정 영화)

API 호출도 2번 해야할 수 있다!

그렇다면 GraphQL이 최고인가? (GraphQL의 단점)

  1. 고정된 요청과 응답만 필요할 때에는 query로 인해 요청의 크기가 Restful보다 커질 수 있다.
  2. GraphQL 스키마에서 필드를 정확하게 모두 명시해줘야 하므로 번거로운 상황이 생긴다.
    1. DTO는 상속을 통해 필드 생략이 가능한데, GraphQL 스키마에서 필드 상속 또는 필드 생략할 수 없어서 필드를 모두 다 적어줘야 한다.
    2. Map, Object (key, value 형태) 를 사용하지 못한다.
    3. 하나의 필드만 담겨있어도 모든 응답을 객체로 만들어야 한다.
    4. REST API는 ResponseEntity, HashMap<String,Any>로 유연하게 리턴 가능한데, GraphQL은 [Friend] List<Friend>라는 의미 이런식으로 정확히 정의해야 한다.
    5. DTO의 필드명이 변경되면 GraphQL 스키마 필드를 수정해줘야 한다.
  3. 파일업로드
    1. GraphQL은 원칙적으로 multipart/from-data 형식을 받을 수 없고 application/json 형식만 받을 수 있다.
    2. GraphQL에서는 multipart -> json으로 바꿔 전달해주는 미들웨어나 패키지를 사용해야하기 때문에 까다롭다.
  4. Client에서도 모든 필드를 작성해야 한다.
    1. Client에서 스키마를 가지고 있어야 요청할 수 있다.
    2. Backend에서 필드 수정이 일어나면 Client도 다시 배포해야 한다.
    3. 즉, 장점에서 백엔드/프론트엔드 간 커플링 감소되어 유연성 증가한다고 써놨지만, 둘 다 동일한 스키마를 가지고 있어야 한다는 점에서는 여전히 커플링 되어있다고 할 수 있다.
  5. 필드 타입(스칼라 타입)이 한정적이다.
    1. 특히 HashMap이 지원이 안되기 때문에 개발할 때 불편하다.
  6. BackEnd 입장에서 설정해줄 게 너무 많다.
    1. Query/Mutation 파일에 작성한 메서드 및 리턴 타입과 스키마 파일을 무조건 동기화 시켜야하기 때문에 REST API 보다 작성할 파일이 더 많다.
  7. 백엔드 개발자로서는 REST API보다 좀 더 설정할게 많다.
  8. 스키마 파일도 작성해야해서 번거로운 부분이 있다.
  •  

feat. RedHat

  1. REST API에 친숙한 개발자의 경우 GraphQL를 학습하는 데 시간이 필요합니다.
  2. GraphQL은 데이터 쿼리의 상당 작업을 서버측으로 옮겨 서버 개발자 작업의 복잡성이 커집니다.
  3. 구현 방식에 따라 GraphQL은 REST API가 아닌 다른 API 관리 전략을 필요로 할 수 있습니다. 이는 특히 비용 제한과 가격을 고려하는 경우 특히 그렇습니다.
  4. 캐싱이 REST보다 훨씬 복잡합니다.
  5. API 유지관리자의 경우 유지 관리 가능한 GraphQL 스키마를 작성하기 위한 추가 태스크를 수행해야 합니다.

 

'개념 정리' 카테고리의 다른 글

스프링 시큐리티 정리  (0) 2023.08.21
TDD란 무엇인가?  (0) 2023.04.13
애자일(Agile) 개발 방법론  (0) 2023.03.23
자바(Java)란 무엇인가?  (0) 2021.10.04
프로그래밍(Programming)이란?  (0) 2021.07.19