Skip to content

Commit ac34370

Browse files
jammy0903claude
andcommitted
docs: 이중 실행 구조(Lesson/Playground) 아키텍처 문서 업데이트 + C/Python 레슨 품질 스캔 결과 반영
- CLAUDE.md, architecture.md, project_overview.md: Lesson(사전 스크립팅) vs Playground(동적 실행) 이중 구조 설명 추가 - 배포 아키텍처를 실제 환경(Render)에 맞게 수정 - C 레슨 9건 데이터 품질 수정 (변수 누락, explanation 추가, 한국어 번역) - Python 레슨 2건 한국어 번역 (py-3-5, py-3-6) - C/Python 레슨 스캔 계획 및 결과 문서 추가 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent d6ab657 commit ac34370

20 files changed

Lines changed: 1616 additions & 149 deletions

.claude/CLAUDE.md

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,40 @@
44

55
## 🎯 프로젝트 개요
66

7-
**CodeInsight** - 코드 실행 학습 플랫폼
7+
**CodeInsight** - 코드 실행 시각화 학습 플랫폼
88

99
### 핵심 목표
10-
- C 언어 메모리 시각화 학습
11-
- 코드 실행 단계별 추적
10+
- 코드 실행 과정을 단계별로 시각화 (메모리, 변수, 콜스택)
11+
- C, Python, JavaScript, Java 다국어 지원
1212
- 인터랙티브한 교육 경험 제공
1313

14+
### 🏗️ 핵심 아키텍처: 이중 실행 구조
15+
16+
이 앱은 **두 가지 실행 경로**를 가진다:
17+
18+
| 모드 | 데이터 출처 | 시뮬레이터 사용 | 설명 |
19+
|------|------------|---------------|------|
20+
| **Lesson** | 사전 제작 JSON | ❌ 불필요 | 단계별 시각화 데이터가 JSON에 미리 스크립팅됨 |
21+
| **Playground** | 동적 실행 | ✅ 사용 | 사용자 코드를 시뮬레이터가 실행하여 동적으로 시각화 생성 |
22+
23+
```
24+
[ Lesson 모드 ]
25+
DB(JSON) → 프론트엔드 로드 → 사전 스크립팅된 단계별 시각화 표시
26+
- 시뮬레이터 미지원 개념(yield, decorator, async 등)도 교육 가능
27+
- 교육 품질을 직접 통제 가능
28+
29+
[ Playground 모드 ]
30+
사용자 코드 → 백엔드 → 시뮬레이터 실행 → JSON 변환 → 동적 시각화
31+
- 자유 코드 입력 가능
32+
- 시뮬레이터가 지원하는 범위 내에서 동작
33+
```
34+
1435
### 기술 스택
1536
- **Frontend**: React 18, Vite, TypeScript, Framer Motion
1637
- **Backend**: Node.js, Express, Prisma ORM
1738
- **Database**: PostgreSQL (Neon)
18-
- **Simulators**: JDI (Java), Python `sys.settrace()`, Node.js VM, C (GCC)
39+
- **Simulators**: Python `sys.settrace()`, Node.js VM, C (Emscripten 검증 + 인터프리터)
40+
- **Lesson Data**: JSON 파일 (`packages/backend/prisma/content/`) → DB seed로 자동 동기화
1941

2042
---
2143

.claude/context/architecture.md

Lines changed: 67 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,54 @@
5959

6060
---
6161

62-
## 📊 데이터 흐름
62+
## 📊 데이터 흐름 (이중 실행 구조)
6363

