오늘의 주제는 FastAPI로 센서 데이터를 수신하고 저장하는 백엔드 만들기이다.
이번 실습에선 FastAPI로 센서 데이터용 REST API 서버를 만들고,
POST 요청으로 데이터를 받아 로깅하거나 추후 DB에 저장할 수 있는 구조를 만들어본다.
---
1. FastAPI란?
FastAPI는 Python 기반의 고성능 웹 프레임워크로,
비동기 지원, 자동 문서화(Swagger), Pydantic 기반 유효성 검사를 제공한다.
---
2. 개발 환경 준비
pip install fastapi uvicorn
fastapi: 핵심 프레임워크
uvicorn: ASGI 서버 (FastAPI 실행용)
---
3. 기본 FastAPI 앱 예시
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class SensorData(BaseModel):
temperature: float
humidity: float
device_id: str
@app.post("/sensor")
def receive_sensor_data(data: SensorData):
print(f"[{data.device_id}] Temp: {data.temperature}, Humid: {data.humidity}")
return {"status": "received"}
실행
uvicorn main:app --reload
main:app → 파일명:모듈명 (파일명이 main.py일 경우)
--reload → 코드 변경 자동 반영
---
4. 테스트: 센서 데이터 전송
curl 예시
curl -X POST http://localhost:8000/sensor \
-H "Content-Type: application/json" \
-d '{"temperature": 26.5, "humidity": 60, "device_id": "sensor_001"}'
결과
{
"status": "received"
}
---
5. 자동 문서 확인
Swagger: http://localhost:8000/docs
ReDoc: http://localhost:8000/redoc
→ FastAPI는 요청 파라미터와 응답 구조를 자동 문서화해줘서,
개발자끼리 API 명세서를 따로 만들 필요가 없을 정도로 편리해.
---
6. 로그 파일로 저장 예시
@app.post("/sensor")
def receive_sensor_data(data: SensorData):
with open("sensor_log.txt", "a") as f:
f.write(f"{data.device_id},{data.temperature},{data.humidity}\n")
return {"status": "saved"}
---
7. 내가 느낀 점
지금 만든 건 아주 간단하지만,
실제 IoT 서비스에서 수천 개의 센서가 데이터를 전송하는 구조의 기반이 되는 백엔드다.
FastAPI는 비동기 처리를 지원하므로 실시간 데이터 수신에 매우 적합하다.
이제 우리는 단순히 “보는 것”을 넘어서
센서 데이터를 모으고, 저장하고, 후처리할 수 있는 백엔드 구조를 갖췄다.
---
8. 참고자료
FastAPI 공식 문서 (한글 번역)
FastAPI + Pydantic 소개 블로그
Uvicorn 소개 및 실행 옵션
IoT + FastAPI 실습 예제 (GitHub)
---
15일차는 이 백엔드를 MQTT 브로커 대신 데이터 저장소 역할로 확장하거나,
DB (SQLite, PostgreSQL) 연동까지 가는 실습으로 연결될 수 있어.
갈 준비 되면 바로 가자 진성쿤!
'TIL > IoT Backend' 카테고리의 다른 글
FastAPI + SQLite 연동(센서 데이터 DB 저장) (0) | 2025.06.08 |
---|---|
Python - MQTT 토픽 구독, Publish (0) | 2025.06.07 |