import { useRef } from "react"; import { motion, useInView, useAnimationFrame } from "framer-motion"; import SubHero from "../../components/SubHero"; import useFadeIn from "../../hooks/useFadeIn"; const ease = [0.22, 1, 0.36, 1]; const BUSINESS_NAV = [ { label: "System Integration", to: "/business/si" }, { label: "R&D", to: "/business/rnd" }, { label: "운영 · 유지보수", to: "/business/maintenance" }, ]; const SERVICES = [ { num: "01", title: "모니터링", desc: "시스템·네트워크·애플리케이션 전 계층을 24/7 실시간으로 감시하여 장애 발생 전 이상 징후를 선제적으로 포착합니다.", img: "./images/mt_icon01.png", }, { num: "02", title: "장애 대응", desc: "이상 감지 즉시 전담 엔지니어가 원인을 분석하고 신속하게 복구합니다. 단순 대응을 넘어 재발 방지까지 책임집니다.", img: "./images/mt_icon02.png", }, { num: "03", title: "보안 관리", desc: "정기 취약점 점검과 패치 관리로 외부 위협으로부터 시스템을 보호합니다. 안전한 운영 환경을 지속적으로 유지합니다.", img: "./images/mt_icon03.png", }, { num: "04", title: "기술 지원", desc: "운영 중 발생하는 기술적 문의에 신속히 응대하고, 가이드 및 교육을 통해 고객 역량 강화까지 지원합니다.", img: "./images/mt_icon04.png", }, { num: "05", title: "지속적 개선", desc: "정기 리포트와 데이터 분석을 기반으로 서비스 품질을 꾸준히 높입니다. 운영 효율과 안정성을 함께 끌어올립니다.", img: "./images/mt_icon05.png", }, ]; const KPI = [ { value: "99.9%", label: "서비스 가용성" }, { value: "24/7", label: "365일 실시간 운영" }, { value: "10m 24s", label: "평균 응답 시간" }, { value: "100%", label: "SLA 준수율" }, ]; /* 아이콘 5개 위치 — 정오각형, 상단에서 시작 */ const NODE_ANGLES = [-90, -18, 54, 126, 198]; const CX = 320, CY = 320, R = 190, ICON_R = 44; function OpsCircle({ inView }) { return (
{/* pulse 링 — CSS 애니메이션 */} {/* 궤도 링 */} {/* 연결선 아이콘 → 중심 */} {NODE_ANGLES.map((deg, i) => { const rad = (deg * Math.PI) / 180; const ix = CX + R * Math.cos(rad); const iy = CY + R * Math.sin(rad); const mx = CX + 80 * Math.cos(rad); const my = CY + 80 * Math.sin(rad); return ; })} {/* 아이콘 노드 원 배경 */} {NODE_ANGLES.map((deg, i) => { const rad = (deg * Math.PI) / 180; const ix = CX + R * Math.cos(rad); const iy = CY + R * Math.sin(rad); return ; })} {/* 아이콘 이미지 — SVG foreignObject */} {NODE_ANGLES.map((deg, i) => { const rad = (deg * Math.PI) / 180; const ix = CX + R * Math.cos(rad); const iy = CY + R * Math.sin(rad); const size = 54; return ( {SERVICES[i].title} ); })} {/* 아이콘 라벨 */} {NODE_ANGLES.map((deg, i) => { const rad = (deg * Math.PI) / 180; const ix = CX + R * Math.cos(rad); const iy = CY + R * Math.sin(rad); const labelOffset = 58; const lx = CX + (R + 68) * Math.cos(rad); const ly = CY + (R + 68) * Math.sin(rad); return ( {SERVICES[i].title} ); })} {/* OPS CENTER 중앙 — DOM 오버레이 */} OPS CENTER
); } function MaintenancePage() { const ref = useFadeIn(); const introRef = useRef(null); const kpiRef = useRef(null); const colsRef = useRef(null); const introInView = useInView(introRef, { once: true, margin: "-80px" }); const kpiInView = useInView(kpiRef, { once: true, margin: "-80px" }); const colsInView = useInView(colsRef, { once: true, margin: "-60px" }); return (
Maintenance } navItems={BUSINESS_NAV} />
{/* ── 인트로 ── */}
OUR SERVICE
{["운영·유지보수는", "서비스의 안정성을", "완성합니다"].map((line, i) => (
{line}
))}
PAL Networks는 24/7 통합 모니터링과 체계적인 유지보수로
시스템의 가용성과 안정성을 지속적으로 보장합니다.
서비스 자세히 보기
{/* ── KPI 바 ── */}
{KPI.map((k, i) => ( {k.value} {k.label} ))}
{/* ── 5컬럼 서비스 ── */}
{SERVICES.map((svc, i) => (
{svc.title}
{svc.num}

{svc.title}

{svc.desc}

))}
); } export default MaintenancePage;