POSIX 쉘(POSIX Shell)로 구축한 정적 사이트 생성기, 그 기술적 깊이
POSIX 쉘(POSIX Shell)을 사용하여 정적 사이트를 생성하는 방식에 대한 기술적 구현을 상세히 설명함
템플릿 엔진(Template Engine) 대신 envsubst를 활용하여 환경 변수를 치환하는 방식을 채택함
GitHub Actions을 통한 자동 빌드 및 배포 과정을 통해 지속적인 사이트 관리를 용이하게 함
커뮤니티에서는 쉘 스크립트(Shell Script)의 단순성(Simplicity)과 접근성(Accessibility)에 긍정적인 평가를 내림
쉘 스크립트(Shell Script) 기반 SSG 아키텍처
본 시스템은 POSIX 쉘(POSIX Shell)을 사용하여 정적 사이트를 생성하며, 각 포스트는 메타데이터와 마크다운(Markdown)을 결합하여 HTML 템플릿을 채운다. 템플릿 엔진 대신 envsubst를 활용하여 환경 변수를 치환함으로써, 템플릿의 단순성을 유지하고 쉘 스크립트의 명시성을 확보한다. 특히, 이미지 및 링크의 URL을 처리하기 위해 정규 표현식(Regular Expression)을 사용하여 상대 경로 문제를 해결한다.
자동화된 빌드 및 배포 파이프라인(Pipeline)
GitHub Actions을 사용하여 코드 변경 시 자동 빌드 및 배포를 수행한다. 이 과정은 comrak을 사용하여 마크다운(Markdown)을 HTML로 변환하는 단계를 포함하며, 30초 이내에 변경 사항이 반영된다. 이러한 자동화된 빌드 프로세스는 개발자가 사이트 관리에 소요되는 시간을 줄이고, 지속적인 통합(Continuous Integration) 및 지속적인 배포(Continuous Delivery)를 가능하게 한다.
태그 관리 및 페이지 생성
이 시스템은 각 포스트에 대한 태그를 관리하고, 태그별로 페이지를 생성한다. 쉘 스크립트는 각 태그에 대한 HTML 및 피드(Feed)를 생성하기 위해, eval을 사용하여 태그 인덱스를 계산하고, 해당 인덱스에 따라 포스트 슬러그(Post Slug)를 할당한다. 결과적으로, /tags 페이지를 통해 모든 태그와 해당 태그가 포함된 포스트를 쉽게 확인할 수 있다.
피드(Feed) 및 사이트맵(Sitemap) 생성
RSS, Atom, JSON 형식의 피드(Feed)를 생성하여 콘텐츠 배포를 지원한다. 특히, Atom 피드는 RSS보다 간결하고 명확한 스펙을 가지고 있어, 사이트 운영자가 선호하는 방식이다. 사이트맵(Sitemap)은 스크래핑 봇(Scraping Bot)의 편의성을 높이는 역할을 하지만, 접근성 측면에서는 큰 이점이 없다는 의견도 존재한다. 따라서, Atom 피드 유지를 통해 효율적인 콘텐츠 관리를 추구한다.