Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Code Trainer

Second Brain release: 등록하기 → 탐구하기 → 데이터 쌓기 → 응용하기 → 설정으로 개편했습니다. release 테스트·개발 실행·유지보수 안내를 먼저 확인하세요. 아래에는 기존 코드 학습 기능의 설명도 포함되어 있습니다. 운영 main 반영 여부는 release 병합과 별개입니다.

자료의 개념과 선행 관계를 분석해 학습 과정을 만들고, 단원별 개념 페이지와 READ → FIX → MODIFY → BUILD 문제를 연결하는 로컬 연습 앱입니다. React·TypeScript·Vite, FastAPI·Pydantic, SQLite를 사용합니다.

단일 소유자용 Mac mini·Cloudflare 배포와 GitHub 자동 배포를 운영 중입니다. 앱/실행 VM 분리와 검증 범위는 배포 절차와 검증 상태를 참고하세요. 아래 절차는 개인 컴퓨터에서 로컬로 실행하는 방법입니다.

구조와 함수·이벤트 지도

Code Trainer 구조도 — 클릭하면 상세 지도로 이동

인터랙티브 구조·이벤트 지도 열기 ↗ · Archify 전체 화면

전체 구조 → 영역 → 파일 → 함수 → 호출·이벤트 순서로 탐색할 수 있습니다. 로그인, 자료 분석, 단원 문제 생성, Run/Test/Submit, 초안 충돌, 학습 정리, 자동 배포의 흐름을 실제 함수와 연결했습니다. 함수 검색과 구현 코드 링크도 제공합니다.

GitHub Pages의 함수 목록은 main 변경 시 소스에서 자동 갱신합니다. 구조도와 설명형 이벤트 흐름은 검토한 스냅샷이며, 정적 호출 관계가 모든 조건의 실제 실행 순서를 뜻하지는 않습니다. 생성·검증 방법을 참고하세요.

처음 실행하기

각 사용자가 자신의 컴퓨터에서 서버를 실행하고, 자신의 AI API 키와 로컬 DB를 사용합니다. 별도 호스팅 서버나 OAuth 설정은 필요하지 않습니다. 다른 사용자의 계정·자료·풀이 기록은 공유되지 않습니다.

먼저 Git, Node.js 24 이상(npm 포함), uv, Docker CLI와 Docker 엔진을 준비하세요. Python 3.12 환경은 uv가 준비합니다. macOS에서는 Docker Desktop 또는 Colima를 사용할 수 있습니다. Windows에서는 WSL2 안에 도구와 저장소를 준비하고 Bash로 실행하세요. 현재 실제 실행 검증은 macOS ARM에서 수행했으며 Linux·WSL2 환경 검증은 아직 하지 않았습니다.

아래 YOUR_ACCOUNT/YOUR_REPOSITORY는 실제 공개한 GitHub 저장소 주소로 바꾸세요.

git clone https://github.com/YOUR_ACCOUNT/YOUR_REPOSITORY.git code-trainer
cd code-trainer
cp .env.example .env

.env의 AI_API_KEY, AI_MODEL을 본인 설정으로 입력하고 Docker 엔진을 켠 뒤 실행합니다.

./start.sh

처음 실행하면 Python·웹 의존성을 설치하고, 실행 이미지가 없으면 다섯 언어의 코드 실행 이미지를 빌드합니다. 최초 설치에는 인터넷 연결과 이미지 다운로드 공간이 필요합니다. 이후에도 같은 명령으로 실행하며 기존 계정과 자료는 유지됩니다. Dockerfile을 변경해 이미지를 다시 빌드할 때는 ./start.sh --setup을 사용합니다.

