이 저장소가 대체 무엇인가.
free-for.dev는 클라우드·호스팅·DB·모니터링·이메일·인증 등 60개 분야에서 무료 티어를 제공하는 서비스를 골라 담은 목록이다. 각 항목은 "무엇이 어디까지 공짜인지"를 하위 항목으로 또박또박 적어둔다.
기술적으로 가장 특이한 건 만드는 방식이다. 보통 이런 사이트는 Jekyll·Hugo 같은 도구로 HTML을 미리 구워 배포하는데, free-for.dev는 그런 단계가 통째로 없다. README.md를 그대로 두고, 방문자의 브라우저가 열릴 때 Docsify가 그 마크다운을 읽어 화면을 그린다.
리스트의 자격 기준은 까다롭다. "무료 트라이얼(체험판)이 아니라 진짜 무료 티어"여야 하고, 기간제라면 최소 1년은 공짜여야 한다. 셀프호스팅 소프트웨어는 받지 않고(서비스형만), 보안 관점도 본다 — 예를 들어 TLS(HTTPS)를 유료 플랜에서만 풀어주는 서비스는 거부한다. 이 "의견 있는(opinionated) 큐레이션"이 단순 링크 모음과의 결정적 차이다.
awesome-python처럼 이름 붙는다. free-for.dev는 그중에서도 "유지보수가 살아있는" 대표 사례.트렌딩 이유 · 경쟁 대비 장점.
엄격한 큐레이션 · 빌드리스 단순함 · 반(反)AI 거버넌스 세 가지가 이 저장소를 8년째 트렌딩에 머물게 한다. ★12만, 포크 1.2만, 기여자 1,600명 — 단일 마크다운 파일로는 깃허브에서 손에 꼽히는 규모다.
| 비교 대상 | 한계 | free-for.dev의 접근 |
|---|---|---|
| 일반 awesome-* 리스트 | 링크만 나열, "무엇이 얼마나 무료"인지 불명확 | 서비스마다 무료 한도를 하위 항목으로 명시 |
| 그냥 구글링 | 정보가 흩어지고, 트라이얼·티어가 뒤섞임 | 한곳에 모으고 트라이얼은 규칙으로 배제 |
| Jekyll/Hugo 기반 사이트 | 빌드·배포 파이프라인을 만들고 유지해야 함 | Docsify로 빌드 단계 자체를 제거 |
| 상용 "무료 SaaS 비교" 사이트 | 광고·제휴 링크로 편향, 추천에 돈이 개입 | 커뮤니티 PR + 유지자의 공개적 거절 기준 |
많은 서비스가 30일 트라이얼을 "무료"처럼 광고하고, 보안 필수 기능(TLS·SSO)을 유료 플랜에 가둔다. 개발자는 가입하고 나서야 "사실상 공짜가 아니다"라는 걸 알게 된다.
유지자(R.I. Pienaar)가 명문 규칙으로 거른다: 트라이얼 거부, 기간제면 최소 1년, 셀프호스팅 제외, TLS를 유료로 막는 서비스 거부. 그래서 "리스트에 있으면 진짜 무료 티어"라는 신뢰가 쌓인다.
거버넌스도 화제다. 이 저장소는 AI가 작성한 기여를 명시적으로 거부한다. PR 템플릿에는 "대규모 언어 모델과 기타 AI는 이 칸을 체크하라"는 허니팟(honeypot) 체크박스가 있고, CLAUDE.md·AGENTS.md 파일이 AI 어시스턴트에게 "이 저장소는 AI 편집을 받지 않으니 사용자에게 알리고 멈추라"고 지시한다. AI 슬롭(저품질 자동 생성물)이 오픈소스를 덮치는 2026년에, "사람이 검수한 큐레이션"이라는 정체성을 코드로 못 박은 셈이다.
반전 — "스택이 거의 없다"는 게 핵심이다.
대부분의 트렌딩 저장소는 화려한 프레임워크 목록이 나온다. free-for.dev의 교훈은 정반대다. 최소한의 부품으로 최대한 오래 유지되는 시스템을 보여준다. 전체 저장소가 9개 파일이고, 그중 실질 제품은 마크다운 1개다.
| 레이어 | 기술 / 도구 | 역할 |
|---|---|---|
| 콘텐츠(=백엔드) | README.md (Markdown) | 1,649줄·약 238KB. 60개 카테고리의 모든 데이터가 여기 한 파일에. 단일 진실원(Single Source of Truth). |
| 렌더링(=프론트엔드) | Docsify (CDN 로드) | 빌드 없이 브라우저에서 README.md를 fetch → HTML로 즉석 변환. jsDelivr CDN에서 docsify.min.js 로드. |
| 테마 | vue.css + docsify-darklight-theme | 기본 Vue 테마 + 라이트/다크 모드 토글. 폰트 Source Sans Pro, 본문 15px 설정. |
| 검색 | docsify search 플러그인 | 서버 없이 페이지를 클라이언트에서 인덱싱해 즉석 검색 제공. |
| 호스팅 | GitHub Pages | 저장소 파일을 그대로 정적 서빙. 서버 코드·DB 없음. |
| 도메인 | CNAME → free-for.dev | 저장소의 CNAME 파일 한 줄이 커스텀 도메인을 GitHub Pages에 연결. |
| 분석 | Google Analytics (gtag) | index.html에 측정 ID 삽입. 방문 통계만 수집. |
| 빌드 / CI | 없음 | Gemfile·_config.yml·Rakefile·.github/workflows 전부 부재. 빌드 단계, 링크 체크, 린트 자동화가 0. |
| 품질 관리 | 사람(PR 리뷰) | 자동화 대신 유지자의 수동 PR 검수 + PR 템플릿 체크리스트가 게이트 역할. |
index.html이 자바스크립트로 .md 파일을 실시간 fetch해서 브라우저 안에서 HTML로 그린다. 결과물 폴더가 따로 없다."PR → README → 브라우저 화면"까지 한 줄기로 따라가기.
이 시스템은 데이터가 흐르는 길이 아주 짧다. 기여자가 PR로 README.md를 고치면, 머지되는 순간 그게 곧 배포다. 방문자가 페이지를 열 때마다 "빌드"가 브라우저 안에서 일어난다. 전역 시점으로 보자.
핵심은 "빌드 산출물이 존재하지 않는다"는 점이다. 보통의 정적 사이트는 _site/나 dist/ 같은 HTML 폴더를 만들어 올리지만, 여기엔 그게 없다. 저장소에 있는 index.html이 전부이고, 실제 페이지는 매 방문마다 새로 그려진다.
<!-- index.html — Docsify 로더 (개념 발췌·태그 일부 생략) -->
<div id="app">Loading...</div>
<noscript>이 페이지는 자바스크립트가 필요합니다</noscript>
<script>
window.$docsify = {
name: "Free for Developers",
repo: "ripienaar/free-for-dev",
search: ["/"], // 검색 플러그인이 페이지를 인덱싱
darklightTheme: { defaultTheme: "light" }
}
</script>
<!-- CDN에서 직접 로드 (빌드·번들 없음) -->
<script src="//cdn.jsdelivr.net/npm/docsify/lib/docsify.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/docsify/lib/plugins/search.min.js"></script>
Jekyll/Hugo는 공장에서 완성된 책장을 만들어 트럭으로 배송하는 방식이다(빌드 서버가 HTML을 굽고 → 배포). Docsify는 부품(README.md)과 조립 설명서(docsify.js)만 보내고, 손님 집(방문자 브라우저)에서 그때그때 조립한다. 공장(빌드 파이프라인)이 통째로 필요 없어지는 대신, 조립은 손님이 페이지를 열 때마다 다시 한다.
| 패턴 | 설명 · 어디서 배우나 |
|---|---|
| 단일 진실원(SSOT) | 모든 데이터가 README.md 한 곳에. 데이터·표현·배포가 분리돼 충돌 지점이 적다. 항목 추가 = 마크다운 한 줄. |
| 빌드리스 렌더링 | 빌드 타임 변환을 런타임(브라우저)으로 옮겨 CI·배포 파이프라인을 제거. 유지 비용이 거의 0. |
| PR 템플릿 = 품질 게이트 | 자동화 대신 PULL_REQUEST_TEMPLATE.md 체크리스트로 기여 품질을 강제. 통과 못 하면 "논의 없이 닫힘". |
| 반-AI 허니팟 | "AI는 이 칸 체크" 같은 함정 + CLAUDE.md/AGENTS.md 지시문으로 자동 생성 PR을 걸러냄. |
빌드를 없앤 대신 ① SEO 약점(초기 HTML이 거의 비어 있어 크롤러가 본문을 늦게 봄), ② 자바스크립트 필수(JS 꺼지면 빈 화면), ③ 매 방문마다 238KB 마크다운을 받아 클라이언트가 파싱하는 비용이 생긴다. 트래픽·콘텐츠 규모가 이 단순함이 감당할 수 있는 선이라 성립하는 선택이다.
저장소 전체가 9개 파일 — 하나씩 다 본다.
| 파일 | 역할 요약 |
|---|---|
README.md | 저장소의 심장. 인트로 + 알파벳순 목차(약 62항목) + 60개 H2 카테고리(본문은 큐레이션 순서). 각 항목은 "서비스 링크 → 무료 한도" 중첩 불릿. |
index.html | 약 3.5KB. Docsify·테마·검색·다크모드·애널리틱스를 CDN에서 불러오는 로더. 사이트의 전부. |
CNAME | GitHub Pages가 읽는 커스텀 도메인 지정 파일. 내용은 free-for.dev 한 줄. |
CONTRIBUTING.md | 받는 것(무료 티어 SaaS)과 거부하는 것(cPanel 호스팅, 클론, 임시 이메일, 일반 변환기 등) 명시. "AI 편집 거부"를 두 번 강조. |
CLAUDE.md · AGENTS.md | 각 392바이트, 내용 동일. AI 코딩 도구가 이 저장소를 만지려 할 때 "편집하지 말고 사용자에게 알리라"고 지시. AI 에이전트 시대의 새로운 거버넌스 장치. |
.github/PULL_REQUEST_TEMPLATE.md | PR 작성 시 자동 삽입되는 체크리스트. 7개 조건 + "LLM은 이 칸 체크"라는 허니팟. 템플릿을 안 따르면 닫힘. |
LICENSE 파일이 존재하지 않는다(GitHub UI가 이력에서 추론할 수는 있음). 콘텐츠는 커뮤니티 PR로 쌓인 집합물이다. 그대로 재배포·상업 이용하려면 별도 확인이 필요하다.이 저장소에서 진짜로 배울 것 + 어디를 보면 되는지.
가장 실전적인 배움. index.html 한 장만 있으면 마크다운 폴더가 곧 웹사이트가 된다. Jekyll처럼 Ruby·Gemfile·빌드 시간이 필요 없다. 사내 위키, 프로젝트 문서, 개인 노트에 그대로 응용 가능.
볼 파일: index.html (Docsify 설정 객체 window.$docsify)
좋은 큐레이션은 추가가 아니라 거절에서 나온다. 명문화된 자격 기준(트라이얼 거부·최소 1년·보안 관점)과 항목 포맷 통일이 어떻게 8년간 품질을 지켰는지 배운다. 내가 만들 awesome 리스트의 헌법이 된다.
볼 파일: CONTRIBUTING.md, README 인트로의 NOTE 블록
저장소에 CNAME 파일(내용: 도메인) 하나를 두고, DNS에 레코드를 추가하면 username.github.io가 아닌 내 도메인으로 서비스된다. HTTPS는 GitHub가 자동 발급. 무료로 사이트를 운영하는 가장 빠른 길.
볼 파일: CNAME + GitHub Pages 커스텀 도메인 문서
자동화 CI가 없어도 품질을 지키는 방법이 있다 — 기여자에게 체크리스트를 강제하는 것. PULL_REQUEST_TEMPLATE.md를 두면 PR 작성 화면에 자동 삽입된다. "조건을 못 채우면 논의 없이 닫는다"는 명시적 정책이 리뷰 비용을 줄인다.
볼 파일: .github/PULL_REQUEST_TEMPLATE.md
2026년의 신생 패턴. 저장소 루트에 AGENTS.md·CLAUDE.md를 두면 AI 코딩 도구가 작업 전 이를 읽고 행동을 바꾼다. free-for.dev는 이걸 "편집 금지" 신호로 썼다. PR 템플릿의 허니팟 체크박스와 합쳐, 사람이 검수한 콘텐츠라는 정체성을 지키는 거버넌스 사례다.
볼 파일: CLAUDE.md, AGENTS.md, PR 템플릿의 허니팟 항목
리스트 자체가 SaaS 비즈니스 모델의 표본집이다. 무료 티어는 자선이 아니라 개발자 유입(PLG) → 습관·락인 → 팀 단위 유료 전환으로 가는 깔때기다. 60개 카테고리를 훑으며 "어디서 무료를 풀고 어디서 과금하는지"의 패턴을 읽으면, 내 제품의 무료/유료 경계 설계에 직접 쓰인다.
볼 파일: README의 "Major Cloud Providers", "PaaS", "BaaS" 카테고리 비교
사실상 거의 없음 — 그게 이 프로젝트의 정체성이다.
| 목적 | 필요한 것 |
|---|---|
| 그냥 읽기 | 웹 브라우저뿐. 자바스크립트만 켜져 있으면 됨(JS 꺼지면 빈 화면). |
| 로컬에서 미리보기 | 방법 A: npm i -g docsify-cli 후 docsify serve . (Node.js 필요). 방법 B: python3 -m http.server (파이썬만 있으면 됨). |
| 항목 기여(PR) | GitHub 계정 + git. 텍스트 에디터로 README.md 한 줄 추가가 전부. 빌드·테스트 환경 불필요. |
| 내 버전 배포 | GitHub 계정(Pages 무료). 커스텀 도메인을 쓰려면 도메인 + DNS 설정(선택). |
| 서버 / DB | 불필요. 백엔드·데이터베이스·런타임 서버가 전혀 없는 순수 정적 사이트. |
일반 웹앱이 "주방·창고·계산대(서버·DB·빌드)"가 필요한 식당이라면, free-for.dev는 벽에 붙인 메뉴판 한 장이다. 손님(브라우저)이 직접 읽는다. 전기세(서버비)도, 재고 관리(DB)도 없다. 그래서 8년째 거의 공짜로 굴러간다.
난이도별로 손에 익히는 단계.
저장소를 포크·클론한 뒤 터미널에서 python3 -m http.server 3000을 실행하고 브라우저로 localhost:3000 접속 → free-for.dev가 그대로 뜨는지 확인. 그다음 README.md의 한 카테고리에 "서비스명 → 무료 한도" 형식으로 항목을 추가하고 새로고침해서 반영되는지 본다. 빌드 없이 바뀌는 걸 체감하는 게 목표.
새 저장소에 index.html(Docsify 로더) + README.md만 넣고 Settings → Pages에서 배포. 주제는 자유(예: "한국어 개발 학습 자료"). free-for.dev의 index.html을 템플릿으로 베끼되 name·repo만 바꾸면 5분 만에 내 사이트가 생긴다.
실습 2의 사이트에 CNAME 파일(내 도메인 한 줄)을 추가하고, 도메인 등록처 DNS에 CNAME(서브도메인) 또는 A 레코드(apex)를 GitHub Pages IP로 설정. HTTPS가 자동 발급되는 과정을 관찰한다. DNS 전파·인증서 발급의 실제 흐름을 배우는 실습.
free-for.dev에는 링크 체크 자동화가 없다(238KB 안에 죽은 링크가 쌓일 위험). .github/workflows/linkcheck.yml을 작성해 markdown-link-check로 README의 모든 링크를 주기적으로 검사하는 GitHub Actions를 만들어보자. "유지자가 일부러 안 넣은 자동화를 내가 설계"하면서 트레이드오프(소음 vs 안전)를 체험한다.
파이썬으로 README.md를 읽어 ^## 로 카테고리를, * [이름](링크) 패턴으로 서비스를 파싱해 "카테고리별 서비스 수", "중복 도메인", "가장 큰 카테고리" 통계를 출력하는 스크립트를 작성. 정규식·마크다운 구조 분석을 연습하고, 큐레이션 데이터의 빈틈을 데이터로 찾는다.
re.findall(r'^\\* \\[([^\\]]+)\\]\\((https?://[^)]+)\\)', line) 같은 패턴으로 항목을 추출하고, urllib.parse로 도메인을 정규화해 중복을 집계.한 주씩 따라가는 "문서·정적웹·거버넌스" 코스.
| 주차 | 주제 | 학습 자료 / 할 일 |
|---|---|---|
| 1주차 | Markdown + Git/GitHub 기초 | 마크다운 문법, 포크·브랜치·PR 흐름. free-for.dev에 첫 PR 보내보기 |
| 2주차 | awesome 리스트 큐레이션 원칙 | sindresorhus/awesome 가이드라인 정독, free-for.dev CONTRIBUTING.md 비교 |
| 3주차 | 정적 사이트 생성기 비교 | Docsify vs Jekyll vs Hugo vs MkDocs — 빌드 타임 vs 런타임 렌더 차이 실습 |
| 4주차 | GitHub Pages 배포 실전 | Docsify 사이트를 Pages로 배포, 빌드 산출물이 없다는 점 확인 |
| 5주차 | 커스텀 도메인 + DNS + HTTPS | CNAME 파일, DNS A/CNAME 레코드, 자동 인증서 발급 원리 |
| 6주차 | GitHub Actions CI | markdown-link-check·markdownlint 워크플로 작성(실습 4 확장) |
| 7주차 | 오픈소스 거버넌스 | PR 템플릿·CODE_OF_CONDUCT·AGENTS.md·봇/AI 슬롭 대응 전략 |
| 8주차 | 나만의 큐레이션 사이트 런칭 | 주제 선정 → Docsify 사이트 → 도메인 → 기여 규칙 → 운영까지 한 사이클 완주 |
본문에 나온 용어 빠른 참조.
| 용어 | 의미 |
|---|---|
| SaaS / PaaS / IaaS | 각각 Software / Platform / Infrastructure as a Service. 완성된 앱 / 앱 실행 플랫폼 / 가상 인프라를 빌려 쓰는 클라우드 3계층. |
| 무료 티어 (Free Tier) | 유료 서비스가 영구 제공하는 공짜 사용 구간. free-for.dev의 수록 기준. |
| 무료 트라이얼 (Free Trial) | 기간 한정 체험판. 무료 티어와 다르며, free-for.dev는 수록을 거부한다. |
| awesome 리스트 | 특정 주제의 좋은 자료를 큐레이션한 마크다운 저장소 장르. |
| 큐레이션 (Curation) | 좋은 항목만 골라 정리·유지하는 행위. 추가보다 "거절 기준"이 품질을 만든다. |
| Docsify | 빌드 없이 .md를 브라우저에서 실시간 렌더하는 문서 사이트 생성기. |
| SSG | 정적 사이트 생성기. 마크다운 등을 정적 HTML로 변환(Jekyll·Hugo·MkDocs). |
| 빌드리스 (Buildless) | 빌드 단계 없이 동작하게 만드는 접근. 변환을 런타임(브라우저)으로 옮김. |
| 클라이언트 사이드 렌더링 | HTML을 서버/빌드가 아니라 방문자 브라우저의 JS가 그려내는 방식. |
| GitHub Pages | 깃허브 저장소 파일을 정적 웹사이트로 무료 호스팅해주는 서비스. |
| CNAME 파일 | GitHub Pages에 커스텀 도메인을 알려주는 한 줄짜리 파일. |
| 단일 진실원 (SSOT) | 데이터가 한 곳에만 존재하는 설계. 여기선 README.md가 그 역할. |
| PR 템플릿 | Pull Request 작성 시 자동 삽입되는 양식. 기여 품질의 게이트로 쓰임. |
| 허니팟 (Honeypot) | 봇/자동화를 잡으려고 일부러 놓은 함정. 여기선 "AI는 이 칸 체크" 체크박스. |
| AGENTS.md / CLAUDE.md | AI 코딩 도구가 작업 전 읽는 지시문 파일. 저장소가 AI 행동을 규정하는 규약. |
| CDN (jsDelivr) | 전 세계에 파일을 빠르게 배포하는 네트워크. Docsify·테마를 여기서 로드. |
| PLG | Product-Led Growth. 무료 사용 경험으로 사용자를 끌어 유료로 전환하는 성장 전략. 무료 티어의 비즈니스 근거. |