728x90
반응형
Rest API
REST API는 Representational State Transfer의 약자로, 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미합니다.
- 자원 중심: 모든 자원에 고유하고 명확한 식별자가 있고, HTTP 메소드를 사용하여 자원에 대한 행위를 정의합니다.
- 행위 표현: HTTP 메소드를 통해 자원에 대한 행위를 정의합니다. 각 메소드는 명확한 의미를 가지며, GET은 조회, POST는 생성, PUT은 갱신, DELETE는 삭제를 의미합니다.
- HTTP에서 동작하기 때문에, HTTP의 특징을 모두 가지고 있습니다.
- 유니폼 인터페이스 (Uniform Interface)
- 상태를 관리하지 않음 (Stateless)
- 캐싱 가능 (Cacheable)
- 계층화 시스템 (Layered System)
Rest API 예시
GET /users: 모든 사용자 목록을 가져오기
GET /users/{id}: 특정 사용자의 상세 정보 가져오기
POST /users: 새로운 사용자 생성
PUT /users/{id}: 특정 사용자 정보 업데이트
DELETE /users/{id}: 특정 사용자 삭제
그 외 URI 작성 규칙
1. 소문자로 작성하기
GET /Users (X)
GET /users (O)
2. 언더바(_) 대신 하이픈(-)을 사용하기
GET /phone_numbers (X)
GET /phone-numbers (O)
3. 복수형으로 작성하기
GET /post (X)
GET /posts (O)
Rest API의 단점
- 표준화의 한계: REST는 일반적인 웹 기술에 의존하지만, 특정 구현에서는 표준이나 가이드라인이 부족할 수 있습니다. 이로 인해 일관성이 떨어질 수 있습니다.
- 확장성의 한계: 자원과 행위 별로 URI가 분리되기 때문에, 자원의 수가 증가할수록 관리해야 하는 URI의 수도 증가하게 되어 유지보수가 어려워질 수 있습니다.
- 유연성 부족: HTTP 메소드 종류가 제한적이기 때문에 모든 애플리케이션의 요구 사항을 충족시키기 어려울 수 있습니다.
GraphQL
GraphQL은 페이스북에서 개발한 쿼리 언어로, 클라이언트가 원하는 데이터를 요청할 수 있는 강력한 API 질의 언어입니다.
- 유연한 데이터 요청: GraphQL은 클라이언트가 필요한 데이터를 직접 지정할 수 있게 해줍니다. 클라이언트는 하나의 요청에서 필요한 필드와 관계를 지정하여 서버로부터 원하는 데이터만을 효율적으로 가져올 수 있습니다.
- 단일 엔드포인트: REST API와 달리 GraphQL은 단일 엔드포인트를 사용합니다. 클라이언트는 하나의 엔드포인트에서 모든 데이터 요청을 처리할 수 있으며, 각 요청은 복잡한 데이터 구조에 맞게 설계됩니다.
- 실시간 데이터 지원: GraphQL은 실시간 데이터를 처리할 수 있는 Subscription을 지원합니다. 이를 통해 실시간 업데이트가 필요한 애플리케이션에 유용하게 사용될 수 있습니다.
GraphQL 예시
query {
user(id: "123") {
name
email
posts {
title
content
comments {
text
}
}
}
}
-> 복수 개의 자원을 한 번에 요청할 수 있는 장점을 가지고 있습니다.
GraphQL의 단점
- 데이터 노출 위험: 클라이언트가 필요한 데이터를 직접 지정할 수 있는 GraphQL의 특성 때문에, 잘못된 설정으로 인해 민감한 데이터가 노출될 수 있습니다. 필드나 관계 설정을 신중하게 해야 하며, 사용자 권한과 데이터 접근 범위를 철저히 관리해야 합니다.
- 쿼리 폭탄: 클라이언트가 복잡하고 대량의 데이터를 한 번에 요청할 수 있는 GraphQL 쿼리를 이용하여 서버에 과도한 부하를 줄 수 있습니다. 이는 서버 성능에 큰 영향을 미칠 수 있습니다.
- 보안 취약점: GraphQL 쿼리의 동적성과 유연성 때문에, 잘못된 설정이나 취약점이 존재할 가능성이 높습니다. 예를 들어, 인증이 제대로 구현되지 않은 경우 데이터 노출의 위험이 크게 증가할 수 있습니다.
728x90
반응형
'카카오테크 부트캠프' 카테고리의 다른 글
| [카카오테크 부트캠프] React 소개 (0) | 2024.11.27 |
|---|---|
| [카카오테크 부트캠프] 7일차 회고 (0) | 2024.11.24 |
| [카카오테크 부트캠프] 에러 처리 및 디버깅 (1) | 2024.11.19 |
| [카카오테크 부트캠프] Fetch API 기본 개념 (0) | 2024.11.19 |
| [카카오테크 부트캠프] 6일차 회고 (0) | 2024.08.27 |