웹 브라우저 기반 인터랙티브 Python 코딩 교육 플랫폼으로, 별도 설치 없이 실시간 코드 실행·자동 채점·미션 기반 학습을 지원하는 온라인 코딩 교육 시스템




| 항목 | 내용 |
|---|---|
| 프로젝트명 | MISSIONCY (코드이썬) |
| 유형 | 교육용 게임 기반 코딩 학습 플랫폼 (B2B/B2G) |
| 대상 사용자 | 초·중·고 학생, 교사(학급 관리자), 사업 관리자, 시스템 관리자 |
| 배포 환경 | Docker 컨테이너 기반 클라우드 배포 |
| 구분 | 기술 |
|---|---|
| Backend | Java , Spring Boot , Spring Security, JPA/Hibernate, QueryDSL |
| Frontend | TypeScript, SvelteKit , Svelte , Tailwind CSS , DaisyUI |
| Game Engine | Cocos Creator |
| Database | MySQL |
| 인증 | JWT (Access/Refresh Token) |
| 인프라 | Docker, GitHub Actions CI/CD, GHCR |
RsData 래퍼를 통한 일관된 응답 형식Rq 빈을 통한 인증 정보·쿠키·요청 컨텍스트 관리학생(MEMBER) → 학급 관리자(CLASSADMIN) → 시스템 관리자(SYSTEMADMIN) → 슈퍼 관리자(SUPERADMIN)@PreAuthorize 어노테이션 기반 메서드 레벨 보안서버 리소스를 소모하지 않고 클라이언트 브라우저에서 Python 코드를 안전하게 실행하기 위해 Pyodide(WebAssembly 기반)와 Brython 이중 런타임을 구현했습니다. Pyodide는 Web Worker에서 격리 실행되어 메인 스레드 블로킹 없이 20초 타임아웃과 함께 안전한 코드 실행을 보장합니다.
Cocos Creator 게임 엔진과 SvelteKit 웹 프레임워크 간의 실시간 데이터 통신을 window 레벨 인터페이스SendInitData, SetVolume, boot)로 구현했습니다. 학생이 작성한 Python 코드의 실행 결과가 프레임 단위로 게임 엔진에 전달되어, 코드 → 시각적 결과의 즉각적인 피드백 루프를 제공합니다.
백엔드의 SpringDoc OpenAPI 스키마를 기반으로 openapi-typescript가 프론트엔드 타입을 자동 생성하고, openapi-fetch가 이를 사용하여 타입 안전한 API 호출을 보장합니다. 백엔드 API 변경 시 프론트엔드 타입이 자동 동기화되어 런타임 에러를 사전에 방지합니다.
Spring Boot 3.2의 Virtual Threads 지원을 활성화하여, 전통적인 플랫폼 스레드 대비 높은 동시성을 확보했습니다. 다수의 학생이 동시에 접속하는 교육 환경에서 효율적인 요청 처리가 가능합니다.
JWT 페이로드에 tokenVersion을 포함하고, 로그인 시 DB에 버전을 갱신하는 방식으로 동일 계정의 다중 디바이스 로그인을 감지합니다. 다른 디바이스에서 로그인 시 기존 세션을 자동 만료 처리하여 공용 기기 환경의 교육 현장에서 계정 보안을 강화했습니다.
17개 비즈니스 도메인을 독립 모듈로 분리하고, 모든 API 응답을 RsData 래퍼로 표준화하여 프론트엔드에서 일관된 에러 처리와 데이터 바인딩이 가능합니다. QueryDSL을 활용한 타입 안전 쿼리와 @BatchSize(100) 배치 페칭으로 N+1 문제를 방지했습니다.
| 화면 | 설명 |
|---|---|
| 메인 (로그인/회원가입) | 영상 배경의 로그인 화면, 캐릭터 선택 |
| 게임 스테이지 선택 | 난이도별 스테이지 목록, 잠금/해금 상태 표시 |
| 게임 플레이 | Cocos 게임 캔버스 + Python 코드 에디터 분할 화면 |
| 캐릭터 상태 | 인벤토리, 장착 아이템, 프로필 관리 |
| 인게임 상점 | 젬 재화로 아이템 구매 |
| 업적 & 랭킹 | 업적 현황, 전체 랭킹 |
| 관리자 대시보드 | 운영 현황 통계 |
| 사업 관리 | 교육 프로그램 CRUD |
| 학교·학급 관리 | 학교 등록, 학급 생성·학생 배정 |
| 학습 진도 | 학급별 학생 학습 현황 |
| 교육 자료실 | Markdown 에디터 기반 자료 관리 |
| 항목 | 내용 |
|---|---|
| 프로젝트명 | MISSIONCY (코드이썬) |
| 유형 | 교육용 게임 기반 코딩 학습 플랫폼 (B2B/B2G) |
| 대상 사용자 | 초·중·고 학생, 교사(학급 관리자), 사업 관리자, 시스템 관리자 |
| 배포 환경 | Docker 컨테이너 기반 클라우드 배포 |
| 구분 | 기술 |
|---|---|
| Backend | Java , Spring Boot , Spring Security, JPA/Hibernate, QueryDSL |
| Frontend | TypeScript, SvelteKit , Svelte , Tailwind CSS , DaisyUI |
| Game Engine | Cocos Creator |
| Database | MySQL |
| 인증 | JWT (Access/Refresh Token) |
| 인프라 | Docker, GitHub Actions CI/CD, GHCR |
RsData 래퍼를 통한 일관된 응답 형식Rq 빈을 통한 인증 정보·쿠키·요청 컨텍스트 관리학생(MEMBER) → 학급 관리자(CLASSADMIN) → 시스템 관리자(SYSTEMADMIN) → 슈퍼 관리자(SUPERADMIN)@PreAuthorize 어노테이션 기반 메서드 레벨 보안서버 리소스를 소모하지 않고 클라이언트 브라우저에서 Python 코드를 안전하게 실행하기 위해 Pyodide(WebAssembly 기반)와 Brython 이중 런타임을 구현했습니다. Pyodide는 Web Worker에서 격리 실행되어 메인 스레드 블로킹 없이 20초 타임아웃과 함께 안전한 코드 실행을 보장합니다.
Cocos Creator 게임 엔진과 SvelteKit 웹 프레임워크 간의 실시간 데이터 통신을 window 레벨 인터페이스SendInitData, SetVolume, boot)로 구현했습니다. 학생이 작성한 Python 코드의 실행 결과가 프레임 단위로 게임 엔진에 전달되어, 코드 → 시각적 결과의 즉각적인 피드백 루프를 제공합니다.
백엔드의 SpringDoc OpenAPI 스키마를 기반으로 openapi-typescript가 프론트엔드 타입을 자동 생성하고, openapi-fetch가 이를 사용하여 타입 안전한 API 호출을 보장합니다. 백엔드 API 변경 시 프론트엔드 타입이 자동 동기화되어 런타임 에러를 사전에 방지합니다.
Spring Boot 3.2의 Virtual Threads 지원을 활성화하여, 전통적인 플랫폼 스레드 대비 높은 동시성을 확보했습니다. 다수의 학생이 동시에 접속하는 교육 환경에서 효율적인 요청 처리가 가능합니다.
JWT 페이로드에 tokenVersion을 포함하고, 로그인 시 DB에 버전을 갱신하는 방식으로 동일 계정의 다중 디바이스 로그인을 감지합니다. 다른 디바이스에서 로그인 시 기존 세션을 자동 만료 처리하여 공용 기기 환경의 교육 현장에서 계정 보안을 강화했습니다.
17개 비즈니스 도메인을 독립 모듈로 분리하고, 모든 API 응답을 RsData 래퍼로 표준화하여 프론트엔드에서 일관된 에러 처리와 데이터 바인딩이 가능합니다. QueryDSL을 활용한 타입 안전 쿼리와 @BatchSize(100) 배치 페칭으로 N+1 문제를 방지했습니다.
| 화면 | 설명 |
|---|---|
| 메인 (로그인/회원가입) | 영상 배경의 로그인 화면, 캐릭터 선택 |
| 게임 스테이지 선택 | 난이도별 스테이지 목록, 잠금/해금 상태 표시 |
| 게임 플레이 | Cocos 게임 캔버스 + Python 코드 에디터 분할 화면 |
| 캐릭터 상태 | 인벤토리, 장착 아이템, 프로필 관리 |
| 인게임 상점 | 젬 재화로 아이템 구매 |
| 업적 & 랭킹 | 업적 현황, 전체 랭킹 |
| 관리자 대시보드 | 운영 현황 통계 |
| 사업 관리 | 교육 프로그램 CRUD |
| 학교·학급 관리 | 학교 등록, 학급 생성·학생 배정 |
| 학습 진도 | 학급별 학생 학습 현황 |
| 교육 자료실 | Markdown 에디터 기반 자료 관리 |