이종관
프로젝트 목록으로

백엔드 아키텍처 진화 — Flask에서 Django까지

Flask Blueprint → MVC 리팩터링 → Django 마이그레이션 + DB 이중 구조 전환의 전체 여정

에이오팜·2024.09 - 2025.07·백엔드 아키텍처 설계 및 개발
Django
Flask
SQLAlchemy
PostgreSQL
MySQL
MongoDB
Celery
Redis

배경

Flask Blueprint 기반 단순 라우팅 구조로 운영되던 선별 시스템 백엔드가 팀 규모 확장과 함께 한계를 드러냈습니다. 개발자 간 코드 충돌, 역할 분리 어려움, 관리 페이지 직접 개발 비효율, AI 모델 변경 시마다 MySQL 스키마 마이그레이션이 필요한 문제가 누적되었습니다. 또한 코드 리뷰 중 GitHub 토큰 하드코딩, JWT 수명 100년 설정, SQL 인젝션 취약점 등 심각한 보안 문제도 발견되었습니다.

해결 과정

4단계에 걸친 점진적 전환 전략을 택했습니다.

1단계 — MVC 리팩터링 (2024.09~10): Blueprint 기반 단순 라우팅을 MVC 아키텍처로 리팩터링하고, 팀 내 MVC 패턴 학습 세션과 가이드 문서를 작성하여 코드 컨벤션을 정립했습니다.

2단계 — DB 이중 구조 (2024.09~10): 정형 데이터는 MySQL에 유지하고, AI 추론 결과와 이미지 메타 같은 비정형 데이터는 MongoDB로 분리했습니다. AI 모델 변경 시 스키마 마이그레이션 없는 유연한 구조를 확보했습니다.

3단계 — Django 마이그레이션 (2024.11~2025.01): Flask에서 Django로 마이그레이션하면서 MySQL을 PostgreSQL로 전환했습니다. Django Admin 활용으로 관리 페이지 별도 개발이 불필요해졌고, 서비스 중단 없이 전환을 완료했습니다.

4단계 — 보안 및 아키텍처 강화 (2025.01~07): 하드코딩된 시크릿을 전량 환경 변수로 전환하고, JWT 수명을 100년에서 7일로 현실화하며, SQL 인젝션을 Django ORM 파라미터 바인딩으로 수정했습니다. Selector/Service/API 계층 분리 패턴을 도입하여 앱 아키텍처를 표준화하고, 연결 풀링, Redis 캐싱, 인덱스, 파티션 관리를 일원화하는 DB 전략 프레임워크를 구축했습니다.

성과

  • Flask → Django 무중단 전환 완료, MySQL → PostgreSQL + MongoDB 이중 구조로 데이터 특성별 최적 스토리지 활용
  • 보안 체질 전면 개선 — JWT 100년 → 7일, SQL 인젝션 제거, 하드코딩된 시크릿 전량 환경 변수 전환
  • 파티셔닝 자동화와 복합 인덱스 최적화로 대시보드 로딩 85% 단축, 그래프 API 응답 90% 개선
  • Selector/Service/API 계층 분리로 앱 아키텍처 표준화, API 문서 자동화, Django Admin으로 내부 관리 효율화