fix: Actually restore correct UTF-8 bytes for README.md

This commit is contained in:
jade
2026-07-16 20:56:52 +09:00
parent 046c9dee75
commit abd2766577

174
README.md
View File

@@ -1,168 +1,168 @@
# AXHUB Backend # AXHUB Backend
Spring Boot 湲곕컲 AXHUB 愿€由ъ옄 諛깆뿏??API ?쒕쾭 諛?MCP(Model Context Protocol) Gateway / Tool 遺꾩궛 ?쒕쾭 ?꾨줈?앺듃?낅땲?? Spring Boot 기반 AXHUB 관리자 백엔드 API 서버 및 MCP(Model Context Protocol) Gateway / Tool 분산 서버 프로젝트입니다.
--- ---
## ?꾪궎?띿쿂 媛쒖슂 (Architecture Overview) ## 아키텍처 개요 (Architecture Overview)
AXHUB Backend??3媛쒖쓽 二쇱슂 ?좏뵆由ъ??댁뀡?쇰줈 遺꾨━ ?댁쁺?⑸땲?? AXHUB Backend는 3개의 주요 애플리케이션으로 분리 운영됩니다:
1. **AXHUB Admin (`AxHubAdminApplication`)**: 愿€由ъ옄 ???붾㈃???꾪븳 REST API ?쒕쾭 1. **AXHUB Admin (`AxHubAdminApplication`)**: 관리자 웹 화면을 위한 REST API 서버
2. **MCP Gateway (`AxHubGatewayApplication`)**: ?몃? LLM(Claude, GPT ?? ?쒕쾭??MCP ?듭떊??諛쏆븘, ?대? Tool ?쒕쾭?ㅻ줈 遺꾨같(?쇱슦???섎뒗 ?덈툕 ?쒕쾭 (?ы듃: 8081) 2. **MCP Gateway (`AxHubGatewayApplication`)**: 외부 LLM(Claude, GPT 등) 서버의 MCP 통신을 받아, 내부 Tool 서버들로 분배(라우팅)하는 허브 서버 (포트: 8081)
3. **MCP Tool (`AxHubToolApplication`)**: ?ㅼ젣 ?덇굅???쒖뒪??MCI, EAI ??怨??듭떊?섏뿬 鍮꾩쫰?덉뒪 濡쒖쭅(寃곗젣, ?닿??좎껌 ?????섑뻾?섎뒗 ?대뙌???쒕쾭 (?ы듃: 8082~8084 遺꾩궛 援ъ꽦 媛€?? 3. **MCP Tool (`AxHubToolApplication`)**: 실제 레거시 시스템(MCI, EAI 등)과 통신하여 비즈니스 로직(결제, 휴가신청 등)을 수행하는 어댑터 서버 (포트: 8082~8084 분산 구성 가능)
--- ---
## ?섍꼍 (Environment) ## 환경 (Environment)
| ??ぉ | 踰꾩쟾 | | 항목 | 버전 |
|------|------| |------|------|
| Java | 21 | | Java | 21 |
| Spring Boot | 4.0.5 | | Spring Boot | 4.0.5 |
| Build Tool | Gradle | | Build Tool | Gradle |
| 二쇱슂 湲곗닠 ?ㅽ깮 | MyBatis, Lombok, MapStruct, P6Spy | | 주요 기술 스택 | MyBatis, Lombok, MapStruct, P6Spy |
| ?곗씠?곕쿋?댁뒪 | H2 (in-memory, 濡쒖뺄 媛쒕컻?? | | 데이터베이스 | H2 (in-memory, 로컬 개발용) |
| ?몄뀡/罹먯떆 ?€?μ냼 | Redis | | 세션/캐시 저장소 | Redis |
| **?μ븷 寃⑸━ / ?쒖뼱** | **Resilience4j (RateLimiter, CircuitBreaker, Retry)** | | **장애 격리 / 제어** | **Resilience4j (RateLimiter, CircuitBreaker, Retry)** |
| **硫붿떆吏€ ??* | **Kafka (?몃옒???? ???€湲곗뿴 ?꾪솚??** | | **메시지 큐** | **Kafka (트래픽 폭주 시 대기열 전환용)** |
--- ---
## ???ㅽ뻾 諛⑸쾿 (How to Run) ## ▶ 실행 방법 (How to Run)
### 1. Gateway & Tool ?쒕쾭 ?ㅽ뻾 (MCP ?곕룞?? ### 1. Gateway & Tool 서버 실행 (MCP 연동용)
- **Gateway ?쒕쾭 湲곕룞:** - **Gateway 서버 기동:**
- `./gradlew bootRun -PmainClass=io.shinhanlife.AxHubGatewayApplication` (湲곕낯 ?ы듃: 8081) - `./gradlew bootRun -PmainClass=io.shinhanlife.AxHubGatewayApplication` (기본 포트: 8081)
- **Tool ?쒕쾭 湲곕룞 (?꾩슂???곕씪 N?€ ?ㅼ????꾩썐 媛€??:** - **Tool 서버 기동 (필요에 따라 N대 스케일 아웃 가능):**
- `./gradlew bootRun -PmainClass=io.shinhanlife.AxHubToolApplication --args="--server.port=8082"` - `./gradlew bootRun -PmainClass=io.shinhanlife.AxHubToolApplication --args="--server.port=8082"`
- Tool ?쒕쾭媛€ 湲곕룞?섎㈃ ?먮룞?쇰줈 Gateway(8081)???먯떊???깅줉(Auto-Registration)?⑸땲?? - Tool 서버가 기동되면 자동으로 Gateway(8081)에 자신을 등록(Auto-Registration)합니다.
- **(?좏깮) ?뱀젙 Tool 洹몃9留??ㅽ뻾?섍린:** - **(선택) 특정 Tool 그룹만 실행하기:**
- ?낅Т ?뱀꽦???곕씪 ?몃텇?붾맂 洹몃9???랁븳 Tool留??꾩슦怨??띕떎硫? ?ㅽ뻾 ?몄닔??`--mcp.tool.target=洹몃9紐???異붽??⑸땲?? - 업무 특성에 따라 세분화된 그룹에 속한 Tool만 띄우고 싶다면, 실행 인수에 `--mcp.tool.target=그룹명`을 추가합니다.
- **吏€?먮릺??洹몃9紐?** - **지원되는 그룹명:**
- `NOTIFICATION`: ?대찓?? SMS 諛쒖넚 - `NOTIFICATION`: 이메일, SMS 발송
- `CLAIM`: 泥?뎄 泥섎━, ?ъ궗 ?곹깭 議고쉶 - `CLAIM`: 청구 처리, 심사 상태 조회
- `POLICY`: 利앷텒 諛쒗뻾, 諛쒗뻾 媛€???щ? 議고쉶 - `POLICY`: 증권 발행, 발행 가능 여부 조회
- `HR`: ?닿? ?깅줉, ?곗감 媛?닔 議고쉶 - `HR`: 휴가 등록, 연차 갯수 조회
- `CONTRACT`: 怨꾩빟 ?곹깭, 怨꾩빟 ?곸꽭 議고쉶 - `CONTRACT`: 계약 상태, 계약 상세 조회
- `CUSTOMER`: 怨좉컼 ?깃툒, 怨좉컼 ?곸꽭 ?뺣낫 議고쉶 - `CUSTOMER`: 고객 등급, 고객 상세 정보 조회
- IntelliJ IDEA: `Run/Debug Configurations` `AxHubToolApplication` `Program arguments` ??`--mcp.tool.target=NOTIFICATION` ?낅젰 - IntelliJ IDEA: `Run/Debug Configurations` `AxHubToolApplication` `Program arguments` `--mcp.tool.target=NOTIFICATION` 입력
### 2. Admin 愿€由ъ옄 ?쒕쾭 ?ㅽ뻾 ### 2. Admin 관리자 서버 실행
- **Admin ?쒕쾭 湲곕룞:** - **Admin 서버 기동:**
- `./gradlew bootRun -PmainClass=io.shinhanlife.AxHubAdminApplication` (?ы듃: 8080) - `./gradlew bootRun -PmainClass=io.shinhanlife.AxHubAdminApplication` (포트: 8080)
--- ---
## ?쨼 AI Agent ?곕룞 ?꾪궎?띿쿂 (MCP & Agent Builder) ## 🤖 AI Agent 연동 아키텍처 (MCP & Agent Builder)
蹂??쒖뒪?쒖? **?ы듃??Two-Track) AI ?곕룞 ?꾪궎?띿쿂**瑜??쒓났?섏뿬 濡쒖뺄 媛쒕컻 ?섍꼍怨??꾨줈?뺤뀡 ?섍꼍 紐⑤몢瑜??꾨꼍?섍쾶 吏€?먰빀?덈떎. 본 시스템은 **투트랙(Two-Track) AI 연동 아키텍처**를 제공하여 로컬 개발 환경과 프로덕션 환경 모두를 완벽하게 지원합니다.
### 1. 濡쒖뺄 肄붾뵫 AI (Antigravity, Cursor, Claude Desktop ?? ?곕룞 ### 1. 로컬 코딩 AI (Antigravity, Cursor, Claude Desktop 등) 연동
?쒖? MCP ?듭떊(Stdio)???붽뎄?섎뒗 濡쒖뺄 AI ?먯씠?꾪듃瑜??꾪빐 ?먮컮 湲곕컲??釉뚮┸吏€ ?ㅽ겕由쏀듃(`McpBridge.java`)瑜??댁옣?섍퀬 ?덉뒿?덈떎. 釉뚮┸吏€媛€ Stdio ?붿껌??HTTP濡?蹂€?섑븯??濡쒖뺄 ?섍꼍??Gateway(?ы듃: 8281)濡??꾨떖?⑸땲?? 표준 MCP 통신(Stdio)을 요구하는 로컬 AI 에이전트를 위해 자바 기반의 브릿지 스크립트(`McpBridge.java`)를 내장하고 있습니다. 브릿지가 Stdio 요청을 HTTP로 변환하여 로컬 환경의 Gateway(포트: 8281)로 전달합니다.
- **?ㅼ젙 諛⑸쾿**: IDE??`mcp_config.json` ?ㅼ젙 ?뚯씪???꾨옒?€ 媛숈씠 ?깅줉?⑸땲?? - **설정 방법**: IDE`mcp_config.json` 설정 파일에 아래와 같이 등록합니다.
```json ```json
"mcpServers": { "mcpServers": {
"axhub-gateway": { "axhub-gateway": {
"command": "java", "command": "java",
"args": ["C:/?덈?寃쎈줈/axhub-backend-main/McpBridge.java"] "args": ["C:/절대경로/axhub-backend-main/McpBridge.java"]
} }
} }
``` ```
- **?뱀젙 移댄뀒怨좊━ ???꾪꽣留?*: `McpBridge.java` ?대???URI ?뚮씪誘명꽣(`?categoryKey=common`)瑜??섏젙?섏뿬 ?먰븯???꾨찓?몄쓽 ?대쭔 ?좏깮?곸쑝濡?AI?먭쾶 ?숈뒿?쒗궗 ???덉뒿?덈떎. - **특정 카테고리 툴 필터링**: `McpBridge.java` 내부의 URI 파라미터(`?categoryKey=common`)를 수정하여 원하는 도메인의 툴만 선택적으로 AI에게 학습시킬 수 있습니다.
### 2. ?꾨줈?뺤뀡 ?대씪?곕뱶 AI (Google Cloud Agent Builder ?? ?곕룞 ### 2. 프로덕션 클라우드 AI (Google Cloud Agent Builder 등) 연동
?ㅼ젣 ?쇱씠釉??쒕퉬?ㅼ뿉???숈옉?섎뒗 ?대씪?곕뱶 Agent Builder??REST API 湲곕컲??OpenAPI Spec???붽뎄?⑸땲?? 실제 라이브 서비스에서 동작하는 클라우드 Agent BuilderREST API 기반의 OpenAPI Spec을 요구합니다.
`axhub-gateway`???대? **Agent Builder 洹쒓꺽??REST API(`/mcp/api/v1/tools/call`)瑜??ㅼ씠?곕툕濡??쒓났**?섎?濡? 蹂꾨룄??釉뚮┸吏€???대뙌???놁씠 Endpoint URL怨?Swagger(OpenAPI) 臾몄꽌留??대씪?곕뱶 肄섏넄???깅줉?섎㈃ 利됱떆 ?쇱씠釉?梨쀫큸/?먯씠?꾪듃濡??쒕퉬?ㅽ븷 ???덉뒿?덈떎. `axhub-gateway`는 이미 **Agent Builder 규격의 REST API(`/mcp/api/v1/tools/call`)를 네이티브로 제공**하므로, 별도의 브릿지나 어댑터 없이 Endpoint URLSwagger(OpenAPI) 문서만 클라우드 콘솔에 등록하면 즉시 라이브 챗봇/에이전트로 서비스할 수 있습니다.
--- ---
## 鍮꾧났媛?Tool 愿€由?諛?Fallback ?곕룞 (Visibility & Routing) ## 비공개 Tool 관리 및 Fallback 연동 (Visibility & Routing)
?€???쒖뒪?쒖? MSA 蹂댁븞 諛??꾪궎?띿쿂 ?먯튃???곕씪 Tool??**?덉??ㅽ듃由??깅줉 ?щ?(?쇱슦??**?€ **API ?몄텧 ?щ?(媛€?쒖꽦)**瑜??꾨꼍??遺꾨━?섏뿬 愿€由ы빀?덈떎. 저희 시스템은 MSA 보안 및 아키텍처 원칙에 따라 Tool의 **레지스트리 등록 여부(라우팅)**와 **API 노출 여부(가시성)**를 완벽히 분리하여 관리합니다.
1. **`visible = false`**: 1. **`visible = false`**:
?덉??ㅽ듃由ъ뿉 ?뺤긽?곸쑝濡??깅줉?섏뼱 寃뚯씠?몄썾?닿? ?숈쟻?쇰줈 ?쇱슦?낇븯吏€留? ?대씪?댁뼵?몄뿉寃??쒓났?섎뒗 `/tools/list` API 紐⑸줉?먯꽌???④꺼吏묐땲?? 레지스트리에 정상적으로 등록되어 게이트웨이가 동적으로 라우팅하지만, 클라이언트에게 제공되는 `/tools/list` API 목록에서는 숨겨집니다.
2. **`register = false`**: 2. **`register = false`**:
?대? ?덉??ㅽ듃由?Redis)?????뺣낫瑜??깅줉?섏? ?딆뒿?덈떎 (?몃? ?덉??ㅽ듃由щ? ?낆옄?곸쑝濡??ъ슜??寃쎌슦 ??. 내부 레지스트리(Redis)에 툴 정보를 등록하지 않습니다 (외부 레지스트리를 독자적으로 사용할 경우 등).
??寃쎌슦 寃뚯씠?몄썾?대뒗 `application.properties`??`mcp.gateway.fallback.routes` ?ㅼ젙??李몄“?섏뿬 **Fallback ?뺤쟻 ?쇱슦??*???섑뻾?섎?濡??곕룞??100% 蹂댁옣?⑸땲?? 이 경우 게이트웨이는 `application.properties``mcp.gateway.fallback.routes` 설정을 참조하여 **Fallback 정적 라우팅**을 수행하므로 연동이 100% 보장됩니다.
```java ```java
@McpFunction( @McpFunction(
name = "secret_tool", name = "secret_tool",
visible = false, // 紐⑸줉 ?④? ?щ? (湲곕낯媛? true) visible = false, // 목록 숨김 여부 (기본값: true)
register = false // ?대? Redis ?깅줉 ?щ? (湲곕낯媛? true) register = false // 내부 Redis 등록 여부 (기본값: true)
) )
``` ```
--- ---
## ?썳截??쒖뒪???덉젙??諛??ㅽ듃?뚰겕 ?쒖뼱 (Resilience & Network) ## 🛡️ 시스템 안정성 및 네트워크 제어 (Resilience & Network)
MSA 諛??몃? ?쒖뒪??MCI) ?곕룞 ?섍꼍???덉젙?깆쓣 ?꾪빐 ?꾨꼍??3-Tier 諛⑹뼱 泥닿퀎瑜?援ъ텞?덉뒿?덈떎. MSA 및 외부 시스템(MCI) 연동 환경의 안정성을 위해 완벽한 3-Tier 방어 체계를 구축했습니다.
1. **Gateway ?쇱슦??諛⑹뼱 (Timeout & Fallback):** 1. **Gateway 라우팅 방어 (Timeout & Fallback):**
- MCP ?쇱슦??`McpRouterController`) ?⑥뿉 1珥??€?꾩븘?껋쓣 媛뺤젣 ?곸슜?섏뿬 ?뱀젙 Tool Pod???묐떟 吏€?곗씠 ?꾩껜 ?쒖뒪???μ븷濡??댁뼱吏€??寃껋쓣 諛⑹??섍퀬 ?좎냽?섍쾶 ?뺤쟻 Fallback ?쇱슦?낆쑝濡??꾪솚?⑸땲?? - MCP 라우터(`McpRouterController`) 단에 1초 타임아웃을 강제 적용하여 특정 Tool Pod의 응답 지연이 전체 시스템 장애로 이어지는 것을 방지하고 신속하게 정적 Fallback 라우팅으로 전환합니다.
2. **MCI ?ㅽ듃?뚰겕 ?덉젙??(HTTP/1.1 Downgrade):** 2. **MCI 네트워크 안정화 (HTTP/1.1 Downgrade):**
- 湲곗〈 HTTP/2 ?ъ슜 ???덇굅???쒖뒪???곕룞 以?媛꾪뿉?곸쑝濡?諛쒖깮?섎뜕 `RST_STREAM` ?ㅻ쪟瑜??먯쿇 李⑤떒?섍린 ?꾪빐, MCI ?꾩슜 `HttpEimsSender`?먮뒗 怨좊룄濡?理쒖쟻?붾맂 **HTTP/1.1 ?꾩슜 而ㅻ꽖???€(Factory)**??怨좎젙 ?곸슜?섏뼱 ?ㅽ듃?뚰겕 ?⑥젅??諛⑹??⑸땲?? - 기존 HTTP/2 사용 시 레거시 시스템 연동 중 간헐적으로 발생하던 `RST_STREAM` 오류를 원천 차단하기 위해, MCI 전용 `HttpEimsSender`에는 고도로 최적화된 **HTTP/1.1 전용 커넥션 풀(Factory)**이 고정 적용되어 네트워크 단절을 방지합니다.
3. **Resilience4j 湲곕컲 ?몃옒???쒖뼱:** 3. **Resilience4j 기반 트래픽 제어:**
- **Gateway 怨꾩링 (?숈쟻 諛⑹뼱):** Tool ?깅줉 ???쒖텧??SLA 硫뷀??곗씠?곕? 湲곕컲?쇰줈 ?숈쟻 CircuitBreaker 諛?RateLimiter瑜?媛€?숉븯硫? ?쒓퀎移?珥덇낵 ??Kafka ?먮줈 鍮꾨룞湲??꾪솚?⑸땲?? - **Gateway 계층 (동적 방어):** Tool 등록 시 제출된 SLA 메타데이터를 기반으로 동적 CircuitBreaker RateLimiter를 가동하며, 한계치 초과 시 Kafka 큐로 비동기 전환합니다.
- **Tool 怨꾩링 (?뺤쟻 諛⑹뼱):** ?덇굅??而ㅻ꽖???대???`@CircuitBreaker`, `@RateLimiter` ?대끂?뚯씠??湲곕컲???μ븷 ?꾪뙆 李⑤떒 濡쒖쭅??2李⑥쟻?쇰줈 媛€?숇맗?덈떎. - **Tool 계층 (정적 방어):** 레거시 커넥터 내부에 `@CircuitBreaker`, `@RateLimiter` 어노테이션 기반의 장애 전파 차단 로직이 2차적으로 가동됩니다.
--- ---
## 紐⑤뱢(Pod) 諛?Tool 肄붾뱶 ?먮룞 ?앹꽦 (Scaffolders) ## 모듈(Pod) Tool 코드 자동 생성 (Scaffolders)
?덈줈???꾨찓?몄쓽 湲곕뒫??異붽?????諛쒖깮?섎뒗 諛섎났?곸씤 ?ㅼ젙(蹂댁씪?ы뵆?덉씠?? ?ㅼ젙 ?뚯씪 蹂듭궗 ????1珥?留뚯뿉 ?먮룞?뷀븯湲??꾪빐 **AXHUB Developer Portal (Web UI)** 諛?**CLI ?ㅼ틦?대뜑 2醫?*???쒓났?⑸땲?? 새로운 도메인의 기능을 추가할 때 발생하는 반복적인 설정(보일러플레이트, 설정 파일 복사 등)을 1초 만에 자동화하기 위해 **AXHUB Developer Portal (Web UI)** **CLI 스캐폴더 2종**을 제공합니다.
### 1. AXHUB Developer Portal (Web UI) - 媛€??異붿쿇?섎뒗 諛⑹떇! ### 1. AXHUB Developer Portal (Web UI) - 가장 추천하는 방식!
?댁젣 ???댁긽 ?곕??먯뿉??紐낅졊?대? 移??꾩슂媛€ ?놁뒿?덈떎. Gateway 紐⑤뱢???댁옣?????붾㈃?먯꽌 鍮덉뭏留?梨꾩슦硫?肄붾뱶媛€ 留덈쾿泥섎읆 李랁? ?섏샃?덈떎. 이제 더 이상 터미널에서 명령어를 칠 필요가 없습니다. Gateway 모듈에 내장된 웹 화면에서 빈칸만 채우면 코드가 마법처럼 찍혀 나옵니다.
1. **?묒냽 諛⑸쾿**: Gateway ?쒕쾭 湲곕룞 ??釉뚮씪?곗??먯꽌 `http://localhost:8081/admin/scaffold.html` ?묒냽 1. **접속 방법**: Gateway 서버 기동 후 브라우저에서 `http://localhost:8081/admin/scaffold.html` 접속
2. **Pod (紐⑤뱢) ?앹꽦 ??*: 紐⑤뱢紐??? hr)怨??ы듃留??낅젰?섎㈃ ?낅┰?곸씤 Spring Boot 紐⑤뱢???붾젆?좊━遺€??鍮뚮뱶 ?ㅽ겕由쏀듃源뚯? ?꾨꼍???앹꽦?⑸땲?? 2. **Pod (모듈) 생성 탭**: 모듈명(예: hr)과 포트만 입력하면 독립적인 Spring Boot 모듈이 디렉토리부터 빌드 스크립트까지 완벽히 생성됩니다.
3. **Tool (湲곕뒫) ?앹꽦 ??*: ?앹꽦??紐⑤뱢???덈줈?????쒕퉬??DTO) 肄붾뱶瑜??먮룞?쇰줈 二쇱엯?⑸땲?? 3. **Tool (기능) 생성 탭**: 생성된 모듈에 새로운 툴(서비스/DTO) 코드를 자동으로 주입합니다.
### 2. CLI ?ㅼ틦?대뜑 (湲곗〈 ?곕???諛⑹떇) ### 2. CLI 스캐폴더 (기존 터미널 방식)
???붾㈃???ъ슜?????녿뒗 ?섍꼍?닿굅???곕??먯씠 ?듭닕??寃쎌슦, ?꾨옒 紐낅졊?대? ?듯빐 CLI 留덈쾿?щ? ?ъ슜?????덉뒿?덈떎. 웹 화면을 사용할 수 없는 환경이거나 터미널이 익숙한 경우, 아래 명령어를 통해 CLI 마법사를 사용할 수 있습니다.
### 1???덈줈??Pod(紐⑤뱢) ?꾩껜瑜??앹꽦???? `PodScaffolder` ### 1⃣ 새로운 Pod(모듈) 전체를 생성할 때: `PodScaffolder`
?덈줈???꾨찓???? 寃곗젣, HR)???꾪븳 ?꾩쟾???낅┰?곸씤 Spring Boot 紐⑤뱢???앹꽦?⑸땲?? ?대뜑 援ъ“, 鍮뚮뱶 ?ㅽ겕由쏀듃, 媛곸쥌 ?꾨줈?쇳떚 諛??꾩빱 ?ㅼ젙源뚯? ?꾨꼍?섍쾶 ?명똿?⑸땲?? 새로운 도메인(예: 결제, HR)을 위한 완전히 독립적인 Spring Boot 모듈을 생성합니다. 폴더 구조, 빌드 스크립트, 각종 프로퍼티 및 도커 설정까지 완벽하게 세팅됩니다.
```bash ```bash
# ?ъ슜踰? javac濡?而댄뙆?????ㅽ뻾 # 사용법: javac로 컴파일 후 실행
javac -encoding UTF-8 axhub-common/src/main/java/io/shinhanlife/axhub/common/util/PodScaffolder.java javac -encoding UTF-8 axhub-common/src/main/java/io/shinhanlife/axhub/common/util/PodScaffolder.java
java -cp axhub-common/src/main/java io.shinhanlife.axhub.common.util.PodScaffolder [紐⑤뱢紐? [?ы듃踰덊샇] java -cp axhub-common/src/main/java io.shinhanlife.axhub.common.util.PodScaffolder [모듈명] [포트번호]
# ?ㅽ뻾 ?덉떆 (axhub-tool-hr 紐⑤뱢??8086 ?ы듃濡??앹꽦) # 실행 예시 (axhub-tool-hr 모듈을 8086 포트로 생성)
java -cp axhub-common/src/main/java io.shinhanlife.axhub.common.util.PodScaffolder hr 8086 java -cp axhub-common/src/main/java io.shinhanlife.axhub.common.util.PodScaffolder hr 8086
``` ```
### 2???앹꽦??紐⑤뱢???덈줈????Function)??異붽????? `ToolScaffolder` ### 2⃣ 생성된 모듈에 새로운 툴(Function)을 추가할 때: `ToolScaffolder`
?대끂?뚯씠??`@McpTool`, `@McpFunction`)???꾨꼍???щ┛ Service?€ ?낆텧??DTO 肄붾뱶瑜?吏€?뺣맂 紐⑤뱢 ?⑦궎吏€ 猷곗뿉 留욎떠 ?먮룞 ?앹꽦?⑸땲?? 어노테이션(`@McpTool`, `@McpFunction`)이 완벽히 달린 Service와 입출력 DTO 코드를 지정된 모듈 패키지 룰에 맞춰 자동 생성합니다.
```bash ```bash
# ?ъ슜踰? javac濡?而댄뙆?????ㅽ뻾 # 사용법: javac로 컴파일 후 실행
javac -encoding UTF-8 axhub-common/src/main/java/io/shinhanlife/axhub/common/util/ToolScaffolder.java javac -encoding UTF-8 axhub-common/src/main/java/io/shinhanlife/axhub/common/util/ToolScaffolder.java
java -cp axhub-common/src/main/java io.shinhanlife.axhub.common.util.ToolScaffolder [Tool?대쫫] [?명꽣?섏씠?짪D] "[湲곕뒫?ㅻ챸]" "[洹몃9紐?" "[?듭떊諛⑹떇]" "[紐⑤뱢紐?" java -cp axhub-common/src/main/java io.shinhanlife.axhub.common.util.ToolScaffolder [Tool이름] [인터페이스ID] "[기능설명]" "[그룹명]" "[통신방식]" "[모듈명]"
# ?ㅽ뻾 ?덉떆 (payment 紐⑤뱢??寃곗젣 ?뱀씤 湲곕뒫 異붽?) # 실행 예시 (payment 모듈에 결제 승인 기능 추가)
java -cp axhub-common/src/main/java io.shinhanlife.axhub.common.util.ToolScaffolder PaymentApproval PAY_001 "寃곗젣 ?뱀씤 泥섎━ 湲곕뒫" "COMMON" "HTTP" "axhub-tool-payment" java -cp axhub-common/src/main/java io.shinhanlife.axhub.common.util.ToolScaffolder PaymentApproval PAY_001 "결제 승인 처리 기능" "COMMON" "HTTP" "axhub-tool-payment"
``` ```
--- ---
## ?⑦궎吏€ 援ъ“ (Package Structure) ## 패키지 구조 (Package Structure)
```text ```text
axhub-backend-main (Root) axhub-backend-main (Root)
?쒋??€ axhub-gateway # MCP ?쇱슦???덈툕 ?쒕쾭 (?몃? LLM怨??듭떊 諛?Tool 遺꾨같) ├── axhub-gateway # MCP 라우팅 허브 서버 (외부 LLM과 통신 및 Tool 분배)
?쒋??€ axhub-common # 怨듯넻 紐⑤뱢 (Security, Session, Config ?? ├── axhub-common # 공통 모듈 (Security, Session, Config 등)
?쒋??€ axhub-tool-core # Tool 怨듯넻 湲곕뒫 (AbstractMcpToolService, Annotation, Scaffolder) ├── axhub-tool-core # Tool 공통 기능 (AbstractMcpToolService, Annotation, Scaffolder)
?쒋??€ axhub-tool-email # [Tool] ?대찓??諛쒖넚 ?뱁솕 ?대뙌??紐⑤뱢 ├── axhub-tool-email # [Tool] 이메일 발송 특화 어댑터 모듈
?쒋??€ axhub-tool-sms # [Tool] SMS 諛쒖넚 ?뱁솕 ?대뙌??紐⑤뱢 ├── axhub-tool-sms # [Tool] SMS 발송 특화 어댑터 모듈
?쒋??€ axhub-tool-payment # [Tool] 寃곗젣 鍮꾩쫰?덉뒪 ?대뙌??紐⑤뱢 (Scaffolded) ├── axhub-tool-payment # [Tool] 결제 비즈니스 어댑터 모듈 (Scaffolded)
?붴??€ axhub-tool-other # [Tool] 湲고? 鍮꾩쫰?덉뒪(泥?뎄, 怨꾩빟, 怨좉컼, HR ?? ?대뙌??紐⑤뱢 └── axhub-tool-other # [Tool] 기타 비즈니스(청구, 계약, 고객, HR 등) 어댑터 모듈
``` ```
*(李멸퀬: 湲곗〈 ?⑥씪 紐⑤뱢 ?꾨줈?앺듃?먯꽌 留덉씠?щ줈?쒕퉬???뺤옣???꾪빐 紐⑤뱢蹂꾨줈 遺꾨━?섏뿀?쇰ʼn, 媛?Tool ?쒕쾭???낅┰?곸쑝濡??뺤옣 諛?諛고룷?????덉뒿?덈떎.)* *(참고: 기존 단일 모듈 프로젝트에서 마이크로서비스 확장을 위해 모듈별로 분리되었으며, 각 Tool 서버는 독립적으로 확장 및 배포할 수 있습니다.)*