GraphQL: REST API의 ‘킬러’인가?

Parse에서 GraphQL 지원이 구현된 후 많은 사람들이 저에게 몇 가지 질문을 해왔고, 그 중 일부는 REST API의 미래에 대해 걱정했습니다.
GraphQL이 “죽일” 것인가요?
내 REST API 메서드는 어떻게 되나요? 코드를 다시 작성해야 하나요?

이 글에서는 이러한 질문에 대해 다룰 예정이지만, 간단히 답하자면 GraphQL이 REST API를 “죽이지”않기 때문에 걱정할 필요가 없으며 이미 작동 중인 REST API 메서드를 다시 작성할 필요도 없습니다.

그렇다면 GraphQL의 장점은 무엇일까요?

저에게 문의하는 대부분의 사람들이 오해하는 것 중 하나는 GraphQL이 백엔드 전체를 대체할 수 없다는 것입니다.

GraphQL은 백엔드를 대체하지 않습니다. 프론트엔드도 마찬가지입니다.

GraphQL은 쿼리 언어로, 찾고자 하는 정보를 API에 지정할 수 있는 방법이며, 기존 데이터에서 해당 정보를 가져오는 런타임입니다.

앱에 알아야 할 정보를 정확히 알려주고 해당 정보를 수신하는 다른 방법(더 나은 방법이라고 할 수 있습니다)일 뿐입니다.

이미 존재하고 작동 중인 REST API 메서드에 대해 걱정할 필요가 없습니다. GraphQL을 도입하더라도 지금처럼 계속 작동할 것입니다. 한 가지 주의해야 할 점은 GraphQL은 Parse 3.5.0 이상에서만 실행되므로, Parse 2.x 이하 버전에서 사용 중인 경우 Parse의 코드 구조가 변경된다는 점입니다.

따라서 Parse 3.0 이상을 사용 중이라면 전혀 걱정할 필요가 없습니다. 3.5.0 이상의 버전을 선택하기만 하면 됩니다.
Parse 2.X를 사용 중이라면 약간의 코딩 재작업이 필요합니다.

REST API가 이미 작동 중인데 왜 GraphQL을 사용해야 하나요?

이 질문도 많이 나오는데, 저는 REST API보다 GraphQL을 선택하는 데에는 몇 가지 주요 이점이 있다고 생각합니다.

단기적으로, 이미 REST API를 사용하여 애플리케이션을 작성했고 모든 요구 사항을 충족하고 있다면, 이유 때문에 GraphQL로 마이그레이션하고 코드를 다시 작성할 필요가 없습니다.

반면에 이제 막 시작했거나 애플리케이션이 진화하면서 복잡성이 커지고 향후 유지보수를 간소화할 준비를 하고자 하는 경우 GraphQL은 많은 가치를 더해줄 수 있습니다.

가치라고 하셨나요?

네, 그렇습니다.

GraphQL은 코드 개발과 유지보수를 간소화하고 데이터 전송 비용을 절감할 수 있는 몇 가지 주요 이점이 있습니다! 그래요! 제대로 읽으셨군요.

항목별로 살펴보겠습니다:

  • 코드 개발 간소화

    GraphQL을 처음 시작할 때는 코드를 조금 더 작성해야 할 수도 있습니다. 그렇다고 겁먹지 마세요.
    GraphQL을 사용하면 쿼리를 더 간단하게 작성할 수 있으며, 특히 GraphQL 콘솔을 사용하는 경우 더욱 그렇습니다. Parse가 자동으로 생성하는 스키마를 사용하고 모든 클래스에 대한 쿼리와 변형을 위한 일반 메서드와 특정 메서드를 모두 게시하면 많은 시간을 절약할 수 있습니다. 정말 큰 도움이 됩니다.
    문서가 필요하신가요? 문제 없습니다. 문서화도 저희가 도와드리겠습니다. 또한 자동으로 생성됩니다.
    또한, GraphQL을 사용하면 개발자는 Parse가 생성하는 스키마를 신뢰할 수 있으므로 사용 가능한 메서드, 각 메서드의 매개변수, 사용 가능한 반환(출력)이 무엇인지 미리 알 수 있습니다. 더 이상 해당 메서드가 무엇을 하는지, 어떤 매개변수가 필요한지, 무엇을 반환하는지 추측하거나 다른 사람에게 물어볼 필요가 없습니다. 이 모든 것이 여러분을 위해 준비되어 있습니다.

screen-shot-2019-08-01-at-14-25-42

  • 유지 관리 간소화

    GraphQL을 사용한 유지관리는 매우 쉽습니다. API에 대한 호출은 본질적으로 동일하므로 전달한 쿼리나 변형을 변경하거나, 반환되는 값이나 매개변수를 추가하거나 제거하는 것은 쿼리나 변형을 변경하여 수신하거나 전달하는 것만큼이나 쉽습니다.
    많은 호출, 블록 또는 프로미스를 변경할 필요가 없습니다. 쿼리 또는 변형을 변경하세요: 완료!

  • 데이터 전송 비용 절약

    Back4app에서 일하다 보면 고객이 코드를 최적화하여 더 빠른 응답을 얻을 수 있도록 도와주는 일이 꽤 흔합니다. 그리고 고객의 코드에서 발견한 모든 문제 중 대부분은 애플리케이션에 현재 필요하지 않은 데이터를 검색하기 때문이었습니다.
    REST API나 심지어 Parse 프레임워크를 다룰 때 가장 흔한 실수는 객체에 대한 전체 정보를 검색한 다음 그 정보의 일부만 사용하는 것입니다. 예를 들어
    이름, 전화, 주소, 주민등록번호, 이메일 등 몇 가지 속성을 가진 Person이라는 클래스가 있다고 가정해 보겠습니다.
    일반적으로 REST API 또는 Parse 프레임워크를 사용하는 사람들은 전체 Person 개체를 쿼리하여 모든 속성을 검색한 다음 그 중 한두 개만 사용하려고 합니다.
    GraphQL을 사용하면 검색해야 하는 정보를 정확히 지정해야 하므로 개발자는 불필요한 정보를 검색할 기회가 없어 페이로드가 훨씬 줄어들고, 이는 곧 응답 속도와 데이터 요금제 사용량, 아웃바운드 트래픽이 전반적으로 줄어드는 결과로 이어집니다. 얼마나 멋진 일인가요?

