🌐 REST API의 장점과 단점
REST API(Representational State Transfer API) 는 HTTP 기반으로 리소스를 URI로 표현하고, HTTP 메서드(GET, POST, PUT, DELETE 등) 를 활용하여 데이터를 주고받는 아키텍처 스타일입니다.
REST API는 웹과 모바일 애플리케이션에서 가장 많이 사용되지만, 몇 가지 단점도 존재합니다.
✅ REST API의 장점
1️⃣ 언어 및 플랫폼 독립성 (Language & Platform Independence)
- 클라이언트와 서버가 서로 다른 기술 스택을 사용할 수 있음.
- 예: 프론트엔드(React, Vue) + 백엔드(Spring, Node.js, Django 등)
- 어떤 프로그래밍 언어에서도 HTTP 요청을 보낼 수 있음 → 범용성이 높음.
2️⃣ 간단하고 직관적인 구조 (Simplicity & Readability)
- REST API는 리소스 중심의 URL 설계로 직관적임.
- HTTP 메서드를 활용하여 요청의 의미를 쉽게 파악할 수 있음.
GET /users → 모든 사용자 조회
POST /users → 새 사용자 생성
GET /users/1 → 특정 사용자 조회
PUT /users/1 → 특정 사용자 정보 수정
DELETE /users/1 → 특정 사용자 삭제
3️⃣ 클라이언트-서버 분리 (Separation of Concerns)
- 프론트엔드와 백엔드가 독립적으로 개발 가능.
- REST API가 제공되면, 모바일, 웹, 데스크톱 등 다양한 클라이언트에서 동일한 API를 사용할 수 있음.
- 백엔드 변경 없이 프론트엔드 UI를 변경 가능.
4️⃣ 무상태성 (Stateless)
- 각 요청이 독립적으로 처리되므로, 서버가 클라이언트의 상태를 저장하지 않음.
- 장점:
- 확장성(Scalability)이 뛰어남 → 여러 서버에서 요청을 분산 처리 가능.
- 로드 밸런싱이 용이 → 클라이언트의 상태를 저장하지 않아 여러 서버에서 처리 가능.
5️⃣ 캐싱(Caching) 활용 가능
- HTTP의 캐시(Cache-Control, ETag, Last-Modified) 기능을 활용할 수 있음.
- 서버 부하 감소, 성능 향상.
6️⃣ 확장성(Scalability) 및 유지보수 용이
- API 버전 관리가 가능하여, 기존 API를 유지하면서 새로운 기능을 추가할 수 있음.
GET /api/v1/users → V1 API
GET /api/v2/users → V2 API
- 마이크로서비스 아키텍처(MSA)와도 잘 어울림.
7️⃣ 보안(Security)
- OAuth, JWT, API Key 등을 활용하여 인증(Authentication) 및 권한 부여(Authorization) 가능.
- HTTPS 적용 시 데이터 암호화 가능.
❌ REST API의 단점
1️⃣ 표준이 없어서 설계 방식이 다를 수 있음
- REST API의 명확한 표준이 존재하지 않음 → 개발자마다 설계 방식이 다를 수 있음.
- 같은 기능을 다르게 설계할 가능성이 있음:
GET /users/1/orders (사용자의 주문 조회)
GET /orders?user_id=1 (동일한 기능이지만 다른 URL)
- GraphQL과 달리, 특정 요청에서 필요한 데이터만 선택적으로 받을 수 없음.
2️⃣ 오버페칭(Over-fetching)과 언더페칭(Under-fetching) 문제
- 오버페칭(Over-fetching): 필요하지 않은 데이터를 불필요하게 가져옴.
- 예: GET /users/1 요청 시, 클라이언트는 이름과 이메일만 필요하지만 모든 사용자 정보를 반환할 수도 있음.
- 언더페칭(Under-fetching): 하나의 요청으로 원하는 데이터를 모두 가져오지 못함.
- 예: GET /users/1 요청 후, 해당 사용자의 주문 목록을 가져오려면 추가 요청이 필요함.
GET /users/1
GET /users/1/orders
GET /orders/5/payments
➡ GraphQL을 사용하면 단일 요청으로 해결 가능.
3️⃣ HTTP 메서드의 제한
- REST는 기본적으로 4가지 HTTP 메서드(GET, POST, PUT, DELETE) 를 사용하지만, 일부 환경(예: 특정 방화벽, 브라우저)에서는 PUT, DELETE 요청이 차단될 수도 있음.
4️⃣ 상태 유지가 어려움 (Stateless)
- REST API는 세션(session)이나 사용자 상태를 유지하지 않음.
- 로그인 후 사용자 정보를 유지하려면 JWT, 세션, 쿠키, Redis 같은 별도의 인증 시스템이 필요.
5️⃣ 비효율적인 요청 (API 호출이 많아질 가능성)
- 복잡한 관계(예: 사용자 → 주문 → 결제 내역)가 있는 경우 여러 번의 API 요청이 필요.
GET /users/1 (사용자 정보)
GET /users/1/orders (사용자의 주문 목록)
GET /orders/5/payments (주문에 대한 결제 정보)
➡ GraphQL을 사용하면 한 번의 요청으로 해결 가능.
🎯 REST API vs GraphQL 비교
비교 항목 | REST API | GraphQL |
데이터 요청 방식 | 필요한 데이터가 정해져 있음 | 원하는 필드만 선택 가능 |
오버페칭 문제 | 있음 (불필요한 데이터 포함 가능) | 없음 (필요한 데이터만 요청 가능) |
언더페칭 문제 | 있음 (여러 요청 필요) | 없음 (한 번의 요청으로 해결 가능) |
API 버전 관리 | 버전 관리 필요 (/api/v1, /api/v2) | 필요 없음 (필드 선택 가능) |
설정 난이도 | 상대적으로 간단 | 비교적 복잡함 |
캐싱(Cache) | HTTP 캐시 활용 가능 | 별도로 구현해야 함 |
🎯 정리
구분 | REST API 장점 | REST API 단점 |
1. 언어 독립성 | 어떤 프로그래밍 언어에서도 사용 가능 | - |
2. 직관적인 URL | 리소스를 URL로 쉽게 표현 가능 | 설계 방식이 일관되지 않을 수 있음 |
3. 클라이언트-서버 분리 | 프론트엔드 & 백엔드 독립적 개발 가능 | 상태 유지(Session, Auth) 어려움 |
4. HTTP 캐싱 가능 | 서버 부하 감소 | - |
5. 확장성 | API 버전 관리 가능 | 여러 API 호출 필요 (언더페칭) |
6. 보안 | OAuth, JWT 등을 활용 가능 | HTTPS를 강제하지 않으면 보안 취약 가능 |
📌 REST API는 확장성과 단순성이 뛰어나지만, 오버페칭/언더페칭 문제를 고려해야 함
📌 GraphQL은 REST API의 단점을 보완하지만, 복잡한 설정이 필요함
📌 어떤 API를 선택할지는 프로젝트의 요구사항에 따라 결정해야 함! 🚀
반응형
'컴퓨터 과학 > 🛜 네트워크' 카테고리의 다른 글
TCP vs UDP 차이점 (0) | 2025.02.04 |
---|---|
CORS(Cross-Origin Resource Sharing)란? (0) | 2025.02.04 |
TCP/IP 4계층 모델 (0) | 2025.01.31 |
네트워크 기초 | 네트워크 프로토콜 표준화 (0) | 2024.10.13 |
네트워크 기초 | 네트워크 성능 분석 명령어 (0) | 2024.10.12 |