# 🌐 κ²½λΆλŒ€ν•™κ΅ AI μ—μ΄μ „νŠΈ λ„€νŠΈμ›Œν¬ 연ꡬ싀 (ANL) 곡식 μ›Ήμ‚¬μ΄νŠΈ > **AI Agent Networking Laboratory (ANL), School of Computer Science and Engineering, Kyungpook National University** > > λ³Έ λ¦¬ν¬μ§€ν† λ¦¬λŠ” κ²½λΆλŒ€ν•™κ΅ 컴퓨터학뢀 AI μ—μ΄μ „νŠΈ λ„€νŠΈμ›Œν¬ μ—°κ΅¬μ‹€μ˜ 곡식 μ›Ήμ‚¬μ΄νŠΈ 및 데이터 관리 λŒ€μ‹œλ³΄λ“œ μ‹œμŠ€ν…œμž…λ‹ˆλ‹€. > **Next.js 14+ 정적 읡슀포트(Static Export) & ν΄λΌμ΄μ–ΈνŠΈ λ Œλ”λ§(CSR)**, **Go (Gin) κ³ μ„±λŠ₯ 단일 톡합 μ›Ή/REST API μ„œλ²„**, **SQLite νŠΈλžœμž­μ…˜ λ°μ΄ν„°λ² μ΄μŠ€**, 그리고 **단일 μ»¨ν…Œμ΄λ„ˆ Docker 배포 ν™˜κ²½**으둜 κ΅¬μΆ•λ˜μ—ˆμŠ΅λ‹ˆλ‹€. --- ## πŸ“Œ 1. 연ꡬ싀 κ°œμš” 및 핡심 연ꡬ λΆ„μ•Ό (Lab Overview & Research Focus) - **연ꡬ싀λͺ…**: AI μ—μ΄μ „νŠΈ λ„€νŠΈμ›Œν¬ 연ꡬ싀 (ANL / AI Agent Networking Laboratory) - **μ†Œμ†**: κ²½λΆλŒ€ν•™κ΅ ITλŒ€ν•™ 컴퓨터학뢀 - **μ§€λ„κ΅μˆ˜**: 고석주 ꡐ수 (Prof. Seok-Joo Koh / `sjkoh@knu.ac.kr`) - **연ꡬ νŒ¨λŸ¬λ‹€μž„**: - **Present & Future**: **MCP & SKILL**, **λ©€ν‹°μ—μ΄μ „νŠΈ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ (HERDR, crewAI, LangGraph)**, **이쒅 μ—μ΄μ „νŠΈ μƒν˜Έμš΄μš©μ„± ν‘œμ€€ (ACP, A2A)**, 및 **AIoT gRPC/QUIC κ³ μ„±λŠ₯ 톡신 λ°±λ³Έ** --- ## πŸ’‘ 2. 핡심 연ꡬ λΆ„μ•Ό (Core Research Areas) ### πŸ”Œ 1) AI Agent κΈ°λŠ₯ ν™•μž₯ ν”„λ‘œν† μ½œ (MCP & SKILL) - **MCP (Model Context Protocol)**: Anthropic μ œμ • μ˜€ν”ˆ 규격으둜 도ꡬ, 데이터 λ¦¬μ†ŒμŠ€, ν”„λ‘¬ν”„νŠΈ ν‘œμ€€ μΈν„°νŽ˜μ΄μŠ€ 연동 - **SKILL (자율 ν™•μž₯ 도ꡬ νŒ¨ν‚€μ§€)**: μ‹€ν–‰ μ½”λ“œ + 도ꡬ λͺ…μ„Έ + Few-shot이 κ²°ν•©λœ λͺ¨λ“ˆν˜• μ—μ΄μ „νŠΈ κΈ°λŠ₯ ν™•μž₯ - **CLI 자율 μ½”λ”© μ—μ΄μ „νŠΈ**: Claude Code, Antigravity CLI λ“± 터미널 기반 자율 μ†Œν”„νŠΈμ›¨μ–΄ μ—”μ§€λ‹ˆμ–΄λ§ ### πŸ€– 2) λ©€ν‹° μ—μ΄μ „νŠΈ ν˜‘μ—… 및 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ (Multi-Agent Orchestration) - **이쒅 μ—μ΄μ „νŠΈ ꡐ차 검증**: μ„œλ‘œ λ‹€λ₯Έ LLM λͺ¨λΈ(Planner, Creator, Reviewer) κ°„ 비평/ν•©μ˜ λ£¨ν”„λ‘œ 무결성 확보 - **μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ 인프라 μ½”μ–΄**: - **HERDR**: 가상 λ°±κ·ΈλΌμš΄λ“œ ν”„λ‘œμ„ΈμŠ€ 격리 및 μ—μ΄μ „νŠΈ μ„Έμ…˜ TUI κ΄€μ œ - **LangGraph & crewAI**: μƒνƒœ λ³΄μ‘΄ν˜• μˆœν™˜ κ·Έλž˜ν”„, μ—­ν•  기반 λΆ„μ—… 및 μ˜ˆμ™Έ λ‘€λ°± 처리 ### 🌐 3) μ—μ΄μ „νŠΈ μƒν˜Έμš΄μš©μ„± κ°œλ°©ν˜• ν‘œμ€€ (Agent Interoperability: ACP & A2A) - **ACP (Agent Communication Protocol)**: IBM Research μ œμ • μ„œλΉ„μŠ€ 발견 및 νƒœμŠ€ν¬ μœ„μž„ μ˜€ν”ˆ ν‘œμ€€ - **A2A (Agent-to-Agent Protocol)**: Google/Linux Foundation 주도 이쒅 μ—μ΄μ „νŠΈ κ°„ ν‘œμ€€ λ©”μ‹œμ§€ κ΅ν™˜ 톡신 ν‘œμ€€ - **Agent Card (`/.well-known/agent-card.json`)**: μ—μ΄μ „νŠΈ μ—­λŸ‰(Capabilities) 및 λ³΄μ•ˆ 사양 ν‘œμ€€ ν”„λ‘œν•„ ### ⚑ 4) μ§€λŠ₯ν˜• 사물인터넷 (AIoT) & κ³ μ„±λŠ₯ λ°±λ³Έ (AIoT & gRPC/QUIC) - **AIoT λΆ„μ‚° 자율 μ œμ–΄**: μ„Όμ„œ 계측과 μ—£μ§€ μ—°μ‚° 계측 κ°„ λ©€ν‹° μ—μ΄μ „νŠΈ λΆ„μ‚° 배치 - **gRPC & QUIC μ–‘λ°©ν–₯ 슀트리밍**: HTTP/2 & HTTP/3 기반 고속 λ°”μ΄λ„ˆλ¦¬ λ©€ν‹°λͺ¨λ‹¬ 전솑 --- ## πŸ—οΈ 3. μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜ (System Architecture) ```mermaid graph TD User["🌐 User / Browser"] Admin["πŸ‘‘ Admin User"] subgraph Docker_App ["Unified Single Container (anl-app:8080)"] subgraph Go_Gin_Server ["Go Gin Unified Server Engine"] Router["Static File Server & SPA Fallback (/web)"] APIRouter["REST API Router (/api/v1) & CORS"] AuthMW["RequireAdminToken Middleware"] Handlers["CRUD Handlers (Home, Members, Pubs, Lectures, Standards)"] Repo["Repository Layer & Transaction Order Normalizer"] end subgraph Static_Web ["Static Exported Frontend (/app/web)"] PublicPages["Public Pages (CSR + SSG Shell)
/, /members, /publications, /lectures, /standardization"] AdminConsole["Admin Dashboard (/console)
Research Projects, Areas, Members, Pubs, Lectures, Standards"] API_Client["Origin-Relative API Client (/api/v1)"] end subgraph Storage ["Persistent Storage (anl-sqlite-storage / ./volumes/data)"] SQLiteDB[("SQLite Database
/app/data/anl.db")] end end User -->|HTTP :8080| Router Admin -->|Bearer Auth :8080| Router Router --> PublicPages Router --> AdminConsole PublicPages --> API_Client AdminConsole --> API_Client API_Client -->|Internal Route /api/v1| APIRouter APIRouter --> AuthMW AuthMW --> Handlers Handlers --> Repo Repo --> SQLiteDB ``` --- ## πŸ“ 4. 디렉터리 ꡬ쑰 (Directory Structure) ``` landing_page/ β”œβ”€β”€ README.md # [λ³Έ λ¬Έμ„œ] μ’…ν•© ν”„λ‘œμ νŠΈ κ°€μ΄λ“œ 및 배포/운영 λ¬Έμ„œ β”œβ”€β”€ docker-compose.yml # 톡합 단일 μ»¨ν…Œμ΄λ„ˆ (anl-app) Compose μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ β”œβ”€β”€ .env.example # ν™˜κ²½λ³€μˆ˜ μ„€μ • ν…œν”Œλ¦Ώ β”‚ β”œβ”€β”€ backend/ # ⚑ [톡합 Go λ°±μ—”λ“œ & 정적 μ›Ή μ„œλΉ™ μ„œλ²„] β”‚ β”œβ”€β”€ cmd/ # μ§„μž…μ  (api: 톡합 μ„œλ²„, seed: μ‹œλ”, export-content) β”‚ β”œβ”€β”€ internal/ # λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 (handlers, repository, router, config, httpx) β”‚ β”œβ”€β”€ db/backup/ # πŸ’Ύ λ°μ΄ν„°λ² μ΄μŠ€ λ°±μ—… (anl.db λ°”μ΄λ„ˆλ¦¬, anl_dump.sql 전체 덀프) β”‚ β”œβ”€β”€ seed/data/ # 초기 μ›μ‹œ JSON μ‹œλ“œ 데이터 β”‚ β”œβ”€β”€ Dockerfile # 3단계 톡합 Multi-stage Dockerfile (Node λΉŒλ“œ + Go λΉŒλ“œ + Alpine λŸ°νƒ€μž„) β”‚ β”œβ”€β”€ Makefile # λΉŒλ“œ, ν…ŒμŠ€νŠΈ, 포맷, λ°±μ—…(make backup-db) νƒ€κ²Ÿ β”‚ └── go.mod # Go λͺ¨λ“ˆ μ˜μ‘΄μ„± μ •μ˜ β”‚ β”œβ”€β”€ refer_landing_page/ # πŸš€ [Next.js 14 ν”„λ‘ νŠΈμ—”λ“œ & κ΄€λ¦¬μž μ½˜μ†” μ†ŒμŠ€] β”‚ β”œβ”€β”€ app/ # App Router νŽ˜μ΄μ§€ (곡개 νŽ˜μ΄μ§€ 및 /console κ΄€λ¦¬μž λŒ€μ‹œλ³΄λ“œ) β”‚ β”œβ”€β”€ components/ # UI μ»΄ν¬λ„ŒνŠΈ (Header, Footer, Reveal, Counter, Marquee λ“±) β”‚ β”œβ”€β”€ lib/ # API 톡신 ν΄λΌμ΄μ–ΈνŠΈ (api.ts: 쑰회, adminApi.ts: CRUD) β”‚ β”œβ”€β”€ docs/ # λ””μžμΈ μ‹œμŠ€ν…œ (DESIGN.md: Issue 01 에디토리얼 μŠ€νƒ€μΌ) β”‚ β”œβ”€β”€ scripts/ # E2E ν…ŒμŠ€νŠΈ μŠ€μœ„νŠΈ 및 데이터 검증 λŸ¬λ„ˆ β”‚ β”œβ”€β”€ next.config.js # output: "export" 정적 읡슀포트 μ„€μ • β”‚ └── package.json # Next.js, React, Tailwind CSS μ˜μ‘΄μ„± β”‚ β”œβ”€β”€ .agents/ # πŸ€– λ©€ν‹° μ—μ΄μ „νŠΈ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ μŠ€ν‚¬ & λ£°μ…‹ (MAM) β”œβ”€β”€ .mam/ # ⚑ μ—μ΄μ „νŠΈ μ„Έμ…˜ DB 및 HERDR 격리 λ ˆμ§€μŠ€νŠΈλ¦¬ └── ISL-2026/ # πŸ“„ λ ˆκ±°μ‹œ μ‹€μΈ‘ 원본 HTML/CSS μ•„μΉ΄μ΄λΈŒ ``` --- ## πŸš€ 5. Docker μ»¨ν…Œμ΄λ„ˆ 배포 및 운영 κ°€μ΄λ“œ (Production Deployment) 단일 μ»¨ν…Œμ΄λ„ˆ(Single Unified Container)λ₯Ό 톡해 ν”„λ‘ νŠΈμ—”λ“œ 정적 μ›Ή 에셋과 Go λ°±μ—”λ“œ APIλ₯Ό λ™μ‹œμ— λΉŒλ“œν•˜κ³  λ°°ν¬ν•©λ‹ˆλ‹€. ### 1) μ €μž₯μ†Œ 클둠 및 ν™˜κ²½ μ„€μ • ```bash # 1. μ €μž₯μ†Œ 클둠 git clone <리포지토리_URL> landing_page cd landing_page # 2. ν™˜κ²½λ³€μˆ˜ 파일 생성 cp .env.example .env # (선택) .env νŒŒμΌμ—μ„œ κ΄€λ¦¬μž 토큰(ADMIN_TOKEN) 및 포트(APP_PORT) μ„€μ • ``` ### 2) μ»¨ν…Œμ΄λ„ˆ 이미지 λΉŒλ“œ ```bash # 톡합 단일 μ»¨ν…Œμ΄λ„ˆ (anl-app) λΉŒλ“œ docker compose build # (선택) μΊμ‹œ 없이 전체 μž¬λΉŒλ“œ μ‹œ docker compose build --no-cache ``` ### 3) μ„œλΉ„μŠ€ λ°±κ·ΈλΌμš΄λ“œ 배포 및 μ‹€ν–‰ ```bash # 1. μ»¨ν…Œμ΄λ„ˆ λ°±κ·ΈλΌμš΄λ“œ μ‹€ν–‰ docker compose up -d # 2. μ‹€ν–‰ μƒνƒœ 및 ν—¬μŠ€μ²΄ν¬ 확인 (anl-app) docker compose ps # 3. μ‹€μ‹œκ°„ 둜그 λͺ¨λ‹ˆν„°λ§ docker compose logs -f ``` ### 4) μ„œλΉ„μŠ€ 접속 URL - **🌐 곡식 ν™ˆνŽ˜μ΄μ§€**: [`http://localhost:8080`](http://localhost:8080) - **πŸ‘‘ κ΄€λ¦¬μž λŒ€μ‹œλ³΄λ“œ**: [`http://localhost:8080/console`](http://localhost:8080/console) (둜그인 토큰: `.env`에 μ„€μ •λœ `ADMIN_TOKEN`) - **⚑ λ°±μ—”λ“œ REST API**: [`http://localhost:8080/api/v1`](http://localhost:8080/api/v1) - **πŸ’“ API ν—¬μŠ€μ²΄ν¬**: [`http://localhost:8080/api/v1/health`](http://localhost:8080/api/v1/health) ### 5) πŸ“‚ 호슀트 디렉터리 λ°”μΈλ“œ 마운트 (`./volumes/data`)둜 λ³€κ²½ν•˜λŠ” 방법 κΈ°λ³Έ λͺ…λͺ…λœ λ³Όλ₯¨ λŒ€μ‹  호슀트 둜컬 폴더에 SQLite DBλ₯Ό 직접 λ§ˆμš΄νŠΈν•˜μ—¬ κ΄€λ¦¬ν•˜κ³  μ‹Άλ‹€λ©΄: 1. `docker-compose.yml`의 `anl-app` λ³Όλ₯¨ 섀정을 μˆ˜μ •ν•©λ‹ˆλ‹€: ```yaml services: anl-app: # ... volumes: - ./volumes/data:/app/data ``` 2. 파일 맨 μ•„λž˜μ˜ `volumes:` μ„Ήμ…˜μ„ 주석 μ²˜λ¦¬ν•˜κ±°λ‚˜ μ œκ±°ν•©λ‹ˆλ‹€. 3. 호슀트 디렉터리 생성 및 DB 배치: ```bash mkdir -p volumes/data cp backend/db/backup/anl.db volumes/data/anl.db ``` 4. μ»¨ν…Œμ΄λ„ˆ μž¬μ‹œμž‘: `docker compose down && docker compose up -d` ### 6) μ»¨ν…Œμ΄λ„ˆ 관리 및 쀑지 ```bash # μ„œλΉ„μŠ€ μž¬μ‹œμž‘ docker compose restart # μ„œλΉ„μŠ€ 쀑지 및 μ»¨ν…Œμ΄λ„ˆ 제거 (λ°μ΄ν„°λ² μ΄μŠ€ λ³Όλ₯¨μ€ μ•ˆμ „ν•˜κ²Œ 보쑴됨) docker compose down # (주의) λ°μ΄ν„°λ² μ΄μŠ€ λ³Όλ₯¨κΉŒμ§€ μ™„μ „νžˆ μ‚­μ œν•˜κ³  μ΄ˆκΈ°ν™”ν•  λ•Œ docker compose down -v ``` --- ## πŸ› οΈ 6. 둜컬 개발 및 μ‹€ν–‰ κ°€μ΄λ“œ (Getting Started) ### πŸ…°οΈ Backend (Go REST API & Web Server) 개발 κ°€μ΄λ“œ ```bash cd backend cp .env.example .env # λ°μ΄ν„°λ² μ΄μŠ€ μ‹œλ“œ 및 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ μ‹€ν–‰ make migrate-seed # λ°±μ—”λ“œ μ„œλ²„ 둜컬 ꡬ동 (κΈ°λ³Έ 포트: 8080) go run ./cmd/api --db anl.db --admin-token dev_admin_secret_token_12345 ``` ### πŸ…±οΈ Frontend (Next.js 14) 개발 κ°€μ΄λ“œ ```bash cd refer_landing_page # 쒅속성 μ„€μΉ˜ npm install # 개발 μ„œλ²„ μ‹€ν–‰ (Next.js dev μ„œλ²„: http://localhost:3000) npm run dev # 정적 읡슀포트 λΉŒλ“œ 검증 (out/ 디렉터리 생성) npm run build ``` --- ## πŸ§ͺ 7. ν’ˆμ§ˆ 검증 및 E2E ν…ŒμŠ€νŠΈ μŠ€μœ„νŠΈ (12 Quality Gates) ```bash cd refer_landing_page python3 scripts/run_e2e_tests.py ``` λͺ¨λ“  12개 ν’ˆμ§ˆ 게이트(Static Build Completeness, TypeScript, ESLint, SQLite Baseline, Live Unified Go Server Routes, DOM Content, Layout Architecture, WCAG Contrast λ“±)κ°€ 100% λ¬΄κ²°ν•˜κ²Œ κ²€μ¦λ©λ‹ˆλ‹€.