최종 업데이트: 2026-02-08
- 프로젝트명: 해달에듀 파이썬 (EBS 이솦과 함께하는 파이썬)
- 대상: 파이썬을 공부하려는 초중고 학생
- 목적: 교육과정 안내 및 차시별 코드 학습 제공
- 현재 상태: Phase 1~2 완료, Phase 3 진행 중
홈페이지
├── 메인 페이지 (교육과정 개요)
├── Part 1. 파이썬 기초 문법 (1~10차시)
│ ├── 1차시. 파이썬의 이해와 설치
│ ├── 2차시. 수치 자료형과 변수
│ ├── ...
│ └── 10차시. 개념 복습
├── Part 2. 파이썬 라이브러리 활용 (11~18차시)
│ ├── 11차시. random 모듈
│ ├── ...
│ └── 18차시. 미니 프로젝트 - 타자 게임
├── Part 3. 웹사이트 만들기 (19~21차시)
├── Part 4. 데이터 분석 (22~24차시)
└── Part 5. 알고리즘 & 자료구조 (25~31차시)
- 교육과정 소개 (타겟, 구성, 학습 목표)
- 전체 커리큘럼 요약 (5개 Part)
- 각 Part로 빠르게 이동하는 네비게이션 카드
- 차시 제목 및 설명
- 학습 목표
- 코드 뷰어 (탭 구조)
- 개념 학습 코드
- 실습 코드 A
- 실습 코드 B (있는 경우)
- 도전 과제
- 정답 (토글로 숨김 처리)
- 코드 복사 버튼
- 구문 하이라이팅 (Python)
- 프레임워크: Next.js 16.1.6 (App Router)
- 언어: TypeScript
- React: 19.2.3
- 스타일링: Tailwind CSS 4
- 코드 하이라이팅: react-syntax-highlighter (Prism 기반, oneDark 테마)
- 배포: Vercel (예정)
반응형 디자인- 모바일/태블릿/데스크톱 지원 ✅ 구현 완료 (1~3컬럼 반응형 그리드)코드 뷰어- 구문 하이라이팅, 줄 번호 표시 ✅ 구현 완료 (Prism oneDark 테마)코드 복사- 클립보드 복사 버튼 ✅ 구현 완료 (복사 피드백 포함)네비게이션- Part/차시별 이동 ✅ 구현 완료 (사이드바 + 이전/다음 + 브레드크럼)- 진행률 표시 - 현재 차시 위치 표시 ❌ 미구현
- 다크 모드 - 학습 환경에 따른 테마 전환 ❌ 미구현
- 검색 기능 - 키워드로 차시/코드 검색 ❌ 미구현
- 북마크 - 학습 중인 차시 저장 (로컬스토리지) ❌ 미구현
- 코드 실행 - Python 온라인 실행 연동 (Replit 등) ❌ 미구현
- Primary: #7232d8 (해달 퍼플)
- CTA 버튼: #ffd506 (해달 옐로우)
- Part별 액센트 컬러:
- Part 1: #ffd506 (옐로우)
- Part 2: #7232d8 (퍼플)
- Part 3: #50a5dc (블루)
- Part 4: #d069a9 (핑크)
- Part 5: #4d2c77 (다크 퍼플)
- Code Block: oneDark 테마 (다크 배경)
┌─────────────────────────────────────────┐
│ 헤더 (로고, 네비게이션) │
├─────────────────────────────────────────┤
│ 사이드바 │ 메인 컨텐츠 │
│ - Part 목록 │ - 차시 제목 │
│ - 차시 목록 │ - 설명 │
│ │ - 코드 탭 뷰어 │
│ │ - 이전/다음 버튼 │
├─────────────────────────────────────────┤
│ 푸터 (저작권, EBS 링크) │
└─────────────────────────────────────────┘
website/
├── public/
│ ├── file.svg # Next.js 기본 에셋
│ ├── globe.svg
│ ├── next.svg
│ ├── vercel.svg
│ └── window.svg
├── src/
│ ├── app/
│ │ ├── layout.tsx # 루트 레이아웃 (메타데이터, 폰트, 헤더)
│ │ ├── page.tsx # 메인 페이지 (히어로, 기능소개, 커리큘럼)
│ │ ├── globals.css # 글로벌 스타일 (Tailwind)
│ │ ├── robots.ts # 검색엔진 크롤러 안내 (/robots.txt)
│ │ ├── sitemap.ts # 동적 사이트맵 생성 (/sitemap.xml)
│ │ └── lesson/
│ │ └── [id]/
│ │ └── page.tsx # 차시별 동적 페이지 (SSG + generateMetadata)
│ ├── components/
│ │ ├── Header.tsx # 스티키 헤더 (로고, 네비게이션)
│ │ ├── Sidebar.tsx # 아코디언 사이드바 (Part/차시 목록)
│ │ ├── CodeViewer.tsx # 탭 기반 코드 뷰어 (구문 하이라이팅)
│ │ └── LessonCard.tsx # Part 카드 컴포넌트 (홈페이지용)
│ └── data/
│ └── curriculum.ts # 전체 커리큘럼 데이터 (5파트, 31차시)
├── package.json
├── next.config.ts
├── postcss.config.mjs
├── eslint.config.mjs
└── tsconfig.json
- 프로젝트 세팅 (Next.js 16 + Tailwind CSS 4 + TypeScript)
- 커리큘럼 데이터 구조화 (TypeScript - 5파트, 31차시 전체 정의)
- 기본 레이아웃 (스티키 헤더, 아코디언 사이드바, 푸터)
- 메인 페이지 구현 (히어로 섹션, 기능 카드 3개, Part별 커리큘럼 카드)
- 차시별 상세 페이지 구현 (동적 라우팅 + SSG
generateStaticParams) - 코드 뷰어 컴포넌트 (Prism 구문 하이라이팅, 줄 번호 표시)
- 코드 탭 전환 기능 (개념/실습A/실습B/도전/정답 5개 탭)
- 코드 복사 기능 (클립보드 복사 + 시각적 피드백)
- 정답 숨김 처리 (버튼 클릭 시 정답 코드 공개)
- 빌드 타임에 .py 파일 읽기 (서버 컴포넌트에서
fs.readFile)
- 반응형 디자인 최적화 (1~3컬럼 반응형 그리드)
- 이전/다음 차시 네비게이션
- 브레드크럼 네비게이션
- SEO 최적화
- 메타데이터 템플릿 (title template, OG, Twitter Card, keywords, canonical)
- 차시별 동적 메타데이터 (
generateMetadata) - robots.txt (
/robots.txt) - 사이트맵 (
/sitemap.xml- 홈 + 31차시 동적 생성)
- Vercel 배포 (
https://python.haedal.io) - Part 2~5 콘텐츠 활성화 (현재 "준비중" 상태)
// data/curriculum.ts
export const curriculum = {
parts: [
{
id: 1,
title: "Part 1. 파이썬 기초 문법",
description: "파이썬의 기본 문법과 핵심 개념을 학습합니다.",
lessons: [
{
id: 2,
title: "수치 자료형과 변수",
description: "정수, 실수, 변수의 개념과 산술 연산을 배웁니다.",
codes: {
concept: "02-01-numbers_concept.py",
practiceA: "02-02-practice_a_calc.py",
practiceB: "02-03-practice_b_bmi.py",
challenge: "02-04-challenge.py",
answer: "02-05-answer.py"
}
},
// ...
]
},
// ...
]
};| 항목 | 값 |
|---|---|
| 플랫폼 | Vercel (무료) |
| Framework Preset | Next.js |
| Root Directory | website |
| Build Command | npm run build |
| Output Directory | .next |
| Node.js Version | 20.x |
- 스티키 헤더 + backdrop blur 효과
- 🐍 로고 + "해달에듀 파이썬" 브랜딩
- "시작하기" CTA 버튼 (#ffd506)
- 클라이언트 컴포넌트 (상태 관리)
- 5개 Part 아코디언 펼침/접기
- 현재 차시 하이라이트 (옐로우 배경)
- Part 1 기본 펼침 상태
- 5개 탭 (개념/실습A/실습B/도전/정답)
- Prism oneDark 테마 구문 하이라이팅
- 줄 번호 표시
- 클립보드 복사 (피드백 포함)
- 정답 탭 숨김 → 클릭 시 공개
- Part별 아이콘 (📚🧰🌐📊🧠)
- Part별 고유 액센트 컬러
- Part 1만 클릭 가능, 나머지 "준비중" 표시
- 기존
code/폴더의 .py 파일들을 빌드 타임에 서버 컴포넌트에서 직접 읽어 활용 curriculum.ts에 31차시 전체 데이터 구조화 완료generateStaticParams()로 전체 차시 SSG 생성- 학생 친화적인 UI/UX 구현 (직관적인 네비게이션, 컬러 코딩)
- Part 2~5는 데이터 정의 완료, UI에서 "준비중" 상태로 비활성화