이번 프로젝트에서는 RESTful API를 개발하고 이를 다양한 시나리오에서 호출 및 테스트하는 과정을 진행했습니다.
API 호출 시 단순한 응답 확인이 아닌 Header 내 토큰 처리, 다양한 인증 방식 적용, 에러 핸들링 등의 과정을 유연하게 다루기 위해 Python을 활용했습니다.
Postman 같은 GUI 기반 도구보다 Python이 더욱 효과적인 이유는 다양한 테스트 케이스를 자동화할 수 있기 때문입니다.
🔥 주요 내용
- API 테스트 방식 결정: Postman vs. Python
- Python을 활용한 API 호출 및 인증 테스트
- 로컬 환경에서 실행 실패 (Jupyter Notebook, Python 버전 문제)
- AWS EC2에서 Python 기반 API 서버 구축
- Flask 기반 API 개발 및 Spring Boot 연동
- API 호출 중 발생한 문제 해결 과정 (CORS, 인증, 보안 등)
- API 호출 결과를 Thymeleaf에서 시각화
Postman | Python |
---|---|
GUI 기반 도구로 직관적인 테스트 가능 | 코드 기반으로 다양한 테스트 케이스 적용 가능 |
Header, Body, Params 쉽게 입력 가능 | 반복적인 테스트를 자동화할 수 있음 |
데이터 저장 기능 있지만, 커스텀 로직 적용 어려움 | API 응답을 활용하여 동적 요청 가능 |
대량 테스트 및 시뮬레이션 어려움 | 복잡한 인증 프로세스 (JWT, OAuth 등) 쉽게 적용 가능 |
✅ 결론: Postman은 단순한 API 테스트에 적합하지만, Header 내 동적 토큰 활용, 자동화된 테스트, 다양한 인증 방식 적용 등의 유연성을 위해 Python을 선택했습니다.
API 테스트 중 중요한 부분은 인증 처리 및 다양한 시나리오 테스트였습니다.
특히, JWT 토큰을 Header에 삽입하여 연속적인 API 호출을 처리하는 과정을 구현해야 했습니다.
import requests
# 1️⃣ 로그인 API 호출하여 JWT 토큰 발급
login_url = "http://example.com/api/users/login"
login_data = {"username": "testuser", "password": "password123"}
response = requests.post(login_url, json=login_data)
token = response.json().get("accessToken") # 토큰 추출
# 2️⃣ 발급받은 토큰을 Header에 삽입하여 API 호출
headers = {"Authorization": f"Bearer {token}"}
user_info_url = "http://example.com/api/users/profile"
response = requests.get(user_info_url, headers=headers)
print(response.json()) # 사용자 정보 출력
pip
패키지 설치 시 externally-managed-environment
오류 발생venv
)python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/run-python', methods=['GET'])
def run_python():
output = "! 요구사항에 안 맞는 아이디\n\n============ 1. 회원가입 테스트 ============\n회원가입 응답:\n{\"status\":\"fail\",\"data\":\"아이디는 최소 4자 이상, 최대 10자 이하여야 합니다.\"}\n! 요구사항에 안 맞는 비밀번호\n\n"
return jsonify({"output": output})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
http://<EC2_IP>:5000/run-python
에서 실행 가능CORS
설정 추가from flask_cors import CORS
CORS(app)
headers = {"Authorization": f"Bearer {token}"}
requests.get(user_info_url, headers=headers)
<pre id="result">결과를 불러오는 중...</pre>
<button onclick="fetchPythonResult()">결과 가져오기</button>
<script>
async function fetchPythonResult() {
try {
const response = await axios.get("/api/python/python-result");
let resultText = response.data.output;
document.getElementById("result").textContent = resultText;
} catch (error) {
console.error("Error fetching Python result:", error);
}
}
</script>
✅ Postman 대신 Python을 사용하여 API 테스트 자동화
✅ EC2에서 Python API 서버 실행, Flask API 배포
✅ Spring Boot와 연동하여 API 호출 및 응답 시각화
✅ JWT 인증 및 다양한 API 호출 시나리오 테스트 가능