Project
개방형 에너지 실증 연구 클라우드 플랫폼
과제명: 재생에너지 플랫폼 과제(2023 ~ 2026)
Overview
HPC 가상머신 관리·전력계통 시뮬레이션·HILS 시험을 통합 지원하는 클라우드 서비스의 백엔드 API 서버를 처음부터 설계하고 전담 개발한 프로젝트.
Key Results
API 엔드포인트
100개
DB 커넥션
5개 (PG + MySQL 4)
DB 테이블
25개
Architecture
데이터 흐름사용자
Web Browser
Nginx
11개 서비스 진입점
FastAPI
100개 API, 5개 도메인
PostgreSQL
앱 DB (25개 테이블)
OpenStack DB
MySQL 4개 (VM 관리)
Keycloak이 OAuth2/OIDC 인증을 담당하고, PostgreSQL LISTEN/NOTIFY로 사용자 변경을 앱 DB에 실시간 동기화. 실시간 시뮬레이터 하드웨어는 Modbus 프로토콜로 직접 연결해 HILS 실험 데이터를 실시간 처리합니다.
Technical Decisions
문제를 어떻게 정의하고, 왜 이 방법을 선택했는지
OpenStack DB 직접 연결 — 멀티 DB 아키텍처
OpenStack REST API를 경유하면 응답 지연이 발생하고, 여러 DB를 크로스 조인하는 쿼리(예: Image ID → Image Name 매핑 시 Nova + Glance + Cinder를 모두 참조)를 구성하기 어렵습니다.
OpenStack 내부 DB 4개에 SQLAlchemy로 직접 연결하는 멀티 DB 아키텍처를 설계했습니다. pool_pre_ping과 pool_recycle=3600로 장시간 운영 시 커넥션 안정성을 확보하고, ImageResolverService로 복잡한 크로스 조인을 추상화했습니다.
VM 조회 응답 속도 개선. image-backed/volume-backed VM 모두 커버하는 유연한 Image 정보 조회 가능.
SSE 기반 VM 생성 실시간 스트리밍
VM 생성은 수 분이 소요되는 작업입니다. 완료 응답을 기다리는 방식은 클라이언트 UX가 나쁘고 프록시 타임아웃 위험이 있습니다.
BackgroundTasks로 VM 생성을 비동기 처리하고, tracking_id 기반 SSE 스트림으로 building → created/error 상태를 실시간 전달. Nginx에 SSE 전용 설정(proxy_buffering off, 타임아웃 360초)을 추가해 프록시 환경에서도 안정적으로 동작하도록 구성했습니다.
클라이언트가 VM 생성 진행 상태를 실시간으로 확인 가능. DB 세션 격리 버그(타 세션 커밋 미반영 → SSE 무한 루프)를 진단·수정해 안정성 확보.
PostgreSQL LISTEN/NOTIFY 기반 Keycloak 사용자 동기화
Keycloak에서 사용자 정보가 변경될 때 앱 DB에 즉시 반영되지 않으면 두 시스템 간 데이터 불일치가 발생합니다. 폴링 방식은 변경 감지 지연이 불가피하고 불필요한 DB 부하를 유발합니다.
PostgreSQL LISTEN/NOTIFY를 활용해 Keycloak DB 변경 이벤트를 감지하는 동기화 서비스를 구축했습니다. 이벤트 드리븐 방식으로 변경이 발생하는 즉시 앱 DB에 반영합니다.
Keycloak 사용자 변경이 앱 DB에 실시간 반영. 별도 폴링 없이 이벤트 기반으로 동기화.
Tech Stack