http://127.0.0.1:8010에서 첫 로컬 계정을 만드세요. 사용자 이름은 공백을 제외한 한 글자 이상, 비밀번호는 8자 이상입니다. 이 설치에서는 최초 계정 하나만 사용합니다. 계정 생성 시 관리자 비밀번호 1202를 입력하면 관리자, 비워두면 일반 계정으로 생성됩니다. 관리자 메뉴는 관리자 계정에만 표시되며 기존 관리자 계정은 유지됩니다. 연습 만들기 → 예제로 시작은 AI 키를 비워도 실제 코드 검증 후 사용할 수 있습니다. 새 자료 분석·문제 생성에는 AI 키가 필요하며 해당 API 이용료는 키 소유자에게 부과됩니다. 샌드박스가 연결되지 않으면 문제 생성·코드 실행을 차단하며, 호스트에서 코드를 대신 실행하지 않습니다.

Docker Desktop 사용이 어려운 macOS에서는 별도 Colima 프로필도 사용할 수 있습니다. 프로필별 Docker context를 사용하므로 기존 Docker 디스크를 초기화할 필요가 없습니다.

brew install colima
colima start code-trainer --vm-type vz --cpu 2 --memory 2 --disk 12 --activate=false
export DOCKER_CONTEXT=colima-code-trainer
./start.sh --setup

서버를 끄려면 Ctrl+C, 프로젝트 VM까지 끄려면 colima --profile code-trainer stop을 실행합니다. colima-code-trainer 프로필이 있으면 ./start.sh가 자동으로 해당 환경을 사용합니다. 로컬 모드는 단일 프로세스·loopback 전용입니다. Mac mini·Cloudflare 운영 모드는 별도의 배포 설정을 사용합니다.

업데이트·문제 해결

서버를 Ctrl+C로 종료한 뒤 git pull → ./start.sh로 업데이트합니다. 잠금 파일에 맞춰 의존성을 설치하며 .env와 data/는 유지합니다. 변경 전 중요한 자료는 아래 백업 명령으로 보관할 수 있습니다.

  • 필수 도구가 없다는 메시지: 해당 도구를 설치한 뒤 새 터미널에서 실행하세요.
  • Docker 연결 실패: 엔진을 켜고 docker version에서 서버 정보가 표시되는지 확인하세요.
  • 8010 포트 사용 중: 기존 앱을 이용하거나 기존 서버를 종료한 뒤 실행하세요.
  • AI 연결 필요: .env의 키·모델을 확인하고 서버를 다시 실행하세요. 키 없이 예제로 먼저 확인할 수도 있습니다.
  • 실행 이미지 없음: ./start.sh가 자동으로 빌드합니다. Dockerfile을 바꿨으면 --setup을 붙이세요.

공유 대상은 소스와 .env.example입니다. .env 및 변형 파일, data/, SQLite 파일, 로그, 설치된 의존성은 .gitignore로 제외합니다. 본인 키를 .env.example에 넣거나 개인 자료를 소스·문서에 붙여 넣지 마세요.

AI 연결

Structured Outputs를 지원하는 OpenAI Chat Completions 호환 API를 프로젝트 루트의 .env로 연결합니다. ./start.sh가 uv의 환경 파일 로더로 읽으며, 터미널에서 이미 설정한 환경변수가 우선합니다. 직접 uvicorn을 실행하면 .env는 자동으로 읽지 않습니다. 비밀키를 소스 파일이나 브라우저에 넣지 마세요.

cp .env.example .env
# .env에서 AI_API_KEY와 AI_MODEL을 입력한 뒤:
./start.sh

.env 예시:

AI_API_KEY=발급받은_API_키
AI_MODEL=사용할_모델_ID
AI_BASE_URL=https://api.openai.com/v1

