Skip to content

Releases: Qualcomm-Capstone/backend

Release v2.1.0

07 Feb 14:02

Choose a tag to compare

v2.1.0 - 오픈소스 모니터링 스택 전환

DataDog/Terraform 기반 모니터링을 오픈소스(Prometheus, Grafana, Jaeger, Loki) 스택으로 전면 교체한 릴리즈입니다.


📊 모니터링 스택 전환 (DataDog → 오픈소스)

  • DataDog Agent, Terraform, Makefile 완전 제거
  • OpenTelemetry + django-prometheus 기반으로 계측 전환
    • ddtraceopentelemetry-instrument CLI 자동 계측
    • 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_*) 더 이상 사용하지 않음
  • ddtraceopentelemetry-* 패키지로 교체
  • Makefile 제거 (Terraform 관련 타겟 포함)
  • 모니터링 실행 시 -f docker-compose.monitoring.yml 추가 필요

Release v2.0.1

07 Feb 13:23

Choose a tag to compare

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

03 Feb 15:00

Choose a tag to compare

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.vehicleDetection.vehicle_id
    • Notification.detectionNotification.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/backendbackend/config 디렉토리명 변경으로 가독성 향상

☁️ AWS → GCP 마이그레이션

  • AWS S3에서 GCP Cloud Storage로 완전 마이그레이션
    • boto3google-cloud-storage 클라이언트로 전환
    • download_image_from_s3()download_image_from_gcs()로 함수명 변경
    • 재시도 로직 및 연결 풀링 적용
  • API Breaking Change: 필드명 s3_keygcs_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 pool
    • start_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_keygcs_key
  • 데이터베이스 스키마 변경: 단일 DB → 4개 분리 DB, 마이그레이션 필요
  • ForeignKey → BigIntegerField 전환
  • Docker 구성 전면 변경: 서비스별 Dockerfile 및 Compose 구조
  • requirements.txt → 서비스별 분리 파일 구조

Release v1.0.0

03 Feb 15:00

Choose a tag to compare

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 기반 배포 환경 구성