사내 Langflow Component & Flow 공유 플랫폼 — 구성원이 직접 개발한 컴포넌트와 워크플로우를 안전하게 공유·심사·랭킹하는 내부 마켓플레이스.
사내 구성원이 직접 만든 Langflow 자산이 메신저·이메일에 흩어져 있어 발견·재사용·품질 관리가 어렵습니다. AgentHub 는 이를 한 곳에 모으고:
발견 — 카테고리·검색·랭킹으로 좋은 Component/Flow를 빠르게 찾기
검증 — 업로드 시 자동 검증(파일 형식·크기·비밀키 스캔) + 심사위원 리뷰
인정 — 시즌별 랭킹·시상으로 기여를 가시화
재사용 — 한 클릭 다운로드로 내 Flow에 즉시 추가
소통 — 공지사항 + VoC 게시판으로 운영팀과 사용자 간 피드백 루프
┌─────────────┐ ┌────────────┐ ┌──────────────┐
│ Frontend │ ──► │ Backend │ ──► │ PostgreSQL │
│ (React SPA) │ │ (FastAPI) │ └──────────────┘
│ nginx:80 │ │ :8000 │
└─────────────┘ └─────┬──────┘
│ │
│ Keycloak SSO │ (OIDC)
└─────────────────┘
│
▼
┌────────────┐
│ Kubernetes │ ← Helm chart
└────────────┘
agent-hub/
├── frontend/ # React + Babel SPA (빌드 도구 없이 동작)
│ ├── AgentHub.html # 진입점
│ ├── api.jsx # Backend API 연동 + useFetch hook
│ ├── i18n.jsx # 다국어 (한국어/English)
│ ├── home.jsx # 홈 갤러리
│ ├── component-detail.jsx # Component 상세
│ ├── flow-detail.jsx # Flow 상세 (노드 그래프)
│ ├── upload-modal.jsx # 업로드 wizard (실제 파일 검증)
│ ├── admin.jsx # 관리자 대시보드
│ ├── extra-pages.jsx # 랭킹, 내 Component/Flow, 가이드
│ ├── boards.jsx # 공지사항 + VoC 게시판
│ ├── data.jsx # 아이콘 + 시드 데이터
│ ├── styles.css # 전체 스타일
│ ├── assets/ # 로고, favicon, SK ribbon
│ ├── nginx.conf # SPA fallback + API 프록시
│ └── Dockerfile # nginx 기반 컨테이너
├── backend/ # FastAPI 서비스
│ ├── app/
│ │ ├── main.py # FastAPI 앱 + CORS + 라우터
│ │ ├── config.py # pydantic-settings (env vars)
│ │ ├── auth.py # Keycloak OIDC + DEV_MODE bypass
│ │ ├── database.py # SQLAlchemy async engine
│ │ ├── models/ # 16 테이블 (User, Component, Review, Notification, LangflowEndpoint, ...)
│ │ ├── schemas/ # Pydantic v2 request/response
│ │ ├── routers/ # API 라우터 (12개)
│ │ └── services/ # 비즈니스 로직 (랭킹 계산)
│ ├── alembic/ # DB 마이그레이션 (10개 버전)
│ ├── Dockerfile # python:3.12-slim 멀티스테이지
│ └── requirements.txt
├── infra/
│ ├── helm/agent-hub/ # Helm 차트
│ │ ├── Chart.yaml
│ │ ├── values.yaml
│ │ └── templates/ # 15개 K8s 매니페스트
│ └── k8s/README.md # 배포 가이드
└── docker-compose.yml # 로컬 개발 (frontend + backend + db)
Screen
URL
Description
홈
#/home
카테고리 필터 + 카드 그리드, 인기순/최신순
Component 상세
#/component/{uuid}
README · 코드 미리보기 · 버전 · 댓글 (slide-over)
Flow 상세
#/flow/{uuid}
인터랙티브 노드 그래프 + JSON 뷰 (slide-over)
업로드
modal
3-step wizard (파일 검증 → 기준 정보 → 호환성), 개요/사용법 에디터, 이미지 붙여넣기
2026 랭킹
#/ranking
Component / Flow 부문 2-column 분리
내 Component / Flow
#/mine
게시됨 · 초안/심사 중 · 반려/삭제 (다시 제출)
공지사항
#/notice
공지 CRUD (관리자), markdown, 핀 고정
VoC 게시판
#/voc
제안·버그·질문, upvote, 댓글, markdown
관리자 대시보드
#/admin
심사 대기 · 승인/반려 · 통계 · 사용자 관리 · 설정
가이드
#/guide
빠른 시작 · 네이밍 · 표준 인증 · 심사 · FAQ
Quick Start (Docker Compose)
가장 빠른 방법 — 3개 서비스를 한 번에 실행:
# 전체 스택 실행 (frontend + backend + PostgreSQL)
docker compose up -d
# DB 마이그레이션
docker compose exec backend alembic upgrade head
# 시드 데이터 투입 (7개 Component, 사용자, 공지, VoC)
curl -X POST http://localhost:8000/api/v1/seed
# 브라우저에서 확인
open http://localhost:8080
Frontend만 실행 (프로토타입)
cd frontend
python3 -m http.server 8080
# http://localhost:8080/AgentHub.html
Backend만 실행
cd backend
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
# PostgreSQL이 localhost:5432에 실행 중이어야 합니다
alembic upgrade head
uvicorn app.main:app --reload --port 8000
Kubernetes (Helm)
cd infra/helm
helm install agent-hub ./agent-hub \
--namespace agent-hub \
--create-namespace \
--set postgresql.auth.password=YOUR_PASSWORD \
--set backend.env.KEYCLOAK_CLIENT_SECRET=YOUR_SECRET
kubectl exec -it deploy/agent-hub-backend -n agent-hub -- alembic upgrade head
OpenAPI 문서는 /docs (Swagger UI), /redoc (ReDoc)에서 자동 생성됩니다.
Method
Path
Auth
Description
GET
/health
-
헬스체크
Method
Path
Auth
Description
GET
/api/v1/auth/config
-
프론트 SSO 설정 (issuer/clientId)
POST
/api/v1/auth/token
-
code → token 교환
POST
/api/v1/auth/refresh
-
refresh token으로 access token 갱신
Method
Path
Auth
Description
GET
/api/v1/components
-
목록 (필터·검색·정렬·페이지)
POST
/api/v1/components
user
새 Component/Flow 제출 (multipart)
GET
/api/v1/components/{id}
-
상세 조회
PATCH
/api/v1/components/{id}
author/admin
업데이트 (버전 bump)
DELETE
/api/v1/components/{id}
author/admin
본인/관리자 soft delete
GET
/api/v1/components/{id}/versions
-
버전 이력
GET
/api/v1/components/{id}/versions/{vid}/file
-
특정 버전 파일 내용
GET
/api/v1/components/{id}/file
-
최신 파일 내용 (코드 미리보기)
GET
/api/v1/components/{id}/download-file
user
파일 다운로드 + 기록
POST
/api/v1/components/{id}/download
user
다운로드 카운터 증가 (이벤트만)
GET
/api/v1/components/{id}/starred
user
내 Star 여부
POST
/api/v1/components/{id}/star
user
Star 토글
Method
Path
Auth
Description
GET
/api/v1/components/{id}/improvements
-
개선안 목록
GET
/api/v1/components/{id}/improvements/{iid}
-
개선안 상세 (diff 포함)
POST
/api/v1/components/{id}/improvements
user
개선안 제출
POST
/api/v1/components/{id}/improvements/{iid}/review
author/admin
채택·반려
DELETE
/api/v1/components/{id}/improvements/{iid}
author/admin
삭제
GET
/api/v1/components/{id}/contributors
-
Contributor 목록
Rankings / Users / Notifications
Method
Path
Auth
Description
GET
/api/v1/rankings
-
랭킹 (자기 Star/DL 제외)
GET
/api/v1/users/me
user
내 프로필 (SSO)
GET
/api/v1/users/me/components
user
내 Component/Flow 목록
GET
/api/v1/notifications
user
알림 목록 (페이지네이션)
GET
/api/v1/notifications/unread-count
user
미확인 알림 수
POST
/api/v1/notifications/{id}/read
user
단건 읽음 처리
POST
/api/v1/notifications/read-all
user
전체 읽음 처리
Method
Path
Auth
Description
GET
/api/v1/notices
-
공지 목록
GET
/api/v1/notices/{id}
-
공지 상세
POST
/api/v1/notices
admin
작성
PUT
/api/v1/notices/{id}
admin
수정 (핀 토글 포함)
DELETE
/api/v1/notices/{id}
admin
삭제
GET
/api/v1/voc
user
VoC 목록 (is_upvoted 포함)
GET
/api/v1/voc/{id}
-
VoC 상세 + 댓글
POST
/api/v1/voc
user
작성 (markdown)
PUT
/api/v1/voc/{id}
author/admin
수정
POST
/api/v1/voc/{id}/comments
user
댓글 작성
POST
/api/v1/voc/{id}/upvote
user
Upvote 토글
PATCH
/api/v1/voc/{id}/status
admin
상태 변경
Method
Path
Auth
Description
GET
/api/v1/admin/pending
admin/reviewer
심사 대기
GET
/api/v1/admin/approved
admin/reviewer
승인 목록
GET
/api/v1/admin/rejected
admin/reviewer
반려 목록
GET
/api/v1/admin/deleted
admin
삭제된 목록
DELETE
/api/v1/admin/components/{id}
admin
Soft delete
GET
/api/v1/admin/issues
admin
신고/이슈 목록
POST
/api/v1/admin/review/{id}
admin/reviewer
심사 제출 (점수 + 결정)
POST
/api/v1/admin/review/bulk
admin/reviewer
다건 일괄 심사
GET
/api/v1/admin/users
admin
사용자 목록
PATCH
/api/v1/admin/users/{empno}/role
admin
역할 변경 (admin/reviewer/user)
GET
/api/v1/admin/statistics
admin
전체 통계 (CSV 다운로드용)
GET
/api/v1/admin/settings/public
-
시즌 공개 설정 (홈 배너용)
GET/PUT
/api/v1/admin/settings
admin
시즌 + 심사기준 + 가중치 설정
Method
Path
Auth
Description
GET
/api/v1/deploy/suggested-url
user
사번 기반 추천 URL
GET/POST
/api/v1/deploy/endpoints
user
엔드포인트 목록/등록 (최대 5개)
DELETE
/api/v1/deploy/endpoints/{id}
user
엔드포인트 삭제
POST
/api/v1/deploy/test
user
미저장 URL/Key 연결 테스트
POST
/api/v1/deploy/endpoints/{id}/test
user
저장된 엔드포인트 연결 테스트
GET
/api/v1/deploy/endpoints/{id}/projects
user
Langflow 프로젝트 목록
GET
/api/v1/deploy/endpoints/{id}/projects/{pid}/flows
user
프로젝트 내 Flow 목록
POST
/api/v1/deploy/components/{id}
user
Langflow로 배포 (Component=Flow 합성, Flow=새/덮어쓰기)
Method
Path
Auth
Description
POST
/api/v1/images
user
마크다운용 이미지 업로드 (클립보드 포함)
GET
/api/v1/images/{filename}
-
업로드된 이미지 서빙
POST
/api/v1/seed
dev
시드 데이터 투입 (DEV_MODE only)
Authentication (Keycloak SSO)
Keycloak OIDC 연동으로 사내 임직원 인증:
Realm : hynix
Client : agent-hub
추출 클레임 : preferred_username, empno (사번, 7자리), picture (프로필 이미지)
최초 로그인 시 자동 사용자 등록 (upsert)
Admin/Reviewer 엔드포인트는 role: admin 필요
DEV_MODE : DEV_MODE=true 설정 시 Keycloak 없이 dev admin 사용자로 자동 인증
환경변수:
KEYCLOAK_URL=https://keycloak.internal
KEYCLOAK_REALM=hynix
KEYCLOAK_CLIENT_ID=agent-hub
KEYCLOAK_CLIENT_SECRET=...
DEV_MODE=true # 로컬 개발 시
3-step wizard: 파일 → 기준 정보 → 호환성
실제 파일 검증: 형식 확인, 크기 제한 (5MB), 비밀키 스캔, import 검증
개요/사용법 에디터 : Component/Flow 전용 마크다운 템플릿 자동 로드, 작성/미리보기 탭 전환
이미지 첨부 : 클립보드 Ctrl+V 붙여넣기 또는 Image 버튼 → 자동 업로드 +  삽입
입력 규정: 한줄설명 20자 이상, 개요/사용법 100자 이상
태그 : 검색 가능한 태그 추가 (콤마 구분), 홈/통계에서 태그 검색 지원
파일 검증 강화 : .py/.json 외 파일 차단, 5MB 초과 차단 + 에러 메시지
아이콘 선택 (8종)
파일 타입 전환 시 템플릿 자동 변경
업로드 후 pending → 관리자/심사위원 승인 후 홈에 게시
개요/사용법 탭: 업로드 시 작성한 마크다운 렌더링 (API readme 필드)
코드 미리보기 : 실제 업로드 파일 내용 표시
Star 토글 : 클릭 시 노란색 활성/비활성 전환, DB 저장
Flow 그래프 : 실제 JSON에서 노드/연결 수 표시, 예외 시 안내 UI
Score = Star × 1 + Download × 2
Component 부문 / Flow 부문 2-column 분리 표시
실시간 갱신 (페이지 진입 시 최신 데이터)
자기 자신의 Star / 다운로드는 집계에서 제외
가중치는 관리자 설정에서 변경 가능
Star 토글: 노란색 활성/비활성, DB 저장
Star 상태 유지: detail 진입 시 현재 사용자의 star 여부 확인
코드/JSON 복사 시 자동 Star — 복사하면 작성자에게 Star 자동 전달 (이미 Star한 경우 유지)
관리자가 Component/Flow를 삭제하면 deleted_at 기록 (DB 보존)
홈, 랭킹 등에서 삭제된 항목 자동 필터링
작성자/관리자가 Component/Flow 업데이트 가능 (patch/minor/major 선택)
이전 버전 이력 조회 가능 (버전 이력 탭) — 특정 버전 파일도 다운로드 가능
Code Improvements (코드 개선 제안)
누구나 Component/Flow에 대해 개선안(diff + 설명)을 제출
작성자/관리자가 채택·반려 — 채택 시 contributor로 자동 기록
상세 탭에서 diff 뷰어로 변경 사항 비교
심사 결과, 개선안 채택/반려, VoC 답변 등 이벤트 발생 시 사용자 알림 생성
Topbar 종 아이콘에 미확인 카운트 배지
단건/전체 읽음 처리, 무한 스크롤 페이지네이션
사용자별 최대 5개 Langflow 엔드포인트 등록 (alias + Base URL + 선택적 API Key)
등록 / 배포 시 연결 테스트로 정상(초록)/실패(빨강) 표시
사번 기반 추천 URL 자동 제안 (/api/v1/deploy/suggested-url)
Component 또는 Flow를 선택 프로젝트의 새/기존 Flow로 1-클릭 배포
햄버거 메뉴 (768px 이하)
전 페이지 모바일 대응 (그리드, 카드, 모달, 관리자)
Detail overlay: PC 82% slide-over (바깥 클릭 닫기), 모바일 전체 너비 + 고정 헤더
🇰🇷 한국어 (기본) / 🇺🇸 English 토글
모든 UI 텍스트 160+ 키 번역 완료 (관리자 설정 포함)
Hash 기반 라우팅 (#/home, #/ranking, #/component/{uuid})
브라우저 뒤로가기/앞으로가기 지원
Component/Flow URL 공유 가능
공지사항: 관리자 CRUD, markdown, 핀 고정, 홈 배너 → 해당 공지 상세 이동
VoC: 제안/버그/질문 게시판, markdown, upvote (노란 별), 댓글
이미지 클립보드 붙여넣기 지원 (공지, VoC 모두)
작성자 표시: 이름만 표시 (ID 노출 제거)
심사위원(reviewer) 역할 : 관리자 페이지 접근 가능, 심사대기/승인/반려 탭만 표시
심사대기 fold/expand : 항목 클릭 시 인라인으로 심사 카드 펼침
동적 심사항목 : 설정 탭에서 추가/삭제한 criteria가 심사 슬라이더에 실시간 반영
Statistics 탭 : 전체 Component/Flow 통계 테이블 (작성자·상태·Star·다운로드·날짜+시간), CSV 다운로드
Loading indicator : 전 탭 flow-dot 펄스 애니메이션
관리자 설정 전체 i18n 완료 (시즌, 심사항목, 랭킹 공식, 심사위원, 호환성)
링크 복사 : Component/Flow detail에서 공유 URL 클립보드 복사
Topbar 검색 : Enter 키로 API 검색 + Home 이동, 모바일 검색 프롬프트 연동
Reupload prefill : 반려/삭제 항목 "다시 제출" 시 이전 데이터(제목·설명·README·파일) 자동 채움
Pagination
Home: 20개씩 "더 보기" (backend total count 기반)
공지사항 / VoC: 20개씩 "더 보기"
16개 테이블 (alembic 010까지):
Table
Description
users
사용자 (사번 PK, Keycloak SSO, role)
components
Component / Flow 등록물 (soft delete + tags JSON)
component_versions
버전 이력
reviews
심사 결과 (점수 JSON + 결정)
stars
Star (composite PK)
downloads
다운로드 기록
issues
신고 / 보안 / 버그
seasons
시즌 설정 (가중치, 기간, 심사기준)
notices
공지사항 (markdown, pin)
voc_posts
VoC 게시글 (제안/버그/질문)
voc_comments
VoC 댓글
voc_upvotes
VoC 추천
images
마크다운용 업로드 이미지 (alembic 007)
code_improvements
코드 개선 제안 + diff + review (alembic 009)
notifications
사용자 알림 (alembic 009)
langflow_endpoints
개인 Langflow 엔드포인트 (alembic 010)
Layer
Technology
Frontend
React 18 + Babel (CDN, no build), marked.js (markdown)
Backend
FastAPI, SQLAlchemy 2.0 async, asyncpg, Pydantic v2
Database
PostgreSQL 15
Auth
Keycloak (OIDC, RS256 JWT)
Container
Docker multi-stage, docker-compose
Orchestration
Kubernetes + Helm
Autoscaling
HPA (CPU-based)
Backend : Python 3.12, type hints, async/await
Frontend : React 함수형 컴포넌트, PascalCase, useI18n() for text
이슈 생성 → feat/xxx 또는 fix/xxx 브랜치
PR → 리뷰 1명 이상 + CI 통과 후 머지
MIT © 2026 Yeonghyeon Ko