프로젝트 설명과 기술 글이 서로 다른 곳에 흩어지지 않도록, 저장소 안의 MDX를 단일 원본으로 쓰는
개인 사이트를 만들었습니다. content/posts/*.mdx와 content/projects/*.mdx에 글과
frontmatter를 함께 두면 Next.js가 빌드할 때 목록과 상세 페이지를 만듭니다. 콘텐츠를 고칠 때
화면 코드까지 수정하지 않아도 되는 구조가 핵심이었습니다.
GitHub Pages
GitHub Pages에는 Next.js 서버가 없지만 이 사이트의 콘텐츠에는 SSR, ISR, API route도 필요하지
않았습니다. 그래서 서버 기능을 흉내 내지 않고 output: "export"로 정적 파일만 생성합니다.
코드 하이라이팅도 같은 기준으로 정했습니다. Shiki 처리는 빌드 시점에 끝내 브라우저에 하이라이터를 보내지 않습니다. 라이트·다크 테마는 첫 화면이 그려지기 전 작은 인라인 스크립트가 결정하고, 이후 전환은 CSS와 클라이언트 토글이 맡습니다. 정적 배포를 유지하면서 첫 화면의 테마 깜빡임을 줄이기 위한 선택입니다.
CI/CD
main 브랜치에 push하면 GitHub Actions가 lint와 next build를 실행합니다. 빌드가 만든
out/ 디렉터리만 GitHub Pages에 배포하며, 빌드 결과물은 저장소에 커밋하지 않습니다. 운영 중인
페이지와 공개 소스가 같은 커밋을 가리키도록 단순한 배포 흐름으로 구성했습니다.