velog dashboard 를 살려주세요..! 로 부터 다시 시작된 velog dashboard project v2, (이하 V.D v2) 베타 버전 오픈이 되었습니다!!
빨리 접속하기: https://velog-dashboard.kro.kr/
벨로그 통계를 한 번에 보기 편하게 보고 싶다는 욕구에서 시작했던, 개인 사용 목적으로 만들었던 프로젝트를 23년 11월 말에 오픈했었습니다!
오픈 1주일만에 신규 유저 분들이 daily 로 10명, 50명 씩 들어오셔서 확실히 공통의 pain point 가 있었구나! 를 많이 느꼈지만!! [ "velog 쪽 통계 API" 에 부하 -> DBMS 부하 -> 특정 DBMS timeout 에러를 유발하는 (벨로그쪽) 크리티컬한 이슈를 일으켜서 ] 2주 정도만에 바로 stop 된 프로젝트입니다 ㅎ : 벨로그야 미안하다!! / velog dashboard 제작기 (3) - frontend & 이슈 & 앞으로
velog 가 이제 daily 를 없애고 total 만 보여주고, 그에 따라 cache 나 CDN 활용, p95, p99 개선을 포함해 훨씬 통계쪽에서도 많은 최적화를 보여줬고(주관적인 해석...), 그에 따라 daily 는 사이드프로젝트가 저장하고 total 만 이용하는 방식으로 해서 velog dashboard v2 를 기획했습니다.
https://velog-dashboard.kro.kr/ 로 오셔서
access_token
과refresh_token
을 입력해주시면 모든 것이 끝입니다!!
혹시나 해당 값을 어디서 가져오지?! 라고 생각이 되신다면! https://youtu.be/Ab8c4kmGhQA (예전 버전 기준이긴 하지만 로직은 동일!) 영상을 통해서 1초만에 접근이 가능합니다!!
[1줄 요약] velog 접속 > 개발자 도구 > 애플리케이션 > 쿠키 > 토큰 확인
async def main() -> None:
"""3개의 동시성 작업으로 유저 그룹 처리"""
group_ranges = [
range(1, 334),
range(334, 667),
range(667, 1001),
]
scrapers = [Scraper(group_range) for group_range in group_ranges]
await asyncio.gather(*(scraper.run() for scraper in scrapers))
stand-alone
으로 가동 가능하게 했고, 지금의 최소 의존성은 django
만 있습니다!velog dashboard 를 살려주세요..! (수정됨) 글을 통해 정말 감사히도 꽤 많은 분들이 관심 가져주셔서 해당 프로젝트를 action 할 수 있게 되었고, 제 목적과 취지에 맞게 최대한 0년차와 주니어 분들만으로 구성했습니다!
Product North Star 만 잡아두고 모든 기획과 과정, 기술 스택은 열어두고 정했고, 크게 3가지 덩어리로 구성되었습니다!!
호준 님이 back-office 메인을 담당해 주셨고, 하온 님이 api 를 메인 담당해주셨고, 마지막으로! 기준 님이 fe 를 메인 담당해 주셨습니다!!
저는 그냥 수저 세팅,, 잔반 리필,, 물 떨어지면 다시 떠오는 그런 느낌?.. 호준님, 하온님, 기준님 세 분이 너무 열심히 잘 만들어 주셨습니다!!
(상대적으로 최근은 유했지만) 초반에는 굉장히 치열한 P.R 과 code review rule 기반으로 저희 네명이 모든 P.R 에 대해 [ Bad thing & Good thing ] 기반으로 엄격하게 리뷰잉 했습니다!! 절대 LGTM 금지
그리고 호준님, 하온님, 기준님 velog page 를 가보시면 아시겠지만! 회고 역시 빡세게 했다는 점!!
전체 infra
의 심플한 개괄도는 위와 같아요! 전체적으로 L7
계층에서 LB
역할을 해주는 서버 하나, 그에 따라 [ api + fe ]
덩어리는 같이 도커라이징 된 형태로 서빙되고 있습니다!
역시 사용자 분들의 token 은 저희가 handling 하는 DBMS 에 저장하지 않고, 양방향 암호화 되어서, 심지어 그룹마다 salt 값이 다른 형태로, 암호화된 값이 table 에 저장됩니다!
그리고 재미있는 부분이 supabase
를 사용했는데 Timescale-db
extension 을 제공하더라고요! 그래서 DBMS 는 우선적으로 PaaS
형태 supabase
선택!
LB
서버와 Back-office
를 제외하면 모든 부분이 scale-out/up 에 굉장히 유리하게 세팅되어 있습니다! 라고 하지만 대부분이 실전에서 뚜드려 맞져ㅎㅎ
추가로 "extension" 있는데 아직 구글 심사 중입니다... 구글아 빨리 내놓아라! 해당 익스텐션은 페이지 오지 않고, 바로 프로필 아래에, 아래 사진과 같이 한 눈 통계를 보여주는 feature 가 핵심입니다!
pnpm
typescript
+ express
+ class-transformer & validator
pnpm
typescript
+ nextjs
+ tanstack-query
+ tailwindcss
typescript
+ react
+ tanstack-query
poetry
+ pyenv
django v5+
, aiohttp
, asyncio
ruff
, 테스팅 pytest
, mypy
도 사용!저도 아직 많이 부족하지만, 다양한 규모의 회사와 초기 스타트업에서 0 to 1
을 경험하며, 0 to 1
뿐 아니라 1 to 10
또한 그에 준하게 정말 중요하다는걸 많이 느꼈습니다.
특히 product side
에서요! 본격적인 찐 개발은 1 to 10
에서 더 복합적으로 많이 이뤄지는 것을 느꼈고, 아주 재미있고 해결할게 많이 남아있습니다!!
당장 개발 생명주기에서 CI/CD 구성, Ops 기능들, 무중단 배포를 위한 blue-red 등, 이 서비스가 사용자가 많지 않아도 실무, 현업에서 필수로 갖춰야 하는 것들이 많이 기다리고 있을 것 같습니다!
사실 실제 운영 서비스라면 당연히 product
중심 사고, 비즈니스 중심
으로 평가하고 측정해야겠지만, 사이드 프로젝트인 만큼 낭만있게 철저한 테크니컬 완성도 중심 사고 로 가져가고 싶습니다 ㅎ
(테스트 계정) 다들 전체 통계 체크해보세요!! :)