블로그를 새 저장소에서 다시 시작합니다. 이전 사이트는 저널 말고도 컬렉션, 컨설팅 소개, 커맨드 팔레트까지 얹은 브랜드 사이트였는데, 정작 저희가 제일 자주 만지는 건 글이었습니다. 그래서 글만 남기고 다시 시작하기로 했습니다. 이전 사이트는 지우지 않고 archive/v2-site 브랜치에 그대로 보존했습니다.

무엇이 달라졌나

항목이전지금
범위브랜드 사이트 + 저널 + 커머스글만
콘텐츠 소스저장소 안의 md 파일ContentSource 어댑터 (지금은 Fixture, CMS 예정)
디자인 시스템앱 안의 페이지Storybook
움직임커서·틸트·패럴랙스히어로 페이드 하나

줄이는 쪽으로만 바뀌었습니다. 장식적인 움직임을 걷어내고 명도, 타이포그래피, 간격만으로 위계를 만드는 원칙은 새 UI가 원래 갖고 있던 것이라 그대로 따랐습니다.

화면은 데이터가 어디서 오는지 모릅니다

이전 사이트에서 제일 잘한 결정이 md 파이프라인을 작게 유지한 거였는데, 이번에는 그 경계를 인터페이스로 한 단계 더 올렸습니다. 화면은 이 타입만 압니다.

typescript
type ContentSource = {
  listPublishedPosts(): Promise<PostSummary[]>;
  getPublishedPost(slug: string): Promise<Post | null>;
};

지금은 Fixture 어댑터가 이 인터페이스를 구현하고 있고, CMS가 준비되면 조립 지점 한 곳만 바꾸면 됩니다. 이전 저널에서 글 몇 편을 시드로 옮겨온 것도 이 구조 덕에 데이터만 옮기면 끝났습니다.

이전하면서 손본 보안 항목

옮기는 김에 점검한 것들입니다.

  1. canonical origin 고정 — 요청의 Host 헤더로 canonical URL을 만들던 걸 설정값으로 바꿨습니다. 헤더 기반 origin은 위조된 Host가 그대로 canonical과 OG에 실립니다.
  2. HTML 응답에 보안 헤더X-Content-Type-Options, Referrer-Policy, X-Frame-Options, Permissions-Policy를 응답에 얹습니다.
  3. 의존성 정리 — 감사에서 나온 고위험 항목을 패치 범위에서 올렸습니다. 남은 건 업스트림 이슈 하나뿐이고, 해당 코드 경로에는 외부 입력이 닿지 않는 걸 확인했습니다.

다음

CMS 어댑터가 다음 마일스톤입니다. 그전까지는 시드 글에 새 글을 픽스처로 추가하며 갑니다. 형식이 가벼워야 기록이 살아남는다는 걸 이전 사이트에서 배웠으니까요.