Jungol
한글과컴퓨터학원에서 운영하는 온라인 저지를 리뉴얼했습니다.
- 채점기를 포함한 모든 서비스를 재개발했습니다.
- 프론트엔드는 스벨트를 사용한 MPA입니다.
- 웹어셈블리 기반으로 작성한 소스 코드 실행을 서버 없이 지원합니다. GCC와 ld의 웹어셈블리를 이용하여 컴파일도 프론트엔드에서 수행합니다. 파이썬 실행은 Pyodide를 이용합니다.
- LSP 서버를 구현해 웹에서 인텔리센스를 사용하여 코딩할 수 있습니다.
- 백엔드는 Node.js와 TypeScript를 사용하여 제작했습니다. Hono 프레임워크를 사용했으며, 더욱 쉬운 MSA 개발을 위해 이를 래핑하는 프레임워크를 만들었습니다.
- TanStack Query와 유사한 자체 쿼리 프레임워크를 구현했습니다. E2E type safety를 지원하며, 간단한 설정으로 SSR에서 로딩할 데이터를 설정할 수도 있습니다.
- MSA 구조를 채용했으며, 메시지 큐를 이용하여 무거운 작업을 비동기적으로 처리합니다.
- 배포 도구 역시 자체 개발했습니다. GitHub에 푸시하면 자동으로 베타 서버에 배포되며, 버튼 클릭으로 이를 프로덕션 서버에 배포할 수 있도록 자동화했습니다.
- 문제 채점기는 직접 구현했습니다. 이 채점기에서 일부 기능이 빠진 버전이 HANA라는 이름으로 오픈소스로 공개되어 있습니다.
- 서비스는 구글 클라우드 플랫폼에서 이루어지며, Compute Engine 같은 단순한 기능만이 아닌 Pub/Sub, Arc, GKE와 같은 기능을 적극적으로 활용했습니다.
- Terraform으로 인프라를 관리합니다.
- Sentry를 사용하여 오류 로그를 자동으로 수집하여 대응하고 있습니다.
