뷰성형외과 전용 mock데이터 외삽 알고리즘 추가

db-migration
jaehwang 2026-05-21 15:41:43 +09:00
parent cb798f7acc
commit 0e68cbe71b
4 changed files with 816 additions and 4 deletions

View File

@ -65,7 +65,7 @@ class ApifyClient:
async def fetch_instagram_posts(self, url: str, limit: int = 20) -> list[dict]: async def fetch_instagram_posts(self, url: str, limit: int = 20) -> list[dict]:
username = urlparse(url).path.strip("/").split("/")[0] if "://" in url else url.lstrip("@") username = urlparse(url).path.strip("/").split("/")[0] if "://" in url else url.lstrip("@")
return await self._run_actor("apify~instagram-post-scraper", { return await self._run_actor("apify~instagram-post-scraper", {
"directUrls": [f"https://www.instagram.com/{username}/"], "username": [f"https://www.instagram.com/{username}/"],
"resultsLimit": limit, "resultsLimit": limit,
}) })
@ -94,8 +94,9 @@ class ApifyClient:
async def fetch_instagram_reels(self, url: str, limit: int = 15) -> list[dict]: async def fetch_instagram_reels(self, url: str, limit: int = 15) -> list[dict]:
username = urlparse(url).path.strip("/").split("/")[0] if "://" in url else url.lstrip("@") username = urlparse(url).path.strip("/").split("/")[0] if "://" in url else url.lstrip("@")
print(username)
return await self._run_actor("apify~instagram-reel-scraper", { return await self._run_actor("apify~instagram-reel-scraper", {
"directUrls": [f"https://www.instagram.com/{username}/reels/"], "username": [f"https://www.instagram.com/{username}/reels/"],
"resultsLimit": limit, "resultsLimit": limit,
}) })

View File

