> 웹 프론트엔드 > JS 튜토리얼 > REST에서 GraphQL로: 전환한 이유와 방법

REST에서 GraphQL로: 전환한 이유와 방법

Susan Sarandon
풀어 주다: 2024-12-31 20:48:14
원래의
956명이 탐색했습니다.

REST API 구축 경험이 4년인 소프트웨어 엔지니어로서 저는 REST가 테이블에 제공하는 단순성과 안정성을 항상 높이 평가해 왔습니다. 엔드포인트를 설계하든 응답을 구조화하든 REST는 제가 선호하는 솔루션이었습니다.

그러나 올해 초 모든 것이 바뀌었습니다. 저는 크고 복잡하며 상호 연관된 데이터 소스를 처리해야 하는 프로젝트에 뛰어들라는 임무를 받았습니다. 이는 단순히 사용자 목록을 가져오거나 단일 레코드를 업데이트하는 것이 아니라 유연성, 정확성 및 REST가 제공하기 힘든 규모의 효율성을 제공합니다.

GraphQL을 입력하세요. ?

처음에는 회의적이었습니다. 깨지지 않은 것을 왜 고치나요? 하지만 더 깊이 파고들수록 GraphQL은 프로젝트의 요구 사항을 충족할 뿐만 아니라 API에 대한 제가 생각하는 방식을 재정의했습니다. 다음과 같은 기능을 제공합니다.

  • 클라이언트가 정의한 유연한 구조로 데이터를 반환합니다.
  • 단일 URL 엔드포인트를 통해 작동합니다.
  • 강력한 유형의 스키마를 기반으로 잘못된 요청을 거부하고
  • 미리 결정되고 상호 이해되는 형식으로 데이터를 전달합니다.

GraphQL은 빠르게 단순한 솔루션 이상의 역할을 했으며 API 디자인에 대한 새로운 표준이 되었습니다.

그렇지만 이 글의 목적은 GraphQL을 선호하여 REST API의 평판을 떨어뜨리지 않는 것입니다. 사실 저는 이 둘이 서로를 아름답게 보완할 수 있다고 믿습니다. REST는 내 프로젝트에서 여전히 중요한 역할을 하며, 특히 GraphQL 쿼리보다 전용 REST 엔드포인트가 더 실용적인 특정 사용 사례의 경우 더욱 그렇습니다.

이 기사에서 공유할 내용은 다음과 같습니다.

  1. REST에서 GraphQL로 전환한 이유,
  2. 제가 직접 경험한 혜택, 그리고
  3. 첫 번째 GraphQL 서버를 구축하는 데 도움이 되는 간단한 가이드.

GraphQL에 대해 호기심이 있는 초보자이든 전환을 원하는 숙련된 엔지니어이든 관계없이 이 기사에서는 GraphQL이 주목할만한 이유와 REST를 완전히 대체하지 않고도 프로젝트를 변화시킬 수 있는 방법을 보여줍니다.

REST에서 GraphQL로의 여정

수년 동안 REST API는 제 빵과 버터였습니다. 저는 강력한 시스템을 구축하고, 데이터를 관리하고, 기능을 제공하기 위해 이들에게 의존했습니다. 하지만 내 프로젝트가 점점 복잡해지면서 균열이 나타나기 시작했습니다.
From REST to GraphQL: Why and How I Made the Switch

REST API의 과제

반복적으로 발생하는 불만 중 하나는 데이터를 너무 많이 가져오거나 적게 가져오는 것이었습니다. 필요하지 않은 정보를 너무 많이 얻거나 내가 한 모든 정보를 얻으려면 여러 번 요청해야 했습니다. 복잡성에 추가된 수많은 엔드포인트를 관리하면 업데이트와 유지 관리가 번거로워집니다.

GraphQL 알아보기

