Velog Dashboard 정식 릴리즈 이후 약 2.5개월간의 "결과" 와
0.6 version
빨리 접속하기: https://velog-dashboard.kro.kr/
Github repo: https://github.com/check-Data-Out/velog-dashboard-v2
velog dashboard
라는 프로젝트는 "딸각" 으로 velog 전체 통계를 보여주는 web-application project 입니다!
오픈 1주일만에 100명이상 빠르게 등록해주시며, (🙏🙇🏻♂️) 확실하게 velog 의 통계 쉽고 한 눈에 보고 싶은 마음이 있는 것을 증명해주셨습니다.ㅎㅎ 사실 꽤 예전에도 이런 시도가 많았는데요, 다 사양되고, 개개인에 의존하고 있는 형태였었습니다.
사실 "velog dashboard 제작기 (1) - 벨로그 통계를 편하게 보고 싶어요 ㅠ" 라는 것으로 23년도 11월 즈음 한 번 등장한 적이 있었으나, 제가 만든 해당 플젝이 velog 쪽 DBMS 를 터뜨려버렸습니다...
그래서 머리부터 발끝까지 완전 재정비해서 0 to 1
, 지금은 1 to 10
을 향해 나가고 있는 project 입니다!! ㅎㅎ
아직 확인 안해보신 velog 유저분들 가볍게 "딸각" 으로 전체 통계 한 번 보고가셔요!!~
일단 daily 통계 개수가 벌써 120만개가 넘었습니다..!🥳🥳🎉 그래서요.. supabase 가 더 이상 무료 티어 못쓴대요.. (사실 egress
때문) 좋은 소식인지 슬픈 소식인지 애매하네요 🥹
하지만 "수평 분할!!", 샤딩을 세팅 중이며, 받지 못했던 신규 사용자 분들을 더 적극적으로 받을 수 있게 되었습니다!! 이 때문에 어디서 사용해보라고 적극적으로 말을 못했었어요 ㅎㅎ..
이제 더 편하게 확인해주세요!! 🔥🔥
17,248 개
Average
: 약 87 개Median
: 약 56 개long tail
",, 소수 상위 유저가 견인하고 있는 게시글 수 형태 입니다 ㅎㅎ항목 | 값 | 해석 |
---|---|---|
상위 10% 유저 수 | 20명 | - |
상위 10% 게시글 수 | 7,320개 | 전체의 42.44% |
하위 50% (6~10분위) 유저 수 | 99명 | - |
하위 50% 게시글 수 | 2,377개 | 전체의 13.78% |
(PS. 철저하게 GA 랑 web-server log 에 의존한 분석.. 오차 분명 존재 가능성 농후 :'))
DAU
: 평균 약 30-50 선MAU
: 평균 약 1000-2000 사이 선역시 위에서 살펴본 바와 같이 우리 헤비 유저 분들이 견인하고 있는 수치입니다. 물론 여기엔 제가 정말 매일 아주 잘 사용하고, 만족하고 있습니다 ㅎ 나 쓸라고 만든 product
유입은 Direct 가 가장 많았는데, 긍정적으로 해석하자면 "대부분의 daily 활성 사용자 분들은 즐겨찾기
로 들어오고 계셨다~" 라고 볼 수 있습니다! 왜냐면 저흰 마케팅이란걸 전혀 안하기때문.. 유입 채널은 velog 의 "제 게시글 뿐" ...
혹시나 코호트를 포함한 이상을 바라신다면,, pass ㅎㅎ 사실 추적을 위한 세부 세팅을 안해둬서 (애초에 구해볼 생각을 안했어서..) 귀찮아서 패스입니다..
"최적화(메모리, 네트워크 사용량, 레이턴시, 랜더링 퍼포먼스)"
많은 노력을 했습니다 ㅎㅎ)그렇게 당하고 또 당해버린 타임존 이슈.. 이 때문에 00시 부터 09시 까지 저희 통계는 stop the world 가 되었죠.. KST 기준 새벽에 쓴 글이 어제 쓴글이 되어버리기도 하구요
SQL
들이 모두 UTC 기준으로 "하루"를 책정하고 있었죠.. api server, node runtime
과 supabase
모두 UTC 기준으로 모두 셋업되어 있었습니다! ㅎㅎconst KST_DIFF = 9 * 60 * 60 * 1000;
/**
* KST로 변환된 날짜 정보를 담는 인터페이스
*/
export interface KSTDateFormat {
/** "YYYY-MM-DD" 형식의 날짜 문자열 */
short: string;
/** ISO 8601 형식 + KST 오프셋 포함 문자열 */
iso: string;
/** KST로 보정된 Date 객체 */
full: Date;
}
/**
* 주어진 날짜 문자열을 KST(한국 표준시) 기준으로 변환함.
*
* @param {string} [date] - 변환할 날짜 문자열 (예: "2025-05-15T08:00:00Z")
* @returns {KSTDateFormat | undefined} 날짜가 없으면 undefined 반환
*/
export const convertDateToKST = (date?: string): KSTDateFormat | undefined => {
if (!date) return;
// UTC 날짜 파싱
const utcDate = new Date(date);
// UTC+9 (KST) 시간으로 변환
const kstTimestamp = utcDate.getTime() + KST_DIFF;
const kstDate = new Date(kstTimestamp);
// UTC 메서드를 사용하여 KST 시간을 추출
// (UTC 메서드에 KST 시간을 넣으면 원하는 결과를 얻을 수 있음)
const year = kstDate.getUTCFullYear();
const month = (kstDate.getUTCMonth() + 1).toString().padStart(2, '0');
const day = kstDate.getUTCDate().toString().padStart(2, '0');
const hours = kstDate.getUTCHours().toString().padStart(2, '0');
const minutes = kstDate.getUTCMinutes().toString().padStart(2, '0');
const seconds = kstDate.getUTCSeconds().toString().padStart(2, '0');
return {
short: `${year}-${month}-${day}`,
iso: `${year}-${month}-${day}T${hours}:${minutes}:${seconds}+09:00`,
full: kstDate,
};
};
왜? 라면, "하루" 라는 기준이 client side 브라우저 시간대에 따라 달라지지만, 저희 서비스는 "하루" 를 배치에서 무조건 KST 기준으로 하기 때문에 only KST 라는 기준을 세워야 했습니다!! (철저한 Korea 로컬라이제이션)
사실 실제 root cause 를 찾는 과정과 debugging 은 위 시나리오처럼 간단하지 않았습니다.. 시작은 리더보드와 Query Explain 이 던진 공이었죠 ㅎㅎㅎㅎㅎ 🥹 그리고 모든 SQL 을 갈아 엎었구요. ㅎㅎㅎㅎ
[ 사용자 또는 게시글 기준 / 조회수 증가 또는 좋아요 증가 / 10위 또는 30위 / 30일 또는 7일 ]
필터로 리더보드를 볼 수 있습니다!username
은 저장하지 않고 있어요! email 없으신 분들은 리더보드에서 제외됩니다!!사실 너무 별거 없어서 공유 드릴 말이 없는데, 많이 문의 주셔서 다시 남겨보자면! Oracle
+ Supabase
+ git action
조합이라 그렇습니다.
특히 엄청난 transaction 들이 필요한 API 도 딱히 없고 (최근에 추가된 리더보드 빼고) 엄청난 DAU 가 있는 것 도 아니라 완전 버틸만 합니다.
stand-by 상태 oracle instance 가 총 8대 정도라 (api + fe 만 6개 가용, 팀원들 인스턴스 ㅎㅎㅎ) 추산치 & 예상치로 1~5만까지는 거뜬할 것 같네요. (로드밸런서만 잘 버텨준다면)
결국 저희한테 제일 중요한게 "통계 batch" 인데, 지금 https://github.com/Check-Data-Out/velog-dashboard-v2-back-office/actions 보시면 20개 aggregation (scraping) 배치가 열일중!!
그래서 supabase
무료 티어를 "샤딩" 하려고 합니다 흐흐흐 😈😈. duplication 을 하려는 것은 아니고 완벽한 물리적 분할, Horizontal Partitioning
을 하려고 합니다!
덕분에 더 많은 velog 사용자분들의 daily 통계를 보여드릴 수 있습니다!!
근본적으로 "벨로그 통계" 는 어떻게 보면 마케팅에서 콘텐츠 성과 측정과 같은 목적이죠! 성과 측정은 콘텐츠의 퀄리티 또는 방향에 대해서 고민하게 되고, 결국 더 좋은 방향으로 가게 됩니다!!
하지만 이는 너무 마케팅 관점이라, 진정으로 "내가 가고 싶은 방향" 이라는 다를 수 있다고 생각했어요! "동기부여" 관점과 "내가 가고 싶은 방향" 을 align 하기 위해서는 "동반자" 가 될 수 있는 어떤 것이 있으면 훨씬 좋다고 생각했고, 단순한 aggregation 이 아니라, 자연어와 함께 개개인의 "콘텐츠 동반자가 되는" LLM 을 붙이고 싶었습니다!!
"주간 트랜드" 와 "사용자의 주간 게시글" 을 LLM 활용해 "내용을 포함한 글의 트랜드 & 통계 변화 분석" 해서 "주간 메일링" 을 하려고 합니다!!
계속 프로프팅 하고, mail template 과 내용을 바꿔가며 테스트해보고 있습니다! 아마 아래와 같은 형태가 아닐까? 합니다! (ps. 특정 데이터는 모킹된 가짜)
바로 다음 타켓은 티스토리
& Medium
입니다!
사실 가끔 velog 통계에 왜 그렇게 집착하냐고 듣는데 ㅋㅋ 여기가 "시작인 것" 뿐 입니다. ㅎㅎ 저희 25년도 North Start는 velog를 쓰는 모든 사람이 전체 통계를 아주 편하고 빠르게 보게하는 것 입니다!!
26년, 27년 North Start는 다음 기회에 ㅎㅎ
여전히 갈 길이 멀었지만, 지금까지 그래왔던 것 처럼 step by step 으로 소소하게 업드레이드 되는 모습 계속 보여드리겠습니다 :) 🙇🏻♂️🫡🫡🔥🔥🔥
빨리 접속하기: https://velog-dashboard.kro.kr/
Github repo: https://github.com/check-Data-Out/velog-dashboard-v2
익스텐션 보기 좋네요!! 리드미 stats용도 나오면 되게 잘 쓸 것 같고, LLM 활용 기능도 어떻게 나올지 기대되네요ㅎㅎㅎ 🤓
늘 화이팅입니다~! 💪 🔥