KUCODE
고려대학교 정보대학 학생들의 GitHub 활동을 교과목·프로젝트와 연결해, 교육 현황 분석과 개인 포트폴리오에 활용하는 플랫폼.
분석 대상 학생 1,018명 · 저장소 9,095개 · 개설 교과 30개
GitHub 활동이 수업 밖에서도 활용될 수 있도록
학생들이 작성한 코드와 협업 이력은 GitHub에 남지만, 저장소만으로는 어떤 수업에서 진행한 프로젝트인지, 누가 어떤 활동에 참여했는지 함께 파악하기 어렵습니다. 교수·조교에게는 교과목별 활동 현황이, 학생에게는 자신의 경험을 설명할 자료가 필요했습니다.
KUCODE는 이 두 가지 용도를 함께 지원하는 플랫폼입니다. 고려대학교 정보대학 학생들의 GitHub 계정을 학사 정보와 연결해 교육 현황을 분석하고, 학생은 누적된 활동을 e-Profile과 포트폴리오 자료로 활용할 수 있게 했습니다. 저는 Research Assistant 겸 PM으로 프로젝트를 총괄하며 Django·Vue.js 기반 풀스택 개발과 운영 환경 구축을 맡았습니다.
| 항목 | 규모 | 집계 기준 |
|---|---|---|
| 분석 대상 학생 | 1,018명 | 학생 ID 기준 중복 제거 |
| 연결된 저장소 | 9,095개 | 학생 계정과 연결된 저장소 · 포크 포함 |
| 개설 교과 | 30개 | 5개 학기 · 분반 포함 |
1,000여 명의 학생, 30개 교과목, 9,000여 개 저장소를 잇는 데이터 구조
GitHub 계정만 모으면 개인의 활동은 볼 수 있어도 수업별로 비교하기는 어렵습니다. 같은 과목도 개설 연도와 학기, 분반에 따라 수강생과 프로젝트가 달라지기 때문입니다. 교과목과 수강 정보, 프로젝트 저장소를 각각 관리하고 서로 연결하는 데이터 구조를 구성했습니다.
학생의 GitHub ID로 개발 활동을 연결하고, 개설 연도·학기·학수번호로 교과를 구분했습니다. 수강 이력과 교과 프로젝트의 관계를 따로 보존해 여러 수업에 참여한 학생도 수업별 활동과 개인의 누적 활동을 각각 조회할 수 있게 했습니다.
팀 저장소의 전체 커밋 수를 개인의 실적으로 보여주는 것도 경계했습니다. 커밋·PR·이슈의 작성자와 기여자를 별도로 저장하고, e-Profile에서는 해당 학생의 활동을 보여줍니다. 학생이 소유한 저장소와 다른 사람의 저장소에 기여한 경험도 구분해 확인할 수 있습니다.
전체 재수집 대신, 변경된 저장소만 동기화
학생 계정에 연결된 저장소는 9,095개입니다. 매번 모든 활동을 다시 수집하면 바뀌지 않은 데이터에도 API 호출과 갱신 작업을 반복하게 됩니다. 현재 동기화 경로는 저장소 갱신·푸시 시점을 비교해 수집 대상을 고르고, 한 번의 실행 안에서는 같은 소유자의 저장소 목록을 재사용합니다.
푸시 시점만으로는 충분하지 않았습니다. 코드가 바뀌지 않아도 PR이나 이슈는 새로 등록되거나 상태가 달라질 수 있기 때문입니다. 저장소 정보에 변화가 없더라도 PR·이슈 활동을 별도로 확인하고, 갱신할 내용이 있으면 수집 대상에 포함합니다.
변경 여부를 확인하는 API가 실패했을 때는 해당 저장소를 건너뛰지 않습니다. 확인 실패를 “변경 없음”으로 처리하면 실제 활동을 놓칠 수 있어 수집 대상에 남깁니다. 불필요한 수집을 줄이되 확인되지 않은 항목까지 제외하지 않도록 한 판단입니다. 전체 재수집 경로도 유지하고, 커밋에는 저장소·SHA 복합 유일성 제약을 두어 중복 저장을 막았습니다.
저장소를 하나씩 열지 않아도 보이는 교과목별 GitHub 활동
교수·조교가 저장소를 하나씩 열지 않아도 교과목별 수강생과 Commit·PR·Issue·Star·저장소 수를 함께 볼 수 있게 했습니다. 학사 정보와 개발 활동을 같은 화면에서 조회하고, 통계 화면에서는 과목·학과별로 분석 범위를 바꿀 수 있습니다.
학생 명부 가져오기와 검색, 통계 내보내기도 제공해 교육 운영 업무에서 활용할 수 있도록 했습니다. 교과 관리에서는 학기별 개설 현황을, 학생 분석에서는 수강 과목과 GitHub 활동을 함께 확인합니다. 누가 어떤 수업에서 참여했는지 찾아볼 수 있도록 학사 정보와 활동 정보를 연결했습니다.
이 화면들이 GitHub 응답을 매번 기다리지 않도록 수집과 조회를 분리했습니다. 분석 API는 DB에 저장된 활동을 사용합니다. 학생별 교과 분석에서는 수강·교과 정보를 미리 불러오고, 저장소와 프로젝트를 ID별로 묶어 학생·과목마다 같은 관계를 다시 조회하는 작업을 줄였습니다.
수집한 GitHub 활동을 학생의 e-Profile과 포트폴리오로
교육 운영을 위해 모은 데이터가 관리자 화면에만 남지 않도록 개인 e-Profile로 연결했습니다. 학생은 주요 사용 언어, 커밋·PR·이슈, 활동 추이와 프로젝트 목록을 확인하고 자기소개와 기술 스택을 함께 정리할 수 있습니다.
학생은 교과 프로젝트와 자율 활동을 구분해 살펴보고, PDF에 담을 프로젝트를 직접 선택할 수 있습니다. 모든 저장소를 나열하는 대신 지원 분야나 설명하려는 경험에 맞게 활동을 골라 포트폴리오 자료로 활용하도록 했습니다. 활동 수치만으로 역량을 평가하기보다, 프로젝트 경험을 설명할 근거를 제공하는 기능입니다.
기획부터 개발, 운영까지 직접 맡은 KUCODE
프로젝트 총괄·PM으로 개발계획과 화면설계의 요구사항을 정리하고, 풀스택 개발과 운영 환경 구축까지 맡았습니다. 학생에게 필요한 개인 활동 정리와 교수·조교에게 필요한 교과 분석을 같은 데이터로 제공하되, 각 화면의 조회 기준과 용도를 구분하는 일이 중요했습니다.
Django·Vue.js·PostgreSQL을 기반으로 서비스를 구현하고 Nginx·Gunicorn을 Docker Compose로 구성했습니다. 개발 중인 설정이나 데이터가 운영 환경에 섞이지 않도록 개발·스테이징·운영의 Compose 프로젝트와 데이터 볼륨을 구분했습니다.
KUCODE는 5개 학기, 30개 개설 교과의 데이터가 쌓인 서비스로 이어졌습니다. GitHub 활동을 연결·조회하는 기능에서 출발해 교수·조교가 교육 현황을 확인하고 학생이 자신의 프로젝트 경험을 정리하는 데 활용할 수 있게 했습니다.