이 레포가 무엇을 하는 물건인가.
새 도구를 받으면 보통 공식문서 → 유튜브 → 블로그 → 깃헙 이슈를 헤매며 감을 잡는다. CodexGuide는 그 헤맴을 대신 해서, "처음 설치 → 첫 작업 → CLI로 실제 코드 수정 → 팀 규칙화"까지의 길을 한 줄로 정렬해 둔 지식베이스다. 그리고 그 책 자체를 VuePress로 빌드해 codexguide.ai 라는 정적 사이트로 배포한다.
Codex는 OpenAI가 만든 "코딩을 대신 해 주는 AI 에이전트"다. 단순 채팅이 아니라 실제로 내 저장소를 읽고, 파일을 고치고, 명령을 실행하고, 결과를 검증한다. 들어가는 입구가 여러 개라는 게 핵심 난점인데 — 데스크탑 App, 터미널의 CLI, VS Code 같은 IDE 확장, 브라우저의 Cloud, ChatGPT 모바일 앱까지 — CodexGuide는 "당신 상황엔 어느 입구가 맞는가"부터 정리해 준다.
레포의 정체를 한 문장으로 정의하면 이렇다: "마크다운 문서 60여 개 + 그걸 검색·SEO·RSS까지 갖춘 사이트로 만드는 빌드 설정". 언어 통계가 이를 그대로 증언한다 — JavaScript/TypeScript 빌드 설정이 일부, 나머지 대부분은 docs 폴더의 .md 콘텐츠다. 즉 이 레포는 두 갈래로 읽을 수 있다. ① 콘텐츠로서의 Codex 지식(config.toml, AGENTS.md, 샌드박스, MCP/Skills), ② 엔지니어링으로서의 문서 사이트(VuePress 2, theme-hope, 커스텀 SEO, Vercel 배포).
트렌딩 이유 · 경쟁 대비 장점.
2026년 들어 "코딩 에이전트"는 폭발적으로 늘었지만(Claude Code·Codex·Gemini CLI·opencode…), 사람들이 막상 켜면 길을 잃는다. 입구가 너무 많고, 설정(config.toml)·권한(샌드박스)·프로젝트 규칙(AGENTS.md)·확장(MCP/Skills) 개념이 처음엔 안개 같다. CodexGuide가 트렌딩에 오른 이유는 정확히 이 빈틈을 메우기 때문이다. 세 가지로 정리된다. 첫째, "명령어 치트시트"가 아니라 "실전 과업 중심"이다. 둘째, 16개의 실제 케이스(PPT 생성·Figma 읽기·CI 자동수정·임상 문헌 리뷰…)로 "그래서 뭘 할 수 있는데?"에 답한다. 셋째, 공식 자료 우선 + 최종 확인 날짜 명시로 신뢰도를 관리한다.
| 비교 항목 | 흩어진 자료/공식문서 | CodexGuide |
|---|---|---|
| 구성 원리 | 기능별 레퍼런스 나열 | 실전 과업 중심(시작→교부→사용→사례) |
| 입구 선택 | 각자 알아서 | CLI·App·Cloud·IDE·ChatGPT 입구 지도 제공 |
| 대상 독자 | 주로 개발자 | 개발자+창작자+연구자+팀 리더+비개발 업무 |
| 실전성 | 추상 개념 위주 | 16개 복제 가능한 케이스 + 검증 방법 |
| 신뢰 관리 | 작성 시점 불명 | "최종 핵심 확인 날짜" 명시, 공식 우선 |
| 접근성 | 검색 흩어짐 | 전체 검색·사이드바·RSS 갖춘 단일 사이트 |
Codex는 데스크탑 App, CLI, Cloud, IDE 확장, ChatGPT 모바일까지 입구가 많다. 각 입구는 권한 모델·사용 장면·강점이 다른데, 공식 문서는 기능별로 흩어져 있어 초보자가 "내 상황엔 뭐"를 판단하기 어렵다. 게다가 가격·가용성·정책은 자주 바뀌어, 작성 시점이 불명한 블로그는 금세 틀린 정보가 된다.
① 입구 지도(platform/)로 상황별 추천을 먼저 주고 → ② 핵심 페이지마다 "최종 핵심 확인 날짜"(예: 2026-05-27)를 달아 정보의 신선도를 드러내고 → ③ 16개 recipes로 "한 문장으로 PPT 생성", "CI 실패 자동 수정" 같은 결과물을 직접 보여준다. 학습자가 "이게 진짜 되는구나"를 확인하고 모방할 수 있게 설계됐다.
개발 관점에서 또 하나의 매력은 "잘 만든 문서 사이트의 레퍼런스 구현"이라는 점이다. JSON-LD 구조화 데이터, OGP, 사이트맵 클린 URL 재작성, 클라이언트 사이드 전문 검색, RSS/Atom/JSON 피드, 카피라이트 자동 삽입 — 블로그·기술 문서를 직접 만들려는 사람에게는 그대로 베껴 쓸 수 있는 설정 모음이다.
이 레포를 떠받치는 부품들 — 빌드·테마·플러그인·배포.
일반 앱과 달리 이 레포엔 "백엔드 서버"가 없다. 대신 빌드 타임에 모든 페이지를 굽고, CDN(Vercel)에 정적 파일로 올린다. 그래서 스택은 "콘텐츠 → 빌드 → 배포" 파이프라인으로 읽는 게 정확하다.
| 부품 | 버전 | 역할 |
|---|---|---|
| VuePress | 2.0.0-rc.28 | 마크다운 → 정적 사이트로 굽는 핵심 엔진 |
| @vuepress/bundler-vite | 2.0.0-rc.28 | 번들러로 Vite 사용(빠른 개발 서버·HMR) |
| Vue | ^3.5.26 | 페이지를 그리는 프론트엔드 프레임워크(VuePress의 토대) |
| vuepress-theme-hope | 2.0.0-rc.106 | 문서 테마 + 수십 개 기능을 묶은 올인원 테마 |
| sass-embedded | ^1.97.2 | SCSS 스타일 컴파일(styles/index.scss) |
2.0.0-rc.28은 "2.0 정식 전 28번째 후보"라는 뜻. VuePress 2가 아직 정식(GA) 전이라 rc를 쓰며, 이런 프로젝트는 버전 고정(lockfile)이 특히 중요하다 — 그래서 pnpm-lock.yaml과 --frozen-lockfile이 등장한다.| 플러그인 | 무엇을 하나 |
|---|---|
| @vuepress/plugin-slimsearch | 빌드 때 검색 인덱스를 만들어, 서버 없이 브라우저에서 전체 검색(한글/중문 placeholder까지 설정) |
| @vuepress/plugin-feed | RSS·Atom·JSON 피드 자동 생성(구독·재배포용) |
| theme-hope: copyCode | 코드 블록에 복사 버튼 자동 추가 |
| theme-hope: copyright | 100자 이상 본문 복사 시 출처·라이선스 자동 첨부(표절 방지) |
| theme-hope: seo | OGP·트위터카드·JSON-LD 구조화 데이터 자동 주입 |
| theme-hope: sitemap | sitemap.xml 생성(검색엔진 크롤링용) |
| @vercel/analytics | 운영 도메인에서만 방문 분석 주입(클라이언트 enhance) |
| Vercel | 정적 사이트 호스팅. vercel.json으로 빌드·출력 디렉토리·보안 헤더 제어 |
| pnpm 10.33.0 | 의존성 설치(디스크 효율↑). --frozen-lockfile로 재현성 보장 |
| Node >=22 <25 | package.json engines + .nvmrc(22)로 런타임 고정 |
| TypeScript | .vuepress/*.ts 설정을 타입 안전하게 작성 |
VuePress = 인쇄소, theme-hope = 책 디자인 템플릿, 플러그인 = 인쇄 옵션(색인·목차·QR), Vercel = 서점. 당신(저자)은 docs/ 폴더에 원고(.md)만 넣는다. 인쇄소(VuePress)가 디자인 템플릿(theme-hope)을 입혀 책을 찍고, 색인·검색·RSS 같은 옵션을 붙인 뒤, 서점(Vercel)에 진열한다. 원고만 고치면 나머지는 자동이다.
콘텐츠가 사이트가 되는 흐름 + 핵심 설계 패턴.
이 레포에서 가장 배울 만한 코드가 docs/.vuepress/seo.ts다. 모든 페이지의 메타 설명을 한 파일의 객체(pageDescriptions)에 모아두고, 빌드 훅(extendsPage)이 각 페이지에 자동 주입한다. 글마다 frontmatter에 description을 손으로 쓰는 대신, "경로 → 설명" 맵 하나로 관리하는 구조다.
// seo.ts — 경로별 메타 설명을 한 곳에 모음(단일 진실원)
export const pageDescriptions: Record<string, string> = {
"/": siteDescription,
"/configuration/config-file.html":
"Codex config.toml 配置指南,说明模型、沙盒、审批、profiles、MCP …",
"/guide/15-agents-md.html":
"AGENTS.md 项目规则指南,说明如何写入项目命令、代码风格 …",
// …60+ 경로
};
// 경로를 .html/슬래시 변형까지 정규화해 안전하게 조회
export const getPageDescription = (path: string): string => {
const cleanPath = toCleanPath(path);
// 정확 일치 → 정규화 일치 → 디렉토리 일치 → 폴백(siteDescription)
return pageDescriptions[path] ?? pageDescriptions[cleanPath]
?? pageDescriptions[directoryPath] ?? siteDescription;
};
① 모든 페이지가 최소 1개의 의미 있는 description을 보장받는다(폴백 덕분에 누락 0). ② 메타 문구를 한 파일에서 일괄 점검·수정할 수 있다. ③ config.ts의 extendsPage와 theme.ts의 seo 플러그인이 같은 함수를 호출해, 본문·OGP·트위터카드·JSON-LD의 설명이 항상 일치한다.
검색엔진에게 "이 사이트는 단순 페이지가 아니라 강의·학습 자료"라고 알려주는 구조화 데이터를 theme.ts에서 동적으로 만든다. 홈페이지면 Organization + WebSite + LearningResource/Course 그래프를, 내부 페이지면 일반 article 그래프를 주입한다.
// theme.ts — 홈에서만 Course 스키마를 주입(teaches 배열로 커리큘럼 명시)
{
"@type": ["LearningResource", "Course"],
name: "CodexGuide:OpenAI Codex 中文教程与实战指南",
educationalLevel: "Beginner to Intermediate",
teaches: [
"Codex 桌面 App 使用", "Codex CLI 安装与登录",
"OpenAI Codex 配置", "AGENTS.md 项目规则", "Codex 实战案例",
],
provider: { "@id": `${siteUrl}/#organization` },
}
cleanUrls: true(주소에서 .html 제거)를 쓰면, 자동 생성된 sitemap.xml엔 여전히 .html이 남는 불일치가 생긴다. CodexGuide는 직접 만든 작은 플러그인으로 빌드 직후(onGenerated) 사이트맵의 URL을 정규식으로 다시 써서 이 틈을 메운다. "프레임워크가 안 해주는 한 끗"을 훅으로 보완하는 전형적 패턴이다.
// config.ts — 빌드가 끝난 뒤 sitemap.xml 의 URL 을 cleanUrls 로 재작성
const rewriteSitemapCleanUrlsPlugin = {
name: "codexguide-clean-sitemap-urls",
onGenerated: (app) => {
const sitemap = readFileSync(app.dir.dest("sitemap.xml"), "utf-8");
const cleaned = sitemap.replace(/<loc>(https:\/\/codexguide\.ai[^<]*)<\/loc>/gu,
(_, url) => `<loc>${toSiteUrl(new URL(url).pathname)}</loc>`);
writeFileSync(app.dir.dest("sitemap.xml"), cleaned);
},
};
어디에 무엇이 있는가 — 설정(.vuepress)과 콘텐츠(docs)의 분리.
구조의 핵심은 "두뇌(.vuepress)와 몸통(콘텐츠 폴더)의 분리"다. .vuepress/는 사이트가 어떻게 보이고 작동하는지(설정·테마·SEO)를, 나머지 7개 폴더는 무엇을 가르치는지(콘텐츠)를 담당한다. 새 글을 추가할 때는 해당 콘텐츠 폴더에 .md를 넣고 sidebar/navbar에 한 줄 등록하면 끝이다.
---로 감싼 메타데이터 블록. 제목·설명·홈 여부·리다이렉트 같은 "글의 속성"을 키-값으로 적는다. 예: home: true(홈페이지), redirectFrom: [...](옛 URL 리다이렉트). VuePress가 이걸 읽어 레이아웃을 결정한다.이 레포에서 실제로 무엇을 배울 수 있는가. 두 갈래로 읽자.
블로그·기술문서를 직접 만들려는 사람에게 이 레포는 살아 있는 보일러플레이트다. config.ts→theme.ts→navbar/sidebar/seo로 이어지는 구성 분리, 번들러를 Vite로 지정하는 방법, 테마 플러그인 토글(copyCode·copyright·feed·slimsearch)을 그대로 따라 할 수 있다.
pnpm add -D vuepress@2.0.0-rc.28 vuepress-theme-hope로 똑같은 뼈대를 깔고, docs/index.md 하나만 넣어 pnpm dev로 띄워 보기."검색에 잘 걸리는 사이트"가 실제로 어떻게 구현되는지를 코드로 본다. 경로별 description 단일 맵, 홈에서만 주입하는 LearningResource/Course 스키마, cleanUrls와 사이트맵 불일치를 onGenerated 훅으로 교정하는 패턴 — 프레임워크가 다 못 해주는 부분을 직접 메우는 실전 감각을 얻는다.
seo.ts의 toCleanPath()를 따로 떼어 /guide/00-overview.html, /platform/ 같은 입력에 어떤 출력이 나오는지 단위 테스트(Vitest)로 검증해 보기.--frozen-lockfile, engines: node >=22 <25, .nvmrc, rc 버전 고정이 왜 한 세트로 움직이는지 이해한다. vercel.json에서 빌드/출력/보안 헤더(X-Content-Type-Options: nosniff)를 선언적으로 다루는 법도 배운다.
~/.codex/config.toml은 Codex CLI의 "개인 조종석"이다. 핵심 3축은 모델(속도·비용·추론 깊이), 샌드박스(읽기전용/작업영역쓰기), 승인 정책(위험 명령 확인)이다. 작업 성격별로 profiles를 나눠두는 게 정석이다.
# 학습용 예시 — 실제 필드는 공식 config reference 기준
model = "gpt-5.1-codex-max"
approval_policy = "on-request"
sandbox_mode = "workspace-write"
[profiles.readonly] # 낯선 레포 분석용(안전)
sandbox_mode = "read-only"
approval_policy = "on-request"
[profiles.coding] # 일상 코딩용
sandbox_mode = "workspace-write"
approval_policy = "on-request"
새 대화는 항상 백지 컨텍스트로 시작한다. AGENTS.md는 저장소 루트에 두는 프로젝트 설명서로, Codex가 작업 전 먼저 읽어 패키지 매니저·테스트 명령·금지 디렉토리·커밋 전 검사를 알게 한다. 팀 공유 규칙(AGENTS.md, 커밋) 과 개인 로컬 규칙(AGENTS.local.md, gitignore)을 분리하는 패턴이 인상적이다.
| 파일 | 역할 | Git |
|---|---|---|
| AGENTS.md | 팀 공유 규칙·명령·경계 | 커밋 |
| AGENTS.local.md | 개인 경로·임시 제약 | ignore |
| AGENTS.override.md | 도구가 만든 병합 결과 | ignore |
파일 읽기/쓰기, 네트워크 접근, 위험 명령에 대한 인간 확인(approval) 정책을 이해하는 건 에이전트 시대의 필수 안전 감각이다. 거기에 MCP(외부 도구 연결)·Skills(흐름 고착화)·Subagents(복잡 작업 분할)를 언제 쓰는지도 정리돼 있다.
이 레포를 직접 띄우려면 / Codex를 쓰려면.
| 항목 | 요구 |
|---|---|
| Node.js | 22.x (engines: >=22 <25, .nvmrc=22) |
| 패키지 매니저 | pnpm 10.33.0 (packageManager 명시) |
| 메모리/디스크 | 일반 정적 사이트 수준(특별 요구 없음). 단, 이미지 수백 장 + 검색 인덱스 빌드라 첫 빌드는 다소 시간 소요 |
| OS | 무관(macOS·Windows·Linux). Vercel/CI도 동일 |
# 1) 의존성 설치(재현 가능)
pnpm install --frozen-lockfile
# 2) 개발 서버(HMR) — 0.0.0.0 바인딩이라 같은 네트워크에서 접속 가능
pnpm dev
# 3) 정적 사이트 빌드 → docs/.vuepress/dist/
pnpm build
# 4) 캐시/임시/dist 정리
pnpm clean
| 계정/구독 | ChatGPT Plus/Pro(가용성·가격은 OpenAI 공식 기준, 자주 변동) |
| CLI | Node 환경에서 Codex CLI 설치·로그인 |
| 입구별 | 데스크탑 App(macOS/Windows), VS Code 확장, Cloud(GitHub 연결) |
이 레포는 Codex의 기능·가격·가용성을 다루는데, 이런 정보는 빠르게 바뀐다. 콘텐츠 곳곳의 "최종 핵심 확인 날짜"(예: 2026-05-27)는 그 시점 기준이라는 뜻이다. 실제 설정·정책은 항상 OpenAI 공식 문서로 재확인하는 게 안전하다. (커뮤니티 가이드 = 공식이 아님)
난이도별 — 읽기만 하지 말고 손으로.
git clone → pnpm install --frozen-lockfile → pnpm dev로 codexguide.ai를 내 PC에 띄운다. 그다음 docs/practice/에 my-note.md를 추가하고 sidebar/index.ts의 /practice/ 배열에 한 줄 등록해, 사이드바에 새 항목이 뜨는지 확인한다.
toCleanPath()와 getPageDescription()를 떼어내, "/guide/00-overview.html"·"/configuration/"·"/?search=x" 등 다양한 입력에 대한 출력을 Vitest로 검증한다. 폴백이 정말 모든 페이지에 description을 보장하는지 확인.
Codex CLI에서 readonly/coding/review 세 프로필을 만들고, 같은 작업("이 실패 테스트 고쳐줘")을 각 프로필로 돌려 샌드박스·승인 동작 차이를 직접 비교한다. 위험 명령에서 승인 프롬프트가 뜨는지 확인.
실제 사이드 프로젝트 루트에 AGENTS.md를 써서 "패키지 매니저는 pnpm, 테스트는 pnpm test, dist/는 수정 금지, 커밋 전 lint" 같은 규칙을 명시한다. 규칙 적용 전/후로 같은 작업을 시켜 결과 차이를 기록한다. 개인 규칙은 AGENTS.local.md로 분리해 gitignore.
recipes/github-actions-ci-fix.md(CI 실패 자동 수정)나 playwright-mcp.md(브라우저 조작) 중 하나를 골라, 내 환경에서 실제로 재현하고 막힌 지점·해결을 한국어 메모로 남긴다. 가능하면 그 메모를 PR로 기여.
이 레포를 발판 삼아 4주 코스. 두 트랙을 병행한다.
| 주차 | 문서 사이트 트랙 | Codex 트랙 |
|---|---|---|
| 1주차 기초 | VuePress 2 공식 문서 + 빈 사이트 구축. 마크다운·frontmatter·navbar/sidebar 구조 익히기 | Codex 설치(App 또는 CLI)·로그인·첫 번째 저위험 작업 1회 완주(guide 00~06) |
| 2주차 설정 | theme-hope 플러그인(copyCode·copyright·feed·slimsearch) 켜고 끄며 차이 관찰. SCSS 커스터마이즈 | config.toml 프로필 3종 + 샌드박스/승인 체험(configuration/config-file·security-admin) |
| 3주차 심화 | SEO 엔지니어링: OGP·JSON-LD·sitemap. onGenerated 같은 빌드 훅으로 후처리 직접 작성 | AGENTS.md 작성 + MCP/Skills/Subagents 연결(configuration/mcp-skills-subagents) |
| 4주차 실전 | Vercel 배포 + 커스텀 도메인 + analytics. CI에서 --frozen-lockfile 빌드 자동화 | recipes 2~3편 재현(CI 자동수정·Figma·Notion 등) + 팀 playbook 시도 |
CodexGuide의 진짜 교훈은 "좋은 도구(Codex)로 좋은 결과물(문서 사이트)을 만드는 루프" 자체다. 3주차쯤이면 "VuePress 사이트를 Codex에게 시켜서 고치게" 할 수 있다 — 즉 두 트랙이 만나 에이전트로 내 프로젝트를 키우는 실전 경험이 된다.
이 레포를 읽을 때 자주 나오는 용어.
Organization이고 Course이며 무엇을 teaches한다. 검색 결과의 리치 스니펫·신뢰도에 기여.og:title·og:description·og:image 등..html을 떼는 옵션(/guide/00-overview). sitemap.xml=사이트의 모든 URL 목록으로, 검색엔진 크롤러가 참고한다. 둘이 어긋나면 후처리로 맞춰야 한다.pnpm-lock.yaml은 의존성의 정확한 버전을 박제한 파일. --frozen-lockfile은 "lockfile을 절대 수정하지 말고 그대로 설치"라는 뜻 → CI·배포에서 재현 가능한 빌드를 보장.CLAUDE.md와 같은 계열.)~/.codex/config.toml). 샌드박스=AI가 읽고 쓸 수 있는 범위(read-only / workspace-write). 승인 정책=위험 명령에 인간 확인을 요구할지(on-request 등). 안전의 핵심 손잡이.config.toml 안에서 작업 성격별로 묶어 둔 설정 세트. readonly(분석)·coding(구현)·review(검토)처럼 나눠두고 codex --profile readonly로 골라 쓴다.원본과 더 깊이 파고들 자료.
· GitHub 저장소: github.com/freestylefly/CodexGuide
· 온라인 사이트: codexguide.ai (검색·사이드바·스크린샷 완비)
· 학습 경로(overview): codexguide.ai/guide/00-overview
· VuePress 2: v2.vuepress.vuejs.org
· vuepress-theme-hope: theme-hope.vuejs.press
· Vite: vitejs.dev · pnpm: pnpm.io
· Vercel 배포: vercel.com/docs
· schema.org(JSON-LD): schema.org
· OpenAI Codex 제품: openai.com/codex
· Codex CLI 시작하기: help.openai.com
· Codex 설정·AGENTS.md 문서: developers.openai.com/codex
· openai/codex 저장소: github.com/openai/codex