- Published on
RESTful API와 Apollo 비교
- Authors
- Name
- Hyo814
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 API | Apollo (GraphQL) |
---|---|---|
엔드포인트 | 자원마다 별도 URL 사용 | 단일 엔드포인트 |
데이터 요청 방식 | 정해진 형식으로 데이터를 반환 | 클라이언트가 필요한 데이터만 요청 |
Overfetching/Underfetching | 발생 가능 | 해결 가능 |
실시간 데이터 지원 | 기본적으로 지원하지 않음 | WebSocket을 통해 지원 |
캐싱 | HTTP 캐시 사용 | 클라이언트 측 캐싱 제공 |
구현 복잡도 | 낮음 | 상대적으로 높음 |
생태계 | HTTP와 자연스럽게 통합, 도구 다양 | GraphQL 전용 도구 필요 |
RESTful API와 Apollo의 사용 사례
RESTful API를 선호하는 경우
- 간단한 CRUD 애플리케이션.
- 기존 RESTful 인프라를 활용해야 할 때.
- 복잡하지 않은 데이터 요청 및 처리.
Apollo를 선호하는 경우
- 클라이언트가 필요한 데이터만 가져와야 할 때.
- 데이터 구조가 복잡하고 Overfetching 문제가 심각할 때.
- 실시간 데이터 갱신이 필요한 애플리케이션.
- 클라이언트 측 캐싱 및 고급 상태 관리가 필요한 경우.
결론
RESTful API와 Apollo는 각각의 장단점이 있으며, 애플리케이션의 요구 사항에 따라 적합한 방식을 선택해야 합니다. 간단한 애플리케이션에는 RESTful API가 적합할 수 있으며, 데이터 구조가 복잡하거나 실시간 데이터 요구사항이 있는 경우 Apollo와 같은 GraphQL 기반 도구를 사용하는 것이 더 나을 수 있습니다.