설정을 바꾼 뒤 서버를 종료하고 ./start.sh로 다시 실행하세요. AI_BASE_URL은 다른 호환 제공자를 사용할 때 변경합니다. 엄격한 JSON Schema 응답(Structured Outputs)과 max_completion_tokens를 지원하는 모델을 사용합니다. 텍스트·Markdown·URL·60KB 이하 .txt/.md 파일에서 생성합니다. 등록한 텍스트·Markdown 원문, 파일명, 원본 URL 및 URL에서 추출한 본문을 로컬 SQLite의 관리자 전용 자료 보관함에 저장합니다. 생성에 실패해도 제출한 자료와 가져온 본문을 보관하며, 학습 자료를 삭제하면 연결된 원문도 삭제합니다. 분석한 Context와 단원별 코드 예제는 문제 생성과 재시도에 사용합니다. 원문·코드는 오류 응답이나 로그에 남기지 않습니다. 입력은 설정한 AI 제공자에게 전송되며, 그 제공자의 보존 정책은 별도로 적용됩니다. 최초 분석에서 자료를 1~6개 단원으로 나누고 개념 설명·예제·해설·이해 확인을 작성합니다. 서로 밀접한 개념은 한 단원으로 묶고, 선행 관계에 따라 순서를 정합니다. 이후 사용자가 선택한 단원의 세트만 생성·검증합니다(단원의 네 단계를 개별 호출로 생성하며, 최초 생성 후 최대 3회 자동 수정·재검증, 총 4회 시도). 한 링크에 여러 개념이 있으면 학습 분량과 맥락에 따라 여러 단원·문제 세트를 계획합니다. 각 단원은 구별되는 학습 목표를 가지며, 공통 개념은 기초·응용 단원에서 다시 다룰 수 있습니다. 과정의 개념 요약과 단원의 세부 개념은 표현이나 범위가 달라도 됩니다. 처음에는 개념 설명과 단원 구성까지만 생성합니다. 각 단원과 개념 상세 페이지의 이 단원 문제 생성으로 해당 세트를 요청합니다. 실패한 단원에는 문제 생성 다시 시도, 오류 원인·진단 로그, 문제 생성 오류 제보가 표시됩니다. 다른 단원의 개념·준비된 세트는 계속 사용할 수 있습니다. 로컬 실행 환경에서는 한 번에 한 단원씩 생성하며, 완성된 세트를 중복 생성하지 않습니다.

새 AI 문제는 기준 풀이 하나와 공개·비공개 테스트를 생성합니다. 대안 풀이의 추가 생성은 요구하지 않으며, 코드 문제에는 정상 실행되지만 지정 테스트에서 틀리는 대표 오답 하나를 함께 생성·검증합니다. 기준 풀이가 모든 테스트를 통과하고 READ의 예상 출력이 실제와 일치하며 FIX 시작 코드는 오답을 내는지 확인합니다. 검증에 걸린 문제는 실제 실행 결과를 받아 실패한 부분을 자동 수정하고 다시 검사합니다. 수정 중에는 실패 화면 대신 자동 수정 1/3처럼 진행 횟수를 표시하며, 한도를 소진했을 때만 최종 실패와 원인을 안내합니다. API 인증·실행 환경 오류는 문제 재생성으로 해결되지 않으므로 바로 안내합니다. 기존 세트에 포함된 추가 검토 코드는 유지합니다.

생성 후보와 수정용 실행 결과도 서버 DB에 비공개로 보존합니다. 실패 후 이어가기를 누르면 통과한 문제를 유지하고 실패한 문제만 수정합니다. 검증 중 서버가 중단되면 저장된 후보를 재검증합니다. 전체 세트가 검증을 통과해 공개되면 임시 후보는 삭제합니다.

FIX 시작 코드만 검증에 실패하면 이미 통과한 정답·테스트는 고정하고, 학습자가 고칠 동작 오류가 있는 시작 코드와 그에 맞는 힌트만 다시 생성합니다. 이후 전체 실행 검증을 거쳐 저장합니다.

READ 코드가 정상 실행됐지만 AI의 예상 출력만 틀렸다면 코드는 유지하고 실제 출력으로 정답을 보정한 뒤 다시 실행해 확인합니다. 새로 생성·수정한 구현 끝에 테스트 코드가 그대로 중복되면 중복 부분만 제거하고 검증합니다. 코드 문제의 기대 출력은 자동으로 덮어쓰지 않습니다.

사용

개념 생성이 완료되면 해당 학습 과정으로 자동 이동합니다. 이후 학습 공간 → 자료 카드 → 개념 학습 → 이 단원 문제 생성 → 연습 순서로 접근합니다. 개념 페이지에는 본문, 코드 예제와 출력, 단계별 해설, 주의점, 이해 확인 질문이 있습니다. 풀이 화면의 ← 개념 학습으로 다시 돌아갈 수 있습니다.

