Releases: Qualcomm-Capstone/backend
Releases · Qualcomm-Capstone/backend
Release v2.1.0
v2.1.0 - 오픈소스 모니터링 스택 전환
DataDog/Terraform 기반 모니터링을 오픈소스(Prometheus, Grafana, Jaeger, Loki) 스택으로 전면 교체한 릴리즈입니다.
📊 모니터링 스택 전환 (DataDog → 오픈소스)
- DataDog Agent, Terraform, Makefile 완전 제거
- OpenTelemetry + django-prometheus 기반으로 계측 전환
ddtrace→opentelemetry-instrumentCLI 자동 계측- Django HTTP 메트릭
/metrics엔드포인트 노출
- docker-compose.monitoring.yml 신규 추가:
- OTel Collector (트레이스/메트릭 수집 허브)
- Jaeger (분산 트레이싱)
- Prometheus (메트릭 수집/저장)
- Grafana (통합 대시보드)
- Loki + Promtail (로그 집계)
- mysqld-exporter, celery-exporter (인프라 메트릭)
- cAdvisor (컨테이너 리소스, Linux 전용)
- K6 (HTTP 부하 테스트, on-demand)
🧪 성능 테스트 도구
- K6 HTTP 부하 테스트: REST API 엔드포인트 검증 (smoke → average_load → spike 시나리오)
- MQTT 파이프라인 부하 테스트: Raspberry Pi 카메라 시뮬레이션 (MQTT → Detection → OCR → Alert 전체 파이프라인)
- K6 결과를 Prometheus Remote Write로 자동 기록
📄 문서
- docs/MONITORING.md: 모니터링 아키텍처, 서비스 구성, PromQL 쿼리, 트러블슈팅
- docs/PERFORMANCE_TEST_GUIDE.md: 성능 테스트 종합 가이드 (k6 + MQTT, End-to-End 검증 체크리스트)
- docs/DEPLOYMENT.md: GCP 멀티 인스턴스 배포 가이드 전면 재작성 (6개 인스턴스, host 모드, 모니터링 스택 포함)
🔧 설정 및 안정성 개선
- Loki 429 에러 수정 (
max_global_streams_per_user: 10000) - OTel 로깅 KeyError 수정 (Django LOGGING
defaults추가) OTEL_TRACES_SAMPLER값 수정 (parentbased_always_on)- Promtail trace_id regex 대소문자 hex 지원
- Grafana Loki→Jaeger 트레이스 연동 수정
- cAdvisor macOS 호환성 (
profiles: [linux]) - celery-exporter, mysqld-exporter 크로스 파일 의존성 처리 (
restart: unless-stopped) - 불필요한 파일 제거 (rabbitmq.conf, enabled_plugins, PERFORMANCE_TEST.md)
⚠️ Breaking Changes
- DataDog 관련 환경변수(
DD_*) 더 이상 사용하지 않음 ddtrace→opentelemetry-*패키지로 교체- Makefile 제거 (Terraform 관련 타겟 포함)
- 모니터링 실행 시
-f docker-compose.monitoring.yml추가 필요
Release v2.0.1
v2.0.1 - FCM 토픽 알림 및 안정성 개선
대시보드 FCM 토픽 기반 알림 전환과 전반적인 코드 품질 개선을 포함하는 마이너 릴리즈입니다.
🔔 FCM 토픽 알림 지원
- FCMClient에 토픽 메서드 추가:
subscribe_to_topic(),send_to_topic() - 대시보드 FCM 토큰 등록 시
dashboard_alerts토픽에 자동 구독 - 대시보드 토픽 브로드캐스트 + 차량 개별 푸시 이중 구조로 개편
- 모든 완료된 감지에 대해
send_notification호출 (차량 매칭 여부 무관)
🔧 알림 태스크 안정성 개선
- 알림 태스크 에러 핸들링 및 재시도 로직 강화
- 중복 알림 방지 로직 추가 (
fcm_token="topic:dashboard_alerts")
🧹 코드 품질 개선
- 불필요한 코드 및 미사용 import 정리
- Black 포매터 적용으로 코드 스타일 통일
- Flake8 린트 오류 수정
📊 운영 안정성
- OCR 성능 및 재시도 핸들링 개선
- MQTT 프로세스 관리 개선
- 프로덕션 설정(prod.py) MSA 멀티 DB 및 보안 설정 강화
- Celery 설정 및 DB 라우터 PRD 정합성 확보
- DLQ(Dead Letter Queue) 컨슈머 및 헬스체크 개선
Release v2.0.0
v2.0.0 - MSA 아키텍처 전환
모놀리식 구조에서 MSA(Microservice Architecture)로 전면 전환한 메이저 릴리즈입니다. 서비스별 데이터베이스 분리, 클라우드 인프라 마이그레이션, 모니터링 체계 구축, 그리고 종합 테스트 스위트를 포함합니다.
🏗 MSA 아키텍처 전환
- 서비스별 데이터베이스 분리: 단일 DB에서 4개 독립 데이터베이스로 분리
speedcam: Django 코어 (auth, admin, sessions)speedcam_vehicles: 차량 서비스speedcam_detections: 탐지 서비스speedcam_notifications: 알림 서비스
- MSADatabaseRouter 구현으로 앱별 자동 DB 라우팅
- ForeignKey 제거: 크로스 데이터베이스 참조를
BigIntegerField로 전환하여 서비스 간 결합도 제거Detection.vehicle→Detection.vehicle_idNotification.detection→Notification.detection_id
- 모든 View 및 Celery Task에서
.using()메서드로 명시적 DB 라우팅 적용 - MySQL init 스크립트로 멀티 데이터베이스 자동 생성
📦 앱 구조 재설계
- 레거시
crud/앱 완전 제거 → 도메인별apps/패키지로 재구성apps/vehicles/: 차량 등록, 번호판, 소유자 정보, FCM 토큰 관리apps/detections/: 과속 탐지 기록, 상태 워크플로우 (pending → processing → completed/failed), GCS 이미지 URI, OCR 결과, 신뢰도 점수apps/notifications/: FCM 알림 이력, 재시도 추적
- 각 앱에 모델, DRF 시리얼라이저, ViewSet, Admin 설정, URL 라우팅 포함
- 공통 쿼리 패턴에 최적화된 DB 인덱스 설정
backend/backend→backend/config디렉토리명 변경으로 가독성 향상
☁️ AWS → GCP 마이그레이션
- AWS S3에서 GCP Cloud Storage로 완전 마이그레이션
boto3→google-cloud-storage클라이언트로 전환download_image_from_s3()→download_image_from_gcs()로 함수명 변경- 재시도 로직 및 연결 풀링 적용
- API Breaking Change: 필드명
s3_key→gcs_key로 변경 - AWS 패키지(boto3, botocore, s3transfer) 제거, GCS 패키지 추가
🔧 핵심 유틸리티 (core/)
- GCS Client (
core/gcs/client.py): 이미지 다운로드, 재시도 로직, 연결 풀링, 싱글톤 패턴 - Firebase FCM (
core/firebase/fcm.py): 푸시 알림, 배치 전송 지원, 에러 핸들링 - MQTT Subscriber (
core/mqtt/subscriber.py): 라즈베리파이 탐지 이벤트 수신, MQTTv311 프로토콜
⚙️ Celery 태스크 재설계
- OCR Worker (
tasks/ocr_tasks.py): EasyOCR 기반 이미지 처리, GCS 다운로드, MySQL 직접 업데이트, 완료 시 알림 태스크 디스패치 (Choreography 패턴) - Notification Worker (
tasks/notification_tasks.py): FCM 푸시 알림, 지수 백오프 재시도, 알림 이력 로깅 - 각 태스크에 구조화된 로깅(Correlation ID), 재시도 전략, DLQ 라우팅 적용
- 큐 정의:
ocr_queue,fcm_notify_queue,dlq_queue - Celery Beat 관련 불필요 파일 및 설정 제거
🐳 Docker 멀티 서비스 배포
- 서비스별 Dockerfile 분리:
Dockerfile.main: Django 메인 서비스 (ddtrace 포함)Dockerfile.ocr: OCR 워커 (EasyOCR, OpenCV)Dockerfile.alert: 알림 워커
- Docker Compose에 MySQL, RabbitMQ(MQTT 플러그인), DataDog Agent, 3개 서비스 통합 구성
- 서비스 시작 스크립트 추가:
start_main.sh: Gunicorn + MQTT Subscriber + DB 마이그레이션start_ocr_worker.sh: Celery prefork poolstart_alert_worker.sh: Celery gevent pool
- 환경변수를 외부
env_file로 추출하여 Docker Compose 정리 - 레거시 Dockerfile, Dockerfile-prod, docker-compose.yml 제거
📦 의존성 모듈화
- 모놀리식
requirements.txt→ 서비스별 분리:base.txt: 공통 (Django, DRF, PyMySQL, Celery)main.txt: 메인 서비스 (MQTT 클라이언트)ocr.txt: OCR 워커 (EasyOCR, OpenCV)alert.txt: 알림 워커 (Firebase Admin)dev.txt: 개발 도구 (pytest, black)
- 서비스별 필요한 의존성만 설치하여 이미지 크기 및 충돌 최소화
📊 DataDog 모니터링
- DataDog Agent GCE 인스턴스 Terraform 구성 (APM, DogStatsD, Logs)
- 모든 서비스에
ddtrace통합 (Gunicorn, Celery Workers) - MySQL/RabbitMQ 통합 모니터링 설정
- 방화벽 규칙: APM (TCP 8126), DogStatsD (UDP 8125)
datadog.env.example추가
🧪 테스트
- pytest 기반 종합 테스트 스위트 구축
- 단위 테스트: Vehicle, Detection, Notification 모델 및 시리얼라이저 검증
- API 테스트: REST 엔드포인트 CRUD, 헬스체크, Swagger 문서
- 통합 테스트: 이벤트 플로우 (Ingestion → Choreography → E2E)
- 에러 핸들링 및 데이터 무결성 테스트
- pytest.ini 설정 및 테스트 의존성 (pytest-django, pytest-mock) 추가
🔄 CI/CD 개선
- 레거시 Docker Hub 워크플로우 → 종합 CI 파이프라인으로 전환
- 코드 품질: flake8, black, isort
- 테스트: pytest + MSA MySQL 데이터베이스
- 빌드: 3개 서비스 Docker 이미지 빌드 검증
- CI를 3개 독립 워크플로우로 분리하여 병렬 실행:
lint.yml,test.yml,docker-build.yml
- Makefile에 Terraform 래퍼 타겟 추가 (tf-init, tf-plan, tf-apply, tf-destroy)
📄 문서
- PRD.md: 시스템 아키텍처, DB 스키마, 이벤트 드리븐 워크플로우, RabbitMQ 메시징 설계, 트레이드오프 분석
- PERFORMANCE_TEST.md: K6 성능 테스트 가이드 (Soak, Spike, Stress 시나리오)
- README 업데이트: 프로젝트 상세 및 시스템 아키텍처 설명
⚠️ Breaking Changes
- API 필드명 변경:
s3_key→gcs_key - 데이터베이스 스키마 변경: 단일 DB → 4개 분리 DB, 마이그레이션 필요
- ForeignKey → BigIntegerField 전환
- Docker 구성 전면 변경: 서비스별 Dockerfile 및 Compose 구조
- requirements.txt → 서비스별 분리 파일 구조
Release v1.0.0
v1.0.0 - 초기 릴리즈
Django 기반 백엔드 서비스의 초기 버전으로, 기본적인 CRUD API와 실시간 알림 시스템을 포함합니다.
🏗 프로젝트 초기 세팅
- Django 프로젝트 초기 구성 및 Docker 기반 컨테이너화
- 배포용(
settings/production.py)과 개발용(settings/local.py)으로 settings 파일 분리 - Gunicorn WSGI 서버 적용
.gitignore설정 및 민감 정보 관리
📡 CRUD API
- 차량 데이터 관련 CRUD API 초안 작성
- Swagger(drf-yasg) 기반 API 문서화 및 보완
- 특수문자 처리 지원 추가
🔔 알림 시스템
- RabbitMQ 메시지 브로커 및 Celery 비동기 태스크 큐 세팅
- RabbitMQ + Celery를 통한 비동기 알림 연동 구현
- FCM(Firebase Cloud Messaging) 푸시 알림 기능 구현
- 알림 기능과 CORS 에러 동시 해결
🔄 CI/CD
- Django 전용 GitHub Actions CI 워크플로우 작성
- Docker 이미지 빌드 및 푸시 자동화
- CD(Continuous Deployment) 파이프라인 구성
- Docker Compose를 활용한 latest 이미지 배포 설정
🔧 인프라 및 설정
- CORS 헤더 설정 및 다수의 CORS 관련 에러 수정
- Dockerfile 최적화 및 반복적인 빌드 이슈 수정
- CI/CD 파이프라인 안정화 (다수의 설정 수정 반영)
- Docker Compose 기반 배포 환경 구성