OnPyRunner 회고: 프로젝트를 돌아보며

첫 프로젝트 OnPyRunner의 10편 시리즈를 돌아보며, 당시의 판단과 실수를 현재의 관점에서 분석하고, 이 프로젝트를 통해 체득한 엔지니어링 원칙을 정리했습니다.

2026년 3월 25일 · ljweel · 조회수 ...

stdout/stderr 제한과 subprocess 파이프 데드락 해결

무한 출력 이슈를 해결하다 파이프 데드락 문제를 발견하여, 원인 분석부터 해결까지의 과정을 기록하였습니다.

2026년 3월 16일 · ljweel · 조회수 ...

rlimit vs cgroup: 메모리 제한의 두 가지 레이어

rlimit과 cgroup의 차이를 서술한 글입니다.

2026년 3월 6일 · ljweel · 조회수 ...

10. 배포와 오픈

전체 실행 흐름을 시퀀스 다이어그램으로 정리하고, UI를 제작한 뒤 run.ljweel.dev로 서비스를 오픈했습니다.

2026년 2월 22일 · ljweel · 조회수 ...

9. 테스트 자동화와 cgroup 삽질

docker compose watch로 개발 루프를 자동화하고, cgroup v2의 no internal processes rule을 이해하여 fork bomb 방지했습니다.

2026년 2월 11일 · ljweel · 조회수 ...

8. Worker 흐름과 Nsjail 추상화

Worker가 Queue에서 Job을 가져와 Nsjail로 실행하고 결과를 분석하는 전체 흐름을 설계하며, NsjailResult를 통한 추상화를 구현했습니다.

2026년 2월 5일 · ljweel · 조회수 ...

7. Job 상태 머신과 API 설계

PENDING·RUNNING·COMPLETED·FAILED 상태 다이어그램을 정의하고, 각 API의 요청·응답 구조와 의사코드를 설계했습니다.

2026년 1월 31일 · ljweel · 조회수 ...

6. Redis의 본질과 MVP 재정의

Redis는 비동기를 위한 도구가 아니라 Job의 생명주기를 HTTP 요청에서 분리하기 위한 장치임을 깨닫고, 웹-큐-워커 아키텍처로 정했습니다.

2026년 1월 26일 · ljweel · 조회수 ...

5. Docker 도입과 테스트 환경 구축

로컬 우분투에서의 nsjail 디버깅 지옥을 겪은 뒤 Docker를 도입하여 일관된 개발 환경을 구축하고, clone_newns 이슈를 해결했습니다.

2026년 1월 19일 · ljweel · 조회수 ...

4. Nsjail 도입과 TDD 시작

신뢰할 수 없는 코드 실행을 위해 Nsjail을 도입하고, runCode 함수에 대한 테스트 케이스를 작성하며 첫 샌드박스 실행에 성공했습니다.

2026년 1월 15일 · ljweel · 조회수 ...