import { motion } from 'framer-motion'; import AboutClients from '../components/about/AboutClients'; import AboutCounter from '../components/about/AboutCounter'; import AboutMeBio from '../components/about/AboutMeBio'; import PagesMetaHead from '../components/PagesMetaHead'; const API_BASE_URL = process.env.API_INTERNAL_URL || 'http://localhost:7341'; const EMPTY_ABOUT = { name: '', tagline: null, profileImage: '/images/profile.jpeg', bio: [], }; function About({ about }) { return (
{/** Counter without paddings */}
); } export async function getServerSideProps() { try { const res = await fetch(`${API_BASE_URL}/api/about`); if (res.status === 404) { // 프로필이 아직 세팅되지 않은 합법적 데이터 상태 — 빈 About 으로 graceful 렌더 return { props: { about: EMPTY_ABOUT } }; } if (!res.ok) { // 5xx 등 비정상 응답은 시스템 장애이므로 감추지 않고 Next.js 에러 페이지로 드러낸다 throw new Error(`[about] API returned ${res.status}`); } const body = await res.json(); return { props: { about: body?.data ?? EMPTY_ABOUT } }; } catch (err) { console.error('[about] fetch failed', err); throw err; } } export default About;