자료 상세 페이지 상단의 자료 삭제로 해당 자료를 삭제할 수 있습니다. 확인 후 단원·문제·저장한 코드·제출·제보·생성 기록을 함께 삭제하고 학습 공간으로 돌아갑니다. 생성 또는 제출 채점 중에는 삭제할 수 없습니다.

자료 생성 시 초급(기본)·중급·고급을 선택합니다. 초급은 한 개념과 충분한 예시, 중급은 관련 개념의 조합, 고급은 여러 단계의 상태 변화와 경계 조건을 중심으로 생성하도록 안내합니다. 자료 밖의 개념을 임의로 추가하지 않습니다. 기존 자료와 준비된 예제는 초급으로 표시하며, 생성 재개 시 원래 난이도를 유지합니다.

URL 본문의 제목·코드 블록과 들여쓰기를 보존하며, Markdown의 fenced/들여쓴 코드 블록도 추출합니다. 관련 예제를 단원에 연결하고 문제 생성·수정에 원문 예제와 전체 수업 코드·해설을 함께 전달합니다. 문서의 세부 동작·주의점·대조 사례를 우선하며 고급에서는 2~3개 요구사항과 공개·비공개 각각 2개 테스트를 생성하도록 안내합니다(형식상 최대 4개까지 허용). 기존 과정은 소급 재생성하지 않으므로 강화된 자료 분석은 새로 만드는 과정에 적용됩니다.

  • READ: 코드를 읽고 예상 출력을 먼저 입력합니다. 마지막 개행만 무시하고 결정적으로 채점합니다.
  • 함수 문제: 함수만 구현합니다. 공개 테스트에는 실제 호출 코드와 기대값을 표시합니다. Run 테스트로 가져오기로 호출 코드를 편집해볼 수 있습니다.
  • Run: Run 테스트 코드 또는 표준 입력으로 현재 코드를 실행합니다. 테스트 코드 편집은 임시이며 저장되지 않습니다. 진도에 영향을 주지 않습니다.
  • Test: 공개 테스트만 실행합니다. Submit: 공개·비공개 테스트로 제출 기록을 남깁니다.
  • 정답 보기: 시도 횟수 제한 없이 READ의 정답 출력 또는 코드 문제의 예시 풀이를 확인합니다. 작성 중인 코드를 덮어쓰거나 제출·완료 처리하지 않습니다.
  • BUILD의 Submit 통과 후 하단의 학습 마무리를 누르면 현재 코드를 저장하고 학습 과정으로 돌아갑니다. 완료한 단계와 제출 기록은 나의 기록에 유지됩니다.
  • 저장: 편집기 상단의 저장을 누르세요. 단계 이동 시에도 저장합니다. 화면 이탈·새로고침 때 미저장 변경을 알립니다.
  • 다중 탭 저장 충돌은 자동 덮어쓰기하지 않습니다. 서버 내용 또는 현재 코드를 선택할 수 있습니다.
  • 문제 생성 오류는 각 단원에서 제보하며, 작업 ID와 진단 로그를 함께 연결합니다. 제보는 로컬에 저장되고 외부로 전송하지 않습니다. 풀이 중 문제 제보는 오른쪽 패널에서 보냅니다. 나의 기록 → 제보 검토에서 검토하거나 해당 세트 제공을 중단합니다.
  • 관계 → 지식 그래프 → AI로 개념 정리는 통과한 문제의 요구사항·시작 코드·통과한 풀이를 AI에 보내, 언어/프레임워크 → 대표 개념 → 구체적인 학습 내용으로 정리합니다. 클래스 정의법·클래스 키워드처럼 같은 주제는 합치고, 각 문장에는 근거가 된 통과 문제와 개념 다시 읽기 링크를 연결합니다. READ는 실행 흐름 추적, FIX는 오류 수정 등 실제 연습 범위만 요약합니다. 정리는 생성 날짜(연·월·일·시각)와 당시의 근거 문제 목록을 SQLite에 별도 보관하며 새 통과 기록이 생기면 버튼으로 업데이트합니다. 날짜별 기록을 선택해 볼 수 있고, 자료를 삭제해도 이미 생성한 요약은 남습니다. 삭제된 문제는 이동 링크 대신 삭제 상태를 표시합니다. 처리 중 페이지를 이동해도 계속 진행하며 실패 시 다시 시도할 수 있습니다. 제출 원본 기록은 DB에 보존하되 최근 제출 목록은 표시하지 않습니다.
  • 시간·메모리·출력 오류와 실행 환경 장애를 구분합니다. 환경 장애는 오답 제출로 기록하지 않습니다.

