COU
Summary
문제 풀이와 코드 채점, 대회 및 커뮤니티를 제공하는 오픈소스 온라인 저지 플랫폼입니다. 운영 목적에 맞게 기능을 수정하고 자체 환경에 배포할 수 있도록 구성했으며, 3명으로 시작한 개발 프로젝트를 10명 규모의 스타트업으로 발전시켰습니다.
- Role
- Founder, PM (제품 기획, 팀 운영, 개발 참여, 대외 발표)
- Stack
- Vue.js, Django, PostgreSQL, Redis, Docker Compose
- Outcome
- 오픈소스 온라인 저지 공개, 2022 SW인재페스티벌 우수 작품 선정
문제
운영 목적에 맞게 바꿀 수 있는 온라인 저지가 필요했습니다
중앙에서 제공하는 온라인 저지는 이용자가 원하는 기능을 수정하거나 별도의 환경에 배포해 운영하는 데 제약이 있었습니다. 필요한 문제를 모아 연습하거나 일정에 맞춰 대회를 여는 것뿐 아니라, 서비스 자체를 목적에 맞게 구성할 수 있는 플랫폼을 만들고자 했습니다.
이 문제를 해결하고자 팀원 두 명을 모아, 세 명이 함께 프로젝트를 시작했습니다. 사용자의 문제 풀이와 코드 제출, 채점 확인 과정과 운영자의 서비스 설정 및 문제 관리 과정을 함께 제품의 범위로 잡았습니다. 저는 제품 기획과 팀 운영을 맡고 개발에도 참여했습니다.
설계 방향
필요한 기능을 더하고, 화면과 서버를 각각 수정할 수 있게
오픈소스 온라인 저지의 기본 구조와 채점 기능을 활용하고, 임시저장과 풀이 진행 확인, 커뮤니티 등 서비스에 필요한 기능을 더했습니다. 운영자는 서비스 이름과 회원가입 허용 여부를 정하고, 문제와 카테고리, 대회를 직접 구성할 수 있습니다.
화면과 서버 기능을 각각 개발하고 수정할 수 있도록 Vue.js 화면과 Django API를 분리했습니다. 백엔드는 계정과 문제, 제출과 채점, 대회 등의 기능별 모듈로 구성되어 있습니다. 화면 구성을 바꾸거나 필요한 서버 기능을 추가할 때 각 영역에서 작업할 수 있는 구조입니다.
사용 흐름 #1
문제를 읽고 코드를 작성해 결과를 확인하는 흐름
문제 풀이는 설명과 예제 입출력을 읽고, 코드를 작성하고, 제출 결과를 확인하는 과정의 반복입니다. 이 과정이 한 화면에서 이어지도록 문제 설명과 코드 편집기를 나란히 배치했습니다. 여러 언어로 코드를 작성해 제출하고 채점 결과를 확인할 수 있으며, 편집기는 구문 강조와 테마 전환을 지원합니다.
한 번의 제출로 풀이가 끝나지 않는 경우도 고려했습니다. 작성 중인 코드는 사용자와 문제, 선택한 언어별로 자동 저장하고, 다시 풀이를 시작하면 해당 조건의 코드를 불러옵니다. 여러 문제나 언어를 오가며 풀더라도 이전에 작성하던 코드를 이어서 사용할 수 있도록 한 기능입니다.
사용 흐름 #2
연습과 대회가 같은 서비스 안에서 이어지도록
연습할 문제를 고르고 풀이 진행을 확인할 수 있도록 문제를 카테고리로 묶고, 카테고리별 달성률을 제공합니다. 사용자는 태그와 난이도, 검색과 필터로 문제를 찾거나 무작위로 선택해 풀 수 있습니다.
대회에서는 운영자가 시작과 종료 시각을 정하고, 참가자는 같은 서비스에서 문제를 풀고 제출 현황을 확인합니다. 코딩 테스트 상황에서는 참가자끼리 제출 코드를 볼 수 없도록 비공개 제출을 지원했습니다. 질문과 게시글을 주고받는 커뮤니티와 알림도 함께 제공해, 풀이 중 생기는 논의가 이어질 수 있도록 했습니다.
배포와 실행
웹과 데이터 저장소, 채점 환경을 함께 실행하도록
운영자가 직접 서비스를 띄우려면 웹 기능과 데이터 저장소, 코드 채점 환경을 함께 준비할 수 있어야 했습니다. 웹 애플리케이션과 PostgreSQL, Redis, 채점 서버를 각각 컨테이너로 구성하고 Docker Compose로 묶었습니다. 필요한 이미지가 준비된 환경에서 한 번의 명령으로 서비스 구성요소를 함께 실행하는 방식입니다.
사용자가 제출한 코드는 웹 요청 처리와 분리된 채점 컨테이너에서 실행합니다. 기반 채점 환경의 권한 제한 구성을 활용해 제출 코드 실행에 따른 위험을 줄이는 구조를 유지했습니다. GCP에 배포한 환경에서는 문제 등록과 코드 제출, 채점 결과 확인까지 실제로 동작하는 것을 확인했습니다.
팀과 결과
첫 창업으로 넓어진 개발자의 시야
처음에는 제가 제안서를 작성해 팀원 두 명을 모았고, 세 명이 함께 개발을 시작했습니다. 개발을 이어가며 팀을 10명 규모로 키웠고, 플랫폼이 어느 정도 완성된 시점에는 사업자 등록을 하며 창업으로 이어갔습니다. PM과 창업자로서 제품 방향을 정하고 팀원들의 역할과 일정을 조율하며 대외 발표도 맡았습니다.
2022년 강원권 SW중심대학 협력 워크숍에서 학교 대표로 COU를 발표했습니다. 기능을 목적에 맞게 수정하고 자체 환경에 배포해 운영할 수 있는 플랫폼의 설계와 구현 내용을 소개했습니다.
플랫폼의 구조와 구현은 "오픈소스를 활용한 코딩 플랫폼 설계 및 구현" 논문으로 정리해 ACK 2022에 게재했습니다. Vue.js와 Django API의 분리, 컨테이너별 역할과 Docker Compose를 통한 실행 구성을 설명하고, GCP에서 문제 등록과 코드 제출, 채점 결과 확인까지의 수행 결과를 담았습니다.
2022 SW인재페스티벌에도 학교 대표로 참가해 COU를 선보였습니다. COU는 우수 작품으로 선정됐고, 부스를 운영하며 서비스를 직접 시연하고 무대에서 발표했습니다. 문제 풀이 화면부터 코드 제출과 채점까지 구현한 서비스를 소개했습니다.
처음 창업에 도전하며 제품 기획과 팀 운영뿐 아니라 행정 업무와 여러 지원사업 준비도 직접 맡았습니다. 기능을 구현하는 데서 나아가 무엇을 만들지, 어떻게 역할과 일정을 조율할지, 프로젝트를 이어 갈 여건은 어떻게 마련할지를 함께 고민했습니다. 개발을 중심으로 쌓아 온 경험을 제품과 팀, 사업 전반으로 넓혔다는 점에서 제게 특히 의미가 큰 프로젝트입니다.
설계와 구현 내용은 오픈소스를 활용한 코딩 플랫폼 설계 및 구현 논문에서 확인할 수 있습니다.