Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
796b4cf
docs: 승인된 교육 기획과 실행 계약 기록
jbsim999 Oct 12, 2026
731b4a2
feat(curriculum): 코어 12수업과 5단계 학습실 구현
jbsim999 Oct 12, 2026
fe68aef
feat(web): Java 실습 실행 API와 Worker 패키징 구현
jbsim999 Oct 12, 2026
165e113
fix(web): 확대 화면과 활성 탭 검증 후 프로토타입 확정
jbsim999 Oct 12, 2026
794e2ba
docs: 프로토타입 배포와 최종 검증 근거 기록
jbsim999 Oct 12, 2026
a4d277e
feat(editor): Java 문법 강조와 접근성 테마 추가
jbsim999 Oct 12, 2026
ae27569
feat(desktop): Windows 학습 앱과 실무 22단원 통합
jbsim999 Oct 12, 2026
bb061d1
docs: GitHub 프로젝트 소개와 시작 가이드 구성
jbsim999 Oct 12, 2026
4efb95e
test: Windows 감독 프로세스 CI 실패 지점 기록
jbsim999 Oct 12, 2026
6fa9abe
fix(desktop): Windows 기본 모듈로 실행기 초기화 경계 고정
jbsim999 Oct 12, 2026
a0d1257
feat(curriculum): 검수한 이론 도식 12개와 공식 참고자료 추가
jbsim999 Oct 12, 2026
9c2d2b8
docs: 이론 도식 웹 배포와 검증 상태 기록
jbsim999 Oct 12, 2026
6ba4b8a
fix(desktop): 감독 컴파일 임시 경로와 학습 작업 경로 분리
jbsim999 Oct 12, 2026
c245dcb
test(desktop): 설치 앱 검증과 프리뷰 출시 근거 기록
jbsim999 Oct 12, 2026
6061687
docs(web): 프리뷰 출시와 검증 완료 상태 반영
jbsim999 Oct 12, 2026
ffb7775
feat(desktop): Java와 Maven을 포함한 통합 패키지 구현
jbsim999 Oct 12, 2026
0e1ff5e
fix(desktop): 설치 시 번들 원본 파일을 보존
jbsim999 Oct 12, 2026
3a745cb
docs(desktop): 통합 패키지 사용 안내와 출시 검증 기록
jbsim999 Oct 12, 2026
b2dda6d
docs(desktop): 통합 프리뷰 게시와 첨부 무결성 기록
jbsim999 Oct 12, 2026
6ce0428
feat(curriculum): 34수업 읽기 안내와 넓은 학습 화면
jbsim999 Oct 13, 2026
0848b49
docs(web): 교재 가독성과 새 패키지 검증 범위 기록
jbsim999 Oct 13, 2026
236ce0d
docs(web): v0.3.1 다운로드와 검증 범위 안내
jbsim999 Oct 13, 2026
f9d1a51
docs(web): v0.3.1 웹 배포와 출시 결과 기록
jbsim999 Oct 13, 2026
f3fea61
feat(desktop): Intel과 Apple Silicon macOS 패키징 및 실행 검증 추가
jbsim999 Oct 13, 2026
e6a8479
style(desktop): Mac 검증 스크립트의 파일 끝 공백 정리
jbsim999 Oct 13, 2026
1f93d9e
fix(desktop): 공식 Mac JDK 아카이브의 실제 폴더 구조 처리
jbsim999 Oct 13, 2026
1c93c7c
docs(desktop): Intel과 Apple Silicon Mac 실행 검증 결과 반영
jbsim999 Oct 13, 2026
b8cc781
fix(ci): macOS 통합 브랜치와 Windows 의존성 검증 보완
jbsim999 Oct 14, 2026
0648a62
fix(desktop): macOS 통합 작업 이전 상태 복원
jbsim999 Oct 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 2

[*.java]
indent_size = 4
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* text=auto eol=lf
19 changes: 19 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
## 문제와 변경 후 동작

## 관련 이슈

실제 이슈가 있을 때 연결합니다.

## 영향 범위와 공식 근거

Java 최소 버전·출처 및 공고 근거 변경 여부를 적습니다.

## 실제 검증 결과

- 실행한 검사와 결과:
- 독립 검토 범위와 결과:
- 실행하지 못한 검사와 이유:

## 남은 위험과 배포

병합·배포 여부 및 되돌리는 방법을 적습니다.
105 changes: 105 additions & 0 deletions .github/workflows/verify.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
name: Verify Java Edu

on:
push:
branches: [main, 'feat/**', 'fix/**']
pull_request:
workflow_dispatch:

permissions:
contents: read

jobs:
content:
name: Content integrity
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7
with:
node-version: '22'
cache: npm
- run: npm ci
- run: npm run build
- run: npm run check
- run: npm run test:worker
java:
name: Java examples (${{ matrix.java }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
java: ['8', '11', '17', '21']
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7
with:
node-version: '22'
- uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6
with:
distribution: temurin
java-version: ${{ matrix.java }}
- run: npm run test:java
browser:
name: Browser QA
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7
with:
node-version: '22'
cache: npm
- run: npm ci
- run: npx playwright install --with-deps chromium
- run: npm run dev > /tmp/java-edu-preview.log 2>&1 &
- run: npm run test:browser
env:
QA_ARTIFACT_DIR: work/java-edu-qa
- run: npm run test:theory
env:
QA_ARTIFACT_DIR: work/theory-independent-qa
- run: npm run test:readability
env:
QA_ARTIFACT_DIR: work/readability-qa
professional:
name: Professional projects (${{ matrix.java }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
java: ['17', '21']
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7
with:
node-version: '22'
- uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6
with:
distribution: temurin
java-version: ${{ matrix.java }}
- name: Verify reference and unfinished starter projects
run: |
export MAVEN_HOME="$(dirname "$(dirname "$(readlink -f "$(command -v mvn)")")")"
node scripts/check-professional.mjs
local-windows:
name: Windows local runner (${{ matrix.java }})
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
java: ['8', '11', '17', '21']
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7
with:
node-version: '22'
- uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6
with:
distribution: temurin
java-version: ${{ matrix.java }}
- run: npm run test:local
- name: Verify actual local JVM checks
shell: pwsh
run: |
Set-Item -Path 'Env:JAVA_EDU_JDK_${{ matrix.java }}' -Value $env:JAVA_HOME
node tests/local/java-smoke.mjs
15 changes: 15 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
node_modules/
work/
*.class
.DS_Store
.env
.env.*
.openai/
test-results/
worker/assets.generated.mjs
dist/server/
dist/.openai/
dist/assets/editor.bundle.js
desktop-release/
dist/downloads/
dist/data/professional.js
11 changes: 11 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Java Edu 작업 계약

대상은 다른 언어 경험자의 Java 전환 학습과 현직자 심화다. 완전 입문자 설명을 기본 과정으로 확대하지 않는다. 공식 Java 8/11/17/21 기준과 이론 → 예시 → 문제풀이 → 실무 심화 → 웹 IDE 직접 코딩의 5단 수업 흐름을 유지한다.

협업 규칙의 기준 문서는 CONTRIBUTING.md이다. 파일당 쓰기 소유자를 한 명으로 정한다. 콘텐츠, 프런트엔드, 조사 근거, 테스트를 독립 작업으로 나누고 의미 있는 구현은 독립 검토를 받는다. 기존 변경을 보존하며 추가 위임은 부모가 허용한 경우에만 한다.

역할: 총괄은 범위·통합·검증 책임; 연구자는 공식 명세와 공고 원문 대조; 교육 설계자는 교육 데이터와 독립 Java 예제; 프런트엔드 담당자는 dist의 화면·상호작용; 독립 리뷰어는 정확성·보안·회귀; QA는 실제 기능·합성 화면 검사. 역할은 전문 자격을 의미하지 않는다.

미지원 Java 버전이나 preview 문법을 정식 예제로 표시하지 않는다. 공고 관찰을 채용 통계로 만들지 않는다. 브라우저 퀴즈와 Java 실행 검증을 구분한다. 실제 실행하지 않은 테스트는 미실행으로 기록한다. 실행기 계약은 docs/architecture.md와 docs/local-execution.md를 따른다. 교재 기준·컴파일 대상·실제 실행 JVM을 분리해서 표시한다. 웹 코어 실행은 외부 Wandbox의 실제 JVM21을 사용하며 Java8/11/17 실제 JVM이라고 주장하지 않는다. Windows 설치형은 등록한 로컬 JDK를 사용하며 원격 제공자를 호출하지 않는다. 실무 교재의 정적 공개·기준 테스트 실행·설치형 통합 검증을 분리한다. Redis/Kafka 실제 연동은 선택 환경이며 미검증을 숨기지 않는다. 이 개인 IDE를 OS 보안 샌드박스로 표현하지 않는다.

사용자는 마일스톤별 커밋·푸시와 완성된 프로토타입/서비스의 배포를 승인했다. origin은 jbsim999/java-edu, main과 단기 작업 브랜치를 사용한다. 강제 푸시·미검증 병합·공개 범위 변경·유료 자원 구매 권한은 만들지 않는다. GitHub 저장소는 공개이며 새 Sites 프로토타입은 기본 owner-private를 유지한다.
37 changes: 37 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# 협업 규칙

이 저장소의 기본 규칙이다. Junbo GitHub Conventions의 추천안을 본 프로젝트에 맞춰 적용했다. 기존 사용자 저장소의 정책이나 GitHub 보호 설정을 확인한 것으로 해석하지 않는다.

## 변경 단위와 검토

- 기준 브랜치 `main`, 단기 작업 브랜치 `feat/java-learning-mvp`처럼 `type/description`. 실제 이슈가 있으면 `type/number-description`; 번호를 만들지 않는다.
- 커밋과 PR 제목은 `type(scope): 변경 내용`. 타입은 feat, fix, docs, test, refactor, perf, style, build, ci, chore. scope는 web, curriculum, evidence, examples, ci 중 실제 변경 대상에 맞게 사용한다. 이 목록은 팀의 추가 규칙이다.
- 하나의 PR은 하나의 목적을 갖는다. 구현 중에는 Draft PR을 사용한다. 중요 변경은 구현자 외 담당자의 독립 검토와 관련 검사 결과를 남긴다. 에이전트 검토를 사람의 GitHub 승인으로 꾸미지 않는다.
- `main` 강제 푸시와 기존 작업 되돌리기를 금지한다. 병합과 운영 배포는 사용자 승인 범위 안에서만 수행한다. PR 준비는 자동 병합 권한을 뜻하지 않는다.
- `[필수]`, `[제안]`, `[질문]`, `[사소]`로 리뷰 의도를 표시한다. 필수 문제 해결 후 해당 실패 조건을 다시 검사한다.

## 교육 콘텐츠 기준

대상은 다른 언어로 프로그래밍 경험이 있는 Java 전환 학습자와 현직 개발자다. 완전 입문자 과정은 포함하지 않는다. 각 수업은 이론·예시·문제풀이·실무 심화·웹 IDE 직접 코딩을 모두 갖춘다. 클래스 골격형과 메서드 본문형을 학습 목표에 맞춰 사용한다.

언어는 해당 버전 JLS, API는 API Specification과 Since, 런타임은 JVM 명세·공식 가이드를 기준으로 한다. 수업 `minVersion`은 해당 수업의 실행 예제를 지원하는 최소 대상 버전이다. 최초 도입 버전은 본문·호환표에서 별도로 밝힌다. preview/incubator는 기본 과정에서 제외한다. 버전별 예제 폴더와 기대 출력 manifest를 함께 변경한다.

공고 근거는 URL·제목·기업·확인일·모집 상태·접근 범위·관찰 요건을 기록한다. 확인일은 게시일이 아니다. 공고를 특정한 표본에서 관찰한 기술이라고 표현하고 사용률이나 Java 버전 수요로 확대하지 않는다. 실무 과제는 교육 설계 제안이며 기업의 채용 과제가 아니다.

## 실제 검사

다음은 구현 단계의 검사 계약이다. M1 문서 마일스톤에서는 이 검사를 실행한 것으로 표시하지 않는다. 실제 CI 정의·실행 결과는 후속 마일스톤에서 검증한다.

`npm run check`: JS 구문과 교재/출처/공고/예제 데이터 정합성. CI 작업 이름 `Content integrity`.

`npm run test:java`: 설치된 JDK에서 호환 예제를 컴파일하고 기대 출력과 비교한다. CI 작업 `Java examples (8/11/17/21)`에서 각 JDK를 독립 사용한다. `--release` 검사와 실제 해당 JDK 실행을 구분한다.

`npm run test:browser`: 웹 기능과 화면의 브라우저 에뮬레이션 검사. CI 작업 `Browser QA`. 실제 휴대전화 테스트라고 기록하지 않는다. 테스트 명령이나 CI 정의가 존재하는 것과 실행 성공은 별개다. 상세 결과는 PR과 docs/verification.md에 남긴다.

필수 브랜치 보호 설정은 아직 적용하지 않는다. CI 작업 이름을 위와 같이 정의했지만 GitHub에서 실제 검사 결과를 확인한 후 필수 검사 지정 여부를 결정한다.

## 명명과 근거

식별자·브랜치는 영어, 설명·리뷰는 한국어. API, HTTP, SQL, URL, ID, JVM, JDK처럼 통용 약어를 사용하고 `usr`, `cnt`, `mgr` 같은 모호한 축약을 새 이름에 넣지 않는다. 기존 공개 식별자는 명명 규칙 때문에 바꾸지 않는다.

표준 근거: [Conventional Commits 1.0.0](https://www.conventionalcommits.org/ko/v1.0.0/). 브랜치·scope·리뷰 표시는 프로젝트의 선택이다. 프로토타입 배포는 Sites의 owner-private 호스팅과 Worker API를 사용한다. GitHub 저장소 공개와 서비스 공개는 별개다. 지원하지 않는 프레임워크·DB 실습을 실행 가능으로 표시하지 않는다.
Loading
Loading