64-
### 1. 코드 실행 흐름
64+
### ⭐ 핵심 개념: 두 가지 실행 경로
65+
66+
이 앱은 **Lesson****Playground** 두 가지 모드가 별개의 데이터 흐름을 가진다.
67+
68+
### 1. Lesson 모드 (사전 스크립팅 — 시뮬레이터 미사용)
69+
70+
```
71+
┌──────────────────────────────────────────┐
72+
│ 사용자: 레슨 선택 │
73+
└────────────────┬─────────────────────────┘
74+
75+
76+
┌───────────────┐
77+
│ Frontend │
78+
│ GET /lessons │
79+
└───────┬───────┘
80+
81+
82+
┌───────────────────────────┐
83+
│ Backend │
84+
│ Prisma → DB 조회 │
85+
│ (JSON seed 데이터 반환) │
86+
└───────┬───────────────────┘
87+
│ HTTP 200
88+
│ { steps, quiz, ... }
89+
90+
┌───────────────────────────┐
91+
│ Frontend │
92+
│ - 사전 스크립팅된 steps │
93+
│ - 변수/메모리 상태 표시 │
94+
│ - explanation 표시 │
95+
│ - 퀴즈 & keyTakeaway │
96+
└───────┬───────────────────┘
97+
98+
99+
┌───────────────┐
100+
│ 사용자 화면 │
101+
│ - 단계별 학습 │
102+
│ - 퀴즈 풀이 │
103+
└───────────────┘
104+
105+
※ 시뮬레이터 없이 동작 — JSON에 모든 시각화 데이터가 미리 정의됨
106+
※ 시뮬레이터 미지원 개념(yield, decorator, async 등)도 교육 가능
107+
```
108+
109+
### 2. Playground 모드 (동적 실행 — 시뮬레이터 사용)
65110

