ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
알고리즘 스터디를 위한 자체 호스팅 온라인 저지(Online Judge)입니다. 문제 출제부터 제출·채점·풀이 공유까지 스터디에 필요한 흐름을 한 곳에서 처리합니다. • 웹: https://oj-oui2.vercel.app (가입은 스터디원 대상) • API: Oracle Cloud Ampere 한 박스, blue-green 무중단 배포檢視完整 README ↗
알고리즘 스터디를 위한 자체 호스팅 온라인 저지(Online Judge)입니다. 문제 출제부터 제출·채점·풀이 공유까지 스터디에 필요한 흐름을 한 곳에서 처리합니다.
.md 파일로 문제 업로드/다운로드, 지문 이미지 업로드(박스 디스크)/서버상태 모니터링, master 머지 시 업데이트 자동 공지모든 구성 요소가 Oracle Cloud Ampere 한 박스(aarch64, 2 OCPU / 12GB) 에서 돕니다.
앱은 DB·브로커·채점기를 주소(.env)로만 알고 있어서 어디에 두든 설정만 바꾸면 됩니다 —
AWS에서 이 박스로 옮길 때 애플리케이션 코드를 거의 건드리지 않은 이유입니다.
Vercel (Next.js)
│ HTTPS algoj.duckdns.org
▼
┌────────── OCI Ampere (aarch64, 2 OCPU / 12GB) ──────────┐
│ nginx — TLS 종단 + blue-green 업스트림 │
│ ├─ API algoj-api-blue|green 127.0.0.1:8081|8082 │
│ └─ 내부 고정 :8080 ◀── Discord 봇 (host network) │
│ │
│ algoj-net (도커 네트워크 — 호스트 포트를 열지 않는다) │
│ ├─▶ MySQL 8 DB_HOST=mysql 스키마는 Flyway │
│ ├─▶ RabbitMQ 4 RABBITMQ_HOST judge.queue │
│ └─▶ judge-runner JUDGE0_URL 채점 샌드박스 │
└──────────────────────────────────────────────────────────┘
/api/health가
통과하면 nginx 업스트림을 갈아끼웁니다. 12GB라 JVM 두 개가 잠깐 겹쳐도 됩니다
(2GB 시절에는 스왑 때문에 불가능해 박스를 두 대로 나눴었습니다 → deploy/archive/redundancy.md)judge-runner/README.mdjudge.queue 적재 → 리스너 워커가 꺼내 채점 → 결과 저장, 프론트는 폴링으로 갱신.
PENDING으로 남은 제출은 스위퍼가 1분 주기로 재적재합니다src/main/resources/db/migration/)가 관리하고 Hibernate는 validate만 수행합니다/images/**로 직접 서빙합니다 (blue-green 두 색이 같은 디렉터리를 공유)deploy/backup.mddeploy/oracle-cloud-migration.md,
AWS 시절의 이중화·컴포넌트 분리 기록은 deploy/archive/에 남아 있습니다| 영역 | 스택 |
|---|---|
| 백엔드 | Java 21, Spring Boot 3.5 (Web·Security·Data JPA·AMQP·Validation·Actuator), Flyway, JJWT |
| 프론트엔드 | Node.js 22, Next.js 14, React 18, TypeScript, Tailwind CSS 4, TanStack Query, Monaco Editor, react-markdown + KaTeX |
| 인프라 | Oracle Cloud(Ampere/arm64), MySQL 8, RabbitMQ 4, 자체 채점기, Docker, nginx, GitHub Actions CI/CD |
| 봇 | Node.js 22, discord.js 14 |
├── src/ # Spring Boot 백엔드 (dev.algoj)
│ ├── domain/ # user · problem · submission · run · image
│ └── global/ # config · security · Judge0 클라이언트 · 모니터링
├── frontend/ # Next.js 프론트엔드
├── judge-runner/ # 채점기 (Judge0 대체) — 서비스 + 샌드박스 이미지
├── discord-bot/ # Discord 봇 (연동/비밀번호/서버상태/배포공지)
├── deploy/ # 배포 자료 + 운영 가이드
│ ├── deploy-api.sh # 한 박스 blue-green 배포 (CD가 실행)
│ ├── backup-db.sh # DB 백업 (cron으로 매일)
│ ├── nginx/ # 공개 사이트 · upstream 시드 · 내부 :8080 고정 진입점
│ ├── docker-compose*.yml # 로컬 인프라 · 운영(MySQL+RabbitMQ) · 채점기 · Discord 봇
│ └── archive/ # AWS 시절 설계·이전 기록 (현재 구성 아님)
├── scripts/dev.sh # 로컬 백엔드 실행 스크립트
└── .github/workflows/ # ci.yml (검증) · cd.yml (배포) · judge-images.yml (채점기 이미지)
ssh <박스> "docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' algoj-judge-runner"
ssh -L 2358:<위 IP>:2358 <박스>
cp .env.example .env.dev # 값 채우기 (DB, JWT_SECRET, JUDGE0_URL 등)
cd deploy
docker compose --env-file ../.env.dev up -d # mysql :3306, rabbitmq :5672 (+관리 UI :15672)
로컬 전용 구성입니다. 운영은 MySQL·RabbitMQ를 deploy/docker-compose.oci.yml로 띄우고
호스트 포트를 열지 않습니다(위 아키텍처 참고).
./scripts/dev.sh # .env.dev 로드 후 bootRun (dev 프로필)
첫 부팅 시 Flyway가 스키마를 자동 생성합니다. dev 프로필은 기본으로 admin / admin1234 계정을 시드합니다.
cd frontend
npm ci
npm run dev # http://localhost:3000, API는 NEXT_PUBLIC_API_BASE_URL (기본 :8080)
./gradlew test # 백엔드 전체 (통합 테스트는 MySQL 필요 — CI와 동일)
./gradlew test --tests 'dev.algoj.domain.*' --tests 'dev.algoj.global.*'
# DB 없이 실행 가능한 단위/H2 테스트만
cd frontend && npm run lint && npm run build
SchemaDdlGenerator 테스트로 DDL을 뽑아 diff를 확인하고 db/migration/V<N>__*.sql을 추가하세요.master에 머지되면 GitHub Actions(cd.yml)가 자동으로:
deploy-api.sh) 실행 —
비어 있는 포트에 새 컨테이너를 띄우고 /api/health가 통과하면 nginx upstream을 전환합니다.
통과하지 못하면 nginx를 건드리지 않고 새 컨테이너만 지우므로 구버전이 계속 서빙됩니다.## 공지 섹션으로 Discord 업데이트 공지Flyway 마이그레이션은 앱이 부팅하면서 자동 적용되므로 스키마 변경에 별도 서버 작업이 필요 없습니다. 서버 초기 세팅, nginx/TLS, 봇 운영 등 자세한 내용은 deploy/README.md 참고.
| 명령 | 설명 |
|---|---|
/연동 <코드> | OJ 계정 페이지에서 발급한 코드로 디스코드 계정 연동 |
/비밀번호분실 | 연동된 계정의 임시 비밀번호 발급 (본인에게만 표시) |
/서버상태 | DB · Judge0 · 채점 큐(대기/워커/DLQ) · 제출 현황 · JVM 상태 확인 |
배포 공지는 명령이 아니라 자동입니다 — PR 본문에 ## 공지 섹션을 쓰면, 머지·배포 성공 시
그 섹션 내용만 DISCORD_ANNOUNCE_CHANNEL_ID 채널에 올라갑니다. 섹션이 없는 PR은 공지 없이 배포됩니다.