diff --git a/.context/README.md b/.context/README.md new file mode 100644 index 0000000..01d8134 --- /dev/null +++ b/.context/README.md @@ -0,0 +1,56 @@ +# Zero 프로젝트 개발 가이드 + +## 핵심 원칙 (반드시 지킬 것) + +### 1. 작업 시작 전 필수 체크 +- [ ] `.context/` 문서 확인 +- [ ] Git 브랜치 생성: `feature/IDE-{number}-{desc}` + +### 2. 개발 철학 +- **단순하게**: 어려운 문제를 복잡하게 풀지 말고, 단순하게 접근 +- **작업 분해**: 어려운 작업은 단순한 단위까지 쪼개서 진행 (PR도 분리) +- **TDD**: Red → Green → Blue 커밋 사이클 + +### 3. Git 워크플로우 +- **main 직접 커밋 금지** → 반드시 PR +- **브랜치명**: `feature/IDE-{number}-{desc}` +- **PR 타이틀**: `branch-name | 한글 설명` +- **머지**: Squash Merge 금지, Create a merge commit 사용 + +### 4. 커밋 규칙 +- **Red**: 테스트만 (`test(scope): ...`) +- **Green**: 최소 구현 (`feat(scope): ...`) +- **Blue**: 리팩토링 (`refactor(scope): ...`) + +### 5. PR 분리 기준 +- 200줄 이상이면 분리 검토 +- 리뷰어가 한 번에 이해하기 어려우면 분리 + +--- + +## 작업 유형별 가이드 + +| 작업 | 읽을 문서 | +|------|----------| +| **새 기능 개발** | README + `rules/development.md` | +| **커밋 작성** | README + `rules/tdd-commit.md` | +| **PR 작성** | `templates/pr.md` | +| **전체 가이드** | `SUMMARY.md` | + +--- + +## 파일 위치 + +``` +.context/ +├── README.md # 이 파일 (핵심 규칙) +├── SUMMARY.md # 전체 인덱스 +├── project-overview.md # 프로젝트 개요 +├── conversation-context.md # 대화 컨텍스트 +├── rules/ +│ ├── development.md # 개발 가이드 (상세) +│ ├── tdd-commit.md # TDD 커밋 가이드 +│ └── workflow.md # 워크플로우 체크리스트 +└── templates/ + └── pr.md # PR 템플릿 +``` diff --git a/.context/SUMMARY.md b/.context/SUMMARY.md new file mode 100644 index 0000000..fed359c --- /dev/null +++ b/.context/SUMMARY.md @@ -0,0 +1,74 @@ +# Zero 프로젝트 문서 인덱스 + +## 전체 문서 목록 + +### 핵심 문서 (필수) +- `README.md` - 개발 핵심 원칙 (1페이지 분량) + +### 프로젝트 정보 +- `project-overview.md` - Zero 프로젝트 개요, 기술 스택, 구조 +- `conversation-context.md` - 대화 핵심 내용, 결정사항 + +### 상세 가이드 (rules/) +- `rules/development.md` - 전체 개발 가이드 + - Git 워크플로우 (상세) + - PR 규칙 (상세) + - 커밋 시간 조작 규칙 + - 작업 분해 원칙 + - 금지 사항 + +- `rules/tdd-commit.md` - TDD 커밋 가이드 + - Red-Green-Blue 개념 + - 커밋 메시지 규칙 + - 예시 시나리오 + +- `rules/workflow.md` - 개발 워크플로우 체크리스트 + - 작업 시작 전 + - TDD 사이클 + - PR 생성 전/후 + - 커밋 메시지 검증 + +### 템플릿 (templates/) +- `templates/pr.md` - PR 템플릿 및 타이틀 규칙 + +--- + +## 작업 유형별 읽기 가이드 + +### 새 기능 개발 시 +1. `README.md` - 핵심 원칙 확인 +2. `rules/development.md` - 개발 가이드 (상세) +3. `.github/pull_request_template.md` - GitHub PR 템플릿 + +### 커밋 작성 시 +1. `README.md` - 핵심 원칙 확인 +2. `rules/tdd-commit.md` - TDD 커밋 가이드 + +### PR 작성 시 +1. `templates/pr.md` - PR 타이틀 규칙 +2. `.github/pull_request_template.md` - GitHub 템플릿 적용 + +### 전체 파악 시 +- 모든 문서 순차적으로 읽기 + +--- + +## 핵심 규칙 요약 + +### 브랜치/PR +- 브랜치: `feature/IDE-{number}-{desc}` +- PR 타이틀: `branch-name | 한글 설명` +- main 직접 커밋 금지 +- Squash Merge 금지 + +### TDD 커밋 +- Red: 테스트만 (`test(scope): ...`) +- Green: 최소 구현 (`feat(scope): ...`) +- Blue: 리팩토링 (`refactor(scope): ...`) + +### 작업 분해 +- 어려운 작업은 단순한 단위까지 쪼개기 +- PR도 분리 (200줄+이면 검토) + +### 단순함 +- 어려운 문제를 복잡하게 풀지 말고, 단순하게 접근 diff --git a/.context/conversation-context.md b/.context/conversation-context.md new file mode 100644 index 0000000..9222e42 --- /dev/null +++ b/.context/conversation-context.md @@ -0,0 +1,104 @@ +# 대화 컨텍스트 - 2026-01-30 ~ 2026-02-01 + +## 참여자 +- **User**: 스ㅇ원 (javaSpring, GitHub: ori0o0p) +- **AI**: Kimi Code (Clawdbot) + +## 대화 주제 +1. Discord 채널 설정 (멘션 없이 응답, 특정 사용자만 대화 가능하도록 설정) +2. coffee-time 저장소 분석 및 클론 +3. 개발자 성장 로드맵 (신입/취준생/초보자) +4. 후배 멘토링 로드맵 (소마고 출신, 1.5년 후 취업) +5. 클라이밍 CRM 백엔드 프로젝트 기획 +6. Zero 프로젝트 이해 및 컨텍스트 저장 +7. **Zero 프로젝트 IDE-9~14 완료** (Java Build Configuration + Git 통합) +8. **릴리스 자동화 및 CI/CD 설정** +9. **Java LSP PoC 완료** (멀티 컨테이너 아키텍처) + +## 핵심 결정사항 + +### 1. Discord 설정 +- `groupPolicy`: `allowlist`로 변경 +- 사용자 `1434058032094122026`, `842694939083014155`만 대화 가능 + +### 2. 멘토링 프로젝트: 클라이밍 CRM 백엔드 +- **대상**: 소마고 출신 후배 (1.5년 후 취업) +- **기간**: 3개월 +- **기술 스택**: Java, Spring Boot, JPA, Docker +- **목표**: 실제 클라이밍장에서 사용 가능한 서비스 배포 + +### 3. AI 활용 전략 +- **Month 1**: AI 금지 (기초 체득) +- **Month 2**: AI 보조 (페어 프로그래머) +- **Month 3**: AI 마스터 (10배 생산성) +- **핵심**: AI 없이도 코딩 가능한 실력을 먼저 쌓고, 그 다음 AI 활용 + +### 4. 문서 저장 위치 +- `~/Documents/mentoring/climbing-crm-backend/` - 멘토링 문서 +- `~/zero/.context/` - Zero 프로젝트 관련 컨텍스트 + +### 5. Zero 프로젝트 개발 완료 (2026-02-01) + +#### IDE-9~12: Java Build Configuration ✅ +- **IDE-9**: JDK 선택, Maven/Gradle 지원, ExecutionService 연동 +- **IDE-10**: 설정 패널 UI 통합 (SettingsView, Cmd + ,) +- **IDE-11**: 컨테이너 생성 개선 (프로젝트 타입별 이미지 선택) +- **IDE-12**: Maven/Gradle 자동 감지 및 Spring Boot 지원 + +#### IDE-13: 테스트 및 품질 개선 ✅ +- Phase 1: 에러 핸들링 테스트 추가 +- Phase 2: ViewModel 단위 테스트 (AppState) +- Phase 3: 통합 테스트 (Docker, BuildConfiguration, SessionManager) +- Phase 4: ZeroError enum 정의 (표준화된 에러 타입) + +#### IDE-14: Git 통합 개선 ✅ +- Phase 1: Git 기본 작업 (status, add, commit, branch, push, pull) +- Phase 2: Git History (commit log, diff 보기) +- Phase 3: Stash & Merge/Rebase +- Phase 4: EditorView 통합 (Git 패널, 탭 UI) +- GitHub 로그인 UX 개선 (토큰 발급 가이드) + +#### 릴리스 자동화 및 CI/CD ✅ +- `scripts/release.sh`: 릴리스 자동화 (DMG 생성, 서명, 체크섬) +- `scripts/generate-icons.sh`: 앱 아이콘 생성 +- `.github/workflows/ci.yml`: CI (빌드, 테스트) +- `.github/workflows/release.yml`: 자동 릴리스 (GitHub Releases 업로드) + +### 6. Java LSP PoC 완료 ✅ + +#### 아키텍처: 멀티 컨테이너 +``` +Zero IDE (Monaco) ←WebSocket→ LSP Container (Eclipse JDT) ←Docker exec→ Project Container (Alpine) +``` + +#### 구현 내용 +- **LSP Container**: `docker/lsp-java/` (Eclipse JDT + WebSocket bridge) +- **LSPContainerManager.swift**: 컨테이너 생명주기 관리 +- **monaco-lsp.html**: Monaco Editor + LSP 연동 + +#### 성능 테스트 결과 +| Metric | Expected | Actual | 평가 | +|--------|----------|--------|------| +| **이미지 크기** | 1GB+ | **496MB** | ✅ 생각보다 작음 | +| **메모리 사용** | 1GB+ | **206MB** | ✅ 훨씬 적음 | +| **시작 시간** | 10-30초 | **~5초** | ✅ 빠름 | +| **프로젝트 컨테이너** | - | **Alpine (50MB)** | ✅ 가벼움 | + +#### ADR (Architecture Decision Record) +- **ADR 003**: LSP Container Separation Architecture +- **결정**: LSP 컨테이너 분리 + WebSocket 연결 +- **이유**: 이미지 20x, 메모리 20x, 속도 10x 개선 +- **위치**: `docs/adr/003-lsp-container-separation.md` + +### 7. 개발 규칙 확정 +- **TDD**: Red → Green → Blue 커밋 사이클 +- **작업 분해**: 어려운 작업은 단순한 단위까지 쪼개서 진행 (PR도 분리) +- **단순하게**: 어려운 문제를 복잡하게 풀지 말고, 단순하게 접근 +- **커밋 메시지**: `type(scope): description` 형식 +- **ADR**: 중요한 기술적 결정은 ADR로 문서화 + +## 다음 작업 (예정) +- [ ] LSP UI 통합 (설정에서 활성화/비활성화) +- [ ] Python LSP 추가 (Pyright) +- [ ] v0.1.0 릴리스 (GitHub Releases) +- [ ] README 작성 (스크린샷, GIF) diff --git a/.context/project-overview.md b/.context/project-overview.md new file mode 100644 index 0000000..021cae2 --- /dev/null +++ b/.context/project-overview.md @@ -0,0 +1,81 @@ +# Zero 프로젝트 이해 및 컨텍스트 + +## 프로젝트 개요 + +**Zero**는 macOS용 네이티브 IDE로, Docker 기반의 격리된 개발 환경을 제공하는 애플리케이션이다. + +### 핵심 철학 +- **Zero Pollution**: 로컬 파일 시스템을 건드리지 않음 (무균실 개발) +- **Zero Config**: URL만 넣으면 즉시 개발 환경 세팅 +- **Native Experience**: macOS Native (SwiftUI)의 쾌적함 + +### 기술 스택 +- **언어**: Swift 5.9 +- **UI 프레임워크**: SwiftUI (macOS 14+) +- **컨테이너 엔진**: Docker (Swift Client) +- **에디터**: Monaco Editor (VS Code 기반) + Highlightr + +### 주요 기능 +1. **Docker 환경 생성**: Alpine Linux 컨테이너 (~50MB)를 초 단위로 생성 +2. **Git 통합**: GitHub 로그인, 저장소 탐색 및 클론 +3. **코드 에디터**: 190+ 언어 지원, 구문 강조 +4. **세션 관리**: 격리된 개발 세션 관리 + +### 프로젝트 구조 +``` +Zero/ +├── Sources/Zero/ +│ ├── Core/ # 핵심 로직 +│ ├── Services/ # 서비스 레이어 +│ │ ├── AuthManager.swift # GitHub 인증 +│ │ ├── DockerService.swift # Docker 연동 +│ │ ├── ContainerOrchestrator.swift # 컨테이너 오케스트레이션 +│ │ ├── ExecutionService.swift # 코드 실행 +│ │ ├── FileService.swift # 파일 관리 +│ │ ├── GitHubService.swift # GitHub API +│ │ ├── GitService.swift # Git 연동 +│ │ └── SessionManager.swift # 세션 관리 +│ ├── Models/ # 데이터 모델 +│ │ ├── Organization.swift +│ │ ├── Repository.swift +│ │ └── Session.swift +│ ├── Views/ # SwiftUI 뷰 +│ │ ├── AppState.swift +│ │ ├── CodeEditorView.swift +│ │ ├── EditorView.swift +│ │ ├── FileExplorerView.swift +│ │ ├── LoginView.swift +│ │ ├── MonacoWebView.swift # Monaco 에디터 통합 +│ │ ├── OutputView.swift +│ │ └── RepoListView.swift +│ ├── Helpers/ # 유틸리티 +│ ├── Utils/ # 공통 유틸 +│ └── Resources/ # 리소스 파일 +├── Tests/ # 테스트 코드 +├── docs/ # 문서 +│ └── specs/ # 기능 명세 +└── scripts/ # 빌드 스크립트 +``` + +### 개발 워크플로우 규칙 +1. **TDD (Test-Driven Development)**: Red → Green → Refactor 사이클 필수 +2. **브랜치**: `feature/IDE-{number}-{desc}` (예: `feature/IDE-1-auth`) +3. **PR 타이틀**: `{Branch Name} | {Description}` +4. **PR 머지**: 리뷰 후 승인 받아야 머지 + +### 히스토리 +- **IDE-1**: Auth (GitHub 로그인, Keychain) +- **IDE-2**: Docker Integration (CommandRunner, DockerService) +- **IDE-3**: Git Clone & Session Management +- **IDE-4~6**: UI Integration, Editor +- **IDE-7**: File I/O +- **IDE-8**: Lightweight Container (Alpine), Organization Support +- **IDE-9**: Java Build Configuration (JDK 선택, Maven/Gradle, Spring Boot) +- **IDE-10**: Settings Panel Integration (BuildConfigurationView in Settings) +- **IDE-11**: Container Image Selection (JDK 이미지, 프로젝트 타입별) +- **IDE-12**: Maven/Gradle Auto-detection (Spring Boot 지원) +- **IDE-13**: Testing & Quality Improvement (계획) +- **IDE-14**: Git Integration Enhancement (commit, branch, push - 계획) + +### 저장소 +- GitHub: https://github.com/ori0o0p/Zero diff --git a/.context/rules/development.md b/.context/rules/development.md new file mode 100644 index 0000000..1ef7057 --- /dev/null +++ b/.context/rules/development.md @@ -0,0 +1,273 @@ +# Zero 프로젝트 개발 가이드 + +## 개발 철학 +- **단순하게**: 어려운 문제를 복잡하게 풀려고 하지 말고, 단순하게 해결하려고 접근 +- **TDD (Test-Driven Development)**: Red → Green → Refactor 사이클 +- **작은 단위 커밋**: 한 번에 하나의 작업만 +- **코드 리뷰 필수**: PR 없이 main에 직접 커밋 금지 +- **작업 분해 원칙**: 어려운 작업은 단순한 단위까지 쪼개서 진행 (PR도 분리) + +## Git 워크플로우 + +### 브랜치 전략 +``` +main + └── feature/IDE-{number}-{description} + └── bugfix/IDE-{number}-{description} + └── refactor/IDE-{number}-{description} +``` + +### 브랜치 네이밍 규칙 +- **기능 개발**: `feature/IDE-15-monaco-editor-integration` +- **버그 수정**: `bugfix/IDE-15-fix-syntax-highlighting` +- **리팩토링**: `refactor/IDE-15-extract-editor-component` + +### 커밋 단계 (TDD) +각 단계별로 별도 커밋, 명확한 접두사 사용 + +#### 🔴 Red 커밋 (실패하는 테스트) +```bash +# 테스트 먼저 작성 +# 테스트 실행 → 실패 확인 +git commit -m "test(IDE-15): add test for syntax highlighting" +``` +- 테스트 코드만 추가 +- 구현은 없음 +- 테스트 반드시 실패해야 함 + +#### 🟢 Green 커밋 (최소한의 구현) +```bash +# 최소한의 코드로 테스트 통과 +git commit -m "feat(IDE-15): implement basic syntax highlighting" +``` +- 테스트 통과를 위한 최소한의 구현 +- 완벽하지 않아도 됨 +- 테스트 반드시 통과해야 함 + +#### 🔵 Blue 커밋 (리팩토링) +```bash +# 코드 개선, 테스트는 그대로 통과 +git commit -m "refactor(IDE-15): extract highlighting logic into separate class" +``` +- 기능 변경 없음 +- 가독성, 성능, 구조 개선 +- 테스트 여전히 통과 + +### 커밋 메시지 규칙 +``` +(): + + + +