프로젝트 구조
kindie 프로젝트의 디렉토리 구조와 핵심 파일을 설명합니다.
디렉토리 구조
├── actions/ 서버 액션 (auth, payments, profile, admin)
├── app/
│ ├── (marketing)/ 공개 페이지 (랜딩, 블로그, 문서, 가격)
│ ├── (auth)/ 인증 페이지 (로그인, 회원가입, 인증)
│ ├── (app)/ 보호된 페이지 (대시보드, 설정, 관리자)
│ └── api/ API 라우트 (SMS, 주소검색, 웹훅)
├── components/
│ ├── ui/ shadcn/ui 기본 컴포넌트
│ ├── auth/ 인증 폼 컴포넌트
│ ├── payments/ 결제 관련 컴포넌트
│ ├── dashboard/ 대시보드 레이아웃 컴포넌트
│ ├── marketing/ 랜딩 페이지 섹션
│ ├── shared/ 공유 컴포넌트 (Navbar, Footer)
│ └── email/ 이메일 템플릿 (React Email)
├── content/
│ ├── blog/ 블로그 포스트 (.mdx)
│ └── docs/ 문서 (.mdx)
├── lib/
│ ├── auth.ts Auth.js 설정
│ ├── blog.ts 블로그 파싱
│ ├── docs.ts 문서 파싱
│ ├── integrations.ts 기능 활성화 상태
│ ├── utils.ts 유틸리티 함수
│ ├── db/ Drizzle ORM (스키마, 쿼리, 시드)
│ ├── payments/ PortOne 결제 로직
│ ├── sms/ Solapi SMS 로직
│ ├── email/ Resend 이메일 로직
│ ├── korean/ 한국 특화 API (주소검색)
│ └── i18n/ 다국어 (ko, en)
├── config.ts 기능 토글, 플랜, 사이트 설정
└── types/ TypeScript 타입 정의App Router 라우트 그룹
kindie는 Next.js App Router의 라우트 그룹을 사용하여 레이아웃을 분리합니다:
(marketing) — 공개 페이지
Navbar + Footer가 포함된 마케팅 레이아웃입니다.
/— 랜딩 페이지/blog— 블로그/docs— 문서/pricing— 가격 페이지/legal/*— 약관, 개인정보처리방침
(auth) — 인증 페이지
미니멀한 인증 전용 레이아웃입니다.
/login— 로그인/signup— 회원가입/verify— 이메일/SMS 인증
(app) — 보호된 페이지
사이드바 + 헤더가 포함된 앱 레이아웃입니다. 로그인 필수.
/dashboard— 대시보드/settings/profile— 프로필 설정/settings/billing— 결제 관리/admin/*— 관리자 (역할 기반 접근)
핵심 파일
config.ts
모든 설정의 중앙 허브입니다. 사이트 정보, 플랜, 기능 토글, 라우트 정의가 여기에 있습니다. 자세한 내용은 기능 토글 문서를 참고하세요.
lib/integrations.ts
config.ts의 기능 플래그와 환경변수를 결합하여 실제로 사용 가능한 기능을 판단합니다. 예를 들어 카카오 로그인은 features.auth.kakao가 true이고, AUTH_KAKAO_ID와 AUTH_KAKAO_SECRET이 설정된 경우에만 활성화됩니다.
lib/auth.ts
Auth.js v5 설정 파일입니다. Credentials는 항상 포함되고, Google/Kakao/Naver는 features.auth.* 토글과 각 환경변수 유무에 따라 동적으로 등록됩니다.