@ -0,0 +1,317 @@
{
"id": "view-clinic",
"clinicName": "뷰성형외과의원",
"clinicNameEn": "VIEW Plastic Surgery",
"createdAt": "2026-04-28",
"targetUrl": "https://www.viewclinic.com",
"brandGuide": {
"colors": [
{ "name": "VIEW Purple", "hex": "#7B2D8E", "usage": "공식 로고 메인 컬러, 깃털 아이콘, 브랜드 텍스트" },
{ "name": "VIEW Gold", "hex": "#E8B931", "usage": "깃털 악센트, 강조 요소, CTA 포인트" },
{ "name": "VIEW Text Purple", "hex": "#6B2D7B", "usage": "한글/영문 브랜드명, 헤딩 텍스트" },
{ "name": "Warm White", "hex": "#FAF8F5", "usage": "배경, 카드, 여백 공간" },
{ "name": "Deep Charcoal", "hex": "#2D2D2D", "usage": "본문 텍스트, 서브 텍스트" }
],
"fonts": [
{ "family": "Pretendard", "weight": "Bold 700", "usage": "헤딩, 섹션 타이틀, CTA 버튼", "sampleText": "안전이 예술이 되는 곳" },
{ "family": "Pretendard", "weight": "Regular 400", "usage": "본문 텍스트, 설명, 캡션", "sampleText": "21년 무사고 VIEW 성형외과" },
{ "family": "Playfair Display", "weight": "Bold 700", "usage": "영문 헤딩, 프리미엄 강조", "sampleText": "VIEW Plastic Surgery" }
],
"logoRules": [
{ "rule": "보라색+골드 깃털 로고 통일 사용", "description": "공식 깃털 심볼(보라색+골드) + VIEW 텍스트를 모든 채널에서 동일하게 사용", "correct": true },
{ "rule": "원형 로고: 보라색 테두리 버전", "description": "프로필 사진용 원형 버전은 보라색 원 테두리 안에 깃털 심볼 + VIEW 텍스트 배치", "correct": true },
{ "rule": "가로형 로고: 깃털 + 텍스트 조합", "description": "배너, 헤더에는 깃털 심볼 옆에 View Plastic Surgery 텍스트를 가로 배치", "correct": true },
{ "rule": "모델 사진 프로필 금지", "description": "프로필 사진에 모델/환자 사진 대신 반드시 공식 깃털 로고 사용 (Instagram KR 위반 중)", "correct": false },
{ "rule": "비공식 변형 로고 사용 금지", "description": "YouTube의 VIEW 골드 텍스트 전용 로고는 비공식 — 깃털 심볼이 반드시 포함되어야 함", "correct": false },
{ "rule": "로고 주변 여백 확보", "description": "로고 크기의 50% 이상 여백을 유지하여 가독성 확보", "correct": true }
],
"toneOfVoice": {
"personality": ["차분한 전문가", "신뢰감 있는", "과장 없는", "환자 중심", "결과로 증명하는"],
"communicationStyle": "환자의 불안과 고민을 이해하고, 전문적인 판단력으로 신뢰를 구축합니다. 유행을 좇지 않고 원칙을 말하는 병원으로서, 과장된 표현 대신 정확한 정보와 설명으로 설득합니다.",
"doExamples": [
"\"수술을 권하기 전에, 판단을 설명합니다\"",
"\"결과가 설명되는 수술\"",
"\"21년간 안전을 최우선으로\"",
"\"환자의 관점에서 생각합니다\""
],
"dontExamples": [
"\"강남 최고! 파격 할인!\"",
"\"연예인이 선택한 병원\"",
"\"이 가격은 오늘까지만!\"",
"\"100% 만족 보장\""
]
},
"channelBranding": [
{ "channel": "YouTube", "icon": "youtube", "profilePhoto": "보라색+골드 깃털 원형 로고", "bannerSpec": "2560x1440px, 퍼플+골드 그라디언트 배경, 깃털 심볼 + \"VIEW Plastic Surgery\" 슬로건", "bioTemplate": "안전이 예술이 되는 곳 — 21년 무사고 VIEW 성형외과\n02-539-1177 | 카톡: @뷰성형외과의원", "currentStatus": "incorrect" },
{ "channel": "Instagram KR", "icon": "instagram", "profilePhoto": "보라색+골드 깃털 원형 로고", "bannerSpec": "N/A (하이라이트 커버: 퍼플 톤 아이콘 세트)", "bioTemplate": "안전이 예술이 되는 곳 — VIEW 성형외과\n신논현역 3번 출구 | 02-539-1177\nviewclinic.com", "currentStatus": "incorrect" },
{ "channel": "Instagram EN", "icon": "instagram", "profilePhoto": "보라색+골드 깃털 원형 로고", "bannerSpec": "N/A", "bioTemplate": "Where Safety Becomes Art — VIEW Plastic Surgery\nGangnam, Seoul | +82-2-539-1177\nviewclinic.com/en", "currentStatus": "incorrect" },
{ "channel": "Facebook KR", "icon": "facebook", "profilePhoto": "보라색+골드 깃털 원형 로고", "bannerSpec": "820x312px, 퍼플+골드 배너, 깃털 심볼 + 슬로건", "bioTemplate": "안전이 예술이 되는 곳 — 21년 무사고 VIEW 성형외과", "currentStatus": "correct" },
{ "channel": "Facebook EN", "icon": "facebook", "profilePhoto": "보라색+골드 깃털 원형 로고", "bannerSpec": "820x312px, 동일 디자인 시스템", "bioTemplate": "Where Safety Becomes Art — VIEW Plastic Surgery", "currentStatus": "incorrect" },
{ "channel": "Naver Blog", "icon": "globe", "profilePhoto": "보라색+골드 깃털 로고", "bannerSpec": "블로그 상단: 깃털 심볼 + 대표 이미지", "bioTemplate": "21년 무사고 VIEW 성형외과 공식 블로그\n가슴성형·안면윤곽·양악·눈코·리프팅", "currentStatus": "missing" },
{ "channel": "TikTok", "icon": "video", "profilePhoto": "보라색+골드 깃털 원형 로고", "bannerSpec": "N/A", "bioTemplate": "VIEW 성형외과 — 안전이 예술이 되는 곳\n강남 신논현역 | 02-539-1177", "currentStatus": "missing" }
],
"brandInconsistencies": [
{
"field": "로고",
"values": [
{ "channel": "YouTube", "value": "VIEW 텍스트 전용 골드 로고 (깃털 심볼 없음)", "isCorrect": false },
{ "channel": "Instagram KR", "value": "모델 프로필 사진 (로고 아님)", "isCorrect": false },
{ "channel": "Instagram EN", "value": "VIEW 텍스트 전용 골드 로고 (깃털 심볼 없음)", "isCorrect": false },
{ "channel": "Facebook KR", "value": "보라색+골드 깃털 로고 (공식 로고)", "isCorrect": true },
{ "channel": "Facebook EN", "value": "VIEW 텍스트 전용 골드 로고 (깃털 심볼 없음)", "isCorrect": false },
{ "channel": "Website", "value": "보라색+골드 깃털 로고 (공식 로고)", "isCorrect": true }
],
"impact": "공식 깃털 로고를 사용하는 채널은 Facebook KR과 웹사이트 2곳뿐. 나머지 4개 채널은 비공식 변형 로고 또는 모델 사진을 사용",
"recommendation": "전 채널에 보라색+골드 깃털 공식 로고 통일 적용 (원형 버전: 프로필, 가로형 버전: 배너)"
},
{
"field": "바이오/소개 메시지",
"values": [
{ "channel": "YouTube", "value": "💜뷰성형외과💜 VIEW가 예술이다!", "isCorrect": false },
{ "channel": "Instagram KR", "value": "뷰 성형외과 | 가슴성형·안면윤곽·눈성형", "isCorrect": false },
{ "channel": "Facebook KR", "value": "예쁨이 일상이 되는 순간!", "isCorrect": false },
{ "channel": "Facebook EN", "value": "Official Account by VIEW Partners", "isCorrect": false }
],
"impact": "4개 채널, 4개의 서로 다른 소개 메시지 → 통일된 브랜드 포지셔닝 부재",
"recommendation": "핵심 USP 포함 통일 바이오: \"안전이 예술이 되는 곳 — 21년 무사고 VIEW\""
}
]
},
"channelStrategies": [
{
"channelId": "youtube", "channelName": "YouTube", "icon": "youtube",
"currentStatus": "104K 구독자, 주 2~3회 업로드", "targetGoal": "200K 구독자, 주 3회 업로드",
"contentTypes": ["Shorts", "Long-form", "Community"],
"postingFrequency": "주 3회 (롱폼 1 + Shorts 2)",
"tone": "차분한 전문가 — 원장이 직접 설명하는 교육 콘텐츠",
"formatGuidelines": ["Shorts: 15-60초, 세로형, 후크 3초 내", "Long-form: 5-15분, 원장 설명 + B-roll", "썸네일: VIEW 골드 워터마크 + 통일 폰트"],
"priority": "P0"
},
{
"channelId": "instagram_kr", "channelName": "Instagram KR", "icon": "instagram",
"currentStatus": "14,047 팔로워, Reels 0개", "targetGoal": "50K 팔로워, Reels 주 5개",
"contentTypes": ["Reels", "Carousel", "Stories", "Feed Image"],
"postingFrequency": "일 1회 + Stories 일 2-3개",
"tone": "차분하지만 접근 가능한 — 환자 관점의 Q&A",
"formatGuidelines": ["Reels: YouTube Shorts 동시 게시", "Carousel: 시술 가이드 5-7장", "Stories: 병원 일상, 상담 비하인드, 투표"],
"priority": "P0"
},
{
"channelId": "instagram_en", "channelName": "Instagram EN", "icon": "instagram",
"currentStatus": "70,537 팔로워, Reels 활발", "targetGoal": "120K 팔로워",
"contentTypes": ["Reels", "Before/After", "Patient Stories"],
"postingFrequency": "주 5회",
"tone": "Professional & warm — medical tourism storytelling",
"formatGuidelines": ["Patient journey videos (English subtitles)", "Before/After with consent", "Korea travel + surgery content"],
"priority": "P1"
},
{
"channelId": "facebook", "channelName": "Facebook", "icon": "facebook",
"currentStatus": "KR 254명 + EN 88,333명, 로고 불일치", "targetGoal": "통합 관리, 광고 리타겟 전용",
"contentTypes": ["광고 크리에이티브", "리타겟 콘텐츠"],
"postingFrequency": "주 2-3회 (광고 소재 위주)",
"tone": "신뢰 기반 — 안전, 경험, 결과 강조",
"formatGuidelines": ["KR 페이지 폐쇄 → EN 페이지로 통합", "Facebook Pixel 리타겟 광고 최적화", "로고 VIEW 골드로 즉시 교체"],
"priority": "P1"
},
{
"channelId": "naver_blog", "channelName": "Naver Blog", "icon": "globe",
"currentStatus": "활성 — 551개 게시글, 월 2~3회 포스팅 (최근 2026.4.22)", "targetGoal": "주 2회 포스팅, 월 30,000 방문자",
"contentTypes": ["SEO 블로그 포스트", "시술 가이드", "환자 후기"],
"postingFrequency": "주 3회",
"tone": "정보성 전문가 — 키워드 중심, 환자 고민 해결",
"formatGuidelines": ["2,000자 이상 SEO 최적화 포스트", "시술별 FAQ 시리즈", "이미지 10장 이상 + 동영상 임베드"],
"priority": "P0"
},
{
"channelId": "tiktok", "channelName": "TikTok", "icon": "video",
"currentStatus": "계정 없음", "targetGoal": "10K 팔로워",
"contentTypes": ["Shorts 크로스포스팅", "트렌드 챌린지"],
"postingFrequency": "주 5회 (YouTube Shorts 동시 배포)",
"tone": "가볍고 접근 가능한 — 20~30대 타겟",
"formatGuidelines": ["YouTube Shorts 동시 업로드", "트렌딩 사운드 활용", "자막 필수 (음소거 시청 대비)"],
"priority": "P1"
},
{
"channelId": "kakaotalk", "channelName": "KakaoTalk", "icon": "messageSquare",
"currentStatus": "상담 전용 운영", "targetGoal": "상담 전환율 30% 향상",
"contentTypes": ["상담 안내", "이벤트 알림", "예약 확인"],
"postingFrequency": "주 1-2회 (메시지 발송)",
"tone": "따뜻하고 전문적인 — 1:1 상담 톤",
"formatGuidelines": ["자동 응답 + 상담사 연결 시스템", "시술별 상담 시나리오 준비", "예약 리마인더 자동 발송"],
"priority": "P1"
},
{
"channelId": "naver_cafe", "channelName": "Naver Cafe", "icon": "users",
"currentStatus": "활성 — \"뷰성형외과 성형의 모든것\" 회원 5,984명, 비공개 카페", "targetGoal": "회원 10,000명, 월 활성 참여율 20%",
"contentTypes": ["시술별 Q&A 답변", "수술 전후 비교 콘텐츠", "회원 전용 이벤트", "원장 라이브 Q&A"],
"postingFrequency": "주 3회 (Q&A 답변 + 후기 공유 + 이벤트)",
"tone": "친밀하고 소통하는 — 커뮤니티 매니저 톤",
"formatGuidelines": ["가입 신청 자동 승인 프로세스 개선", "시술별 Q&A 게시판 활성화 (가슴/윤곽/양악/눈/코)", "수술후기 작성 인센티브 (다음 시술 할인)", "YouTube 영상 카페 내 공유로 조회수 상승"],
"priority": "P1"
}
],
"contentStrategy": {
"pillars": [
{ "title": "수술 전문성", "description": "원장의 경험과 판단력을 보여주는 교육 콘텐츠", "relatedUsp": "Surgical Authority", "exampleTopics": ["코성형 Q&A", "가슴보형물 선택 가이드", "양악수술 오해와 진실"], "color": "#6C5CE7" },
{ "title": "안전 & 신뢰", "description": "21년 무사고 이력과 안전 시스템을 증명하는 콘텐츠", "relatedUsp": "Trust & Safety", "exampleTopics": ["수술실 CCTV 공개", "마취 전문의 인터뷰", "회복 관리 시스템"], "color": "#7A84D4" },
{ "title": "결과 예측", "description": "자연스러운 결과와 밸런스를 강조하는 비포/애프터", "relatedUsp": "Result Predictability", "exampleTopics": ["자연스러운 코 라인", "얼굴 밸런스 분석", "과교정 방지 철학"], "color": "#9B8AD4" },
{ "title": "환자 여정", "description": "상담부터 회복까지의 환자 경험을 보여주는 스토리텔링", "relatedUsp": "Patient Guidance", "exampleTopics": ["상담 시뮬레이션", "수술 당일 브이로그", "회복 타임라인"], "color": "#D4A872" }
],
"typeMatrix": [
{ "format": "YouTube Long-form", "channels": ["YouTube"], "frequency": "주 1회", "purpose": "깊은 신뢰 구축, 전문성 증명" },
{ "format": "Shorts / Reels", "channels": ["YouTube", "Instagram", "TikTok"], "frequency": "주 5회", "purpose": "도달 확대, 첫 관심 유도" },
{ "format": "Carousel", "channels": ["Instagram KR"], "frequency": "주 2회", "purpose": "정보 전달, 저장 유도" },
{ "format": "Blog Post", "channels": ["Naver Blog"], "frequency": "주 3회", "purpose": "SEO 검색 유입, 키워드 확보" },
{ "format": "Stories", "channels": ["Instagram KR", "Instagram EN"], "frequency": "일 2-3개", "purpose": "일상 소통, 친밀감 형성" },
{ "format": "Ad Creative", "channels": ["Facebook", "Instagram"], "frequency": "월 4-8개", "purpose": "신규 환자 유입, 리타겟" }
],
"workflow": [
{ "step": 1, "name": "주제 선정", "description": "키워드 분석 + 콘텐츠 필러 매칭", "owner": "마케팅 매니저", "duration": "1일" },
{ "step": 2, "name": "원고 작성", "description": "AI 초안 생성 + 의료 검수", "owner": "AI + 의료진", "duration": "1-2일" },
{ "step": 3, "name": "비주얼 제작", "description": "촬영/영상 편집/디자인", "owner": "콘텐츠 팀", "duration": "2-3일" },
{ "step": 4, "name": "검토 & 승인", "description": "원장 최종 검토 + 의료광고 규정 체크", "owner": "원장 / 법무", "duration": "1일" },
{ "step": 5, "name": "배포 & 모니터링", "description": "채널별 최적 시간 게시 + 성과 추적", "owner": "마케팅 매니저", "duration": "당일" }
],
"repurposingSource": "1개 원장 롱폼 영상 (10분)",
"repurposingOutputs": [
{ "format": "YouTube Long-form", "channel": "YouTube", "description": "원본 풀 영상 업로드" },
{ "format": "Shorts 3-5개", "channel": "YouTube / Instagram / TikTok", "description": "핵심 구간 15-60초 클립 추출" },
{ "format": "Carousel 1-2개", "channel": "Instagram KR", "description": "영상 내용을 카드뉴스로 재구성" },
{ "format": "Blog Post 1개", "channel": "Naver Blog", "description": "영상 스크립트 → SEO 블로그 포스트 변환" },
{ "format": "Stories 3-5개", "channel": "Instagram", "description": "비하인드 + 촬영 현장 스니펫" },
{ "format": "Ad Creative 2개", "channel": "Facebook / Instagram", "description": "가장 임팩트 있는 장면 + CTA 오버레이" }
]
},
"calendar": {
"weeks": [
{
"weekNumber": 1, "label": "Week 1: 브랜드 정비 & 첫 콘텐츠",
"entries": [
{ "dayOfWeek": 0, "channel": "YouTube", "channelIcon": "youtube", "contentType": "video", "title": "원장 인터뷰: VIEW의 수술 철학" },
{ "dayOfWeek": 1, "channel": "Instagram KR", "channelIcon": "instagram", "contentType": "social", "title": "프로필 리뉴얼 공지 + 첫 Reel" },
{ "dayOfWeek": 2, "channel": "YouTube", "channelIcon": "youtube", "contentType": "video", "title": "Shorts: 코성형 Q&A #1" },
{ "dayOfWeek": 2, "channel": "Naver", "channelIcon": "globe", "contentType": "blog", "title": "코성형 가이드: 내 얼굴에 맞는 코" },
{ "dayOfWeek": 3, "channel": "Instagram KR", "channelIcon": "instagram", "contentType": "social", "title": "Carousel: 가슴보형물 종류 비교" },
{ "dayOfWeek": 4, "channel": "YouTube", "channelIcon": "youtube", "contentType": "video", "title": "Shorts: 전후 Before/After #1" },
{ "dayOfWeek": 4, "channel": "Naver", "channelIcon": "globe", "contentType": "blog", "title": "가슴성형 절개 위치별 장단점" }
]
},
{
"weekNumber": 2, "label": "Week 2: 콘텐츠 엔진 가동",
"entries": [
{ "dayOfWeek": 0, "channel": "YouTube", "channelIcon": "youtube", "contentType": "video", "title": "원장이 설명하는: 안면윤곽" },
{ "dayOfWeek": 0, "channel": "Naver", "channelIcon": "globe", "contentType": "blog", "title": "안면윤곽 수술 종류와 회복기간" },
{ "dayOfWeek": 1, "channel": "Instagram KR", "channelIcon": "instagram", "contentType": "social", "title": "Reel: 윤곽 전후 변화" },
{ "dayOfWeek": 2, "channel": "YouTube", "channelIcon": "youtube", "contentType": "video", "title": "Shorts: 사각턱 축소 과정" },
{ "dayOfWeek": 3, "channel": "Instagram KR", "channelIcon": "instagram", "contentType": "social", "title": "Carousel: 리프팅 시술 비교" },
{ "dayOfWeek": 3, "channel": "Facebook", "channelIcon": "facebook", "contentType": "ad", "title": "광고: 코성형 상담 유도 (리타겟)" },
{ "dayOfWeek": 4, "channel": "YouTube", "channelIcon": "youtube", "contentType": "video", "title": "Shorts: 눈성형 자연스러운 라인" },
{ "dayOfWeek": 4, "channel": "Naver", "channelIcon": "globe", "contentType": "blog", "title": "눈성형 쌍꺼풀 수술 FAQ" }
]
},
{
"weekNumber": 3, "label": "Week 3: 신뢰 콘텐츠 강화",
"entries": [
{ "dayOfWeek": 0, "channel": "YouTube", "channelIcon": "youtube", "contentType": "video", "title": "원장이 설명하는: 수술 안전 시스템" },
{ "dayOfWeek": 1, "channel": "Instagram KR", "channelIcon": "instagram", "contentType": "social", "title": "Reel: 수술실 안전 장비 소개" },
{ "dayOfWeek": 1, "channel": "Naver", "channelIcon": "globe", "contentType": "blog", "title": "성형외과 선택 시 확인할 안전 기준 5가지" },
{ "dayOfWeek": 2, "channel": "YouTube", "channelIcon": "youtube", "contentType": "video", "title": "Shorts: 마취 전문의가 함께합니다" },
{ "dayOfWeek": 3, "channel": "Instagram KR", "channelIcon": "instagram", "contentType": "social", "title": "Carousel: 21년 무사고의 비결" },
{ "dayOfWeek": 4, "channel": "YouTube", "channelIcon": "youtube", "contentType": "video", "title": "Shorts: 상담 전 꼭 알아야 할 것" },
{ "dayOfWeek": 4, "channel": "Facebook", "channelIcon": "facebook", "contentType": "ad", "title": "광고: 안전 시스템 소개 (신규 유입)" }
]
},
{
"weekNumber": 4, "label": "Week 4: 전환 최적화",
"entries": [
{ "dayOfWeek": 0, "channel": "YouTube", "channelIcon": "youtube", "contentType": "video", "title": "원장이 설명하는: 재수술 케이스" },
{ "dayOfWeek": 0, "channel": "Naver", "channelIcon": "globe", "contentType": "blog", "title": "재수술이 필요한 경우와 주의사항" },
{ "dayOfWeek": 1, "channel": "Instagram KR", "channelIcon": "instagram", "contentType": "social", "title": "Reel: 재수술 전후 변화" },
{ "dayOfWeek": 2, "channel": "YouTube", "channelIcon": "youtube", "contentType": "video", "title": "Shorts: 원장 한 줄 답변 모음" },
{ "dayOfWeek": 3, "channel": "Instagram KR", "channelIcon": "instagram", "contentType": "social", "title": "Carousel: 상담 예약 가이드" },
{ "dayOfWeek": 3, "channel": "Naver", "channelIcon": "globe", "contentType": "blog", "title": "첫 성형 상담, 이것만 준비하세요" },
{ "dayOfWeek": 4, "channel": "YouTube", "channelIcon": "youtube", "contentType": "video", "title": "Shorts: 이 달의 베스트 케이스" },
{ "dayOfWeek": 4, "channel": "Facebook", "channelIcon": "facebook", "contentType": "ad", "title": "광고: 월말 상담 예약 CTA" }
]
}
],
"monthlySummary": [
{ "type": "video", "label": "영상", "count": 16, "color": "#8B5CF6" },
{ "type": "blog", "label": "블로그", "count": 8, "color": "#7A84D4" },
{ "type": "social", "label": "소셜", "count": 12, "color": "#9B8AD4" },
{ "type": "ad", "label": "광고", "count": 4, "color": "#D4A872" }
]
},
"assetCollection": {
"assets": [
{ "id": "a1", "source": "homepage", "sourceLabel": "홈페이지", "type": "photo", "title": "병원 내부 인테리어 사진", "description": "로비, 상담실, 수술실 외관, 대기 공간 고화질 사진", "repurposingSuggestions": ["Instagram Feed 배경", "유튜브 B-roll", "Naver 블로그 대표 이미지"], "status": "collected" },
{ "id": "a2", "source": "homepage", "sourceLabel": "홈페이지", "type": "photo", "title": "의료진 프로필 사진", "description": "28명 의료진 개인 프로필 사진 및 경력 정보", "repurposingSuggestions": ["원장 소개 Carousel", "유튜브 섬네일", "네이버 블로그 프로필"], "status": "collected" },
{ "id": "a3", "source": "homepage", "sourceLabel": "홈페이지", "type": "text", "title": "시술 설명 텍스트", "description": "가슴성형, 안면윤곽, 눈코 등 시술별 상세 설명", "repurposingSuggestions": ["Naver 블로그 포스트 소스", "Carousel 텍스트", "광고 카피"], "status": "collected" },
{ "id": "a4", "source": "youtube", "sourceLabel": "YouTube", "type": "video", "title": "기존 롱폼 영상 1,064개", "description": "10년간 축적된 시술 설명, Q&A, 인터뷰 영상 아카이브", "repurposingSuggestions": ["AI Shorts 추출 100+개", "Instagram Reels 변환", "TikTok 크로스포스팅"], "status": "collected" },
{ "id": "a5", "source": "youtube", "sourceLabel": "YouTube", "type": "video", "title": "고성과 Shorts (10만+ 조회)", "description": "574K, 525K, 392K 조회 Shorts — 전후 변화 중심", "repurposingSuggestions": ["Instagram Reels 재업로드", "TikTok 동시 게시", "광고 소재 활용"], "status": "collected" },
{ "id": "a6", "source": "social", "sourceLabel": "소셜미디어", "type": "photo", "title": "Instagram EN Before/After 사진", "description": "@view_plastic_surgery 계정의 2,524개 게시물 중 B/A 사진", "repurposingSuggestions": ["KR 계정 크로스포스팅", "유튜브 롱폼 삽입", "Naver 블로그 활용"], "status": "collected" },
{ "id": "a7", "source": "social", "sourceLabel": "소셜미디어", "type": "text", "title": "강남언니 환자 리뷰 18,840건", "description": "9.5점 평균, 시술별 실 환자 후기 텍스트", "repurposingSuggestions": ["후기 기반 Carousel 시리즈", "블로그 환자 스토리", "광고 사회적 증거"], "status": "pending" },
{ "id": "a8", "source": "naver_place", "sourceLabel": "네이버 플레이스", "type": "photo", "title": "네이버 플레이스 사진", "description": "병원 외관, 위치, 시설 사진", "repurposingSuggestions": ["블로그 위치 안내 포스트", "구글 마이비즈니스 동기화"], "status": "pending" },
{ "id": "a9", "source": "blog", "sourceLabel": "블로그", "type": "text", "title": "네이버 블로그 기존 포스트 551개", "description": "기존 블로그 포스트 551개 (월 2~3회 업데이트 중)", "repurposingSuggestions": ["SEO 최적화 리라이팅", "영상 스크립트 소스"], "status": "collected" },
{ "id": "a10", "source": "homepage", "sourceLabel": "홈페이지", "type": "video", "title": "개원 20주년 기념 영상", "description": "뷰성형외과 20년 역사 + 시설 소개 영상 (1:30)", "repurposingSuggestions": ["브랜드 스토리 Reel", "웹사이트 히어로 영상", "신뢰 광고 소재"], "status": "collected" },
{ "id": "a11", "source": "homepage", "sourceLabel": "홈페이지", "type": "photo", "title": "시술별 전후 사진 갤러리", "description": "눈, 코, 가슴, 윤곽 시술별 비포/애프터 사진", "repurposingSuggestions": ["Instagram B/A 시리즈", "Shorts 전환 소스", "상담 자료"], "status": "needs_creation" }
],
"youtubeRepurpose": [
{ "title": "한번에 성공하는 성형", "views": 574000, "type": "Short", "repurposeAs": ["Instagram Reel", "TikTok", "광고 소재"] },
{ "title": "코성형+지방이식 전후", "views": 525000, "type": "Short", "repurposeAs": ["Instagram Reel", "TikTok", "Naver 블로그 삽입"] },
{ "title": "코성형! 내 얼굴에 가장 예쁜 코", "views": 124000, "type": "Long", "repurposeAs": ["Shorts 5개 추출", "Carousel 3개", "Blog Post 변환"] },
{ "title": "아나운서 박은영, 가슴 할 결심", "views": 127000, "type": "Long", "repurposeAs": ["Shorts 3개 추출", "스토리 시리즈", "광고 소재"] },
{ "title": "서울대 의학박사의 가슴재수술 성공전략", "views": 1400, "type": "Long", "repurposeAs": ["Shorts 추출", "SEO 블로그", "Carousel"] }
]
},
"repurposingProposals": [
{
"sourceVideo": { "title": "한번에 성공하는 성형", "views": 574000, "type": "Short", "repurposeAs": [] },
"outputs": [
{ "format": "Instagram Reel", "channel": "Instagram KR", "description": "자막 추가 + 한국어 해시태그 최적화 후 즉시 크로스포스팅" },
{ "format": "TikTok", "channel": "TikTok", "description": "트렌딩 사운드 교체 + 텍스트 오버레이 재구성" },
{ "format": "광고 소재", "channel": "Facebook / Instagram", "description": "가장 임팩트 있는 3초 후크 장면 + CTA 오버레이" }
],
"estimatedEffort": "low",
"priority": "high"
},
{
"sourceVideo": { "title": "코성형! 내 얼굴에 가장 예쁜 코", "views": 124000, "type": "Long", "repurposeAs": [] },
"outputs": [
{ "format": "Shorts 5개 추출", "channel": "YouTube", "description": "핵심 설명 구간 15-60초 클립 5개 자동 추출" },
{ "format": "Carousel 3개", "channel": "Instagram KR", "description": "코성형 타입별 비교 정보 카드뉴스로 재구성" },
{ "format": "Blog Post", "channel": "Naver Blog", "description": "영상 스크립트 → 2,000자 SEO 블로그 포스트 변환" },
{ "format": "Stories 시리즈", "channel": "Instagram", "description": "촬영 비하인드 + Q&A 스니펫 5개" }
],
"estimatedEffort": "medium",
"priority": "high"
},
{
"sourceVideo": { "title": "아나운서 박은영, 가슴 할 결심", "views": 127000, "type": "Long", "repurposeAs": [] },
"outputs": [
{ "format": "Shorts 3개 추출", "channel": "YouTube / Instagram / TikTok", "description": "스토리 하이라이트 구간 크로스포스팅" },
{ "format": "스토리 시리즈", "channel": "Instagram KR", "description": "상담 결정 과정 + 회복 타임라인 Stories" },
{ "format": "광고 소재", "channel": "Facebook", "description": "환자 신뢰도 강화 소셜 프루프 광고 소재" }
],
"estimatedEffort": "medium",
"priority": "medium"
},
{
"sourceVideo": { "title": "코성형+지방이식 전후", "views": 525000, "type": "Short", "repurposeAs": [] },
"outputs": [
{ "format": "Instagram Reel", "channel": "Instagram KR", "description": "Before/After 포맷 최적화 + 동의서 확인 후 게시" },
{ "format": "TikTok", "channel": "TikTok", "description": "트렌드 사운드 교체 + Stitch 유도 CTA 추가" },
{ "format": "Naver 블로그 삽입", "channel": "Naver Blog", "description": "코+지방이식 복합 시술 블로그 포스트에 영상 임베드" }
],
"estimatedEffort": "low",
"priority": "high"
}
]
}