66111
```
67112
┌─────────────────────────────────────┐
@@ -90,16 +135,16 @@
90135
│ (언어별) │
91136
└───────┬──────────┘
92137
93-
┌────────────┼────────────┬──────────
94-
│ │ │
95-
(C) (Py) (JS) (Java)
96-
│ │ │
97-
▼ ▼ ▼
98-
GCC Python Node JDI
99-
+ + + +
100-
디버거 sys.trace VM 디버거
101-
│ │ │
102-
└────────────┼────────────┴──────────
138+
┌────────────┼────────────┐
139+
│ │ │
140+
(C) (Py) (JS)
141+
│ │ │
142+
▼ ▼ ▼
143+
Emscripten Python Node
144+
검증 + sys.trace VM
145+
인터프리터
146+
│ │ │
147+
└────────────┼────────────┘
103148
104149
105150
┌───────────────┐
@@ -382,19 +427,19 @@ interface PlaygroundStore {
382427
## 🚀 배포 아키텍처
383428

384429
```
385-
GitHub Repo
430+
GitHub Repo (main branch push)
386431
387-
GitHub Actions (CI)
388-
├─ 테스트
389-
├─ 빌드
390-
└─ 검증
391-
392-
Railway (CD)
393-
├─ Frontend → Vercel
394-
├─ Backend → Railway
395-
└─ Database → Neon
432+
Render (자동 배포)
433+
├─ Frontend → Render Static Site
434+
├─ Backend → Render Docker
435+
│ ├─ prisma migrate deploy
436+
│ ├─ prisma db seed (JSON → DB 동기화)
437+
│ └─ node dist/app.js
438+
└─ Database → Neon PostgreSQL
396439
397440
프로덕션 서버
441+
442+
※ 레슨 JSON 파일 수정 후 push하면 자동으로 DB에 반영됨
398443
```
399444

400445
---

.claude/context/project_overview.md

Lines changed: 116 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,34 +5,70 @@
55
**코드 실행 과정을 시각화하여 프로그래밍 학습을 돕는 플랫폼**
66

77
### 핵심 가치
8-
1. **시각화**: 코드 실행 단계별 메모리/스택/힙 상태 표시
9-
2. **인터랙티브**: 단계별 진행, 브레이크포인트, 변수 추적
8+
1. **시각화**: 코드 실행 단계별 메모리/변수/콜스택 상태 표시
9+
2. **인터랙티브**: 단계별 진행, 변수 추적, 퀴즈
1010
3. **교육 중심**: 초보자도 쉽게 이해할 수 있는 UI/UX
1111

1212
---
1313

14+
## 🏗️ 핵심 아키텍처: 이중 실행 구조
15+
16+
### 아키텍처 전환 배경
17+
18+
초기에는 시뮬레이터가 모든 코드를 동적으로 실행하여 시각화를 생성하는 단일 구조였으나, 다음 문제점들이 있었다:
19+
- 시뮬레이터가 지원하지 못하는 고급 개념(yield, decorator, async/await 등) 교육 불가
20+
- 동적 실행 결과의 교육적 품질 통제 어려움
21+
- 시뮬레이터 버그가 교육 품질에 직접 영향
22+
23+
이를 해결하기 위해 **이중 실행 구조**로 전환했다:
24+
25+
### 모드 1: Lesson (사전 스크립팅 방식)
26+
27+
```
28+
DB(JSON 파일) → API → 프론트엔드 → 사전 제작된 단계별 시각화 표시
29+
```
30+
31+
- 레슨 콘텐츠는 **JSON 파일에 단계별 시각화 데이터를 미리 스크립팅**
32+
- 시뮬레이터를 사용하지 않음 — 코드 실행 없이 JSON 데이터만 로드
33+
- 시뮬레이터가 지원 못하는 개념도 교육 가능 (수동 스크립팅)
34+
- 교육 품질을 직접 통제 (변수 상태, 설명, 퀴즈 등)
35+
- JSON 위치: `packages/backend/prisma/content/{language}/lessons/`
36+
- 배포 시 `prisma db seed`로 DB에 자동 동기화
37+
38+
### 모드 2: Playground (동적 실행 방식)
39+
40+
```
41+
사용자 코드 입력 → 백엔드 검증 → 시뮬레이터 실행 → JSON 변환 → 동적 시각화
42+
```
43+
44+
- 사용자가 자유롭게 코드를 작성하면 시뮬레이터가 실제 실행
45+
- 실행 결과를 파싱하여 동적으로 시각화 생성
46+
- 시뮬레이터가 지원하는 범위 내에서만 동작
47+
48+
---
49+
1450
## 📊 주요 기능
1551

1652
### 1. 코드 에디터
1753
- 여러 언어 지원 (C, Python, JavaScript, Java)
1854
- 구문 강조
1955
- 실시간 유효성 검사
2056

21-
### 2. 시뮬레이터
22-
- **C**: GCC + 메모리 시뮬레이션
57+
### 2. 시뮬레이터 (Playground용)
58+
- **C**: Emscripten 검증 + 인터프리터 실행 (하이브리드)
2359
- **Python**: sys.settrace() 기반
2460
- **JavaScript**: Node.js VM 기반
25-
- **Java**: JDI (Java Debug Interface) 기반
2661

2762
### 3. 시각화 엔진
28-
- 메모리 레이아웃 (스택, 힙)
29-
- 변수 값 실시간 추적
63+
- 메모리 레이아웃 (스택, 힙 - C언어)
64+
- 변수 값 단계별 추적 (Python, JS)
3065
- 콜 스택 표시
3166
- 실행 흐름 하이라이트
3267

33-
### 4. 학습 콘텐츠
34-
- 사전 제작된 레슨
35-
- 인터랙티브 문제
68+
### 4. 학습 콘텐츠 (Lesson용)
69+
- **사전 제작된 JSON 레슨** — 시뮬레이터 없이 동작
70+
- 단계별 explanation, 변수 상태, 메모리 시각화 포함
71+
- 퀴즈, misconceptions, keyTakeaway 포함
3672
- 진행 상황 추적
3773

3874
---
@@ -85,16 +121,28 @@
85121

86122
## 🗄️ 데이터 흐름
87123

124+
### Lesson 모드 (사전 스크립팅)
125+
```
126+
DB (JSON seed 데이터)
127+
128+
[Backend] GET /api/lessons/:id → 레슨 데이터 반환
129+
130+
[Frontend] JSON steps 로드 → 단계별 시각화 렌더링
131+
132+
사용자 화면 (단계별 시각화 + 퀴즈)
133+
```
134+
135+
### Playground 모드 (동적 실행)
88136
```
89137
사용자 입력 (코드)
90138
91139
[Backend] 코드 검증
92140
93-
[Backend] 시뮬레이터 선택
141+
[Backend] 시뮬레이터 선택 (언어별)
94142
95143
[Simulator] 코드 실행 (디버거 모드)
96144
97-
[Backend] 실행 결과 수집
145+
[Backend] 실행 결과 수집 → JSON 변환
98146
99147
[Frontend] 시각화 엔진으로 렌더링
100148
@@ -151,9 +199,60 @@ packages/backend/src/
151199

