From ea26ef503ecc66c95de52279fd2f8e942bac3e7f Mon Sep 17 00:00:00 2001 From: Godopu Date: Thu, 30 Jul 2026 10:34:22 +0900 Subject: [PATCH] feat: complete ANL lab web application with lossless data migration and SSG routes --- .../app/_components/DirectionsBlock.tsx | 87 + .../_components/HeroComposition.tsx | 0 refer_landing_page/app/intro/page.tsx | 313 --- refer_landing_page/app/lectures/page.tsx | 213 +- refer_landing_page/app/members/page.tsx | 349 +-- refer_landing_page/app/page.tsx | 215 ++ .../app/publications/[category]/page.tsx | 146 ++ .../publications/_components/CategoryNav.tsx | 45 + refer_landing_page/app/publications/page.tsx | 283 ++- refer_landing_page/app/robots.ts | 11 + refer_landing_page/app/sitemap.ts | 48 + .../app/standardization/page.tsx | 262 +-- refer_landing_page/components/Header.tsx | 6 +- refer_landing_page/content/categories.ts | 31 + refer_landing_page/content/lectures.ts | 804 +++++++ refer_landing_page/content/members.ts | 544 +++++ refer_landing_page/content/publications.ts | 1895 +++++++++++++++++ refer_landing_page/content/standards.ts | 387 ++++ refer_landing_page/content/types.ts | 83 + refer_landing_page/next.config.js | 9 + .../__pycache__/generate_all.cpython-314.pyc | Bin 0 -> 23547 bytes .../scripts/extract/generate_all.py | 421 ++++ .../scripts/extract/verify_counts.py | 56 + 23 files changed, 5326 insertions(+), 882 deletions(-) create mode 100644 refer_landing_page/app/_components/DirectionsBlock.tsx rename refer_landing_page/app/{intro => }/_components/HeroComposition.tsx (100%) delete mode 100644 refer_landing_page/app/intro/page.tsx create mode 100644 refer_landing_page/app/page.tsx create mode 100644 refer_landing_page/app/publications/[category]/page.tsx create mode 100644 refer_landing_page/app/publications/_components/CategoryNav.tsx create mode 100644 refer_landing_page/app/robots.ts create mode 100644 refer_landing_page/app/sitemap.ts create mode 100644 refer_landing_page/content/categories.ts create mode 100644 refer_landing_page/content/lectures.ts create mode 100644 refer_landing_page/content/members.ts create mode 100644 refer_landing_page/content/publications.ts create mode 100644 refer_landing_page/content/standards.ts create mode 100644 refer_landing_page/content/types.ts create mode 100644 refer_landing_page/scripts/extract/__pycache__/generate_all.cpython-314.pyc create mode 100644 refer_landing_page/scripts/extract/generate_all.py create mode 100644 refer_landing_page/scripts/extract/verify_counts.py diff --git a/refer_landing_page/app/_components/DirectionsBlock.tsx b/refer_landing_page/app/_components/DirectionsBlock.tsx new file mode 100644 index 0000000..fb979f2 --- /dev/null +++ b/refer_landing_page/app/_components/DirectionsBlock.tsx @@ -0,0 +1,87 @@ +import React from "react"; + +export function DirectionsBlock() { + return ( +
+
+ + + Location & Contact + +
+ +
+ {/* Left info column */} +
+

+ 오시는 길 & 연구실 소재지 +

+

+ 경북대학교 AI 에이전트 네트워크 연구실 (ANL)은 IT대학 5호관에 위치하고 있으며, 차세대 차세대 에이전트 오케스트레이션 및 고성능 네트워크 백본 연구를 수행합니다. +

+ +
+
+ + 소재지 + +
+

+ 경북대학교 IT대학 5호관(415동) 527호 +

+

+ School of Computer Science and Engineering, Kyungpook National University +

+
+
+ +
+ + 지도교수 + + + 고석주 교수 (sjkoh@knu.ac.kr) + +
+ + +
+
+ + {/* Right card column */} +
+
+
+ Research Environment +
+

+ AI Agent Networking Lab +

+

+ QUIC/gRPC 스트리밍 통신 인프라와 컨테이너 격리 프로세스 격리 환경을 포함한 멀티 에이전트 실험실 공간을 운용합니다. +

+
+
+ IT-5 Building #527 + ANL Laboratory +
+
+
+
+ ); +} diff --git a/refer_landing_page/app/intro/_components/HeroComposition.tsx b/refer_landing_page/app/_components/HeroComposition.tsx similarity index 100% rename from refer_landing_page/app/intro/_components/HeroComposition.tsx rename to refer_landing_page/app/_components/HeroComposition.tsx diff --git a/refer_landing_page/app/intro/page.tsx b/refer_landing_page/app/intro/page.tsx deleted file mode 100644 index 107513f..0000000 --- a/refer_landing_page/app/intro/page.tsx +++ /dev/null @@ -1,313 +0,0 @@ -import type { Metadata } from "next"; -import Link from "next/link"; -import Reveal from "@/components/Reveal"; -import Marquee from "@/components/Marquee"; -import Counter from "@/components/Counter"; -import SectionLabel from "@/components/SectionLabel"; -import HeroComposition from "./_components/HeroComposition"; - -export const metadata: Metadata = { - title: "연구실 소개 (Intro)", - description: - "QUIC, gRPC, A2A 기반 에이전트 통신 및 멀티에이전트 오케스트레이션을 연구하는 경북대학교 AI 에이전트 네트워크 연구실 (ANL) 소개.", -}; - -// CUSTOMIZATION HOOK: the five research pillars (5 Pillars, Option A). -const pillars = [ - { - no: "Pillar 01", - tag: "Agent Eng", - accent: "vermillion" as const, - ko: "AI 에이전트 3대 핵심 엔지니어링", - en: "Agent Core Engineering", - desc: "프롬프트, 컨텍스트, 하네스 엔지니어링을 결합하여 대화 상태 보존, 외부 기억 바인딩, 도구 연동 인터페이스를 설계하고 자율 추론 경로를 최적화합니다.", - points: [ - "역할 페르소나 및 Few-shot 최적화", - "동적 컨텍스트 윈도우 & Memory 바인딩", - "물리적 도구(Tool Use) 하네스 연결", - ], - }, - { - no: "Pillar 02", - tag: "MCP & SKILL", - accent: "cobalt" as const, - ko: "AI Agent 기능 확장 프로토콜", - en: "Extensibility & Protocol", - desc: "Anthropic MCP 통일 호환 규격 및 코드+스키마+Few-shot이 패키징된 SKILL 모듈을 통해 에이전트의 로컬/원격 역량을 자율적으로 동적 확장합니다.", - points: [ - "MCP (Model Context Protocol) 통일 규격", - "자율 확장 SKILL 모듈 패키징", - "CLI 기반 자율 코딩 에이전트 제어", - ], - }, - { - no: "Pillar 03", - tag: "Orchestration", - accent: "vermillion" as const, - ko: "멀티 에이전트 협업 및 오케스트레이션", - en: "Multi-Agent Systems", - desc: "단일 에이전트의 환각과 컨텍스트 인지 한계를 극복하기 위해 역할 세분화(Role Specialization) 및 이종 모델 교차 검증과 오케스트레이션 인프라를 구축합니다.", - points: [ - "HERDR 백그라운드 프로세스 컨테이너 격리", - "crewAI 역할/목표 기반 크루 프로세스", - "LangGraph 상태 보존형 순환 그래프 제어", - ], - }, - { - no: "Pillar 04", - tag: "A2A & ACP", - accent: "cobalt" as const, - ko: "에이전트 상호운용성 개방형 표준", - en: "Interoperability Standards", - desc: "Linux Foundation A2A 및 IBM ACP 오픈 표준 기반으로 이종 에이전트 간 서비스 발견, 태스크 위임, Agent Card 프로필 명세를 구현합니다.", - points: [ - "A2A (Agent-to-Agent) 통신 오픈 표준", - "ACP 서비스 발견 & 태스크 위임", - "Agent Card (/.well-known/agent-card.json)", - ], - }, - { - no: "Pillar 05", - tag: "AIoT & gRPC", - accent: "vermillion" as const, - ko: "AIoT & 고성능 통신 백본", - en: "High-Performance Backbone", - desc: "스마트 팩토리/팜 엣지 자원 제약 환경에서 경량 프로토콜(MQTT/CoAP)과 HTTP/2·HTTP/3 gRPC/QUIC 양방향 스트리밍을 결합한 하이브리드 백본을 설계합니다.", - points: [ - "gRPC & QUIC 양방향 스트리밍 메시징", - "Protobuf 바이너리 직렬화 최적화", - "MQTT-gRPC 하이브리드 엣지 메쉬", - ], - }, -]; - -// CUSTOMIZATION HOOK: headline figures (animated counters). -// `value: 2026` is marked static so it renders as a fixed year, not a -// 0→2026 count-up, at the smaller `display-sm` scale so the 4-digit year -// does not push the cell padding. See LAYOUT_AUDIT #11 + #13. -const figures = [ - { value: pillars.length, label: "연구 기둥 · Research Pillars", suffix: "", size: "display" as const, static: false }, - { value: pillars.reduce((n, p) => n + p.points.length, 0), label: "세부 연구 주제 · Research Topics", suffix: "", size: "display" as const, static: false }, - { value: 2026, label: "Issue · 발행", suffix: "", size: "display-sm" as const, static: true }, -]; - -// CUSTOMIZATION HOOK: research keyword ticker. -const keywords = [ - "A2A PROTOCOL", - "MCP & SKILL", - "HERDR PROCESS CONTAINER", - "LANGGRAPH CYCLIC GRAPH", - "QUIC & GRPC STREAMING", - "MULTI-AGENT ORCHESTRATION", - "AIOT EDGE CONTROL", - "AGENT CARD SPEC", -]; - -const focusAreas = [ - { ko: "에이전트 통신 프로토콜 (A2A)", en: "A2A & ACP Protocols" }, - { ko: "멀티에이전트 오케스트레이션", en: "Multi-Agent Orchestration" }, - { ko: "MCP & SKILL 기능 확장", en: "MCP & SKILL Engineering" }, - { ko: "AIoT & gRPC/QUIC 백본", en: "AIoT & gRPC/QUIC Backbone" }, -]; - -export default function IntroPage() { - return ( - <> - {/* ============ COVER SPREAD ============ */} -
-
- - - - -
- {/* Title & Masthead column */} -
- -