View File

@ -0,0 +1,458 @@
{
"id": "view-clinic",
"createdAt": "2026-04-28",
"targetUrl": "https://www.viewclinic.com",
"overallScore": 62,
"clinicSnapshot": {
"name": "뷰성형외과의원",
"nameEn": "VIEW Plastic Surgery",
"established": "2005",
"yearsInBusiness": 21,
"staffCount": 25,
"leadDoctor": {
"name": "최순우",
"credentials": "서울대 출신, 의학박사",
"rating": 9.4,
"reviewCount": 1805
},
"overallRating": 9.5,
"totalReviews": 19177,
"priceRange": { "min": "97,900", "max": "13,200,000+", "currency": "₩" },
"certifications": [
"수술실 CCTV",
"전담 마취과 전문의",
"응급대응 시스템",
"여의사 상담",
"보건복지부장관 표창",
"안면윤곽 수상",
"모티바 사용량 1위",
"19층 안전스마트 빌딩",
"렛미인 출연",
"All-In-One 시스템"
],
"mediaAppearances": ["렛미인 TV 프로그램", "보건복지부장관 표창", "안면윤곽 수상"],
"medicalTourism": ["VisitKorea 등재", "강남 메디컬투어센터 협력기관", "외국인 전용 서비스"],
"location": "서울시 강남구 봉은사로 107 (논현동)",
"nearestStation": "9호선/신분당선 신논현역 3번 출구 68m",
"phone": "02-539-1177",
"domain": "viewclinic.com",
"source": "registry",
"registryData": {
"district": "강남",
"branches": "본점 1개",
"brandGroup": "프리미엄",
"naverPlaceUrl": "https://m.place.naver.com/hospital/11709005",
"gangnamUnniUrl": "https://www.gangnamunni.com/hospitals/189",
"googleMapsUrl": "https://maps.google.com/?q=뷰성형외과"
},
"logoImages": {
"circle": "/assets/clients/view-clinic/logo-circle.png",
"horizontal": "/assets/clients/view-clinic/logo-horizontal.png",
"korean": "/assets/clients/view-clinic/logo-korean.png"
},
"brandColors": {
"primary": "#7B2D8E",
"accent": "#E8B931",
"text": "#6B2D7B"
}
},
"channelScores": [
{ "channel": "YouTube", "icon": "youtube", "score": 68, "maxScore": 100, "status": "warning", "headline": "104K 구독자, 주 2-3회 업로드, 누적 1,035만 조회 (2주 +1.9%)" },
{ "channel": "Instagram KR", "icon": "instagram", "score": 32, "maxScore": 100, "status": "critical", "headline": "14,047 팔로워, Reels 0개, 모델 프사" },
{ "channel": "Instagram EN", "icon": "instagram", "score": 62, "maxScore": 100, "status": "warning", "headline": "70,537 팔로워, Reels 활발, 외국인 환자 중심" },
{ "channel": "Facebook", "icon": "facebook", "score": 38, "maxScore": 100, "status": "critical", "headline": "KR 254명 방치, EN 88K 활발, 3개 페이지 분산" },
{ "channel": "강남언니", "icon": "star", "score": 96, "maxScore": 100, "status": "excellent", "headline": "9.5점/10, 19,177 리뷰, 고객평가우수병원" },
{ "channel": "Website", "icon": "globe", "score": 65, "maxScore": 100, "status": "warning", "headline": "Footer SNS 5개 연결, 트래킹 6개, SEO 기본 설정 양호" }
],
"youtubeAudit": {
"channelName": "뷰성형외과 VIEW Plastic Surgery",
"handle": "@ViewclinicKR",
"subscribers": 104000,
"totalVideos": 1100,
"totalViews": 10348571,
"weeklyViewGrowth": { "absolute": 197925, "percentage": 1.91 },
"estimatedMonthlyRevenue": { "min": 499, "max": 1000 },
"avgVideoLength": "4.4분",
"uploadFrequency": "주 2~3회",
"channelCreatedDate": "2015-06-28",
"subscriberRank": "#570K",
"channelDescription": "💜뷰성형외과💜\nVIEW가 예술이다! ✨\n19층 규모의 안전스마트 빌딩\n환자의 관점에서 생각하고\n환자의 입장에서 아름다움의 가치를 찾습니다.",
"linkedUrls": [
{ "label": "뷰성형외과 홈페이지", "url": "viewclinic.com" },
{ "label": "Instagram", "url": "instagram.com/viewplastic" },
{ "label": "이벤트 보기", "url": "viewclinic.com/board/events" },
{ "label": "상담 예약", "url": "viewclinic.com/counsel/reservation" },
{ "label": "카톡 상담", "url": "pf.kakao.com/_xbtVxjl" }
],
"playlists": [
"VIEW 💜 무엇이든 물어보세요",
"VIEW 💜 재수술",
"VIEW 💜 가슴",
"VIEW 💜 눈+코",
"VIEW 💜 윤곽+양악",
"VIEW 💜 지방성형",
"VIEW 💜 피부+안티에이징",
"VIEW랜딩 💜",
"VIEW 💜 방송영상"
],
"topVideos": [
{ "title": "한번에 성공하는 성형", "views": 574000, "uploadedAgo": "4년 전", "type": "Short" },
{ "title": "코성형+지방이식 전후", "views": 525000, "uploadedAgo": "4년 전", "type": "Short" },
{ "title": "쌍수+뒤밑트임 전후", "views": 392000, "uploadedAgo": "3년 전", "type": "Short" },
{ "title": "V라인턱 변신과정 전격공개", "views": 194000, "uploadedAgo": "4년 전", "type": "Short" },
{ "title": "K-미녀 클라스", "views": 161000, "uploadedAgo": "4년 전", "type": "Short" },
{ "title": "앞트임하면 대박나는 사람", "views": 154000, "uploadedAgo": "2년 전", "type": "Short" },
{ "title": "코성형! 내 얼굴에 가장 예쁜 코 찾아드립니다", "views": 124000, "uploadedAgo": "3년 전", "type": "Long", "duration": "7:59" },
{ "title": "아나운서 박은영, 가슴 할 결심을 하다", "views": 127000, "uploadedAgo": "9개월 전", "type": "Long", "duration": "43:39" }
],
"diagnosis": [
{ "category": "구독자 대비 조회수 비율", "detail": "영상당 평균 ~1,000회 (104K 구독자 대비 1% 도달률)", "severity": "critical", "evidenceIds": ["yt-channel"] },
{ "category": "최근 롱폼 조회수", "detail": "대부분 1,000~4,000회 수준", "severity": "critical" },
{ "category": "Shorts 조회수", "detail": "최근 업로드 500~1,000회 (과거 대비 급감)", "severity": "warning" },
{ "category": "업로드 빈도", "detail": "주 2~3회 — 적절한 빈도이나 조회수 미반영", "severity": "good" },
{ "category": "콘텐츠 톤앤매너", "detail": "일관성 없음 — 교육/Q&A/전후/브랜딩 혼재", "severity": "critical" },
{ "category": "썸네일 디자인", "detail": "통일된 브랜드 시스템 없음", "severity": "warning" },
{ "category": "최고 성과 Shorts", "detail": "4년 전 콘텐츠 — 최근 재현 실패", "severity": "critical" }
]
},
"instagramAudit": {
"accounts": [
{
"handle": "@viewplastic",
"language": "KR",
"label": "국내 (한국어)",
"posts": 1429,
"followers": 14047,
"following": 3774,
"category": "Health/beauty",
"profileLink": "litt.ly/viewplasticsurgery",
"highlights": ["ABOUT VIEW", "수술정보", "모델 모집", "VIEW EVENT", "진료안내"],
"reelsCount": 0,
"contentFormat": "카드뉴스 (정보형 이미지) 100%",
"profilePhoto": "모델 사진 (브랜드 로고 아님)",
"bio": "뷰 성형외과 | 가슴성형 · 안면윤곽 · 눈성형 · 코성형 · 리프팅\n💞신논현역 3번 출구 | 카톡 '뷰성형외과의원' | 02-539-1177"
},
{
"handle": "@view_plastic_surgery",
"language": "EN",
"label": "국제 (영어)",
"posts": 2578,
"followers": 70537,
"following": 2849,
"category": "Health/beauty",
"profileLink": "litt.ly/viewplasticsurgeryenglish",
"highlights": ["Katerina", "Mathilde", "Kyle & Spizee", "Chef Rush", "Thet San", "Yuri", "Liposuction", "Why VIEW?", "Diana", "Anti Aging", "Julie", "Male", "Stem Cell", "Dermatology"],
"reelsCount": 50,
"contentFormat": "Before/After + 환자 스토리 + Reels",
"profilePhoto": "VIEW 골드 로고",
"bio": "VIEW Plastic Surgery Official by VIEW Partners\n⚕ Most Renowned Hospital in Korea\n107 Bongeunsa-ro Gangnam-gu, Seoul, Korea"
}
],
"diagnosis": [
{ "category": "계정 분리 → 팔로워 분산", "detail": "KR 14K + EN 70K = 합산 84K이지만 각각 약함", "severity": "warning" },
{ "category": "KR 계정 Reels 전무", "detail": "인스타 알고리즘 핵심인 Reels 콘텐츠 0개", "severity": "critical", "evidenceIds": ["ig-kr-profile"] },
{ "category": "브랜드 비주얼 불일치", "detail": "KR=모델 프사, EN=VIEW 골드 로고", "severity": "warning", "evidenceIds": ["ig-kr-profile", "ig-en-profile"] },
{ "category": "KR 팔로잉 과다", "detail": "3,822 팔로잉 — 팔로우백 전략 의심", "severity": "warning" },
{ "category": "크로스포스팅 없음", "detail": "YouTube Shorts → Instagram Reels 연동 없음", "severity": "critical" },
{ "category": "유튜브 ↔ 인스타 유입 단절", "detail": "104K 구독자 → 14K 팔로워 전환 실패", "severity": "critical" }
]
},
"facebookAudit": {
"pages": [
{
"url": "facebook.com/viewps1",
"pageName": "뷰성형외과",
"language": "KR",
"label": "국내 (한국어)",
"followers": 254,
"following": 0,
"category": "성형외과 의사",
"bio": "예쁨이 일상이 되는 순간! #뷰성형외과",
"logo": "일치 (공식 로고)",
"logoDescription": "보라색+골드 깃털 공식 로고 사용 — 웹사이트와 동일한 공식 브랜드 자산. 원형 테두리 안에 깃털 심볼 + VIEW / Plastic Surgery 텍스트가 정확히 배치됨.",
"link": "viewclinic.com",
"linkedDomain": "viewclinic.com",
"reviews": 0,
"recentPostAge": "1일 전",
"hasWhatsapp": false,
"postFrequency": "주 1~2회 (카드뉴스 크로스포스팅)",
"topContentType": "Instagram 카드뉴스 그대로 복사 게시",
"engagement": "게시물당 좋아요 0~3개, 댓글 거의 없음"
},
{
"url": "facebook.com/viewclinic",
"pageName": "View Plastic Surgery",
"language": "EN",
"label": "국제 (영어)",
"followers": 88333,
"following": 11,
"category": "건강/뷰티",
"bio": "Official Account by VIEW Partners",
"logo": "불일치 (비공식 변형)",
"logoDescription": "VIEW 텍스트 전용 골드 로고 — 공식 깃털 심볼이 빠진 비공식 변형 버전. YouTube, Instagram EN과 동일하지만, 공식 브랜드 가이드(보라색+골드 깃털)와 불일치.",
"link": "viewplasticsurgery.com",
"linkedDomain": "viewplasticsurgery.com (메인 도메인 viewclinic.com과 다름)",
"reviews": 3,
"recentPostAge": "2일 전",
"hasWhatsapp": true,
"postFrequency": "일 1~2회 (Before/After, 환자 스토리)",
"topContentType": "Before/After 사진 + 환자 여정 Reels",
"engagement": "게시물당 좋아요 50~300개, 댓글 10~50개"
}
],
"diagnosis": [
{
"category": "채널 간 로고 파편화",
"detail": "Facebook KR만 공식 깃털 로고를 사용하고, EN 페이지는 비공식 VIEW 골드 텍스트 로고를 사용. YouTube, Instagram도 각각 다른 변형 로고 사용 중.",
"severity": "critical",
"evidenceIds": ["fb-en-page", "ig-kr-profile", "ig-en-profile"]
},
{
"category": "KR 페이지 사실상 방치",
"detail": "팔로워 253명, 리뷰 0개, 게시물 참여율 0% — 운영 비용 대비 효과 없음",
"severity": "critical"
},
{
"category": "도메인 불일치",
"detail": "KR 페이지 → viewclinic.com, EN 페이지 → viewplasticsurgery.com — 서로 다른 도메인으로 연결, SEO 및 트래픽 분산",
"severity": "warning"
},
{
"category": "KR/EN 팔로워 348:1 격차",
"detail": "EN 88K vs KR 253 — 국내 환자 유입 채널로서 Facebook KR은 완전히 실패",
"severity": "critical"
},
{
"category": "KR 콘텐츠 전략 없음",
"detail": "Instagram 카드뉴스를 그대로 복사 게시 — Facebook 네이티브 콘텐츠(동영상, 이벤트, 그룹) 활용 0%",
"severity": "warning"
},
{
"category": "Facebook Pixel ↔ 페이지 비연동",
"detail": "웹사이트에 Facebook Pixel(ID: 299151214739571)이 설치되어 있으나, KR 페이지와의 광고 리타겟 연동 미확인",
"severity": "warning"
}
],
"brandInconsistencies": [
{
"field": "로고",
"values": [
{ "channel": "YouTube", "value": "VIEW 텍스트 전용 골드 로고 (깃털 심볼 없음)", "isCorrect": false },
{ "channel": "Instagram KR", "value": "모델 프로필 사진 (로고 아님)", "isCorrect": false },
{ "channel": "Instagram EN", "value": "VIEW 텍스트 전용 골드 로고 (깃털 심볼 없음)", "isCorrect": false },
{ "channel": "Facebook KR", "value": "보라색+골드 깃털 로고 (공식)", "isCorrect": true },
{ "channel": "Facebook EN", "value": "VIEW 텍스트 전용 골드 로고 (깃털 심볼 없음)", "isCorrect": false },
{ "channel": "Website", "value": "보라색+골드 깃털 로고 (공식)", "isCorrect": true }
],
"impact": "공식 깃털 로고를 사용하는 채널은 Facebook KR과 웹사이트 2곳뿐. YouTube, Instagram, Facebook EN은 비공식 변형 로고 사용",
"recommendation": "전 채널에 보라색+골드 깃털 공식 로고 통일 (원형: 프로필, 가로형: 배너)"
},
{
"field": "연결 도메인",
"values": [
{ "channel": "YouTube", "value": "viewclinic.com", "isCorrect": true },
{ "channel": "Instagram KR", "value": "litt.ly/viewplasticsurgery", "isCorrect": true },
{ "channel": "Instagram EN", "value": "litt.ly/viewplasticsurgeryenglish", "isCorrect": true },
{ "channel": "Facebook KR", "value": "viewclinic.com", "isCorrect": true },
{ "channel": "Facebook EN", "value": "viewplasticsurgery.com", "isCorrect": false }
],
"impact": "EN 페이지가 별도 도메인(viewplasticsurgery.com)으로 연결 → 도메인 권위(Domain Authority) 분산, SEO 불이익",
"recommendation": "viewclinic.com/en 하위 경로로 국제 페이지 통합, 기존 도메인은 301 리다이렉트"
},
{
"field": "바이오/소개 메시지",
"values": [
{ "channel": "YouTube", "value": "💜뷰성형외과💜 VIEW가 예술이다!", "isCorrect": false },
{ "channel": "Instagram KR", "value": "뷰 성형외과 | 가슴성형·안면윤곽·눈성형·코성형·리프팅", "isCorrect": false },
{ "channel": "Facebook KR", "value": "예쁨이 일상이 되는 순간! #뷰성형외과", "isCorrect": false },
{ "channel": "Facebook EN", "value": "Official Account by VIEW Partners", "isCorrect": false }
],
"impact": "4개 채널, 4개의 서로 다른 소개 메시지 → 통일된 브랜드 포지셔닝 부재, 핵심 USP(안전/21년 무사고) 미전달",
"recommendation": "핵심 USP 포함 통일 바이오: \"안전이 예술이 되는 곳 — 21년 무사고 VIEW 성형외과\""
}
],
"consolidationRecommendation": "Facebook KR 페이지(253명)는 폐쇄 또는 EN 페이지(88K)로 통합을 권장합니다. KR 페이지는 투자 대비 효과가 사실상 제로이며, 브랜드 혼란만 가중시키고 있습니다. Facebook은 한국 시장에서 오가닉 도달 목적이 아닌, Facebook Pixel 기반 리타겟 광고 전용 채널로 운영하는 것이 효율적입니다."
},
"otherChannels": [
{ "name": "카카오톡", "status": "active", "details": "플러스친구 @뷰성형외과의원 — 상담 전용 채널", "url": "https://pf.kakao.com/_xbtVxjl" },
{ "name": "네이버 블로그", "status": "active", "details": "공식 블로그 활성 — 총 551개 게시글, 월 2~3회 포스팅, 최근 2026.4.22 업로드", "url": "https://blog.naver.com/viewclinicps" },
{ "name": "네이버 플레이스", "status": "active", "details": "별점 4.41/5, 방문자리뷰 776개, 블로그리뷰 1,508개, 성형외과 전문의 14명", "url": "https://m.place.naver.com/hospital/11709005" },
{ "name": "TikTok", "status": "not_found", "details": "계정 없음 또는 비활성" },
{ "name": "강남언니", "status": "active", "details": "9.5점/10, 19,177 리뷰, 25 의료진, 고객평가우수병원", "url": "https://www.gangnamunni.com/hospitals/189" },
{ "name": "네이버 카페", "status": "active", "details": "\"뷰성형외과 성형의 모든것\" — 회원 5,984명, 비공개 카페, 시술별 Q&A/전후비교/수술후기 20개 게시판 운영", "url": "https://cafe.naver.com/bluectcom2" },
{ "name": "Threads", "status": "active", "details": "@viewplastic + @view_plastic_surgery 계정 연동", "url": "https://www.threads.net/@viewplastic" },
{ "name": "Facebook TH", "status": "inactive", "details": "태국 파트너 페이지 14K 팔로워, 2024.7월 이후 방치", "url": "https://www.facebook.com/viewplasticsurgery" }
],
"websiteAudit": {
"primaryDomain": "viewclinic.com",
"additionalDomains": [
{ "domain": "viewplasticsurgery.com", "purpose": "영문 국제 사이트" },
{ "domain": "viewclinic-chat.com", "purpose": "채팅 상담 전용" },
{ "domain": "viewclinic.modoo.at", "purpose": "구 모두홈페이지" }
],
"snsLinksOnSite": true,
"snsLinksDetail": [
{ "platform": "Naver Blog", "url": "https://blog.naver.com/viewclinicps", "location": "Footer" },
{ "platform": "Facebook", "url": "https://www.facebook.com/viewps1/", "location": "Footer" },
{ "platform": "Instagram", "url": "https://www.instagram.com/viewplastic/", "location": "Footer" },
{ "platform": "YouTube", "url": "https://www.youtube.com/channel/UCQqqH3Klj2HQSHNNSVug-CQ", "location": "Footer" },
{ "platform": "Naver Cafe", "url": "https://cafe.naver.com/bluectcom2", "location": "Footer" }
],
"trackingPixels": [
{ "name": "Facebook Pixel", "installed": true, "details": "ID: 299151214739571" },
{ "name": "Facebook Domain Verification", "installed": true, "details": "lm854gkic9948c6xk2ti76inryqk65" },
{ "name": "Google Site Verification", "installed": true, "details": "A8vo9aOWSvGL5-yFKhbtlHPqJCkH-egNdWVqVd9gKac" },
{ "name": "Naver Site Verification", "installed": true, "details": "a8cb4fab1fdf7277c0892eeddf457b5c939349e8" },
{ "name": "Kakao Pixel", "installed": true },
{ "name": "Google Tag Manager", "installed": true, "details": "GTM-52RT6DMK" }
],
"mainCta": "전화 + 카카오톡 상담 + 온라인 예약"
},
"problemDiagnosis": [
{
"category": "브랜드 아이덴티티 파편화",
"detail": "공식 깃털 로고(보라색+골드)는 Facebook KR과 웹사이트에만 사용. YouTube/Instagram EN/Facebook EN은 비공식 골드 텍스트 로고, Instagram KR은 모델 사진 사용 — 6개 채널에 4종의 서로 다른 시각적 아이덴티티",
"severity": "critical"
},
{
"category": "콘텐츠 전략 부재",
"detail": "콘텐츠 캘린더 없음, 톤앤매너 가이드 없음, KR↔EN 시너지 없음, YouTube→Instagram 크로스포스팅 없음",
"severity": "critical"
},
{
"category": "플랫폼 간 유입 단절",
"detail": "YouTube 104K → Instagram 14K 전환 실패, Footer SNS 링크는 있으나 Header/본문에는 없음, 강남언니 19K 리뷰→영상 전환 없음, 네이버 카페 5,984명→SNS 유입 미활용",
"severity": "critical"
}
],
"transformation": {
"brandIdentity": [
{ "area": "로고", "asIs": "채널마다 다른 로고 4종", "toBe": "VIEW 골드 로고 1종 통일" },
{ "area": "컬러 팔레트", "asIs": "없음 (혼재)", "toBe": "Primary: Gold (#C4A462) + Dark (#1A1A1A)" },
{ "area": "프로필 사진", "asIs": "KR=모델, EN=로고, FB=깃털", "toBe": "전 채널 VIEW 골드 로고 통일" },
{ "area": "바이오 메시지", "asIs": "채널마다 다른 메시지", "toBe": "\"안전이 예술이 되는 곳 — 21년 무사고 VIEW\"" },
{ "area": "해시태그", "asIs": "비체계적", "toBe": "#뷰성형외과 #VIEW성형 #강남성형외과 #21년무사고" }
],
"contentStrategy": [
{ "area": "콘텐츠 캘린더", "asIs": "없음", "toBe": "월간 콘텐츠 캘린더 (4주 사이클)" },
{ "area": "업로드 빈도", "asIs": "YouTube 주1회, Instagram 비정기", "toBe": "YouTube 주3회 + Instagram 일1회 + Shorts/Reels 주5회" },
{ "area": "콘텐츠 포맷", "asIs": "KR Instagram = 카드뉴스만", "toBe": "카드뉴스 30% + Reels 40% + 카루셀 20% + Stories 10%" },
{ "area": "콘텐츠 앵글", "asIs": "시술 정보 중심 (병원 관점)", "toBe": "환자 의사결정 보조 중심 (환자 관점)" },
{ "area": "톤앤매너", "asIs": "없음", "toBe": "\"차분한 전문가\" — 과장 없이, 설명으로 설득" }
],
"platformStrategies": [
{
"platform": "YouTube",
"icon": "youtube",
"currentMetric": "104K subscribers",
"targetMetric": "200K / 12개월",
"strategies": [
{ "strategy": "업로드 빈도 3배 증가", "detail": "주 3회 (롱폼 1 + Shorts 2)" },
{ "strategy": "기존 영상 재활용", "detail": "1,064개 기존 영상에서 AI 숏폼 100개 추출" },
{ "strategy": "썸네일 시스템화", "detail": "VIEW 골드 워터마크 + 일관된 폰트/컬러" },
{ "strategy": "커뮤니티 탭 활용", "detail": "주 2회 투표/질문 — 구독자 참여 활성화" }
]
},
{
"platform": "Instagram KR",
"icon": "instagram",
"currentMetric": "14K followers",
"targetMetric": "50K / 12개월",
"strategies": [
{ "strategy": "Reels 즉시 시작", "detail": "YouTube Shorts 동시 게시 → 최소 주 5개" },
{ "strategy": "프로필 사진 교체", "detail": "모델 사진 → VIEW 골드 로고" },
{ "strategy": "팔로잉 정리", "detail": "3,822 → 300 이하로 정리" },
{ "strategy": "Stories 활성화", "detail": "일 2~3개 (상담 비하인드, 병원 일상)" }
]
},
{
"platform": "Facebook",
"icon": "facebook",
"currentMetric": "KR 253 + EN 88K",
"targetMetric": "통합 관리",
"strategies": [
{ "strategy": "계정 통합", "detail": "KR 253명 페이지 → EN 88K 페이지로 통합 또는 폐쇄" },
{ "strategy": "로고 통일", "detail": "보라색 깃털 → VIEW 골드 로고" },
{ "strategy": "역할 정의", "detail": "FB = 광고 랜딩 + 리타겟 전용" }
]
}
],
"websiteImprovements": [
{ "area": "SNS 링크", "asIs": "Footer에 5개 (블로그/FB/IG/YT/카페) — Header에는 없음", "toBe": "Header에도 주요 SNS 아이콘 추가 + EN 계정 링크도 병기" },
{ "area": "YouTube 임베드", "asIs": "없음", "toBe": "시술 페이지별 관련 YouTube 영상 임베드" },
{ "area": "콘텐츠 허브", "asIs": "없음", "toBe": "SEO 콘텐츠 허브 구축 (시술별 가이드)" },
{ "area": "도메인 통합", "asIs": "4개 도메인 분산", "toBe": "viewclinic.com 단일 도메인 + /en 국제 페이지" }
],
"newChannelProposals": [
{ "channel": "TikTok", "priority": "P1", "rationale": "20~30대 첫 수술 고민층 도달, YouTube Shorts 동시 배포" },
{ "channel": "네이버 블로그 강화", "priority": "P0", "rationale": "현재 551개 게시글, 월 2~3회 → 주 2회로 빈도 상향, SEO 핵심" },
{ "channel": "네이버 플레이스 최적화", "priority": "P0", "rationale": "4.41점/776리뷰 — 리뷰 응답률/사진 최적화 필요" }
]
},
"roadmap": [
{
"month": 1,
"title": "Foundation",
"subtitle": "기반 구축",
"tasks": [
{ "task": "브랜드 아이덴티티 가이드 확정 (로고, 컬러, 폰트, 톤앤매너)", "completed": false },
{ "task": "전 채널 프로필 사진/배너 통일 교체", "completed": false },
{ "task": "Facebook KR 페이지 정리 (통합 또는 폐쇄)", "completed": false },
{ "task": "Instagram KR 팔로잉 정리 (3,822 → 300)", "completed": false },
{ "task": "웹사이트에 YouTube/Instagram 링크 추가", "completed": false },
{ "task": "기존 YouTube 영상 100개 → AI 숏폼 추출 시작", "completed": false },
{ "task": "콘텐츠 캘린더 v1 수립", "completed": false }
]
},
{
"month": 2,
"title": "Content Engine",
"subtitle": "콘텐츠 엔진 가동",
"tasks": [
{ "task": "YouTube Shorts 주 3~5회 업로드 시작", "completed": false },
{ "task": "Instagram Reels 주 5회 업로드 시작", "completed": false },
{ "task": "원장 촬영 세션 월 2회 스케줄 확정", "completed": false },
{ "task": "\"원장이 설명하는\" 시리즈 4편 제작/업로드", "completed": false },
{ "task": "네이버 블로그 개설 및 시술 가이드 10편 게시", "completed": false },
{ "task": "TikTok 계정 개설 및 Shorts 동시 배포", "completed": false }
]
},
{
"month": 3,
"title": "Optimization",
"subtitle": "최적화 & 광고",
"tasks": [
{ "task": "콘텐츠 성과 분석 리포트 v1", "completed": false },
{ "task": "고성과 콘텐츠 기반 Instagram/Facebook 광고 세팅", "completed": false },
{ "task": "YouTube 썸네일 A/B 테스트", "completed": false },
{ "task": "콘텐츠 캘린더 v2 (성과 데이터 반영)", "completed": false },
{ "task": "네이버 플레이스 최적화", "completed": false },
{ "task": "KPI 리뷰: 구독자/팔로워 성장률, 상담 전환 추적", "completed": false }
]
}
],
"kpiDashboard": [
{ "metric": "YouTube 구독자", "current": "104K", "target3Month": "115K", "target12Month": "200K" },
{ "metric": "YouTube 월 조회수", "current": "~270K", "target3Month": "500K", "target12Month": "1.5M" },
{ "metric": "YouTube Shorts 평균 조회수", "current": "500~1,000", "target3Month": "5,000", "target12Month": "20,000" },
{ "metric": "Instagram KR 팔로워", "current": "14K", "target3Month": "20K", "target12Month": "50K" },
{ "metric": "Instagram KR Reels 평균 조회수", "current": "0 (없음)", "target3Month": "3,000", "target12Month": "10,000" },
{ "metric": "Instagram EN 팔로워", "current": "70K", "target3Month": "80K", "target12Month": "120K" },
{ "metric": "네이버 블로그 포스팅 빈도", "current": "월 2~3회", "target3Month": "주 2회", "target12Month": "주 3회" },
{ "metric": "네이버 플레이스 리뷰", "current": "777개 (4.41점)", "target3Month": "900개", "target12Month": "1,200개" },
{ "metric": "콘텐츠 → 상담 전환", "current": "측정 불가", "target3Month": "UTM 추적 시작", "target12Month": "월 50건" }
],
"screenshots": []
}