올해 초 저는 상호 연결된 대규모 데이터 소스를 처리해야 하는 프로젝트에 참여했습니다. REST는 이에 맞지 않았고 팀에서는 GraphQL을 제안했습니다. 처음에는 회의적이었지만 단일 엔드포인트에서 필요한 것이 무엇인지 정확하게 쿼리할 수 있다는 사실이 흥미를 끌었습니다.

GraphQL의 첫인상

GraphQL을 시작하는 데 어려움이 없지는 않았습니다. 스키마와 확인자는 어렵게 느껴졌지만 그것이 제공하는 유연성과 제어력 덕분에 노력할 가치가 있었습니다. 시간이 지남에 따라 REST가 직면한 문제점을 얼마나 원활하게 해결했는지 깨달았습니다.

저는 여전히 특정 사례에 REST를 사용하지만 복잡하고 동적인 데이터 요구 사항을 처리하기 위해 GraphQL을 선호하는 도구가 되었습니다.

From REST to GraphQL: Why and How I Made the Switch

전환을 한 이유

GraphQL에 대해 더 자세히 살펴보면서 몇 가지 주요 이점이 눈에 띄어 전환이 매우 간편해졌습니다.

  • 유연성: GraphQL을 사용하면 필요한 데이터를 정확하게 가져올 수 있습니다. 그 이상도 그 이하도 아닙니다. 더 이상 여러 엔드포인트를 저글링하거나 초과 가져오기를 처리할 필요가 없습니다.
  • 효율성: 단일 쿼리가 여러 REST API 호출을 대체하여 성능을 대폭 향상시킬 수 있습니다. 이는 복잡하고 상호 연관된 데이터가 있는 애플리케이션에 특히 영향을 미쳤습니다.
  • 개발자 경험: 강력한 형식의 스키마, 내부 검사, 향상된 디버깅 도구 덕분에 개발이 더욱 원활해지고 오류 발생 가능성이 낮아졌습니다.
  • 생태계 및 커뮤니티 지원: Apollo Client 및 GraphQL과 같은 도구를 사용하면 경험이 풍부해져서 GraphQL을 더 쉽게 배우고 내 워크플로에 통합할 수 있습니다.

전환 방법

여정에 어려움이 있었던 것은 아니었지만, 여러 단계로 나누어 전환을 관리하기 쉽게 만들었습니다.

1단계: GraphQL 기본 이해

핵심 개념을 익히는 것부터 시작했습니다.

  • 데이터를 가져오기 위한 쿼리.
  • 데이터를 수정하는 변이.
  • 리졸버 스키마 정의를 실제 데이터 소스에 연결합니다.

이러한 기본적인 이해는 제가 첫 GraphQL 서버를 구축하는 데 핵심이었습니다.

2단계: 첫 번째 GraphQL 서버 구축

실습을 위해 Node.js와 Apollo Server를 사용하여 간단한 서버를 구축했습니다. 프로세스는 다음과 같습니다.

  1. Node.js 프로젝트 설정: npm init로 프로젝트를 초기화하고 필수 종속성을 추가했습니다.
  2. GraphQL 종속성 설치: apollo-server 및 graphql을 설치했습니다.
  3. 기본 스키마 및 해석기 작성: 데이터를 설명하기 위한 스키마를 정의하고 이를 가져오기 위한 해석기를 작성했습니다.
  4. 서버 실행: GraphQL을 사용하여 서버를 실행하고 쿼리를 테스트했습니다.

처음으로 작동하는 모습을 보니 짜릿하셨나요? 그 노력이 가치 있다고 느껴지게 만들었습니다.

3단계: 기존 REST API 전환

다음 단계는 GraphQL을 기존 REST 기반 프로젝트에 통합하는 것이었습니다. 저는 점진적인 접근 방식을 따랐습니다.

  1. GraphQL 쿼리 또는 변형으로 대체할 주요 REST 엔드포인트를 식별했습니다.
  2. 해당 GraphQL 스키마 및 해석기를 구축했습니다.
  3. 안정성을 보장하기 위해 전환 중에 GraphQL과 함께 REST 엔드포인트를 유지했습니다.

