← 블로그로 돌아가기
2026-03-10-maintainable-ui-structure

유지보수 쉬운 UI 구조(정적 블로그 관점)

글 목록/상세/필터/SEO 같은 반복 요소를 컴포넌트와 파일 기반 유틸로 분리해 비용을 낮춥니다.

정적 블로그를 만들 때 가장 흔한 비용은 “나중에 수정할 때” 발생합니다. 예를 들어:

  • 목록 카드 스타일이 바뀔 때 모든 페이지를 찾아야 함
  • 태그 UI가 바뀔 때 로직이 흩어짐
  • SEO 메타데이터 생성이 중복됨

이 템플릿은 이런 문제를 줄이기 위해 다음 규칙을 둡니다.

1) 콘텐츠 로딩은 lib에만 둔다

src/lib/posts.ts에서 frontmatter를 읽고, 정렬/정규화를 담당합니다. 페이지는 “렌더링”만 합니다.

예시(태그 파싱 로직):

function parseTags(input: unknown): string[] {
  if (!input) return [];
  if (Array.isArray(input)) return input.map(String).map(s => s.trim()).filter(Boolean);
  if (typeof input === "string") return input.split(/[,;]+/g).map(s => s.trim()).filter(Boolean);
  return [];
}

2) 본문 렌더링은 MDX 컴포넌트 매핑으로 통일

src/components/markdown/MDXComponents.tsx에서 pre, code, img를 공통 스타일로 고정합니다. 그래서 어떤 글을 추가해도 코드 블록과 이미지가 동일한 가독성을 유지합니다.

코드 블록 예시

3) 태그 필터는 정적 친화적으로

목록 페이지는 서버에서 posts 메타데이터를 전달하고, 클라이언트에서 ?tag= 쿼리로 필터링합니다. 이렇게 하면 필터 UI가 바뀌어도 콘텐츠 로딩 로직을 건드릴 필요가 없습니다.

원하시면 이 구조를 확장해서:

  • 검색어(키워드) 필터
  • 글의 “시리즈” 태그
  • 프로젝트 상세 페이지

까지도 같은 패턴으로 쉽게 붙일 수 있습니다.