경북대학교 컴퓨터학부 · AI Agent Networking Lab (ANL)

-

- 에이전트 네트워크의 -
- 미래를 짓다 -

-

- Agents - in Motion -

-
- -

- A2A·ACP 기반 에이전트 통신 프로토콜과 HERDR·LangGraph 멀티에이전트 - 오케스트레이션. 개방형 표준을 토대로 분산되고 이종적인 에이전트가 - 자율적으로 협력하고 고속으로 메시지를 교환하도록 설계합니다. -

-
- -
- - 논문 보기 → - - - 구성원 - -
-
-
- - {/* Abstract illustration column */} - - -

- Fig. 01 — A2A 에이전트 메시 × QUIC/gRPC 멀티스트림 -

-
-
-
- - {/* Keyword marquee band */} - - - - - - {/* ============ FIGURES / COUNTERS ============ */} -
-
- {figures.map((f, i) => ( - -
- -

{f.label}

-
-
- ))} -
-
- - {/* ============ MISSION / PULL QUOTE ============ */} -
-
- - - - -
- “표준 적합성과 실증을 함께 추구하여, 연구가{" "} - 실제 표준 문서와{" "} - 오픈소스 구현으로 이어지게 한다.” -
-
- -

- {/* CUSTOMIZATION HOOK: marginalia / footnote */} - † 본 연구실은 차세대 에이전트 통신 프로토콜(A2A/ACP)과 멀티에이전트 오케스트레이션(HERDR/LangGraph) 기술을 토대로, 분산·이종 에이전트가 - 자율적으로 협력하고 고속으로 메시지를 교환할 수 있는 네트워크 인프라를 연구합니다. -

