반응형
Python을 활용한 REST API는 웹 서비스와 앱, 외부 시스템을 연결하는 핵심 기술입니다. 이 글에서는 API 설계 원칙부터 Flask/FASTAPI 예제, client 코드 연동, 보안 및 테스트 전략까지 실무에서 바로 활용할 수 있는 내용을 제공합니다.
1. REST API란?
- REST = Representational State Transfer
- HTTP 메서드(GET, POST, PUT, DELETE)를 통한 리소스 제어
- 무상태성(stateless), URI 기반 리소스 지정, JSON을 주로 사용
2. 설계의 핵심 원칙
- 리소스는 명사 URI로 표현 (예:
/users
,/articles/123
) - HTTP 상태 코드 사용 (200, 201, 400, 404 등)
- 요청/응답의 일관성 유지 및 에러 메시지 구조화
- 버저닝 지원 (예:
/api/v1/...
)
3. Flask 기반 REST API 구현 예시
from flask import Flask, request, jsonify
app = Flask(__name__)
items = []
@app.route('/items', methods=['GET', 'POST'])
def handle_items():
if request.method == 'POST':
data = request.json
item = {'id': len(items)+1, 'name': data['name']}
items.append(item)
return jsonify(item), 201
return jsonify(items)
@app.route('/items/', methods=['GET', 'PUT', 'DELETE'])
def handle_item(iid):
item = next((x for x in items if x['id'] == iid), None)
if not item: return jsonify({'error':'Not found'}), 404
if request.method == 'PUT':
item['name'] = request.json.get('name', item['name'])
return jsonify(item)
if request.method == 'DELETE':
items.remove(item)
return '', 204
return jsonify(item)
if __name__ == '__main__':
app.run(debug=True)
4. 클라이언트 예: requests로 API 호출
import requests
res = requests.get('http://localhost:5000/items')
print(res.json())
res = requests.post('http://localhost:5000/items', json={'name':'apple'})
print(res.status_code, res.json())
5. FastAPI vs Flask 비교
항목 | Flask | FastAPI |
---|---|---|
코드 구조 | 간단 & 유연 | 타입 힌트 기반 자동 문서화 |
API 문서 | 수동 설정 | Swagger/OpenAPI 기본 제공 |
성능 | WSGI 기반 | ASGI + 비동기 처리 |
학습 곡선 | 낮음 | 약간 높음 |
6. 보안 및 인증 적용
- HTTPS 적용 및 CORS 설정
- JWT 토큰 기반 인증 활용
- API 키 또는 OAuth 2.0 연동
7. 테스트 전략
- unit 테스트(Flask client 사용)로 엔드포인트 검증
- integration 테스트(외부 호출 포함)
- Postman이나 pytest 활용 자동화 테스트
8. 결론
Python 기반 REST API는 간단한 서비스부터 대규모 시스템까지 적용 가능한 기술입니다. API 설계를 올바르게 하고, Flask 또는 FastAPI를 선택하여 구현하며, 인증/테스트를 확보하면 안전하고 확장 가능한 백엔드를 구성할 수 있습니다.
728x90
반응형
'Python' 카테고리의 다른 글
[PYTHON] virtualenv로 파이썬 가상환경을 구성하는 완벽 가이드 (0) | 2025.07.22 |
---|---|
[PYTHON] API 개발 A‑Z : 설계부터 배포까지 실무 가이드 (0) | 2025.07.22 |
[PYTHON] Django 프로젝트를 AWS에 배포하는 완벽 가이드 (0) | 2025.07.22 |
[PYTHON] Flask와 AWS를 활용한 웹 애플리케이션 배포 가이드 (0) | 2025.07.22 |
[PYTHON] Python으로 YouTube 자동화 및 데이터 분석하는 방법 (0) | 2025.07.22 |