[{"data":1,"prerenderedAt":257},["ShallowReactive",2],{"\u002Fblog\u002Fsub-store-cloudflare\u002F:ko":3,"\u002Fblog\u002Fsub-store-cloudflare\u002F-surround:ko":152,"blog-all-posts:ko":153},{"id":4,"title":5,"author":6,"body":10,"date":135,"description":136,"extension":137,"image":138,"locale":139,"meta":140,"minRead":141,"navigation":142,"original":142,"path":143,"pinned":144,"seo":145,"source":138,"sourceUrl":138,"stem":146,"tags":147,"updated":138,"__hash__":151},"blog\u002Fblog\u002Fsub-store-cloudflare.ko.md","프록시 구독 통합을 Cloudflare로 옮겼다",{"name":7,"avatar":8},"Chen Dahuang",{"src":9,"alt":7},"\u002Favatar.jpg",{"type":11,"value":12,"toc":127},"minimark",[13,17,28,33,36,39,52,55,58,62,65,86,89,93,96,99,107,114,118,121,124],[14,15,16],"p",{},"프록시 서비스를 3~4년째 써 왔고, 때때로 직접 VPS 노드를 운영하기도 했다. 항상 짜증 나는 점이 하나 있었다: 서너 개 구독에 자체 호스팅 노드 몇 개가 클라이언트에 흩어져 있어서 하나하나 추가해야 하고, 라우팅 규칙도 클라이언트마다 다시 설정해야 했다. 기기를 바꾸거나, 클라이언트를 바꾸거나, 가족 누군가를 세팅할 때마다 그 의식 전체를 다시 치렀다.",[14,18,19,20,27],{},"그러다 생각했다: 구독을 클라이언트 안에서 따로따로 관리할 이유가 없다. 전부 하나의 링크로 모으고, 규칙은 서버 쪽에서 정의하고, 클라이언트는 그냥 구독만 하면 된다 — 깔끔하다. 예전에 Sub-Store 방식도 써봤지만, 그건 자체 서버에서 돌아가서 유지보수가 번거로웠다. 그래서 이번엔 Cloudflare에서 호스팅되는 버전을 직접 만들었다. 이름은 sub-store-cloudflare, ",[21,22,26],"a",{"href":23,"rel":24},"https:\u002F\u002Fgithub.com\u002Frealchendahuang\u002Fsub-store-cloudflare",[25],"nofollow","GitHub","에 오픈소스로 공개했다.",[29,30,32],"h2",{"id":31},"정말-한-가지만-한다","정말 한 가지만 한다",[14,34,35],{},"여러 구독 소스를 하나의 구독으로 합친다.",[14,37,38],{},"구체적으로, 몇 가지를 넣을 수 있다:",[40,41,42,46,49],"ul",{},[43,44,45],"li",{},"여러 프록시 서비스의 구독 링크",[43,47,48],{},"자체 VPS의 노드 텍스트 (vless, trojan, ss, vmess — 전부 가능)",[43,50,51],{},"임시로 붙여넣은 노드 덩어리도 가능",[14,53,54],{},"들어오면 Worker가 가져오고 중복을 제거하고, 네가 준 규칙대로 필터링한 다음, 필요에 따라 이름을 바꾸고, 플래그를 붙이고, 도메인을 리졸브한다. 전부 하나의 통합 구독으로 합쳐져 나온다 — 클라이언트는 그 링크 하나만 구독하면 끝이다.",[14,56,57],{},"규칙은 서버 쪽에 산다. 몇 가지 흔한 Mihomo 템플릿이 내장되어 있다 — acl4ssr, Loyalsoldier의 화이트리스트\u002F블랙리스트, ai-streaming 등 — 라우팅 그룹과 규칙 세트가 전부 클라우드에서 설정된다. mihomo\u002Fclash, surge, sing-box, shadowrocket 같은 클라이언트에 구독을 넣으면, 다운로드되는 것은 라우팅 규칙이 이미 박힌 완성품이다. 그쪽에서 규칙을 손으로 쓰거나 규칙 세트 URL을 관리할 필요가 없다.",[29,59,61],{"id":60},"왜-하필-cloudflare인가","왜 하필 Cloudflare인가",[14,63,64],{},"실용적인 이유:",[40,66,67,74,80],{},[43,68,69,73],{},[70,71,72],"strong",{},"서버가 없다."," Workers + D1, 무료 할당량이 개인용으로 충분하다 — 서버 비용과 유지보수를 모두 아낀다.",[43,75,76,79],{},[70,77,78],{},"workers.dev 도메인 자체가 방화벽 밖에 있다."," 클라이언트가 연결해서 구독을 가져오는 게 처음부터 통한다 — \"서버는 해외인데 노드가 자기 구독을 당기려면 여전히 사다리가 필요하다\"는 마트료시카 같은 난센스가 없다.",[43,81,82,85],{},[70,83,84],{},"배포하면 웹 관리 패널 + 다운로드 엔드포인트가 된다."," 휴대폰에서 클라이언트를 바꿔도 웹페이지를 열어 설정을 바꿀 수 있다.",[14,87,88],{},"기술 스택은 일부러 작게 유지했다: Worker + Static Assets + D1 + Worker Secrets. KV, R2, Durable Objects, Queue, Cron은 전부 핵심 경로 밖이다 — 적을수록 좋다.",[29,90,92],{"id":91},"배포는-일부러-두-갈래로","배포는 일부러 두 갈래로",[14,94,95],{},"첫 번째는 그냥 쓰고 싶은 사람을 위한 것이다: 저장소의 Deploy to Cloudflare 버튼을 클릭. Cloudflare가 저장소를 가져와 Worker와 D1을 만들고, 토큰 두 개를 물어본 뒤, 완료되면 토큰이 붙은 관리 링크를 건네준다. 한 단계씩 진행되며 커맨드라인을 만질 필요가 없다.",[14,97,98],{},"두 번째는 나와, 그리고 땜질하기 좋아하는 사람들을 위한 것이다: AI 에이전트로 원클릭 설치.",[14,100,101,102,106],{},"저장소에는 에이전트 프로토콜(AGENTS.md + 에이전트 안의 SKILL)이 들어 있다. 구독 소스, 만들고 싶은 통합 구독, 원하는 규칙 템플릿을 로컬 설정 파일에 적고 ",[103,104,105],"code",{},"pnpm run install:cloudflare","을 실행하면, 에이전트가 Cloudflare 로그인을 확인하고, 데이터베이스를 만들고, 시크릿을 쓰고, 마이그레이션하고, 배포하고, 설정을 가져오고, 링크를 검증한 다음, 마지막으로 관리 링크와 다운로드 링크를 네 손에 건네준다.",[14,108,109,110,113],{},"내 링크도 정확히 이 방법으로 배포했으니, 이 루트를 추천한다 — 수고가 적다. Codex \u002F Claude Code와 함께 쓸 때는 저장소의 ",[103,111,112],{},"agent\u002Finstall.prompt.md","에 있는 프롬프트를 복사하면 된다.",[29,115,117],{"id":116},"이런-사람에게-맞다","이런 사람에게 맞다",[14,119,120],{},"솔직히 말하면: 프록시 서비스가 둘 이상이고 자체 호스팅 노드도 몇 개 있으며, 그것들을 하나의 구독으로 합쳐서 자기 용도로 쓰고 싶다면 — 이 프로젝트가 맞다. 서비스 하나로 만족하고 있다면, 이건 정말 필요 없다.",[14,122,123],{},"코드는 완전 오픈소스, AGPL. 프런트엔드 상호작용은 원조 Sub-Store에 대한 오마주다. 원조는 컨테이너에서 돌며 더 넓은 클라이언트 생태계를 커버한다. 내 것은 더 날렵한 Cloudflare 네이티브 형태다 — 수정과 직접 배포가 쉽다. 라인별 복제가 아니다.",[14,125,126],{},"관심 있는 사람은 저장소를 둘러보면 된다. README가 꽤 충실하고, 배포 단계를 그대로 따라가면 된다.",{"title":128,"searchDepth":129,"depth":129,"links":130},"",2,[131,132,133,134],{"id":31,"depth":129,"text":32},{"id":60,"depth":129,"text":61},{"id":91,"depth":129,"text":92},{"id":116,"depth":129,"text":117},"2026-06-28","여러 프록시 서비스와 자체 노드를 하나의 구독으로 합치고, 라우팅 규칙을 서버 쪽에서 설정 — 클라이언트는 그냥 구독만 하면 된다.","md",null,"ko",{},4,true,"\u002Fblog\u002Fsub-store-cloudflare",false,{"title":5,"description":136},"blog\u002Fsub-store-cloudflare.ko",[148,149,150],"Cloudflare","우회","오픈소스 프로젝트","fLG6xvTRnlKTRfsrKvM4PqtXHvMNcQSOdhmgykKi5tI",[138,138],[154,163,171,180,187,195,202,210,218,224,231,233,240,248],{"path":155,"title":156,"description":157,"date":158,"minRead":159,"tags":160},"\u002Fblog\u002Fagent-harness-selection","Pi Agent, OMP, Codex, ZCode를 이리저리 만져본 끝에, 내가 마지막으로 OpenCode + OpenChamber를 고른 이유","Agent Harness 선택 회고: GUI 경험, 벤더 종속, 2차 개발 자유도라는 세 가지 기준으로 Pi Agent, OMP, Codex, ZCode를 탈락시키고, 마지막으로 OpenCode 코어 + OpenChamber 인터페이스를 선택했다.","2026-08-06",6,[161,162],"AI Agent","도구 선택",{"path":164,"title":165,"description":166,"date":167,"minRead":159,"tags":168},"\u002Fblog\u002Fcloudflare-broke-stack","2026 인디 개발 베스트 프랙티스: Cloudflare 가난뱅이 올인원 스택","인디 개발자를 위한 무료 기술 스택: 코드는 Codex, 버전 관리는 GitHub, 결제는 Stripe, 프런트엔드는 TanStack Start, 백엔드는 Hono + Workers, 데이터베이스는 D1, 스토리지는 R2, 캐시는 KV — 전부 Cloudflare 위에서 돌아간다.","2026-06-15",[148,169,170],"인디 개발","기술 스택",{"path":172,"title":173,"description":174,"date":175,"minRead":159,"tags":176},"\u002Fblog\u002Fdeepseek-api-web-search","DeepSeek API에 내장된 웹 검색 — Responses API로 공식 검색을 공짜로 쓰자","DeepSeek가 API 안에 웹 검색을 내장했다: Responses 인터페이스로 deepseek-v4-flash를 호출하고 web_search 도구만 선언하면 된다. 타사 검색 엔진 연동도, 검색 API 키도 필요 없다.","2026-08-05",[177,178,179],"DeepSeek","API","AI 도구",{"path":181,"title":182,"description":183,"date":175,"minRead":184,"tags":185},"\u002Fblog\u002Fdeepseek-v4-flash-review","DeepSeek V4 Flash 정식 버전 핸즈온: 싸고, 빠르고, 1M 컨텍스트, 내장 검색","DeepSeek V4 Flash 정식 버전을 며칠간 깊게 써본 결과: 공격적으로 싸고, 번개처럼 빠르고, 1M 컨텍스트, 공식 내장 웹 검색, 완전 오픈소스. 유일한 약점은 멀티모달 — 하지만 다른 모델을 조합하면 메울 수 있다.",7,[177,186,179],"모델 리뷰",{"path":188,"title":189,"description":190,"date":167,"minRead":191,"tags":192},"\u002Fblog\u002Ffree-cloudflare","무료 사용자가 Cloudflare를 끝까지 짜먹는 법 — 무료 플랜이 실제로 어디까지 되나?","Cloudflare 무료 플랜이 개인 인터넷 인프라 전체를 지탱할 수 있다: DNS, CDN, Pages, Workers, KV, D1, R2, 이메일, Tunnel, AI Gateway 등.",8,[148,193,194],"무료 플랜","배포",{"path":196,"title":197,"description":198,"date":199,"minRead":191,"tags":200},"\u002Fblog\u002Fmodel-harness-decoupling","순정 Harness가 곧 버전 정답은 아니다: 오픈 모델 시대에는 모델과 Harness를 따로 골라라","Claude 쓰면 Claude Code? 오픈 모델 시대에는 이 직관을 업그레이드할 때다. 순정의 강점은 진짜지만, 좋은 모델을 만드는 일과 좋은 Harness를 만드는 일은 별개의 공학이다 — 이 글은 모델과 Harness를 분리해서 선택할 수 있게 된 이유와 다섯 가지 Harness의 포지셔닝 맵을 정리한다.","2026-09-09",[161,201,162],"Harness",{"path":203,"title":204,"description":205,"date":199,"minRead":191,"tags":206},"\u002Fblog\u002Fopencode-productive-stack","안정, 빠름, 고생산성, 저렴함: 내 AI Coding 스택 완전 기록","OpenCode + OpenChamber + DeepSeek V4 Flash 구독 두 장으로 15개 프로젝트를 동시에 돌려도 쿼터는 거의 안 줄었다. 이 글은 Context 프루닝, 계층 메모리, 데스크톱 자동화, 그리고 '역시 원래 조합'이라는 선택의 교훈까지, 내 전체 설정을 모두 까보는 글이다.",[207,208,209],"OpenCode","AI 코딩","설정",{"path":211,"title":212,"description":213,"date":214,"minRead":215,"tags":216},"\u002Fblog\u002Fproduct-faxin-principle","발심의 원리: 인디 개발자는 왜 버리는 법을 배워야 하나","왜 출발하는가? 누구를 위해 출발하는가? 도대체 어떤 문제를 풀고 싶은가? 제품의 날카로움은 감히 버리는 것에서 나온다.","2026-06-20",10,[217,169],"제품 사고",{"path":219,"title":220,"description":221,"date":214,"minRead":191,"tags":222},"\u002Fblog\u002Fproduct-pain-vs-itch","사용자가 '대박'이라 해도 들뜨지 마라: 통증 포인트와 가려움 포인트","입으로 하는 좋아함은 한 푼 가치도 없다. 수요를 판단하는 기준은 딱 하나다: 사용자가 무엇을 지불할 의향이 있는가.",[217,223],"수요 판단",{"path":225,"title":226,"description":227,"date":158,"minRead":228,"tags":229},"\u002Fblog\u002Fqwen-vision-for-deepseek","DeepSeek에 멀티모달 더하기: Qwen-3.7-Flash 비전 접근법","DeepSeek V4 Flash에는 멀티모달이 없다 — 이미지 이해는 어떻게 할까? 시장을 조사해 보니 현재 가장 가성비 좋은 방법은 Qwen-3.7-Flash다: 이미지 한 장을 인식하는 비용이 거의 들지 않고, V4 Flash와 조합하면 빈틈이 메워진다.",5,[177,230,186],"멀티모달",{"path":143,"title":5,"description":136,"date":135,"minRead":141,"tags":232},[148,149,150],{"path":234,"title":235,"description":236,"date":199,"minRead":184,"tags":237},"\u002Fblog\u002Ftui-cognitive-bandwidth","TUI는 당신의 인지 대역폭을 죽이고 있다: AI Coding의 '긱 필터'는 깨질 때가 됐다","AI Coding Agent가 앞다투어 TUI를 올리면서 인터랙션을 80년대 터미널 패러다임으로 되밀어 놓고는 '몰입형', '프로그래머 존중'이라고 미화한다. 이 글은 TUI가 인지 대역폭을 체계적으로 떨어뜨리는 세 가지 메커니즘과, Web UI가 왜 정답인지를 해부한다.",[208,238,239],"인터랙션 디자인","에세이",{"path":241,"title":242,"description":243,"date":244,"minRead":159,"tags":245},"\u002Fblog\u002Fvalue-not-external","가치가 있는지 논하는 것 자체가 가치가 없다","우리의 가치는 누구도 정의하지 않는다. AI 시대에 인간은 도대체 어떻게 자신을 이해해야 하는가?","2026-06-18",[246,247],"AI 사고","인문 에세이",{"path":249,"title":250,"description":251,"date":252,"minRead":253,"tags":254},"\u002Fblog\u002Fx-growth-1000-followers","하루 조금 넘게 팔로워 1000+ 달성 — 내가 한 일","6월에 X 계정을 진지하게 운영해 하루 조금 넘게 팔로워 1000+를 달성했다. 이 글은 내가 한 일과 받은 피드백을 기록한다.","2026-06-16",12,[255,256],"X 운영","콘텐츠 성장",1789752317611]