프로그래밍 과제 제출 환경 통합 및 검사 자동화 플랫폼: MoaRoom(모아룸)
링크: http://moaroom-front.duckdns.org:3000
- 비용 제한으로 인해 현재 서버를 닫아놓은 상태입니다. 링크에 접속하시면 데모를 확인하실 수 있습니다.
- 추가 문의사항이 있으시면
금나연([email protected])
으로 연락주시면 감사드리겠습니다.
금나연: Infra & Frontend
김민지: Backend & Frontend
㈜그렙(programmers.co.kr)(대한민국)
- Kubernetes를 이용하여 제출자 별로 독립적인 컨테이너(환경)를 할당하고, 채점자는 이러한 리소스들을 손쉽게 관리하고 제출자의 구현물을 열람할 수 있는 플랫폼을 개발하고자 함
- 채점자로 하여금 제출자의 수에 구애받지 않고, 시간과 노력을 절감할 수 있는 자동 채점 기능을 구현하고자 함
- 가상 머신보다 가볍지만 마찬가지로 독립성을 보장하는 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 오픈소스 Kubernetes를 이용하여 제출자 별로 상호 독립적인 환경을 조성할 수 있음.
- 제출자로 하여금 별다른 가상 환경이나 통합 개발 환경 없이 웹 접속 만으로 과제를 수행할 수 있음.
- 프로그래밍에 대한 관심과 더불어 증가한 채점자 수 대 제출자 수의 비율에 자동 채점 기능을 이용하여 관리의 용이성을 향상시킬 수 있음.
- 채점자(교수/조교)
- 제출된 과제를 로컬 PC에 다운로드, 실행하지 않고도 열람 가능
- 자동화된 채점 기능
- 제출자(학생)
- 채점자의 기준에 맞는 개발 환경에서 과제 수행, 제출 가능
- [MoaRoom-Front] 프론트엔드
- 사용 기술: React.ts 18.2.0, TypeScript 4.0, Ubuntu 22.04(AWS EC2)
- 개발 환경: Visual Studio Code 1.68
- 구현
- 교수: 로그인 → 강의 리스트 확인 → 채점 대시보드, 컨테이너 할당 대시보드
- 학생: 로그인 → 강의 리스트 확인 → 과제 리스트, 컨테이너 할당 요청 리스트
- 공통: 마이페이지(수강 중/개설한 강의 목록 확인 가능, 사용자 정보 확인 및 수정)
- [MoaRoom-Back] 백엔드
- 사용 기술: Spring Boot 2.7.10, JAVA 11.0.18, PostgreSQL 15.2, Ubuntu 22.04(AWS EC2)
- 개발 환경: IntelliJ 2022.3
- 구현:
- Create: 회원 가입, 강의 생성, 과제 생성
- Read: 사용자 정보 불러오기, 강의/과제 리스트 불러오기
- Update: 사용자 정보 수정
- Delete: 강의 삭제, 과제 삭제
-
[Moaroom-Provisioning-Infra] Infrastructure provisioning pipeline
- 사용 기술: Kubernetes 1.25.8, Kubespray 2.21.0, Ansible 2.12, Docker 20.10.17, Terraform v1.4.2
- 개발 환경: MacOS Ventura 13.2.1
- 구현:
- Terraform을 이용하여 AWS EKS 구축
- Kubespray(Ansible)을 이용하여 AWS EC2에 Kubernetes 클러스터 구축
-
[MoaRoom-Infra] Infra 개발과 관련된 Docker Image 및 CI/CD pipeline
- 사용 기술: ArgoCD to v2.5.5, helm 3.10.3, Dockerhub, Github, AWS S3, AWS CodeDeploy
- 개발 환경: MacOS Ventura 13.2.1
- 구현:
- 개발자의 원격 브랜치에서 Docker 이미지 빌드에 필요한 파일 또는 Kubernetes configuration 관련 파일을 Github에 푸시
- Github Actions를 통해 이미지 빌드 및 DockerHub에 푸시
- Kustomize + ArgoCD를 통해 AWS EKS 또는 EC2의 K8s cluster에 전달 후 변경 사항 반영
-
Cloud architecture
- 사용 기술: AWS EKS, EC2, EFS, DuckDNS
- 개발 환경: Amazon Web Services
- 구현
- Kubernetes cluster
- Service: Public IP를 통해 들어온 외부 트래픽을 NodePort 타입의 Router Service 및 Pod를 통해 Professor(교수), Student(학생) Service에 전달
- Management: CI/CD pipeline에 필요한 ArgoCD의 Service 및 Pod 등을 통해 필요 과정 수행
- Logging/Monitoring ELK Stack, Prometheus Stack을 구축하여 Service, Management 관련 Pod들을 모니터링, 필요시 Kibana 또는 Grafana의 Service를 ELB에 연결하여 관리자에게 웹 UI 대시보드 제공
- Service
- WEB Server(EC2, EBS): 프론트엔드 단에서 Public IP를 통해 들어온 외부 트래픽을 처리, 재사용 가능한 EBS 볼륨 사용
- WAS Server(EC2, EBS): Private Subnet에서 WEB server에서 필요한 API 제공, 재사용 가능한 EBS 볼륨 사용
- DB Server(RDS-PostgreSQL): Private Subnet에서 서비스 관련 정보 저장
- Storage Server(S3): Private Subnet에서 서비스에 필요한 파일, 영상 등 미디어 자료 저장
- DDNS: DuckDNS를 사용하여 무료 도메인 적용
- Kubernetes cluster