사용해 보기

GraphQL이 개발 프로세스에 가져올 수 있는 이점을 확인하는 가장 좋은 방법은 직접 사용해 보는 것입니다.
다음은 몇 가지 시나리오를 통해 어떻게 작동하는지 확인할 수 있는 방법입니다:

  • 검색할 내용을 정확히 지정하지 않고 GraphQL 쿼리를 만들어 보세요.

    그렇게 할 수 없습니다. 원하는 항목을 지정하라는 메시지가 표시되고 해당 항목만 검색됩니다. 그 외에는 아무것도 검색하지 않습니다.
    사용자나 개발자가 이를 잊어버리면 GraphQL은 이를 허용하지 않습니다.

screen-shot-2019-08-01-at-16-30-01검색 중인 항목이 누락됨

screen-shot-2019-08-01-at-16-30-20이제 됐어요!

  • 쿼리를 사용하여 개체를 변경해 보세요.

    안 됩니다. 무언가를 변경하고 싶으신가요? 올바른 방법을 사용하세요: Mutation.
    사용자나 개발자가 잘못된 방법을 사용하면 GraphQL이 계속 진행하도록 허용하지 않습니다.

screen-shot-2019-08-01-at-16-37-38데이터를 변경하기 위한 쿼리? 아뇨, 아뇨!

screen-shot-2019-08-01-at-16-37-47Mutation이 해결해 드립니다!

  • 여러 개체. 여러 쿼리? 아니요! 하나의 쿼리!

    GraphQL을 사용하면 단 한 번의 쿼리로 여러 개체에 대한 정보를 매우 쉽게 검색할 수 있으므로 개발이 간소화되고 코드 오류 발생 가능성이 줄어듭니다.
    Person 클래스가 있고 그 사람이 Dog 클래스의 개를 가질 수 있다고 가정해 보세요. 이 두 클래스에서 사람의 이름과 나이, 개의 이름과 품종 등의 정보를 검색해야 합니다. 간단합니다:

screen-shot-2019-08-01-at-16-43-36

 

버전 관리? 무엇을 위해?

버전 관리 코드는 2018년 버전입니다.
쿼리에 새 필드를 추가하세요. 이전 호출은 계속 작동합니다:

screen-shot-2019-08-01-at-16-56-44
다음과 같이 작동합니다.

screen-shot-2019-08-01-at-16-58-00
이것도 작동합니다. 이전 유형에 대한 호출은 계속 작동합니다.

더 이상 사용되지 않는 필드라고 하셨나요? 그것도 쉽습니다:

screen-shot-2019-08-01-at-16-47-45

결론

GraphQL은 무언가를 죽이려는 것이 아닙니다. 기존 작업을 수행하는 새로운 방법을 제공하기 위한 것입니다. 더 좋고, 더 빠르고, 유지보수가 더 쉽고, 오류가 덜 발생합니다.

실수할 때에도 계속 추적할 수 있습니다. 할 수 있는 일과 할 수 없는 일을 알려줍니다.

Parse와 자동 생성된 메서드(일반 및 특정 메서드 모두) 및 문서와 함께 사용하면 쉽게 배울 수 있습니다.

한 번도 사용해 보지 않았다면 꼭 해보세요. 모든 멋진 아이들이 하고 있으니까요.

GraphQL과 REST에 대해 더 자세히 알고 싶으시다면 Medium 게시물을 참조하세요.

GraphQL이 REST API를 없앨까?

이 질문에 대한 답은 절대 “아니요”입니다. 이미 작동 중인 REST API에는 아무런 문제가 없습니다. GraphQL로 마이그레이션한 후에도 변경되지 않습니다. 하지만 한 가지 예외가 있습니다. Parse 3.5.0 이상 버전에서는 작동합니다. 따라서 이보다 낮은 버전의 Parse를 사용하는 경우 약간의 코딩이 필요합니다.

GraphQL에 대한 오해는 무엇인가요?

다음은 몇 가지 주요 오해입니다.
– GraphQL은 백엔드를 대체하기 위한 것이 아닙니다.
– GraphQL은 언어가 아니라 도구입니다.
GraphQL은 API에 사용자가 찾고 있는 정보와 데이터에서 얻을 수 있는 정보를 알려주는 쿼리 언어라는 점을 알아야 합니다.

GraphQL은 어떻게 코드에서 오류를 줄이는 데 도움이 될까요?

GraphQL을 시작할 때 필요한 추가 코딩 줄에 대해 걱정하지 마세요. 향후 작업을 훨씬 수월하게 진행할 수 있습니다.
가장 큰 장점은 단 하나의 쿼리로 여러 객체에 대한 정보를 얻을 수 있다는 것입니다. 여러 객체에 대한 정보를 얻기 위해 별도의 쿼리를 작성할 필요가 없습니다. 시간을 절약할 뿐만 아니라 코드 실수도 방지할 수 있습니다.


Leave a reply

Your email address will not be published.