152200
---
153201

154-
## 🔌 시뮬레이터 프로토콜
202+
## 📄 레슨 JSON 구조 (사전 스크립팅)
203+
204+
레슨 데이터는 JSON 파일에 미리 스크립팅되어 있다:
205+
206+
```
207+
packages/backend/prisma/content/
208+
├── c/lessons/ # C 레슨 (c-1-1.json ~ c-10-4.json)
209+
├── python/lessons/ # Python 레슨 (py-1-1.json ~ py-10-4.json)
210+
├── javascript/lessons/ # JS 레슨
211+
└── java/lessons/ # Java 레슨
212+
```
213+
214+
### Lesson JSON 구조 예시
215+
```json
216+
{
217+
"lessonId": "py-3-1",
218+
"title": "리스트 기초",
219+
"concept": "리스트의 생성과 기본 조작",
220+
"content": {
221+
"code": "fruits = ['apple', 'banana']\nfruits.append('cherry')",
222+
"steps": [
223+
{
224+
"step": 1,
225+
"line": 1,
226+
"title": "리스트 생성",
227+
"explanation": "리스트를 생성하고 변수에 할당합니다.",
228+
"highlight": [1],
229+
"visualizationType": "pythonMemory",
230+
"pythonMemoryState": {
231+
"variables": [
232+
{ "name": "fruits", "value": "['apple', 'banana']", "type": "list" }
233+
],
234+
"output": []
235+
}
236+
}
237+
]
238+
},
239+
"quiz": { "question": "...", "options": [...], "answer": 1 },
240+
"misconceptions": ["..."],
241+
"keyTakeaway": "..."
242+
}
243+
```
244+
245+
### 핵심 포인트
246+
- **시뮬레이터 없이 동작**: JSON에 모든 시각화 데이터가 사전 정의됨
247+
- **교육 품질 통제**: 변수 상태, explanation, 퀴즈를 직접 스크립팅
248+
- **시뮬레이터 미지원 개념도 교육 가능**: yield, decorator, async/await 등
249+
- **자동 배포**: JSON 수정 → git push → prisma db seed → DB 반영
250+
251+
---
252+
253+
## 🔌 시뮬레이터 프로토콜 (Playground용)
155254

156-
모든 시뮬레이터는 동일한 프로토콜 사용:
255+
Playground 모드에서 시뮬레이터는 동일한 프로토콜 사용:
157256

158257
### Input (JSON)
159258
```json
@@ -276,7 +375,7 @@ Frontend → Backend POST /api/execute
276375

277376
## 🚀 배포
278377

279-
- **프론트엔드**: Vercel / Railway
280-
- **백엔드**: Railway / Heroku
378+
- **프론트엔드**: Render (Static Site)
379+
- **백엔드**: Render (Docker) — 배포 시 `prisma db seed`로 JSON → DB 자동 동기화
281380
- **데이터베이스**: Neon PostgreSQL
282-
- **모니터링**: Sentry
381+
- **배포 방식**: Git push → Render 자동 배포

0 commit comments

Comments
 (0)