-
-
-
- - {/* ============ FIVE RESEARCH PILLARS ============ */} -
-
- - - - -
- {pillars.map((p, i) => { - const isVerm = p.accent === "vermillion"; - const span = `${i < 3 ? "lg:col-span-2" : "lg:col-span-3"}${i === 4 ? " sm:col-span-2" : ""}`; - return ( - -
-
-
- {p.no} - - {p.tag} - -
-

- {p.ko} -

-

- {p.en} -

-

- {p.desc} -

-
-
    - {p.points.map((pt) => ( -
  • - - {pt} -
  • - ))} -
-
-
- ); - })} -
-
-
- - {/* ============ FOCUS AREAS ============ */} -
-
- - - -
- {focusAreas.map((f, i) => ( - -
- - {String(i + 1).padStart(2, "0")} - -
-

{f.ko}

-

- {f.en} -

-
-
-
- ))} -
-
-
- - ); -} diff --git a/refer_landing_page/app/lectures/page.tsx b/refer_landing_page/app/lectures/page.tsx index 408c655..939c3b2 100644 --- a/refer_landing_page/app/lectures/page.tsx +++ b/refer_landing_page/app/lectures/page.tsx @@ -1,102 +1,129 @@ -import type { Metadata } from "next"; -import PageHeader from "@/components/PageHeader"; -import Reveal from "@/components/Reveal"; -import SectionLabel from "@/components/SectionLabel"; - -export const metadata: Metadata = { - title: "강의 (Lectures)", - description: "AI 에이전트 네트워크 연구실 (ANL) 지도교수가 담당하는 강의 목록 (placeholder).", -}; - -// CUSTOMIZATION HOOK: replace placeholder lectures below. -const lectures = [ - { - code: "CSE3xx", - ko: "사물인터넷 개론", - en: "Introduction to IoT", - level: "학부 · Undergraduate", - accent: "vermillion" as const, - desc: "IoT 아키텍처, 센서·액추에이터, 통신 프로토콜(MQTT/CoAP)과 oneM2M 표준의 기본 개념을 다룹니다. 간단한 디바이스–서버 연동 실습을 포함합니다.", - }, - { - code: "CSE4xx", - ko: "네트워크 프로토콜과 전송 기술", - en: "Network Protocols & Transport", - level: "학부/대학원 · Undergraduate / Graduate", - accent: "cobalt" as const, - desc: "TCP/UDP에서 QUIC까지 전송 계층의 발전과 설계 원리를 학습합니다. 스트림 다중화, 연결 마이그레이션, 혼잡 제어를 실험을 통해 분석합니다.", - }, - { - code: "CSE6xx", - ko: "메타버스 상호운용성과 표준", - en: "Metaverse Interoperability & Standards", - level: "대학원 · Graduate", - accent: "ink" as const, - desc: "이종 메타버스 플랫폼 간 데이터 모델, 의미 보존 변환, W3C/oneM2M 표준을 다루는 세미나형 대학원 강의입니다. 최신 논문 리뷰와 프로젝트를 병행합니다.", - }, -]; - -const accent: Record = { - vermillion: { hover: "hover:bg-vermillion hover:text-ivory", text: "text-vermillion" }, - cobalt: { hover: "hover:bg-cobalt hover:text-ivory", text: "text-cobalt" }, - ink: { hover: "hover:bg-ink hover:text-ivory", text: "text-ink" }, -}; +import React from "react"; +import { semesters } from "../../content/lectures"; export default function LecturesPage() { + const recentSemesters = semesters.slice(0, 3); + const olderSemesters = semesters.slice(3); + return ( - <> - +
+ {/* Header */} +
+
+ + + Academic Courses + +
+

