우리의 Go CMS가 이제 5개 언어를 지원하고, 스스로 테마를 적용하며, 404에 대해 명상합니다

발행: (2026년 3월 29일 AM 05:02 GMT+9)
6 분 소요
원문: Dev.to

Source: Dev.to

우리는 ForgeCMS – Codeberg 저장소에서 콘텐츠를 가져와 월 €1 VPS에서 제공하는 Go 기반 CMS를 만들고 있습니다. 데이터베이스가 없습니다. 워드프레스도 없습니다. 후회도 없습니다.

오늘 우리는 프로토타입을 넘어 실제 제품처럼 느껴지는 릴리스를 배포했습니다.

🌍 프레임워크 없이 Proper i18n

go-i18n이나 번역 라이브러리를 사용하지 않았습니다. 대신 언어 해석을 SML 페이지 시스템에 직접 구현했습니다:

  • 첫 방문 시 Accept-Language 헤더 감지
  • lang 쿠키를 설정하는 /lang 스위처 엔드포인트
  • Page{lang: "es"} 로 페이지별 언어 오버라이드

Fallback 체인: atesti/es/index.smlatesti/index.sml

결과: 바르셀로나에서 온 방문자는 자동으로 스페인어 페이지에 도착합니다. 카탈루냐에서 온 방문자는 카탈라어를 보게 됩니다. JavaScript가 필요 없습니다.

lang-specific SML pages (atesti/es/index.sml fallback to index.sml)
Page{lang:} override for per-page content language
Markdown{src:} with lang injection and no‑lang fallback

또한 현재 언어를 소스 경로에 삽입하는 새로운 Markdown{src:} 구문을 추가했습니다 – 따라서 content.md가 존재한다면 content-es.md 로 자동 변환되고, 없을 경우 기본 파일로 조용히 대체됩니다.

🎨 SML 기반 테마 시스템

테마가 이제 일급 객체가 되었습니다. 두 파일이 모든 것을 제어합니다:

  • theme.sml – 라이트 모드 CSS 커스텀 프로퍼티
  • theme-dark.sml – 다크 모드 오버라이드

전체 사이트 색상 팔레트, 간격, 타이포그래피가 이 두 파일에서 흐릅니다. 템플릿 곳곳에 흩어져 있던 하드코딩된 HEX 값이 없습니다. 우리의 SML 선언형 UI와 같은 철학을 따릅니다: 의도를 선언하고, 시스템이 나머지를 처리하게 하라.

🔗 OG 메타 태그 + 이미지 경로 해석

이제 모든 페이지가 올바른 OpenGraph 태그를 출력합니다:

og:title, og:description, og:url, og:image

Image{src:} 가 상대 경로를 자동으로 Codeberg raw URL 전체 형태로 변환합니다 – 따라서 콘텐츠 작성자는 이미지가 CDN 어디에 있는지 고민할 필요가 없습니다.

💀 Guru Meditation 오류 페이지

404와 500 페이지가 이제 Amiga 스타일의 Guru Meditation 화면으로 렌더링됩니다:

Software Failure. Press left mouse button to continue.

Guru Meditation

#00000404.DEADBEEF

← back to safety

Amiga에 대한 러브레터이며, 80년대 Toolbox 잡지로 코딩을 배운 사람이 만든 CMS와 완벽히 어울립니다.

🏗️ 내부 구조

실제 의미 있는 인프라 개선 몇 가지:

  • ETagFor() – 자산에 대한 올바른 캐시 지문
  • Stale cache fallback – Codeberg에 접근할 수 없을 때 마지막으로 정상적인 콘텐츠 제공
  • ErrNotFound sentinel – 문자열 매칭 대신 깔끔한 오류 타입 전파
  • Asset fingerprinting fix – 파비콘(새싹 🌱 SVG)이 이제 캐시를 올바르게 무효화
  • Site‑wide Menu{} and Footer{}app.sml에 한 번 정의하고 모든 곳에서 렌더링

⚖️ 듀얼 라이선스

프로젝트는 이제 GPL v3 + 상업용 라이선스 하에 제공됩니다. Qt 모델을 그대로 따릅니다.

  • 오픈 소스는 오픈 소스를 위해.
  • 상업용 라이선스는 상업적 사용을 위해.

수익은 의도된 커뮤니티 인프라를 위한 토지 구매에 사용됩니다 – 하지만 이는 별도의 포스트에서 다룹니다.

다음 계획

실제 작동하는 프로토타입은 atesti.crowdware.infoAtesti para Dana 라는 선물 기반 대안 화폐가 Minuto 프레임워크 위에 구축된 곳입니다.

다음 목표: 지속 가능한 IndexedDB를 갖춘 SMS/WASM 검색 인덱스 구축, 이를 통해 백엔드 쿼리 없이 CMS 자체 콘텐츠를 검색할 수 있게 합니다.

작고 인간 중심이며 기발한 무언가를 만들고 있다면 – 우리는 Codeberg에서 활동하고 있습니다.

Forge 4D 생태계의 일부 – 선언형 UI, 네이티브 컴파일, 클라우드 불필요.

0 조회
Back to Blog

관련 글

더 보기 »

내 Go 버전을 대신 선택하지 마세요

go.mod 파일에는 필수적인 go 지시문이 포함됩니다. Go 1.21부터는 변경 사항이 도입되어 https://go.dev/doc/go1.21introduction 를 포함하도록 전체를 만들었습니다.