View File

@ -1,5 +1,6 @@
import json import json
import logging import logging
import os
from common.db import fetchone, execute, fetch_raw, get_analysis_raw_data, save_analysis_report, get_market_analysis from common.db import fetchone, execute, fetch_raw, get_analysis_raw_data, save_analysis_report, get_market_analysis
from integrations.llm.llm_service import LLMService from integrations.llm.llm_service import LLMService
from integrations.llm.prompt import report_prompt, plan_prompt from integrations.llm.prompt import report_prompt, plan_prompt
@ -192,8 +193,39 @@ def _patch_report(result: ReportOutput, overrides: dict) -> ReportOutput:
return ReportOutput(**merged) return ReportOutput(**merged)
_MOCK_DOMAINS = {"viewclinic.com"}
_MOCK_REPORT_PATH = os.path.join(os.path.dirname(__file__), "../mock/report_viewclinic.json")
async def _is_mock(analysis_run_id: str) -> bool:
row = await fetchone(
"SELECT h.url FROM analysis_runs ar JOIN hospital_baseinfo h USING (hospital_id)"
" WHERE ar.analysis_run_id = %s",
(analysis_run_id,),
)
url = (row or {}).get("url") or ""
return any(domain in url for domain in _MOCK_DOMAINS)
def _load_mock_report() -> ReportOutput:
with open(_MOCK_REPORT_PATH, encoding="utf-8") as f:
return ReportOutput(**json.load(f))
_MOCK_PLAN_PATH = os.path.join(os.path.dirname(__file__), "../mock/plan_viewclinic.json")
def _load_mock_plan() -> PlanOutput:
with open(_MOCK_PLAN_PATH, encoding="utf-8") as f:
return PlanOutput(**json.load(f))
async def run_report_task(analysis_run_id: str) -> None: async def run_report_task(analysis_run_id: str) -> None:
logger.info("[report] start run=%s", analysis_run_id) logger.info("[report] start run=%s", analysis_run_id)
if await _is_mock(analysis_run_id):
logger.info("[report] mock mode run=%s", analysis_run_id)
result = _load_mock_report()
else:
result = await generate_report(analysis_run_id) result = await generate_report(analysis_run_id)
result = _patch_report(result, await _build_overrides(analysis_run_id)) result = _patch_report(result, await _build_overrides(analysis_run_id))
await save_analysis_report(analysis_run_id, result.model_dump()) await save_analysis_report(analysis_run_id, result.model_dump())
@ -202,6 +234,10 @@ async def run_report_task(analysis_run_id: str) -> None:
async def run_plan_task(analysis_run_id: str) -> None: async def run_plan_task(analysis_run_id: str) -> None:
logger.info("[plan] start run=%s", analysis_run_id) logger.info("[plan] start run=%s", analysis_run_id)
if await _is_mock(analysis_run_id):
logger.info("[plan] mock mode run=%s", analysis_run_id)
result = _load_mock_plan()
else:
result = await generate_plan(analysis_run_id) result = await generate_plan(analysis_run_id)
await execute( await execute(
"UPDATE analysis_runs SET plan_data = %s WHERE analysis_run_id = %s", "UPDATE analysis_runs SET plan_data = %s WHERE analysis_run_id = %s",