<aside> 🤖 AI 에이전트가 조직·정책을 자연어로 관리하는 엔터프라이즈 플랫폼

Java 25 · Spring Boot 4.1 · Spring AI MCP · React 19 · OAuth 2.1 · 1인 풀스택 개발

🌐 라이브 데모: https://omniadmin.parkjh.dev (admin / admin123!) 📦 GitHub 비공개 — 소스 코드 확인이 필요하시면 면접 시 시연 또는 별도 요청 부탁드립니다.

</aside>


⚡ 핵심 수치

<aside> 📊 BE / FE 파일: 167 Java / 133 TS·TSX API 엔드포인트: 153개 (20 도메인) 인증 방식: JWT + OAuth 2.1 (PKCE) + API Key + MCP (4중) AI 모델: Vertex AI Gemini 2.5 Flash (배포) / gemma-4-26B (개발 테스트) MCP: 11 Tools + 5 Resources + 6 Prompts 정책 캐시: ETag + Caffeine → DB 쿼리 0/분 설계 문서: ADR 24개 + 설계 문서 8건 DB 지원: H2 / MariaDB / Oracle / MSSQL Git 커밋: 98회+ 456건 매트릭스 테스트: 6모델 × 4도구셋 교차 검증 → gemma-4-26B 100% 정확도

</aside>


🏗️ 아키텍처

┌─────────────────────────────────────────────────────────────┐
│                      OmniAdmin AI                            │
│                                                              │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌─────────────┐ │
│  │ 웹 관리자 │  │PC 에이전트│  │ 외부 시스템│  │ AI 에이전트  │ │
│  │ (React)  │  │ (REST)   │  │ (OAuth)  │  │(MCP/Claude) │ │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘  └──────┬──────┘ │
│       │JWT          │JWT          │OAuth 2.1       │MCP     │
│  ┌────┴─────────────┴─────────────┴────────────────┴──────┐ │
│  │              Spring Security (3 Filter Chains)          │ │
│  │  /api/v1/** → HMAC JWT    /mcp/** → RSA JWT + API Key  │ │
│  │  /oauth2/** → Authorization Server                      │ │
│  └────────────────────────┬───────────────────────────────┘ │
│                           │                                  │
│  ┌────────────────────────┴───────────────────────────────┐ │
│  │  19 Domains: auth, org, user, policy, chat, search...  │ │
│  └────────────────────────┬───────────────────────────────┘ │
│                           │                                  │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌────────────┐ │
│  │ Caffeine │  │ H2/Maria │  │ Spring AI│  │ Groq API   │ │
│  │  Cache   │  │ DB/Oracle│  │ MCP+LLM  │  │ gemma2-9b  │ │
│  └──────────┘  └──────────┘  └──────────┘  └────────────┘ │
└─────────────────────────────────────────────────────────────┘

🔐 인증 체계 (4중 인증)

요청 수신
  │
  ├─ /mcp/** ──→ [체인 1] API Key 우선 → OAuth RSA JWT
  │               X-API-Key → SHA-256 검증, IP 화이트리스트, 60/분
  │               Bearer → RSA JWT 검증
  │
  ├─ /oauth2/** ──→ [체인 2] Authorization Server
  │                  Auth Code + PKCE → RSA JWT 발급
  │
  └─ /api/v1/** ──→ [체인 3] Default SPA
                     HMAC JWT 검증 → SecurityContext

핵심: 모든 인증 방식이 동일한 SecurityContext로 통일
→ Service 코드가 인증 방식을 전혀 몰라도 됨

<aside> 🔑 접근 주체별 인증

▸ 웹 관리자 → JWT (HMAC-SHA256), access 30분 + refresh 7일 ▸ PC 에이전트 → JWT (HMAC-SHA256), Rate Limit 10/분, 계정잠금 5회 ▸ AI 에이전트 (MCP 표준) → OAuth 2.1 Auth Code + PKCE, RSA JWT ▸ AI 에이전트 (간편) → API Key (SHA-256 해시, 30일 미사용 자동 비활성) ▸ 외부 시스템 → OAuth 2.1 Client Credentials

</aside>


🤖 AI 기능

사용자 입력
  ├─ /slash 커맨드 (15개) → FE 즉시 처리 (토큰 0)
  ├─ WHERE/FIND/GOTO 인텐트 → NavRegistry 즉시 응답 (토큰 0)
  └─ 자연어 질문 → BE → Groq LLM → AiToolBridge(8도구) → 응답
      └─ LLM 불가 시 → 하드코딩 fallback (graceful degradation)

결과: 전체 질문의 ~70%를 토큰 0으로 처리 → 비용 70% 절감

<aside> 🔌 MCP Server (외부 AI 에이전트 연동)

▸ 엔드포인트: /mcp (Streamable HTTP) ▸ Tools 11개: searchUsers, savePolicies, globalSearch, resetPassword 등 ▸ Resources 5개: policy-templates, menu-tree, org-tree, codes, system-info ▸ Prompts 6개: search-users, change-policy, unlock-account 등 ▸ 글로벌 검색 (Ctrl+K): NavRegistry(FE 캐시) + 서버 8개 도메인 통합 검색

🌐 라이브 데모: http://powec.asuscomm.com:8085/mcp 🔑 API Key: omk_n59f07cqfsho3n056xfmww79q25ynjv07hdo1ibit7u63jk9

</aside>


⚡ 최적화

<aside> 📈 AI 토큰 최적화 (70% 절감) ▸ 슬래시 커맨드 (~15%) → 토큰 0 ▸ WHERE/FIND/GOTO (~40%) → NavRegistry 즉시, 토큰 0 ▸ COUNT/인사말 (~15%) → BE 직접 처리, 토큰 0 ▸ 자연어 (~30%) → LLM 호출 + AiToolBridge truncate

정책 캐시 최적화 (DB 쿼리 0/분) ▸ 1000대 폴링 → Caffeine 캐시에서 ETag 반환 (DB 0회) ▸ 변경 시에만 캐시 refresh (DB 1회)

BE 성능 ▸ Virtual Threads · Caffeine PermissionCache O(1) · SlowApiMonitor(1초) ▸ HikariCP leak detection · JPA batch_size=50

</aside>


📐 ADR (Architecture Decision Records) — 24개