개발 slecs

블로그에 조회수 지표와 글쓴이 페이지를 동시에 완성한 이유

목차

블로그에 조회수/지표 노출 + author 페이지를 한 번에 묶어서 작업했다. 작은 기능처럼 보이지만 실제로는 꽤 여러 레이어를 건드린 작업이었음.


왜 이게 하나의 커밋에 묶였나

처음엔 PostMetrics 컴포넌트만 만들려고 했다. 그런데 작업하다 보니 조회수를 기록/조회하는 API 엔드포인트(/api/metric)가 없으면 컴포넌트 자체가 의미 없고, API가 생기면 Article schema에서 author 필드가 애매하게 남는 문제가 눈에 들어왔다. 거기에 author 페이지(/author/money-team)가 없으면 포스트에 author 정보를 표시해도 링크가 죽어 있는 상태가 되니까 결국 한 덩어리로 묶었다.

팀에서 이런 작업을 리뷰할 때 자주 하는 말이 있다. "사용자가 실제로 눌렀을 때 죽는 링크를 PR에 올리지 말자"는 거다. 반쪽짜리 기능을 main에 머지하면 그 자체로 작은 장애고, 누군가 다음 스프린트에서 "이거 왜 안 되지?" 하고 디버깅하는 비용이 생긴다. 그래서 다소 커밋 범위가 넓어지더라도 릴리즈 가능한 단위로 묶는 편이다.


변경 파일별 역할

파일 역할 이번 변경 포인트
PostMetrics.astro 조회수/지표 UI 컴포넌트 신규 생성. API 호출 후 수치 렌더링
Post.astro 포스트 레이아웃 PostMetrics 컴포넌트 삽입
[...slug].astro 포스트 동적 라우트 페이지 진입 시 조회수 기록 연결
api/metric.ts 조회수 기록/조회 API 신규 엔드포인트
author/money-team.astro author 상세 페이지 신규 생성

파일 수가 다섯 개로 적지 않은데, 크게 보면 컴포넌트 레이어 → 레이아웃 연결 → 라우트 처리 → API → 참조 페이지 순서로 각 레이어를 하나씩 건드린 구조다. 어느 한 파일이 빠지면 체인이 끊기는 형태라서 분리 커밋보다 묶는 게 맞다고 판단했다.


Article schema author 변경이 끼어든 이유

이게 약간 숨어 있는 포인트인데, author 페이지를 새로 만들면서 기존 Article schema의 author 필드가 단순 문자열로만 박혀 있던 게 문제였다. author 페이지로 라우팅하려면 slug나 식별 가능한 값이 필요한데 그냥 표시용 이름만 들어 있으면 링크를 동적으로 생성할 수가 없다.

// Before — author가 표시명 문자열 하나
author: z.string()

// After — author 페이지와 연결 가능한 구조로
author: z.object({
  name: z.string(),
  slug: z.string(),
})

schema를 바꾸면 기존 콘텐츠 파일들도 같이 수정해야 하는 번거로움이 있지만, 나중에 "author 필터링" 같은 기능을 붙일 때 다시 schema를 뜯어야 하는 비용을 생각하면 지금 한 번 정리하는 게 맞다. 이런 타이밍 판단이 팀장 포지션에서 자주 해야 하는 결정이기도 하다. 기술 부채를 지금 갚느냐, 다음에 갚느냐.


api/metric.ts — 간단하지만 설계는 명확하게

조회수 API는 크게 두 가지 동작이 필요했다.

  • POST /api/metric — 포스트 진입 시 조회수 +1
  • GET /api/metric?slug=... — 현재 조회수 조회

Astro의 API 라우트는 하나의 파일에서 HTTP 메서드로 분기할 수 있어서 metric.ts 하나로 처리했다. 단순한 구조지만 이런 엔드포인트도 "slug 없이 요청하면 어떻게 되나", "동시 요청이 몰리면?" 같은 엣지 케이스는 미리 정리해두는 게 나중에 팀원이 건드릴 때 혼란이 없다. 지금 당장 트래픽이 없어도 방어 코드는 작성 습관이다.


짧은 회고

PostMetrics 컴포넌트 자체는 UI 작업이라 금방이었는데, author schema 변경 + author 페이지 신규 작성 + 기존 콘텐츠 파일 업데이트가 예상보다 시간을 잡아먹었다. 이런 "작아 보이는 schema 변경"이 사실 변경 반경이 제일 넓다. 앞으로 schema를 바꿀 일이 있으면 콘텐츠 파일 수를 먼저 확인하는 습관을 들여야겠다는 걸 다시 한 번 확인한 작업이었음.

끝.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.