이 하이브리드 접근 방식을 통해 기존 기능을 방해하지 않고 GraphQL을 점진적으로 출시할 수 있었습니다.

빠른 시작 가이드: 첫 번째 GraphQL 서버 구축

GraphQL을 시작하는 것은 생각보다 간단합니다. Node.js와 Apollo Server를 사용하여 기본 서버를 설정하는 빠른 가이드는 다음과 같습니다.

1단계: 종속성 설치

Node.js 프로젝트를 초기화하고 필요한 패키지를 설치하는 것으로 시작하세요.

npm init -y  
npm install apollo-server graphql  
로그인 후 복사

2단계: 스키마 및 확인자 정의

index.js라는 파일을 만들고 다음 코드를 추가하세요.

const { ApolloServer, gql } = require('apollo-server');  

// Simulated user data  
const users = [  
  { id: '1', name: 'John Doe', email: 'john@example.com' },  
  { id: '2', name: 'Jane Smith', email: 'jane@example.com' },  
  { id: '3', name: 'Alice Johnson', email: 'alice@example.com' },  
];  

// Define schema  
const typeDefs = gql`  
  type User {  
    id: ID  
    name: String  
    email: String  
  }  

  type Query {  
    users: [User]  
    user(id: ID!): User  
  }  
`;  

// Define resolvers  
const resolvers = {  
  Query: {  
    users: () => users,  
    user: (_, { id }) => users.find((user) => user.id === id),  
  },  
};  

// Create server  
const server = new ApolloServer({ typeDefs, resolvers });  

// Start server  
server.listen().then(({ url }) => {  
  console.log(`? Server ready at ${url}`);  
});  
로그인 후 복사

3단계: 서버 실행 및 테스트

다음을 사용하여 서버를 시작하세요.

node index.js  
로그인 후 복사

브라우저나 GraphQL과 같은 도구에서 제공된 URL을 열고 쿼리를 테스트하세요.

모든 사용자 쿼리:

query {  
  users {  
    id  
    name  
    email  
  }  
}  
로그인 후 복사

ID별 단일 사용자 조회:

query {  
  user(id: "1") {  
    name  
    email  
  }  
}  
로그인 후 복사

From REST to GraphQL: Why and How I Made the Switch
축하해요?? 방금 첫 번째 GraphQL 서버를 구축했습니다!

배운 교훈

GraphQL로 전환하면서 귀중한 교훈을 얻었습니다.

잘된 점

  • 전환을 통해 데이터 가져오기 효율성이 크게 향상되었습니다. 더 이상 너무 적게 가져오거나 너무 많이 가져오지 마세요!
  • 강력한 형식의 스키마를 사용하면 런타임 오류가 줄어들고 디버깅이 더 쉬워졌습니다.
  • Apollo 클라이언트와 같은 생태계의 도구는 개발자 생산성을 향상했습니다.

내가 다르게 할 것

  • 점진적으로 배우기: 나는 머리부터 뛰어들었는데 정말 압도적이었습니다. 단계적인 접근 방식을 취하고 쿼리와 변형에 먼저 초점을 맞추는 것이 더 순조로웠을 것입니다.
  • 작게 시작: 워크플로에 대한 느낌을 얻기 위해 단일 REST 엔드포인트를 GraphQL로 바꾸는 것부터 시작하겠습니다.

다른 사람들을 위한 조언

  • REST를 완전히 포기하지 마세요: REST와 GraphQL은 공존할 수 있습니다. 간단한 작업에는 REST를 사용하고 복잡하고 상호 관련된 데이터 요구 사항에는 GraphQL을 사용하세요.
  • 커뮤니티 활용: GraphQL은 활발한 커뮤니티와 우수한 리소스를 보유하고 있습니다. 주저하지 말고 도움을 구하거나 다른 사람의 경험으로부터 배우십시오.