자동 평가는 함수 호출 또는 표준 입력에 따른 출력 동작을 확인합니다. 특정 문법의 사용이나 개념의 완전한 이해를 증명하지 않습니다. 기준 문제의 사람 의미 검토와 실제 AI 생성 품질 확인은 검증 기록을 참고하세요.

기존에 생성된 문제와 제출 기록은 그대로 유지됩니다. 함수 호출 방식의 예제는 연습 만들기 → 예제로 시작에서 새로 생성하세요.

학습 공간의 자료 카드는 한 페이지에 6개씩 표시합니다. 페이지 번호는 URL에 유지됩니다.

관리자 계정에서는 왼쪽 원본 자료 · 관리자 메뉴로 등록한 링크·문서를 확인합니다. 일반 계정은 원문 조회 API에도 접근할 수 없습니다. 이전 버전에서 등록한 자료는 원문을 보관하지 않았으므로 남아 있는 출처 링크만 확인할 수 있습니다. 새 자료 등록 시 **학습 분류(선택)**에 React 등 분류 이름을 입력할 수 있습니다. 분류 이름은 새 실행 환경이나 패키지 지원을 추가하지 않습니다.

자료의 단원 목록·개념 학습 화면, 기초 구현의 개념 탐구 화면에서 개념 지도에 추가하기를 누르면 문제 생성·제출·AI 호출 없이 학습 내용을 저장합니다. 통과만으로 현재 지도에 자동 등록되지는 않습니다. 추가 당시 설명은 SQLite에 보관하며, 원본 자료를 삭제해도 남습니다. 반복 클릭은 중복 등록하지 않습니다.

관계 → 지식 그래프에서 직접 추가한 학습 단원과 그 단원의 개념·통과 문제를 탐색합니다. 확대·축소와 드래그 이동, 노드 hover 시 연결 강조, 오른쪽 상세 패널의 설명·관계·풀었던 문제 링크를 제공합니다. 실선은 단원이 다루는 개념 또는 풀이 근거, 점선은 학습 과정의 선행 단원이며 연결 자체가 숙달을 뜻하지 않습니다. 과거 날짜별 기록과 관계 목록도 조회할 수 있습니다. 날짜별 보기는 기존 AI 요약의 당시 근거를 그대로 보여줍니다. 등록은 숙달 판정과 별개이며, 출처가 다른 개념의 의미적 통합은 아직 수행하지 않습니다.

복습·도움 기록·AI 사용량

오늘의 복습에서 통과한 문제를 다음 날부터 다시 풀 수 있습니다. 시작 코드와 빈 답안으로 시작하며 복습 초안은 기존 풀이와 별도로 저장합니다. 도움 없이 실패 없이 통과하면 3일·7일·14일 뒤, 실패하거나 도움을 참고하면 다음 날 다시 연습합니다. 진행 중인 복습은 이어갈 수 있습니다.

힌트·정답을 여는 데 제한은 없습니다. 제출에는 앱 내 도움 없이 / 힌트 참고 / 풀이 참고를 함께 기록하고 과거 기록은 도움 기록 없음으로 표시합니다. READ에서 Run으로 정답 출력을 확인한 경우도 풀이 참고입니다. 앱 밖에서 받은 도움은 판단하지 않습니다.

