AGENTS.md 파일 추가, CLAUDE.md 내용 한글 번역 후 AGENTS.md 파일에 적용
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
## 프로젝트 개요
|
||||
|
||||
초코마에(ChocoMae)는 한글/영문 타이핑 및 마우스 연습용 웹 애플리케이션입니다. Phaser 2.6.2를 사용한 게임화된 타이핑 연습, 교사(마에스트로)를 위한 학급 관리 기능, 랭킹/기록 시스템을 제공합니다.
|
||||
|
||||
## 기술 스택
|
||||
|
||||
- **프론트엔드:** HTML5, JavaScript (ES5), jQuery 3.3.1, Phaser 2.6.2 게임 엔진, Bootstrap
|
||||
- **백엔드:** PHP 7.x (MySQLi 사용), Python (배치 스크립트)
|
||||
- **데이터베이스:** MariaDB/MySQL (`chocomae` 데이터베이스)
|
||||
- **서버:** AWS EC2(Docker 컨테이너) 상의 SSL이 적용된 Apache HTTP Server
|
||||
|
||||
## 개발 명령어
|
||||
|
||||
이 프로젝트는 메인 애플리케이션에 대해 **Node.js/npm 빌드 단계가 없습니다.** Apache + PHP 위에서 직접 동작합니다.
|
||||
|
||||
**Phaser input 플러그인** (`/src/util/phaser-input-master/`를 수정할 때만 해당):
|
||||
```sh
|
||||
cd src/util/phaser-input-master
|
||||
npm install # grunt + TypeScript 의존성 설치
|
||||
grunt # TypeScript → JS 빌드
|
||||
```
|
||||
|
||||
**데이터베이스 설정** (스키마 초기화):
|
||||
```sh
|
||||
mysql -u <user> -p chocomae < src/web/sql/make_db.sql
|
||||
mysql -u <user> -p chocomae < src/web/sql/make_db_license_timer.sql
|
||||
mysql -u <user> -p chocomae < src/web/sql/insert_app.sql
|
||||
mysql -u <user> -p chocomae < src/web/sql/insert_active_app.sql
|
||||
```
|
||||
|
||||
**배포** — `release` 브랜치에 push하면 git post-receive 훅이 자동으로 다음을 수행합니다:
|
||||
1. `/volume1/docker/chocomae/html/mouse_typing/`로 파일을 체크아웃
|
||||
2. `NA_service_db_setting.php`를 `service_db_setting.php`로 복사하고 `localhost`를 `mysql`(Docker 호스트명)로 치환
|
||||
|
||||
## 아키텍처
|
||||
|
||||
### 디렉터리 구조
|
||||
|
||||
```
|
||||
src/
|
||||
├── game/ # Phaser 게임 모듈 (클라이언트 측 JS)
|
||||
├── web/
|
||||
│ ├── main/ # 진입점 (index.html) + 최상위 HTML 페이지
|
||||
│ ├── module/ # jQuery .load()로 동적으로 불러오는 HTML 조각
|
||||
│ ├── js/ # 프론트엔드 JavaScript
|
||||
│ ├── css/ # 스타일시트
|
||||
│ ├── server/ # PHP 백엔드 엔드포인트
|
||||
│ ├── admin/ # 관리자 패널 HTML
|
||||
│ ├── popup/ # 팝업/모달 HTML
|
||||
│ └── sql/ # 데이터베이스 스키마 및 시드 파일
|
||||
├── php-cli/ # PHP 배치 스크립트 (cron으로 실행)
|
||||
└── util/ # 서드파티 유틸리티 (phaser-input 플러그인 소스)
|
||||
resources/ # 정적 자산: Bootstrap, jQuery, 폰트, 이미지
|
||||
test/ # 수동 테스트용 HTML/JS 파일 (자동화된 테스트 러너 없음)
|
||||
```
|
||||
|
||||
### 프론트엔드 아키텍처
|
||||
|
||||
- **진입점:** `src/web/main/index.html` — 헤더/섹션/푸터 모듈을 동적으로 로드
|
||||
- **모듈 로딩:** jQuery `.load()`로 `src/web/module/`에서 HTML 조각을 가져옴
|
||||
- **상태:** `maestroID`와 게임 세션 데이터에 `sessionStorage` 사용
|
||||
- **게임 엔진:** 모든 인터랙티브 게임은 `src/game/`에 위치하며 Phaser 2.6.2 사용, 각 게임 디렉터리는 Phaser 상태(Boot, Load, Game, Result)를 가진 자체 `main.js`를 보유
|
||||
|
||||
### 백엔드 아키텍처
|
||||
|
||||
`src/web/server/`의 PHP 엔드포인트는 도메인별로 구성되어 있습니다:
|
||||
- `player/` — 플레이어 계정 CRUD
|
||||
- `record/` — 게임 결과 및 랭킹 저장/조회
|
||||
- `maestro/` — 교사 학급 관리 (17개 엔드포인트)
|
||||
- `admin/` — 관리자 운영 (11개 엔드포인트)
|
||||
- `license_timer/` — 구독/라이선스 관리
|
||||
- `mail/` — PHPMailer + Gmail SMTP를 통한 이메일 발송
|
||||
- `lib/` — 공용 PHP 라이브러리 (`send_reply_json.php`, `db_maestro.php` 등)
|
||||
- `setup/connect_db.php` — 데이터베이스 연결; `service_db_setting.php`에서 설정을 읽음
|
||||
|
||||
모든 엔드포인트는 JSON을 반환합니다. 모든 응답에는 UTF-8 인코딩이 설정되어 있습니다.
|
||||
|
||||
### 데이터베이스 설정
|
||||
|
||||
- **개발 환경:** `src/web/server/setup/NA_service_db_setting.php`를 수정 (이 파일이 템플릿이며, `service_db_setting.php`는 git-ignore 대상으로 배포 시 생성됨)
|
||||
- 배포 훅이 Docker 네트워킹을 위해 `localhost` → `mysql`로 치환
|
||||
|
||||
### 사용자 역할
|
||||
|
||||
| 역할 | 설명 |
|
||||
|------|-------------|
|
||||
| Player | 게임을 플레이하는 최종 사용자 (무료 또는 유료) |
|
||||
| Maestro | 학생 플레이어 그룹을 관리하는 교사 |
|
||||
| Admin | 전체 권한을 가진 시스템 관리자 |
|
||||
|
||||
### Python 배치 스크립트
|
||||
|
||||
`src/web/server/python/chocomae/`와 `src/php-cli/batch/`에 위치 — 미결제/만료 예정 마에스트로에게 만료 경고 이메일을 발송하는 등의 예약 작업을 처리합니다. 서버에서 cron으로 실행됩니다.
|
||||
Reference in New Issue
Block a user