브라우저에서 바로 실행되는 Python 학습용 웹 IDE를 구현합니다.
브라우저에서 바로 실행되는 Python 학습용 웹 IDE를 구현합니다. 학생별로 격리된 Docker 컨테이너를 자동 프로비저닝하고, Monaco 에디터·실시간 콘솔·Streamlit 미리보기를 WebSocket으로 연결해 코드 작성부터 실행 결과 확인까지 하나의 화면에서 처리하는 구조를 React + TypeScript + Node.js 기반으로 설계합니다.
작업 범위
주요 업무



학생이 좌측 파일 트리에서 파일을 생성·이름변경·삭제하고, 중앙 Monaco 에디터에서 Python 코드를 작성할 수 있는 실습 워크스페이스를 제공합니다.
Monaco Editor의 언어 서비스와 파일 시스템 상태를 단일 소스로 통합해, 편집·저장·실행 흐름이 끊김 없이 이어지는 구조를 설계합니다


실행 버튼을 누르면 print·오류 메시지가 콘솔에 실시간으로 표시되고, 학생이 만든 Streamlit 앱이 우측 패널 iframe에서 바로 동작합니다.
실행 로그와 Streamlit 미리보기를 하나의 WebSocket 세션에서 함께 관리해, 코드 수정 후 재실행까지의 흐름을 하나의 화면에서 처리하는 구조를 구현합니다


강의실 입장 시 학생별로 격리된 Docker 컨테이너가 자동 생성되고, 연결 상태와 볼륨 마운트 진행 상황을 화면에서 확인할 수 있습니다.
컨테이너 생성부터 볼륨 복원까지의 과정을 상태 머신으로 설계해, 학생이 재접속했을 때 이전 작업 환경을 그대로 이어갈 수 있는 구조를 구현합니다


WebSocket 연결이 끊겨도 자동으로 재연결을 시도하고, 컨테이너가 비정상 종료되면 학생 모르게 자동으로 재생성해 실습이 끊기지 않도록 합니다.
연결 끊김부터 컨테이너 재생성, 상태 재동기화까지의 전체 복구 흐름을 하나의 파이프라인으로 설계해 학생이 별도 조치 없이 실습을 이어갈 수 있도록 구현합니다


학생 실습 시나리오 분석, Docker 볼륨·네트워크 격리 구조 설계, PostgreSQL 스키마 테이블 정의
Dockerode 기반 프로비저닝·볼륨 마운트·회수 API 구현, cgroup 리소스 제한 정책 적용
Monaco 에디터·파일 트리·실행 제어 UI 구현, 재사용 React 컴포넌트 설계
Socket.io 기반 콘솔 스트리밍, 재연결 상태 머신 구현, Streamlit iframe 프록시 라우팅 적용
동시 접속 시뮬레이션, 장애 복구 시나리오 테스트, 크로스 브라우저 검증