ssak은 Go와 React로 구축된 사내망/폐쇄망 최적화 내구성 자동화 플로우(Durable Workflow) 서비스입니다.
게시된 워크플로 버전과 실행 상태를 PostgreSQL에 고정하고,
트랜잭셔널 아웃박스(Transactional Outbox) · 분산 작업 리스(Distributed Lease) · 내구 타이머(Durable Timer)로
서버 장애 및 프로세스 재시작 뒤에도 실행 상태를 영구히 보존하고 안전하게 이어갑니다.
🎬 3분 서비스 소개 영상 보기 (MP4) · 🌐 인터랙티브 웹 쇼케이스 · 📚 전체 문서 목차 · 📸 화면 갤러리
🔍 더 많은 메뉴 화면 캡처 보기 (클릭하여 펼치기)
👉 전체 14개 메뉴 상세 설명은 **기능 및 화면 가이드 (docs/features.md)**에서 확인하실 수 있습니다.
- 단 4개의 환경변수로 즉시 기동: 복잡한 Kafka, Redis, Vault 없이 단일 PostgreSQL로 완벽 동작
- 100% 오프라인 & 폐쇄망 배포: 단일 Go 바이너리 내 React 정적 번들이 임베드되어 외부 의존성 제로
- 결함 감내 내구성(Durable Execution):
- 트랜잭셔널 아웃박스: 노드 실행과 엣지 활성화 이벤트를 1개 DB 트랜잭션으로 원자적 기록
- 분산 작업 임대:
FOR UPDATE SKIP LOCKED기반 다중 워커 경쟁 임대 및 하트비트 - 내구 타이머: 지연 대기, 승인 대기, 콜백 만료를 메모리가 아닌 DB 테이블에 보존
- 멱등성 보장:
(execution_id, node_id, iteration_key)복합 키로 중복 실행 원천 차단
- 엔터프라이즈 보안 & 자격증명 금고:
ENCRYPTION_KEY기반 AES-256-GCM 봉투 암호화 및 컨텍스트 바인딩- 원문 재조회 불가 단방향 보호 & 무중단 키 버전 회전(Zero-Downtime Key Rotation)
- HTTP 요청 노드의 SSRF 방지 (Loopback, Link-Local, Metadata IP 차단)
- Keycloak OIDC SSO 연동: OIDC Discovery 자동 연동 & 그룹 클레임 기반 관리자 권한 매핑
- AI & Model Context Protocol (MCP):
- OpenAI 호환 API 실시간 SSE 스트리밍 채팅 (최대 256K 토큰)
POST /mcpStreamable HTTP 엔드포인트 제공 (list_workflows,run_workflow,get_execution)
- 실시간 관측성 & 불변 감사 로그:
- SSE 기반 실시간 실행 상태 스트림 (
Last-Event-ID자동 재연결) - 모든 설정 변경, 키 회전, 권한 부여의 Trace ID 연계 감사 로그
- Prometheus 메트릭 수집 (
GET /metrics)
- SSE 기반 실시간 실행 상태 스트림 (
docker run -d --name ssak --restart unless-stopped \
-p 8080:8080 \
-e POSTGRES_DSN='postgres://ssak:[email protected]:5432/ssak?sslmode=require' \
-e BOOTSTRAP_ADMIN='admin' \
-e BOOTSTRAP_ADMIN_PASSWORD='replace-with-a-strong-password' \
-e ENCRYPTION_KEY='replace-with-at-least-32-random-characters' \
ssak:v0.1.0필수 환경변수 4종:
POSTGRES_DSN: PostgreSQL 연결 문자열BOOTSTRAP_ADMIN: 초기 부트스트랩 관리자 아이디BOOTSTRAP_ADMIN_PASSWORD: 초기 관리자 비밀번호 (12자 이상)ENCRYPTION_KEY: AES-256-GCM 마스터 암호화 키 (32자 이상)
# 프론트엔드 빌드
make web
# 테스트 실행
make test
# 단일 실행 파일 빌드
make build VERSION=0.1.0
# 컨테이너 이미지 빌드 및 오프라인 아카이브 생성
make image-archive VERSION=0.1.0 ┌─────────────────────────────────────────────────────────────┐
│ React UI / REST API / SSE / MCP / Webhooks │
└──────────────────────────────┬──────────────────────────────┘
│
┌───────────▼───────────┐
│ Go Control API │
└───────────┬───────────┘
│
┌───────────────────────────▼───────────────────────────┐
│ PostgreSQL Database │
│ - executions (고정 버전 바인딩) │
│ - node_runs / edge_runs (상태 전이) │
│ - outbox_events (트랜잭셔널 아웃박스) │
│ - durable_timers (DB 내구 타이머) │
│ - payload_objects (대용량 페이로드) │
└───────────────────────────┬───────────────────────────┘
│ FOR UPDATE SKIP LOCKED
┌───────────▼───────────┐
│ Durable Workers │
│ (Lease Heartbeat) │
└───────────────────────┘
| 문서명 | 설명 | PDF 다운로드 / 바로보기 |
|---|---|---|
| 📕 종합 기술 매뉴얼 완본 | 모든 아키텍처·기능·운영·API 통합 기술 완본 (A4 인쇄용) | docs/ssak_complete_manual.pdf |
| 🎬 3분 서비스 시연 영상 | 전 메뉴 기능 및 CRU 실무 동작 1080p 시연 영상 | docs/ssak_overview.mp4 |
| 📸 기능 및 화면 가이드 | 14개 전체 메뉴별 캡처 스크린샷과 CRU 동작 가이드 | PDF 바로보기 · MD |
| 👤 사용자 실무 가이드 | 노드 카탈로그, 캔버스 단축키, 실행 모니터링 및 재시도 | PDF 바로보기 · MD |
| 🛠️ 관리자 운영 가이드 | Keycloak OIDC 연동, RBAC 역할, 보안 정책, 시스템 진단 | PDF 바로보기 · MD |
| 🔌 API & MCP 가이드 | REST API 명세, SSE 실시간 스트림, AI MCP JSON-RPC | PDF 바로보기 · MD |
| 🏗️ 실행 아키텍처 | 결함 감내 불변 조건 및 상태 전이 모델 | PDF 바로보기 · MD |
| 🌐 웹 쇼케이스 | 인터랙티브 깃허브 홍보 및 기능 둘러보기 웹페이지 | 쇼케이스 열기 |
| 📚 문서 허브 | 전체 공식 기술 문서 목차 및 시작 가이드 | 문서 허브 열기 |
| 경로 | 메서드 | 용도 |
|---|---|---|
/healthz |
GET | Liveness 프로브 (프로세스 생존 상태) |
/readyz |
GET | Readiness 프로브 (PostgreSQL 연결 상태) |
/metrics |
GET | Prometheus 지표 (실행 수, 아웃박스 지연, 타이머) |
/openapi.yaml |
GET | OpenAPI 3.0 API 공식 계약 스펙 |
/mcp |
POST | Model Context Protocol JSON-RPC 에이전트 도구 엔드포인트 |
본 프로젝트는 사내망 및 엔터프라이즈 환경을 위한 내부 배포 표준을 준수합니다.