Search

콘텐츠 관리용 CSV 컬럼 설계 + SQL 쿼리 샘플

요약

•
권장 CSV 3종: content_assets.csv(원장) + content_links.csv(내부링크) + content_metrics.csv(성과, 선택)
•
핵심 컨셉: 글 1개를 “문서”로만 보지 않고 **클러스터 자산(주제·역할·품질·리스크)**로 관리

목차

1.
파일 구성(3 CSV)
2.
CSV #1 콘텐츠 원장 컬럼 설계
3.
CSV #2 내부 링크 그래프 컬럼 설계
4.
CSV #3 성과 로그 컬럼 설계(선택)
5.
SQL 쿼리 샘플(운영 KPI/경고/점검)

1) 파일 구성(권장)

•
content_assets.csv: 글 1행 = 콘텐츠 1건(기획→작성→발행→업데이트)
•
content_links.csv: 링크 1행 = 내부 링크 1개(허브 회귀/체인 점검)
•
content_metrics.csv (선택): 날짜×글 단위 성과(노출/클릭/CTR 등)

2) CSV #1: content_assets.csv (콘텐츠 원장)

A. 식별/분류(필수)

컬럼
타입
예시
설명
asset_id
string
A-20251214-001
고유 ID
title
string
서울 재건축 단계별 리스크 체크리스트
제목
status
enum
idea/draft/published/updated
상태
publish_date
date
2025-12-14
발행일
last_update_date
date
2025-12-20
수정일
core_topic
string
서울 정비사업
코어 토픽(고정 축)
sub_cluster
string
사업성/리스크/제도/지역/사례
하위 클러스터
role
enum
pillar/support/case/update
역할(필러/서포팅/사례/업데이트)
intent_type
enum
info/decision/howto/news
D.I.A 의도 유형
hub_asset_id
string
A-20251201-000
소속 허브(Pillar) ID

B. D.I.A 구조 체크(필수)

컬럼
타입
예시
설명
conclusion_first
bool
TRUE
상단 결론(7줄 내)
scope_statement
bool
TRUE
범위/비범위 선언
evidence_block
bool
TRUE
데이터/제도 근거 블록
counter_risk_block
bool
TRUE
반론/리스크 블록
actionable_checklist
bool
TRUE
체크리스트/가이드
sources_declared
bool
TRUE
출처 표기 여부
originality_type
enum
data_rework/framework/case/none
독창성 유형
freshness_needed
bool
TRUE
시의성 필요 주제 여부
update_log_included
bool
TRUE
업데이트 로그

C. C-Rank(주제 일관성)·운영(필수)

컬럼
타입
예시
설명
topic_fit_score
int(0-5)
5
코어토픽 적합도(자체평가)
cluster_priority
int(1-3)
1
1=핵심,3=보조
links_out_target
int
5
이 글에서 나갈 링크 목표
links_in_target
int
3
이 글로 들어올 링크 목표
pillar_candidate
bool
FALSE
향후 필러 승격 후보

D. AI/어뷰징 리스크(필수)

컬럼
타입
예시
설명
ai_used
bool
TRUE
AI 사용 여부
ai_usage_scope
enum
research/outline/edit/none
사용 범위
ai_ratio_est
int(0-100)
45
AI 기여율 추정
human_judgement_block
bool
TRUE
‘내 판단/실무상’ 문단
template_group
string
T-DECISION-01
템플릿 군(반복 탐지)
risk_flags
string
thin_content,repeat_title
위험 플래그(콤마)
팁(운영 안정성): intent_type, role, template_group는 “검색 의도 불일치/반복”을 잡는 데 가장 효율적입니다.

3) CSV #2: content_links.csv (내부 링크 그래프)

컬럼
타입
예시
설명
from_asset_id
string
A-20251214-001
링크 출발 글
to_asset_id
string
A-20251201-000
링크 도착 글
link_type
enum
to_pillar/to_support/to_case
링크 유형
anchor_text
string
분담금 계산 구조
앵커 텍스트
position
enum
intro/body/summary
링크 위치
created_date
date
2025-12-14
생성일
is_active
bool
TRUE
링크 유효

4) CSV #3: content_metrics.csv (성과 로그, 선택)

컬럼
타입
예시
설명
date
date
2025-12-14
집계일
asset_id
string
A-20251214-001
글 ID
impressions
int
1200
노출
clicks
int
85
클릭
ctr
float
0.0708
클릭률
avg_position
float
6.2
평균 순위(가능 시)
comments
int
3
댓글
saves
int
4
저장
external_referrals
int
12
외부 유입(가능 시)

5) SQL 쿼리 샘플

아래는 SQLite/PostgreSQL 계열 문법 기준입니다. (테이블명 = CSV를 적재한 테이블명)

A. C-Rank용: 주제 일관성(최근 20개 코어토픽 비율)

WITH last20 AS ( SELECT core_topic FROM content_assets WHERE status IN ('published','updated') ORDER BY publish_date DESC LIMIT 20 ) SELECT core_topic, COUNT(*) AS cnt, ROUND(100.0 * COUNT(*) / 20, 1) AS pct FROM last20 GROUP BY core_topic ORDER BY cnt DESC;
SQL
복사

B. C-Rank용: 서브클러스터 편중 점검(최근 30개)

