블로그 영문 버전 추가 + solved.ac 403 장애 복구
Sprint 84: 블로그 영문 버전 추가
Context
기술 블로그(Docusaurus)에 영문 버전을 추가하여 글로벌 접근성 확보. 병행하여 solved.ac Cloudflare 차단 장애가 발생하여 긴급 대응 수행.
Decisions
D1: Docusaurus i18n — /en 경로 locale 라우팅
- Context: 블로그 콘텐츠를 한국어(기본) + 영문으로 제공 필요.
- Decision: Docusaurus built-in i18n 플러그인 사용.
i18n.defaultLocale: 'ko',locales: ['ko', 'en']설정./enprefix로 영문 접근. - Alternatives: (a) 별도 사이트 배포 — 이중 관리 비용, 기각. (b) MDX 내 조건부 렌더링 — 작성 복잡도 높음, 기각.
- Code Paths:
blog/docusaurus.config.ts,blog/i18n/en/
D2: trailingSlash 활성화 — 정적 export 403 해결
- Context:
/en경로가 GitHub Pages에서 403 Forbidden 반환. 정적 export 시index.html미생성으로 디렉토리 접근 실패. - Decision:
docusaurus.config.ts에trailingSlash: true설정. 모든 경로가/{path}/index.html로 생성되어 정적 호스팅 호환. - Code Paths:
blog/docusaurus.config.ts
D3: 다크모드 토글 제거 — 라이트 모드 고정
- Context: 디자인 토큰이 라이트 모드 기준으로만 정의됨. 다크모드 전환 시 일부 컴포넌트에서 대비비 미충족.
- Decision:
colorMode.disableSwitch: true,respectPrefersColorScheme: false설정. 라이트 모드 단일 테마로 고정. - Code Paths:
blog/docusaurus.config.ts
D4: solved.ac 403 장애 복구 (상세: sprint-85.md)
- Gateway 프록시 일원화(Referer 제거) + wget subprocess 전환(Cloudflare JA3 우회).
- 상세 결정 및 교훈은 Sprint 85 ADR 참조.
D5: Trivy HIGH 취약점 병행 패치
- CVE-2026-28390 (OpenSSL) — APK 캐시 버스트 적용.
- GHSA-q4gf-8mx6-v5v3 (Next.js DoS) — 15.5.14 → 15.5.15 업그레이드.
Patterns
P1: Docusaurus 정적 export + GitHub Pages는 trailingSlash 필수
- Where:
blog/docusaurus.config.ts - When to Reuse: Docusaurus를 GitHub Pages(정적 호스팅)에 배포할 때. 서브 경로가 403이면 이 설정을 먼저 확인.
Gotchas
G1: Docusaurus i18n locale 경로와 정적 호스팅 호환성
- Symptom:
/en접근 시 403 Forbidden. - Root Cause:
trailingSlash: false(기본값)일 때 정적 export가/en.html을 생성하지만, GitHub Pages는 디렉토리로 해석하여index.html을 찾음. - Fix:
trailingSlash: true설정으로/en/index.html생성.
Metrics
- Commits: 11건 (0be3048..641b857)
- Blog i18n: 3 PR (#86, #87, #88)
- solved.ac 복구: 5 커밋 (gateway 프록시 + wget 전환 + 스키마 정렬)
- 보안 패치: 2건 (Trivy + Next.js)
- 이월 항목: 없음