+ 강의 이력 +

+

+ 2016년 가을학기부터 2026년 봄학기까지 개설된 네트워크 및 소프트웨어 분야 약 20개 학기의 학부/대학원 강의 목록입니다. +

+
-
-
- - - - -
- {lectures.map((l, i) => { - const a = accent[l.accent]; - return ( - -
-
- - {l.code} - - - {String(i + 1).padStart(2, "0")} - -
- -

{l.ko}

-

{l.en}

- -

- {l.level} -

- -

- {l.desc} -

-
-
- ); - })} + {/* Recent 3 Semesters */} +
+
+
+
+ Recent Courses ({recentSemesters.length} Semesters) +
+

+ 최근 개설 강의 +

+ +
+ {recentSemesters.map((sem, idx) => ( +
+
+
+ + {sem.term} {sem.year} + + + Latest + +
+ +
    + {sem.courses.map((c, cIdx) => ( +
  • +
    + {c.en} +
    +
    + Code: {c.code} {c.note && `(${c.note})`} +
    +
  • + ))} +
+
+ +
+ Course Count: {sem.courses.length} +
+
+ ))} +
- + + {/* Older Semesters (Native
/ progressive disclosure) */} +
+
+ +
+ + 이전 전체 강의 이력 ({olderSemesters.length}개 학기) 열람하기 + +

+ 2016 Fall ~ 2024 Spring 학기별 개설 교과목 이력 +

