개발 slecs

CMS 게시 스크립트에 리뷰 추적 메타 자동 삽입 기능 추가

목차

publish.sh에 cms_post 메타 행을 자동 삽입하는 로직을 추가했다. review_loop과 직접 연결되도록 한 것인데, 이게 생각보다 중요한 변화다.

배경: 게시와 리뷰 추적의 간극

CMS를 운영하다 보면 게시(publish) 이후의 추적이 은근 복잡해진다. 콘텐츠가 게시되는 시점에 어떤 리뷰 상태였는지, 어떤 검수 단계를 거쳤는지 이력을 남겨야 한다. 특히 팀 규모가 커지면 "누가 언제 게시했는데 리뷰는 누가 했어?" 이런 질문이 자주 나온다.

기존에는 publish.sh가 단순히 게시 작업만 수행했다면, 이제 게시와 동시에 메타데이터를 생성함으로써 게시 이벤트를 명시적으로 기록하는 구조로 개선한 것이다. 여기서 "메타"는 단순 부가정보가 아니라 review_loop과 조인할 수 있는 구조화된 관계 데이터가 된다.

메타 테이블과 조인 설계의 선택

메타 테이블 방식은 CMS나 전자상거래 시스템에서 자주 쓰는 패턴이다. 왜냐하면:

  • 유연성: 기존 cms_post 테이블을 건드리지 않고도 속성을 추가할 수 있다
  • 확장성: 나중에 review_loop 외 다른 워크플로우와도 쉽게 조인할 수 있다
  • 격리: 게시 메타정보와 콘텐츠 정보를 명확히 분리할 수 있다

대안으로 cms_post 테이블에 review_loop_id 컬럼을 직접 추가할 수도 있지만, 그러면 모든 게시물이 항상 리뷰와 1:1 관계를 가져야 하고, 리뷰 프로세스가 바뀌면 스키마 마이그레이션이 필요해진다.

접근법 장점 단점
메타 테이블 (선택함) 유연한 확장, 기존 스키마 무결성 유지 조인 복잡도 증가
직접 컬럼 추가 조회 단순, 성능 우위 스키마 변경 빈번, 다대다 관계 어려움

구현: 게시 자동화에 메타 삽입 로직 추가

publish.sh 스크립트 레벨에서 게시 작업이 성공한 후, cms_post_meta 테이블에 행을 삽입하도록 했다. 이 행이 있어야 review_loop 쿼리가 이 게시물을 찾을 수 있게 되는 것이다.

패턴으로 보면:

# 게시 후 메타 행 자동 생성
INSERT INTO cms_post_meta (post_id, meta_key, meta_value, created_at)
VALUES ($published_post_id, 'review_status', 'completed', NOW());

이제 리뷰 팀이나 모니터링 대시보드에서:

SELECT p.id, p.title, m.meta_value as review_status
FROM cms_post p
JOIN cms_post_meta m ON p.id = m.post_id
  AND m.meta_key = 'review_status'
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 1 DAY);

이런 식으로 최근 게시된 콘텐츠들의 리뷰 상태를 한눈에 볼 수 있게 된다.

회고: 스크립트 자동화의 철학

이 작업을 하면서 느낀 점은, 배포/게시 스크립트는 단순한 실행 도구가 아니라 시스템 상태를 기록하는 장부 역할을 해야 한다는 것이다. publish.sh가 게시 파일만 옮기고 끝났다면, 나중에 "이 게시물이 언제 어떤 상태로 나갔는지" 추적할 때 데이터가 모자라게 된다.

특히 팀 규모가 커지거나 감시 요구사항(compliance, audit)이 생기면, 이런 메타 정보 없이는 시스템 신뢰도가 떨어진다. 한 번의 스크립트 개선으로 그 뒤로는 자동으로 추적 정보가 축적되니까, 초기 투자 대비 ROI가 높은 작업이었다.

또 하나는 DB 설계 단계에서 조인 관계를 미리 생각해두는 중요성이다. 게시와 리뷰가 분리된 프로세스라면, 양쪽을 연결할 고리(메타 테이블)를 처음부터 마련해두는 게 맞다. 나중에 "어? 이 둘을 연결할 방법이 없네?"라고 깨닫고 마이그레이션하는 것보다 훨씬 깔끔하다.

다음 단계로는 이 메타 정보를 기반으로 대시보드를 만들거나, 리뷰 지연 알림 같은 자동화 워크플로우를 추가할 수 있겠다는 생각이 든다.


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

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

댓글 0

첫 댓글 달아줘.