SPOS 서버 철도 전력 관제 작업 관리 백엔드
- 문제 01–06이 생긴 시스템
- 단전 · 급전 작업의 계획 · 결재 · 현장 실행 · 감사 서버
- 관제 데스크와 현장 안전관리자 앱이 같은 상태를 실시간으로 공유
- 사내 폐쇄망외부 클라우드 · 레지스트리 · 오케스트레이터 없음
- replica 1스케일아웃으로 장애를 숨길 수 없음
- 관제 업무배포가 상태를 깨면 곧 안전 문제
- 현장 망응답 유실과 재전송이 일상
Python · FastAPI · SQLAlchemy(async) · PostgreSQL + pgbouncer · Redis · APScheduler · Docker Swarm · Traefik · GitLab CI · Tavern
판단
MSA 대신 role 기반 모듈러 모놀리스 — 코드베이스 1 · 이미지 1 · 서버 4 SERVICE_ROLE 하나로 앱 조립, 라우터 등록은 선언 테이블. 서버 추가 = 테이블 한 줄 추가. 서비스 분리 비용은 개인 MSA 실험에서 먼저 확인.- WEB Router유일한 진입점 · JWT 게이트 · 헤더 화이트리스트 프록시
- Auth로그인 · versioned JWT · 마스터키 단독 보관
- WAS작업 · 작업계획 · 전력 · SSE · 알림
- File봉투 암호화 업로드 · 아카이브 배치
@dataclass(frozen=True)
class RouterSpec:
module_path: str
prefix: str
service_roles: frozenset[str] # 이 라우터를 갖는 role
for spec in get_router_specs_for_role(role):
app.include_router(load(spec), prefix=spec.prefix)