+
+ + 전체 보기 ▾ + 접기 ▴ + +
+ +
+ {olderSemesters.map((sem, idx) => ( +
+
+ + {sem.term} {sem.year} + + + {sem.courses.length} Courses + +
+ +
    + {sem.courses.map((c, cIdx) => ( +
  • +
    + {c.en} +
    +
    + Code: {c.code} {c.note && `(${c.note})`} +
    +
  • + ))} +
+
+ ))} +
+
+
+
); } diff --git a/refer_landing_page/app/members/page.tsx b/refer_landing_page/app/members/page.tsx index 5389a1e..f70045d 100644 --- a/refer_landing_page/app/members/page.tsx +++ b/refer_landing_page/app/members/page.tsx @@ -1,174 +1,213 @@ -import type { Metadata } from "next"; -import PageHeader from "@/components/PageHeader"; -import Reveal from "@/components/Reveal"; -import SectionLabel from "@/components/SectionLabel"; -import Counter from "@/components/Counter"; - -export const metadata: Metadata = { - title: "구성원 (Members)", - description: "AI 에이전트 네트워크 연구실 (ANL) 지도교수 및 대학원·학부 연구원 소개 (placeholder).", -}; - -// CUSTOMIZATION HOOK: replace placeholder member data below. -const advisor = { - ko: "고석주 교수", - en: "Prof. Seok-Joo Koh", - role: "지도교수 · Principal Investigator", - desc: "QUIC/gRPC/A2A 에이전트 통신, 멀티에이전트 오케스트레이션, MCP & SKILL 확장, 네트워크 프로토콜. (sjkoh@knu.ac.kr)", - fields: ["Agent Communication (A2A)", "Multi-Agent Orchestration", "QUIC & gRPC Transport"], -}; - -const groups = [ - { - ko: "박사과정 연구원", - en: "Ph.D. Students", - accent: "vermillion" as const, - members: [ - { name: "연구원 A (placeholder)", topic: "QUIC 기반 멀티에이전트 오케스트레이션" }, - { name: "연구원 B (placeholder)", topic: "메타버스 공통 정보 모델 (MCM)" }, - ], - }, - { - ko: "석사과정 연구원", - en: "M.S. Students", - accent: "cobalt" as const, - members: [ - { name: "연구원 C (placeholder)", topic: "oneM2M 적합성 검증" }, - { name: "연구원 D (placeholder)", topic: "QUIC 스트림 다중화 성능 분석" }, - { name: "연구원 E (placeholder)", topic: "W3C WoT Thing Description 매핑" }, - ], - }, - { - ko: "학부 연구원", - en: "Undergraduate Researchers", - accent: "ink" as const, - members: [ - { name: "연구원 F (placeholder)", topic: "테스트베드 개발" }, - { name: "연구원 G (placeholder)", topic: "데이터 시각화" }, - ], - }, -]; - -// CUSTOMIZATION HOOK: headcount figures (animated counters). -const figures = [ - { value: 1, label: "지도교수 · Principal Investigator" }, - { value: 5, label: "대학원 연구원 · Graduate Members" }, - { value: 2, label: "학부 연구원 · Undergraduates" }, -]; - -const accentText: Record = { - vermillion: "text-vermillion", - cobalt: "text-cobalt", - ink: "text-ink", -}; +import React from "react"; +import { activeMembers, alumni } from "../../content/members"; export default function MembersPage() { - return ( - <> - + const professor = activeMembers.find((m) => m.degree === "Professor"); + const phdStudents = activeMembers.filter( + (m) => m.degree === "PhD" || m.degree === "PhDCandidate" || m.degree === "PhDStudent" + ); + const msStudents = activeMembers.filter( + (m) => m.degree === "MSCandidate" || m.degree === "MSStudent" + ); - {/* ============ HEADCOUNT FIGURES ============ */} -
-
- {figures.map((f, i) => ( - -
- -

{f.label}

-
-
- ))} + return ( +
+ {/* Header */} +
+
+ + + People & Researchers +
+

+ 연구실 구성원 +

+

+ 지도교수와 재학 연구원 16명, 그리고 IT 산업체 및 학계에서 활약하고 있는 60명의 졸업생 인벤토리입니다. +

- {/* ============ PRINCIPAL INVESTIGATOR ============ */} -
-
- - - + {/* Professor Section */} +
+
+ Faculty +
-
- -
- {advisor.role} -

{advisor.ko}

-

- {advisor.en} -

-

- {advisor.desc} -

-
-
- - -
- {advisor.fields.map((field, i) => ( -
- - {String(i + 1).padStart(2, "0")} - - - {field} - -
- ))} -
-
+
+
+
+

+ {professor?.ko || "고석주"} 교수 +

+ + {professor?.en || "Seok-Joo Koh"}, Professor + +
+

+ 경북대학교 컴퓨터학부 교수 · AI 에이전트 네트워크 연구실 (ANL) 지도교수. + QUIC/gRPC 통신, A2A/ACP 프로토콜, MCP & SKILL 아키텍처 및 에이전트 오케스트레이션 연구를 총괄하고 있습니다. +

+ +
+
+
+ Affiliation & Office +
+

Kyungpook National University

+

IT Building #5 Room 527

+

Daegu, Republic of Korea

- {/* ============ RESEARCH GROUPS ============ */} -
-
- - - + {/* Active Researchers Section */} +
+
+
+
+ Active Researchers ({activeMembers.length} Members) +
+

+ 재학 연구원 +

+
+
- {groups.map((g, gi) => ( -
- -
-

{g.ko}

- - {g.en} + {/* Ph.D. Candidates / Students */} +
+

+ Ph.D. Course ({phdStudents.length}) +

+
+ {phdStudents.map((mem, idx) => ( +
+
+ + {mem.ko} + + + {mem.degree}
- - -
- {g.members.map((m, mi) => ( - -
- - {String(gi + 1).padStart(2, "0")}.{String(mi + 1).padStart(2, "0")} - -
-

{m.name}

-

- {m.topic} -

-
-
-
- ))} +
{mem.en}
+ {mem.affiliation && ( +
+ with {mem.affiliation} +
+ )}
-
- ))} + ))} +
+
+ + {/* M.S. Candidates / Students */} +
+

+ M.S. Course ({msStudents.length}) +

+
+ {msStudents.map((mem, idx) => ( +
+
+ + {mem.ko} + + + {mem.degree} + +
+
{mem.en}
+ {mem.affiliation && ( +
+ with {mem.affiliation} +
+ )} +
+ ))} +
- + + {/* Alumni Section (Native
/ progressive disclosure) */} +
+
+
+
+ Alumni Inventory ({alumni.length} Graduates) +
+

+ 졸업생 목록 +

+
+
+ +
+ +
+ + 전체 졸업생 {alumni.length}명 열람하기 + +

+ 2007년부터 2026년까지 수여된 박사(Ph.D.) 및 석사(M.S.) 졸업생 이력 +

+
+ + 전체 보기 ▾ + 접기 ▴ + +
+ +
+ {alumni.map((alum, idx) => ( +
+
+ + {alum.ko} ({alum.en}) + + + {alum.degree} + +
+
+ {alum.graduatedAt} + {alum.major && {alum.major}} +
+ {alum.currentPosition && ( +
+ {alum.currentPosition} +
+ )} +
+ ))} +
+
+
+
); } diff --git a/refer_landing_page/app/page.tsx b/refer_landing_page/app/page.tsx new file mode 100644 index 0000000..f7d4991 --- /dev/null +++ b/refer_landing_page/app/page.tsx @@ -0,0 +1,215 @@ +import React from "react"; +import HeroComposition from "./_components/HeroComposition"; +import { DirectionsBlock } from "./_components/DirectionsBlock"; +import { publications } from "../content/publications"; + +const PILLARS = [ + { + no: "01", + en: "AI Agent Engineering", + ko: "AI 에이전트 3대 핵심 엔지니어링", + theme: "vermillion" as const, + topics: [ + "프롬프트 엔지니어링 (System Prompt Optimization)", + "맥락 엔지니어링 (Dynamic Context & Memory Packaging)", + "하네스 엔지니어링 (Agent Control Loop & Sandbox Isolation)", + ], + desc: "AI 에이전트의 구동 성능과 안전성을 좌우하는 프롬프트·맥락·하네스 3대 핵심 엔지니어링 기술을 연구합니다.", + }, + { + no: "02", + en: "MCP & SKILL Architecture", + ko: "AI Agent 기능 확장 프로토콜", + theme: "cobalt" as const, + topics: [ + "Model Context Protocol (MCP) 서버/클라이언트 아키텍처", + "SKILL 도구 캡슐화 및 재사용 패키징", + "CLI 에이전트 인터페이스 제어 및 웹 가동 제어", + ], + desc: "에이전트가 외부 도구 및 시스템과 표준화된 방식으로 연동할 수 있도록 MCP와 SKILL 패키징 기술을 개발합니다.", + }, + { + no: "03", + en: "Multi-Agent Orchestration", + ko: "멀티 에이전트 협업 및 오케스트레이션", + theme: "vermillion" as const, + topics: [ + "HERDR 백그라운드 프로세스 컨테이너 격리 제어", + "crewAI 기반 역할 분담 및 태스크 위임 체계", + "LangGraph 순환 상태 그래프 기반 워크플로우 제어", + ], + desc: "다중 에이전트 환경에서 독립적인 역할 분담과 선순환 오케스트레이션을 보장하는 자율 협업 플랫폼을 연구합니다.", + }, + { + no: "04", + en: "A2A & ACP Open Protocols", + ko: "에이전트 상호운용성 개방형 표준", + theme: "cobalt" as const, + topics: [ + "Agent-to-Agent (A2A) 프로토콜 규격 정의 및 검증", + "Agent Communication Protocol (ACP) 메시지 교환 규격", + "Agent Card (/.well-known/agent-card.json) 메타데이터 검증", + ], + desc: "서로 다른 프레임워크 기반의 에이전트 간의 상호운용성을 보장하는 국제 표준 개방형 통신 프로토콜을 구현합니다.", + }, + { + no: "05", + en: "High-Performance Networking Backbone", + ko: "AIoT & 고성능 통신 백본", + theme: "vermillion" as const, + topics: [ + "gRPC / QUIC 양방향 스트리밍 에이전트 백본 통신", + "Protocol Buffers (Protobuf) 직렬화 통신 최적화", + "MQTT / CoAP 엣지 메시 통신망 통합", + ], + desc: "초저지연 양방향 스트리밍 통신 인프라를 바탕으로 고성능 에이전트 백본 네트워크를 설계하고 실증합니다.", + }, +]; + +export default function HomePage() { + const pubCount = publications.length; + + return ( +
+ {/* Hero Section */} +
+
+ + + Kyungpook National University · AI Agent Networking Lab (ANL) + +
+ +
+
+

+ 에이전트 네트워크의
+ 미래를 짓다 +

+

+ AI 에이전트 네트워크 연구실(ANL)은 에이전트 엔지니어링, MCP/SKILL 아키텍처, + 멀티 에이전트 오케스트레이션, A2A/ACP 개방형 표준, gRPC/QUIC 고성능 통신 백본의 + 5대 연구 기둥을 중심으로 지능형 자율 에이전트 네트워크를 연구합니다. +

+ + {/* Metrics Row (Derived from data array, AC-13) */} +
+
+
+ {PILLARS.length} +
+
+ Core Pillars +
+
+
+
+ {pubCount} +
+
+ Publications +
+
+
+
+ 2026 +
+
+ Issue Static +
+
+
+
+ +
+ +
+
+
+ + {/* 5 Pillars Magazine Spread Grid */} +
+
+
+
+ Research Pillars +
+

+ 5대 핵심 연구 기둥 +

+
+
+ Magazine Layout 01–05 +
+
+ +
+ {PILLARS.map((pillar, idx) => { + const isVermillion = pillar.theme === "vermillion"; + const colSpan = idx < 3 ? "lg:col-span-2" : "lg:col-span-3"; + + return ( +
+
+
+ + [{pillar.no}] + + + {pillar.en} + +
+ +

+ {pillar.ko} +

+ +

+ {pillar.desc} +

+ +
    + {pillar.topics.map((topic, tIdx) => ( +
  • + + {topic} +
  • + ))} +
+
+ +
+ ANL Core Spec + + Pillar #{pillar.no} + +
+
+ ); + })} +
+
+ + {/* Directions Block */} + +
+ ); +} diff --git a/refer_landing_page/app/publications/[category]/page.tsx b/refer_landing_page/app/publications/[category]/page.tsx new file mode 100644 index 0000000..3f6b346 --- /dev/null +++ b/refer_landing_page/app/publications/[category]/page.tsx @@ -0,0 +1,146 @@ +import React from "react"; +import { notFound } from "next/navigation"; +import { CategoryNav } from "../_components/CategoryNav"; +import { publications, patents } from "../../../content/publications"; +import { PUB_CATEGORIES } from "../../../content/categories"; +import { PubCategory } from "../../../content/types"; + +interface PageProps { + params: { + category: string; + }; +} + +// SSG static pre-rendering (● SSG) for Next.js 14 +export function generateStaticParams() { + return PUB_CATEGORIES.map((cat) => ({ + category: cat.slug, + })); +} + +export default function PublicationCategoryPage({ params }: PageProps) { + const { category } = params; + const currentCat = PUB_CATEGORIES.find((c) => c.slug === category); + + if (!currentCat) { + notFound(); + } + + const slug = category as PubCategory; + + let records: any[] = []; + if (slug === "patent") { + records = patents.map((p) => ({ + title: p.title, + inventors: p.inventors, + appNo: p.applicationNo, + appDate: p.applicationAt, + regNo: p.registrationNo, + regDate: p.registrationAt, + country: p.country, + publishedAt: p.publishedAt, + isPatent: true, + })); + } else { + records = publications + .filter((p) => p.category === slug) + .map((p) => ({ + title: p.title, + venue: p.venue, + volume: p.volume, + publishedAt: p.publishedAt, + kci: p.kci, + isPatent: false, + })); + } + + return ( +
+ {/* Header */} +
+
+ + + Publications Category + +
+

