--a052d51d3301c485 x-next-cache-tags: _N_T_/layout,_N_T_/blog/layout,_N_T_/blog/[...slug]/layout,_N_T_/blog/[...slug]/page,_N_T_/blog/restful-api%EC%99%80-apollo-%EB%B9%84%EA%B5%90 vary: RSC, Next-Router-State-Tree, Next-Router-Prefetch RESTful API와 Apollo 비교 | Hyo814`s Blog
Published on

RESTful API와 Apollo 비교

Authors
  • avatar
    Name
    Hyo814
    Twitter

RESTful API

RESTful API는 프론트엔드와 백엔드 간 데이터 교환을 위한 가장 널리 사용되는 방식 중 하나입니다. HTTP 프로토콜을 기반으로 하며, 자원을 URL로 정의하고 HTTP 메서드를 통해 작업을 수행합니다.

RESTful API의 특징

  • 자원의 표현: 모든 자원은 고유한 URL을 통해 접근합니다.
    • 예: /users는 사용자 리스트, /users/1은 특정 사용자.
  • HTTP 메서드 사용:
    • GET: 자원 조회
    • POST: 자원 생성
    • PUT: 자원 수정
    • DELETE: 자원 삭제
  • 무상태성(Stateless): 각 요청은 독립적으로 처리되며, 서버는 상태를 저장하지 않습니다.
  • 캐시 가능: 응답 데이터는 캐시 가능하도록 설계되어 성능을 향상시킬 수 있습니다.

RESTful API의 사용 예시

GET 요청

fetch('https://api.example.com/users')
  .then((response) => response.json())
  .then((data) => console.log(data))
  .catch((error) => console.error('Error:', error))

POST 요청

fetch('https://api.example.com/users', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'John Doe',
    email: 'john@example.com',
  }),
})
  .then((response) => response.json())
  .then((data) => console.log('Success:', data))
  .catch((error) => console.error('Error:', error))

RESTful API의 장단점

장점

  • 표준화된 구조로 이해 및 구현이 용이.
  • HTTP 프로토콜과 잘 맞아 브라우저와 자연스럽게 통합.
  • 캐시 사용이 용이하여 성능 최적화 가능.

단점

  • 복잡한 데이터 요청 시 다수의 엔드포인트 호출 필요.
  • Overfetching 및 Underfetching 문제 발생 가능.
    • Overfetching: 필요 이상의 데이터를 가져옴.
    • Underfetching: 필요한 데이터를 여러 요청으로 나누어야 함.

Apollo

Apollo는 GraphQL API를 구현하고 사용하는 도구로, 데이터 요청 및 관리를 더 유연하고 효율적으로 제공합니다.

Apollo의 특징

  • 단일 엔드포인트: 모든 요청은 단일 엔드포인트를 통해 처리됩니다.
  • 클라이언트 주도형 요청: 클라이언트가 필요한 데이터만 요청.
  • 실시간 데이터 지원: WebSocket을 통한 실시간 데이터 구독(subscription) 지원.
  • 캐싱: 클라이언트 측 캐싱을 통해 네트워크 요청 최소화.

Apollo의 사용 예시

GraphQL 쿼리 예시

import { gql, useQuery } from '@apollo/client'

const GET_USERS = gql`
  query GetUsers {
    users {
      id
      name
      email
    }
  }
`

function UserList() {
  const { loading, error, data } = useQuery(GET_USERS)

  if (loading) return <p>Loading...</p>
  if (error) return <p>Error: {error.message}</p>

  return (
    <ul>
      {data.users.map((user) => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  )
}

Apollo의 장단점

장점

  • 클라이언트가 필요한 데이터만 가져와 Overfetching 문제 해결.
  • 단일 엔드포인트로 관리가 간소화.
  • 실시간 데이터 구독 지원.
  • 클라이언트 측 캐싱으로 성능 최적화.

단점

  • 초기 학습 곡선이 있음.
  • RESTful API에 비해 더 복잡한 구현.
  • GraphQL 스키마를 설계하고 유지보수하는 데 추가적인 작업 필요.

RESTful API와 Apollo 비교

항목RESTful APIApollo (GraphQL)
엔드포인트자원마다 별도 URL 사용단일 엔드포인트
데이터 요청 방식정해진 형식으로 데이터를 반환클라이언트가 필요한 데이터만 요청
Overfetching/Underfetching발생 가능해결 가능
실시간 데이터 지원기본적으로 지원하지 않음WebSocket을 통해 지원
캐싱HTTP 캐시 사용클라이언트 측 캐싱 제공
구현 복잡도낮음상대적으로 높음
생태계HTTP와 자연스럽게 통합, 도구 다양GraphQL 전용 도구 필요

RESTful API와 Apollo의 사용 사례

RESTful API를 선호하는 경우

  • 간단한 CRUD 애플리케이션.
  • 기존 RESTful 인프라를 활용해야 할 때.
  • 복잡하지 않은 데이터 요청 및 처리.

Apollo를 선호하는 경우

  • 클라이언트가 필요한 데이터만 가져와야 할 때.
  • 데이터 구조가 복잡하고 Overfetching 문제가 심각할 때.
  • 실시간 데이터 갱신이 필요한 애플리케이션.
  • 클라이언트 측 캐싱 및 고급 상태 관리가 필요한 경우.

결론

RESTful API와 Apollo는 각각의 장단점이 있으며, 애플리케이션의 요구 사항에 따라 적합한 방식을 선택해야 합니다. 간단한 애플리케이션에는 RESTful API가 적합할 수 있으며, 데이터 구조가 복잡하거나 실시간 데이터 요구사항이 있는 경우 Apollo와 같은 GraphQL 기반 도구를 사용하는 것이 더 나을 수 있습니다.

--a052d51d3301c485--