피드로 돌아가기
Dev.toBackend
원문 읽기
ForgeCMS가 SML 기반 언어 해석, 테마 시스템, OG 메타태그, Amiga 스타일 에러 페이지를 추가하여 프로토타입에서 본격적인 제품으로 전환
Our Go CMS now speaks 5 languages, themes itself, and meditates on 404s
AI 요약
Context
Go 기반 CMS는 데이터베이스 없이 Codeberg 저장소에서 콘텐츠를 가져와 €1/월 VPS에서 제공하고 있었으나, 다국어 지원, 테마 관리, 소셜 미디어 공유 메타데이터 등이 미흡한 상태였다.
Technical Solution
- Accept-Language 헤더 감지와 lang 쿠키 기반 언어 선택: 스페인 바르셀로나 방문자는 자동으로 스페인어 페이지, 카탈루냐는 카탈란어 페이지 로드
- 언어별 SML 페이지 폴백 체인 구현: atesti/es/index.sml → atesti/index.sml 구조로 자동 폴백
- Page{lang:} 선언을 통한 페이지별 언어 오버라이드 지원
- Markdown{src:} 문법으로 현재 언어를 소스 경로에 주입: content.md가 Spanish 방문자에겐 content-es.md로 자동 변환
- theme.sml과 theme-dark.sml 두 파일로 사이트 색상, 간격, 타이포그래피를 중앙 집중식 관리
- og:title, og:description, og:url, og:image 메타태그 자동 생성
- Image{src:}에서 상대 경로를 Codeberg 원본 URL로 자동 변환
- ETagFor() 함수로 자산 캐시 핑거프린팅 구현
- Codeberg 도달 불가 시 마지막 유효한 캐시 콘텐츠 제공
- ErrNotFound 센티넬 타입으로 오류 전파 구조 표준화
- 404, 500 에러 페이지를 Amiga Guru Meditation 스타일로 렌더링
- site.sml의 Menu{}, Footer{} 정의를 전체 사이트에서 자동 렌더링
Key Takeaway
저수준 프레임워크 의존성 없이 SML 선언형 시스템으로 다국어, 테마, 메타데이터를 구현하면 프로토타입을 프로덕션 제품으로 전환할 수 있으며, 선언적 설계가 하드코딩된 값 산재를 방지하고 운영 복잡성을 낮춘다.
실천 포인트
정적 콘텐츠 기반 소규모 CMS 또는 문서 서버를 구축하는 팀에서 go-i18n 같은 무거운 다국어 라이브러리 대신 HTTP Accept-Language 헤더와 디렉토리 폴백 체인(lang/locale/default)으로 언어 선택을 구현하면 JavaScript 의존성 없이 자동 언어 감지를 제공할 수 있다.