+ {currentCat.label} +

+

+ {currentCat.desc} — 총 {records.length}건의 실데이터 카탈로그입니다. +

+
+ + {/* Category Nav */} + + + {/* Record List Section */} +
+
+ + Showing {records.length} Pre-rendered Records + + + SSG ● Static HTML + +
+ + {records.length === 0 ? ( +
+

+ 현재 등록된 실적이 0건입니다. +

+

+ (D-01 카테고리 정류 확정 후 후속 배치가 수행됩니다) +

+
+ ) : ( +
+ {records.map((rec, idx) => ( +
+
+

+ {rec.title} +

+ + {rec.publishedAt} + +
+ + {rec.isPatent ? ( +
+

발명자: {rec.inventors}

+

+ 출원번호: {rec.appNo} ({rec.country}, {rec.appDate}) +

+ {rec.regNo && ( +

+ 등록번호: {rec.regNo} ({rec.regDate}) +

+ )} +
+ ) : ( +
+

{rec.venue}

+
+ {rec.volume} + {rec.kci && ( + + KCI 등재 + + )} +
+
+ )} +
+ ))} +
+ )} +
+
+ ); +} diff --git a/refer_landing_page/app/publications/_components/CategoryNav.tsx b/refer_landing_page/app/publications/_components/CategoryNav.tsx new file mode 100644 index 0000000..05477dc --- /dev/null +++ b/refer_landing_page/app/publications/_components/CategoryNav.tsx @@ -0,0 +1,45 @@ +import React from "react"; +import Link from "next/link"; +import { PUB_CATEGORIES } from "../../../content/categories"; +import { PubCategory } from "../../../content/types"; + +interface CategoryNavProps { + currentCategory?: PubCategory; + totalCount?: number; +} + +export function CategoryNav({ currentCategory, totalCount }: CategoryNavProps) { + return ( +
+
+ + All Overview {!currentCategory && totalCount ? `(${totalCount})` : ""} + + + {PUB_CATEGORIES.map((cat) => { + const isActive = currentCategory === cat.slug; + return ( + + {cat.label} + + ); + })} +
+
+ ); +} diff --git a/refer_landing_page/app/publications/page.tsx b/refer_landing_page/app/publications/page.tsx index 4ae2363..37d0d63 100644 --- a/refer_landing_page/app/publications/page.tsx +++ b/refer_landing_page/app/publications/page.tsx @@ -1,173 +1,138 @@ -import type { Metadata } from "next"; -import PageHeader from "@/components/PageHeader"; -import Reveal from "@/components/Reveal"; -import SectionLabel from "@/components/SectionLabel"; -import Counter from "@/components/Counter"; -import Marquee from "@/components/Marquee"; +import React from "react"; +import Link from "next/link"; +import { CategoryNav } from "./_components/CategoryNav"; +import { publications, patents } from "../../content/publications"; +import { PUB_CATEGORIES } from "../../content/categories"; -export const metadata: Metadata = { - title: "논문 (Publications)", - description: "AI 에이전트 네트워크 연구실 (ANL)의 대표 논문 목록 (placeholder).", -}; +export default function PublicationsIndexPage() { + const allRecords = [ + ...publications.map((p) => ({ ...p, type: "paper" as const })), + ...patents.map((p) => ({ + category: "patent" as const, + title: p.title, + venue: `발명자: ${p.inventors} (출원번호: ${p.applicationNo})`, + volume: p.registrationNo ? `등록번호: ${p.registrationNo}` : `출원국가: ${p.country}`, + publishedAt: p.publishedAt, + type: "patent" as const, + })), + ]; -// CUSTOMIZATION HOOK: replace placeholder publications below. -const publications = [ - { - year: "2025", - type: "Journal", - title: - "메타버스 상호운용을 위한 공통 정보 모델 설계 및 oneM2M 매핑 (Design of a Common Information Model for Metaverse Interoperability over oneM2M)", - authors: "Hong G., Researcher A., et al.", - venue: "한국통신학회논문지 (J-KICS), Vol. 50, No. 3", - }, - { - year: "2025", - type: "Conference", - title: - "QUIC-based Orchestration Architecture for Low-Latency Multi-Agent Communication", - authors: "Researcher B., Hong G.", - venue: "IEEE International Conference on Communications (ICC)", - }, - { - year: "2024", - type: "Journal", - title: - "W3C WoT Thing Description를 활용한 이종 메타버스 자산의 의미 보존 변환 (Semantic-Preserving Mapping of Cross-Platform Metaverse Assets Using W3C WoT)", - authors: "Researcher C., Hong G., et al.", - venue: "정보과학회논문지 (KIISE Transactions), Vol. 51, No. 11", - }, - { - year: "2024", - type: "Conference", - title: - "Stream Multiplexing Strategies for Agent Message Routing over QUIC", - authors: "Researcher D., Researcher B., Hong G.", - venue: "ACM/IEEE Symposium on Edge Computing (SEC)", - }, - { - year: "2023", - type: "Conference", - title: - "oneM2M 기반 IoT 디바이스 상호운용성 적합성 검증 프레임워크 (A Conformance Testing Framework for oneM2M-based IoT Interoperability)", - authors: "Researcher E., Hong G.", - venue: "한국정보과학회 학술발표회 (KSC)", - }, -]; + // Sort by publishedAt descending + const sortedRecords = [...allRecords].sort( + (a, b) => new Date(b.publishedAt).getTime() - new Date(a.publishedAt).getTime() + ); -// CUSTOMIZATION HOOK: venue ticker. -const venueTicker = [ - "J-KICS", - "IEEE ICC", - "KIISE TRANSACTIONS", - "ACM/IEEE SEC", - "KSC", - "oneM2M", - "W3C WoT", - "IETF QUIC", -]; + const recentRecords = sortedRecords.slice(0, 10); -// Accent per publication type, drawn from the editorial palette. -const typeAccent: Record = { - Journal: { text: "text-vermillion", rule: "bg-vermillion" }, - Conference: { text: "text-cobalt", rule: "bg-cobalt" }, -}; + const getCategoryCount = (slug: string) => { + if (slug === "patent") return patents.length; + return publications.filter((p) => p.category === slug).length; + }; -// Derived figures. -const journalCount = publications.filter((p) => p.type === "Journal").length; -const confCount = publications.filter((p) => p.type === "Conference").length; -const figures = [ - { value: publications.length, label: "전체 논문 · Total Publications" }, - { value: journalCount, label: "저널 · Journal" }, - { value: confCount, label: "학회 · Conference" }, -]; - -export default function PublicationsPage() { return ( - <> - +
+ {/* Header */} +
+
+ + + Research Output & Patents + +
+

+ 연구 실적 개요 +

+

+ 국제·국내 우수 학술지 및 학술대회 논문 148건과 특허 75건 등 총 {allRecords.length}건의 실측 연구 성과 카탈로그입니다. +

+
- {/* Venue marquee band */} - - - + {/* Category Nav */} + - {/* ============ FIGURES ============ */} -
-
- {figures.map((f, i) => ( - -
- -

{f.label}

+ {/* Category Cards Overview */} +
+

+ 카테고리별 실적 분류 +

+
+ {PUB_CATEGORIES.map((cat) => { + const count = getCategoryCount(cat.slug); + return ( +
+
+
+ + Category + + + {count}건 + +
+

+ {cat.label} +

+

+ {cat.desc} +

+
+
+ + SSG Pre-rendered + + + 목록 보기 ({count}) ↗ + +
- + ); + })} +
+
+ + {/* Recent 10 Highlight Records */} +
+
+

+ 최신 성과 하이라이트 (Top 10) +

+ + Total {allRecords.length} Records + +
+ +
+ {recentRecords.map((rec, idx) => ( +
+
+

+ {rec.title} +

+ + {rec.publishedAt} + +
+
+ {rec.venue} +
+ {rec.volume && ( +
+ {rec.volume} +
+ )} +
))}
- - {/* ============ PUBLICATION LIST ============ */} -
-
- - - - -
    - {publications.map((p, i) => { - const accent = typeAccent[p.type] ?? { - text: "text-ink", - rule: "bg-ink", - }; - // Reveal `as="li"` keeps the
      direct-child contract (HTML spec: - //
        may only contain
      1. /