WITH last30 AS ( SELECT sub_cluster FROM content_assets WHERE status IN ('published','updated') ORDER BY publish_date DESC LIMIT 30 ) SELECT sub_cluster, COUNT(*) AS cnt, ROUND(100.0 * COUNT(*) / 30, 1) AS pct FROM last30 GROUP BY sub_cluster ORDER BY cnt DESC;
SQL
복사

C. D.I.A용: “구조 블록 누락” 경고 리스트

SELECT asset_id, title, publish_date, conclusion_first, evidence_block, counter_risk_block, actionable_checklist FROM content_assets WHERE status IN ('published','updated') AND ( conclusion_first = FALSE OR evidence_block = FALSE OR counter_risk_block = FALSE OR actionable_checklist = FALSE ) ORDER BY publish_date DESC;
SQL
복사

D. D.I.A용: 유형(intent_type)별 권장 블록 충족률(간이)

SELECT intent_type, COUNT(*) AS n, ROUND(100.0 * AVG(CASE WHEN conclusion_first THEN 1 ELSE 0 END), 1) AS pct_conclusion_first, ROUND(100.0 * AVG(CASE WHEN evidence_block THEN 1 ELSE 0 END), 1) AS pct_evidence, ROUND(100.0 * AVG(CASE WHEN counter_risk_block THEN 1 ELSE 0 END), 1) AS pct_risk, ROUND(100.0 * AVG(CASE WHEN actionable_checklist THEN 1 ELSE 0 END), 1) AS pct_action FROM content_assets WHERE status IN ('published','updated') GROUP BY intent_type ORDER BY n DESC;
SQL
복사

E. Chain용: “허브(Pillar)로 회귀 링크 없는 글(고아 문서)” 탐지

SELECT a.asset_id, a.title, a.hub_asset_id, COUNT(l.to_asset_id) AS links_to_hub FROM content_assets a LEFT JOIN content_links l ON a.asset_id = l.from_asset_id AND l.to_asset_id = a.hub_asset_id AND l.is_active = TRUE WHERE a.status IN ('published','updated') AND a.hub_asset_id IS NOT NULL GROUP BY a.asset_id, a.title, a.hub_asset_id HAVING COUNT(l.to_asset_id) = 0 ORDER BY a.publish_date DESC;
SQL
복사

F. 어뷰징용: 템플릿 반복(최근 14일, 그룹별 3개 이상)

SELECT template_group, COUNT(*) AS cnt, MIN(publish_date) AS first_date, MAX(publish_date) AS last_date FROM content_assets WHERE status IN ('published','updated') AND template_group IS NOT NULL AND publish_date >= DATE('now','-14 day') GROUP BY template_group HAVING COUNT(*) >= 3 ORDER BY cnt DESC, last_date DESC;
SQL
복사

G. 어뷰징용: AI 과다 + 판단문단 부재(고위험 조합)

SELECT asset_id, title, publish_date, ai_ratio_est, human_judgement_block FROM content_assets WHERE status IN ('published','updated') AND ai_ratio_est >= 70 AND human_judgement_block = FALSE ORDER BY publish_date DESC;
SQL
복사

H. 운영 KPI: “필러 대비 서포팅 확장” 균형

SELECT role, COUNT(*) AS cnt FROM content_assets WHERE status IN ('published','updated') GROUP BY role ORDER BY cnt DESC;
SQL
복사

I. 성과(선택): 최근 28일 CTR 상위 10개(노출 500 이상)

SELECT m.asset_id, a.title, SUM(m.impressions) AS impressions_28d, SUM(m.clicks) AS clicks_28d, ROUND(1.0 * SUM(m.clicks) / NULLIF(SUM(m.impressions),0), 4) AS ctr_28d FROM content_metrics m JOIN content_assets a ON a.asset_id = m.asset_id WHERE m.date >= DATE('now','-28 day') GROUP BY m.asset_id, a.title HAVING SUM(m.impressions) >= 500 ORDER BY ctr_28d DESC LIMIT 10;
SQL
복사

결론

•
이 CSV+SQL 구조를 쓰면, 블로그 운영의 핵심을 **감(感)**이 아니라 데이터로 통제할 수 있습니다.
◦
C-Rank: core_topic/sub_cluster/role의 분포·일관성
◦
D.I.A: conclusion/evidence/risk/action의 블록 완결성
◦
어뷰징: template_group/ai_ratio_est/risk_flags의 반복·저품질 패턴

FAQ

Q1. CSV는 1개로도 되나요?
A. 가능하지만 content_links는 관계형(다대다)이라 분리하면 점검 쿼리가 훨씬 쉬워집니다.
Q2. 점수(DIA_struct_score)도 만들까요?
A. 추천합니다. 필요하면 conclusion_first 등 불리언을 가중치로 합산하는 파생 컬럼(뷰) 쿼리도 같이 드릴 수 있어요.
Q3. 바로 시작하려면 최소 컬럼은?
A. asset_id,title,status,publish_date,core_topic,sub_cluster,role,intent_type,hub_asset_id +
conclusion_first,evidence_block,counter_risk_block,actionable_checklist +
ai_used,ai_ratio_est,template_group 이 15개면 충분히 굴러갑니다.
Kakao Channel