나의 기록 → AI 사용량에서 과정·단원·작업별 호출 수, 자동 수정 호출 수와 제공자가 응답한 입력/출력 토큰을 확인합니다. 응답 누락·통신 실패는 사용량 미확인으로 표시합니다. 이 기능 적용 전의 호출은 소급 집계하지 않으며 금액이나 지출 상한을 보장하지 않습니다.

관리자는 운영 상태에서 Mac의 디스크 여유, 마지막 백업 성공, 실행기 연결 인증서 만료를 확인합니다. 상태 수집기 설치와 경고 기준은 운영 문서를 참고하세요.

개선 계약·검증 · 반례 찾기·한 줄 디버깅 계획 · 구독 글 자동 수집 검토

등록 대기 포스팅

사이드 메뉴 등록 대기 포스팅 → 수집 출처 · 관리에서 관리자가 출처 이름과 공개 RSS/Atom 주소를 추가할 수 있습니다(최대 20개). Korean FE Article은 기본 출처로 유지됩니다. 추가 시 첫 수집을 하고, 이후 앱 실행 중 출처별로 약 1시간마다 확인합니다. 출처별 새 글 확인은 최소 1분 간격이며 일시정지 / 수집 재개로 관리합니다. 이메일 계정 연결은 필요 없습니다.

출처별 보기로 목록을 필터링하고, 목록 새로고침으로 수집된 글을 다시 표시합니다. 출처 설정·공개 글은 공유하고 학습 자료 등록 여부는 사용자별로 기록합니다. 일시정지해도 이미 수집된 글은 남습니다. 같은 URL의 글이 여러 출처에 있으면 처음 수집한 출처에서 한 번만 표시합니다.

포스팅 읽기 → 학습 자료로 등록 → 언어·난이도 확인 → 학습 과정 생성 순서로 사용하세요. 소개 글 대신 원문을 학습하려면 생성 화면에서 자료 URL을 바꾸면 됩니다. 생성 완료 시 대기 목록에서 빠지고 실패하면 남습니다. 수집 자체는 AI를 호출하지 않습니다. 공개 RSS에 포함된 글만 수집하며 유료·이메일 전용 본문은 가져오지 않습니다. 동작과 검증.

데이터와 백업

생성 실패 화면에서 중단 단계, 원인, 재시도 방법을 확인합니다. 진단 로그를 펼치면 작업 ID, AI 모델, 단계별 소요 시간, 검증에 실패한 필드를 볼 수 있습니다. 동일한 정보가 서버 터미널과 data/generation.log에도 기록됩니다.

AI 요청의 응답 대기 한도는 300초이며 연결 대기는 10초입니다. 생성 요청 후에도 입력한 URL·본문은 현재 페이지에 유지되며, 페이지를 나가면 초기화됩니다.

tail -f data/generation.log

로그 파일은 2MB마다 순환하며 이전 2개를 보관합니다. TRAINER_DB를 바꾸면 해당 DB와 같은 폴더에 생성됩니다. 작업별 최근 100개 이벤트는 DB에 저장되어 새로고침 후에도 확인할 수 있습니다. API 키, 제공자 응답 원문, 학습 원문, 정답·비공개 테스트 값은 로그에 포함하지 않습니다. 이전 버전의 실패 기록은 상세 원인을 복원할 수 없으며, 다음 생성부터 진단 정보가 남습니다.

데이터는 data/trainer.sqlite3에 저장됩니다. TRAINER_DB로 경로를 바꿀 수 있습니다. 초안·제출·문제·제보가 서버 재시작 후에도 유지됩니다. 중단된 생성 작업은 실패로 표시되며, 검증이 끝나 저장된 단원을 유지한 채 남은 단원을 다시 요청할 수 있습니다.

.venv/bin/python scripts/backup.py data/backup-2026-09-16.sqlite3

복원은 서버를 정상 종료한 뒤 백업 파일을 새 경로에 놓고 TRAINER_DB로 지정하세요. 실행 중인 SQLite 파일을 단순 복사하지 않습니다.

개발·검사