GraphQL로 전환하는 것은 단순히 도구를 바꾸는 것이 아니라 데이터와 상호 작용하는 방식을 다시 생각하는 것입니다. 작게 시작하고, 실험하고, 여행을 즐겨보세요!

REST와 GraphQL: 빠른 비교

REST와 GraphQL 중 하나를 선택할 때 주요 차이점을 이해하면 프로젝트에 적합한 선택을 하는 데 도움이 될 수 있습니다. 간단한 분석은 다음과 같습니다.

기능 REST API GraphQL
Feature REST API GraphQL
Data Fetching Fixed data structure for endpoints; can lead to over-fetching or under-fetching. Flexible queries; fetch exactly what you need.
Endpoint Management Multiple endpoints for different resources. Single endpoint for all queries and mutations.
Flexibility Limited flexibility; requires custom endpoints for specific data needs. Highly flexible; client defines data requirements.
Type Safety Relies on documentation; no built-in type enforcement. Strongly-typed schema ensures predictable data.
Error Handling Custom error formats; inconsistent across APIs. Standardized error responses from schema validation.
Tooling Varied and often endpoint-specific tools. Rich ecosystem with tools like Apollo, GraphQL, and Relay.
데이터 가져오기 엔드포인트의 고정 데이터 구조. 과도하게 가져오거나 적게 가져오는 것으로 이어질 수 있습니다. 유연한 쿼리; 필요한 것을 정확하게 가져오세요. 엔드포인트 관리 다양한 리소스에 대한 여러 엔드포인트. 모든 쿼리 및 변형에 대한 단일 엔드포인트. 유연성 제한된 유연성; 특정 데이터 요구에 맞는 사용자 정의 엔드포인트가 필요합니다. 매우 유연합니다. 클라이언트는 데이터 요구사항을 정의합니다. 유형 안전 문서에 의존합니다. 내장된 유형 적용이 없습니다. 강력한 유형의 스키마는 예측 가능한 데이터를 보장합니다. 오류 처리 사용자 정의 오류 형식; API 전반에 걸쳐 일관성이 없습니다. 스키마 검증의 표준화된 오류 응답. 도구 다양하고 종종 엔드포인트별 도구입니다. Apollo, GraphQL, Relay와 같은 도구를 갖춘 풍부한 생태계

REST API는 안정적이고 널리 지원되지만 GraphQL은 복잡하고 상호 연관된 데이터와 유연성이 필요한 시나리오에서 빛을 발합니다.
이전 기사에서 차이점을 자세히 알아보세요

결론

REST에서 GraphQL로 전환한 것은 제게 획기적인 변화였습니다. 유연성, 효율성 및 향상된 개발자 경험 덕분에 내 프로젝트는 더욱 강력해지고 확장 가능해졌습니다. 즉, 저는 REST API와 GraphQL이 공존하여 다양한 사용 사례에 대해 서로를 보완할 수 있다고 굳게 믿습니다.

전환을 고려하고 있다면 소규모로 시작하여 실험하고 점진적으로 GraphQL을 스택에 통합하는 것이 좋습니다. 이는 착수할 가치가 있는 여정이며, 여러분이 어떻게 이를 자신만의 것으로 만들 수 있을지 기대됩니다.

시작하기 위한 리소스

다음은 GraphQL을 이해하는 데 도움이 되는 몇 가지 도구와 가이드입니다.

  • GraphQL 문서
  • Apollo 서버 가이드
  • GraphQL 플레이그라운드

From REST to GraphQL: Why and How I Made the Switch

여기 벤틸 ?
REST에서 GraphQL로 전환했습니까, 아니면 전환을 고려하고 있습니까? 그 과정에서 어떤 어려움이나 성공을 경험했나요? 아래 댓글을 통해 여러분의 생각, 질문, 경험을 자유롭게 공유해 주세요. 함께 성장하고 배워요! ?

위 내용은 REST에서 GraphQL로: 전환한 이유와 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