.venv/bin/python scripts/check-start.py
.venv/bin/python -m unittest backend.test_app -v
.venv/bin/python scripts/check-sandbox.py
cd frontend
npm run typecheck
npm run lint
npm test
npm run build

API 계약 검사는 임시 DB·가짜 실행 결과를 사용하는 검사이고, check-sandbox.py는 실제 컨테이너 검사입니다. 개발할 때는 두 터미널에서 각각 실행합니다.

# 터미널 1: 프런트엔드 (http://127.0.0.1:5173)
cd frontend
npm run dev
# 터미널 2: 개발 백엔드 API (http://127.0.0.1:8011)
cd backend
./dev.sh
# 종료: ./dev.sh stop
# 기존 개발 서버를 종료하고 이 작업 폴더에서 재시작: ./dev.sh restart

백엔드는 프로젝트 루트의 .env와 .venv를 사용합니다. 최초 Python 환경 준비는 루트에서 uv venv --python 3.12 .venv && uv pip sync --python .venv/bin/python requirements.txt로 진행합니다. .env가 없다면 루트에서 cp .env.example .env로 준비하세요. AI API 키·모델·제공자 설정은 현재 .env를 공유합니다. 개발에서도 실제 AI 호출 비용이 발생합니다. 개발 DB는 data/dev/trainer.sqlite3, 로그는 data/dev/에 저장합니다. 기존 계정·자료는 복사하지 않습니다. dev.sh는 셸이나 .env의 운영 DB·실행 서버·Docker 설정을 개발 전용 값으로 덮어씁니다. 백엔드 Python 파일을 저장하면 자동 재시작하며, 진행 중인 생성·채점 작업은 중단될 수 있습니다. Docker CLI와 Colima가 필요하며, dev.sh가 전용 VM code-trainer-dev와 code-trainer-runner:dev 이미지를 준비합니다. 최초 실행에는 이미지 다운로드·빌드 시간이 필요합니다. 이 VM은 2 CPU·2 GiB 메모리를 사용하며 호스트 폴더나 SSH agent를 공유하지 않습니다. 제출 코드 컨테이너는 기존처럼 네트워크 없이 실행됩니다. 개발 VM은 운영 실행 VM의 브로커·mTLS·호스트 네트워크 차단 구성을 재현하지 않습니다. 개발은 전용 Docker 소켓을 직접 사용하므로 운영의 18443/8443 포트를 사용하지 않습니다. 프런트엔드의 /api 요청은 개발 API 8011로 전달됩니다. 운영 API 8010과 운영 VM은 변경하지 않습니다. 코드 실행 환경까지 종료하려면 개발 API를 먼저 종료한 뒤 COLIMA_HOME="$HOME/.colima" colima stop code-trainer-dev를 실행하세요. 실행 이미지의 도구 버전은 sandbox/Dockerfile, Python·웹 의존성은 requirements.txt와 frontend/package-lock.json에 고정합니다. 기존 문제는 검증 당시의 이미지 ID를 사용합니다. code-trainer-runtime:* 이미지를 삭제하면 해당 버전 문제는 실행할 수 없으므로 보존하세요. 자원 제한은 Docker 실행 옵션을 사용합니다.

구현 경계

backend/api.py → service.py → db.py / ai.py / source.py / runner.py 방향으로 의존합니다. schema.py에는 입출력 없는 데이터 계약만 둡니다. 문제·기준 풀이도 사용자 코드와 동일한 격리 환경에서 검증하며, 기대 출력과 정오 판정은 컨테이너 밖에 둡니다. 컨테이너에는 풀이와 호출 테스트를 합친 코드 파일(표준 입력 문제는 풀이 파일) 및 해당 실행의 stdin만 전달합니다. 앱 DB·AI 키·Docker 소켓·비공개 기대값을 마운트하지 않습니다.

미포함: React 프로젝트/미리보기, 의존성 설치 과제, 자체 OAuth, 공개 멀티유저 서비스, 자동 저장, AI 서술형 채점. 단일 소유자용 Mac mini·Cloudflare 배포 상태와 운영 방법은 배포 문서를 참고하세요.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages