- UW 학생 JD Kaim은 정원이 찬 과목에서 학생들이 수강 자리를 맞교환할 상대를 찾는 HuskySwap MVP를 만들고, 봄학기 수강신청 전 출시를 준비 중이었음
- 이 프로젝트는 CSE 403 수업 과제에서 출발했으며, 최신.NET과 Angular, 데이터베이스 추상화, 실시간 채팅, 역할 기반 권한을 익히는 풀스택 연습이기도 했음
- UW 등록 시스템의 Swagger 문서가 Student Web Service의 강의·등록·섹션·사람·학기 데이터 접근을 안내해, 우선 읽기 전용 토큰으로 강의 카탈로그 가져오기를 자동화하려 했음
- 토큰 요청 몇 시간 뒤 Registration Tampering Abuse Policy 위반 통지를 받았고, 가짜 데모 강의가 있는 사이트를 내리지 않으면 퇴학으로 이어질 절차가 시작될 수 있다는 지시를 받음
- 데모 사이트 삭제 자체보다, 학교 경험을 개선하려던 시도가 즉시 강한 제재로 돌아온 점이 핵심이며 JD Kaim은 몇 달 뒤 졸업 예정이고 6월부터 풀타임 소프트웨어 엔지니어로 일할 수 있다고 알림
HuskySwap이 풀려던 수강 교환 문제
- HuskySwap은 정원이 찬 주요 수업에서 학생들이 서로 수강 자리를 교환할 상대를 찾도록 돕는 간단한 앱이었음
- UW에는 이런 목적의 대표적인 해결책이 없었고, JD Kaim은 모두에게 도움이 되는 서비스를 만들고 싶어 했음
- 지난 분기 CSE 403 수업 과제로 초기 버전이 만들어졌으며, 데모를 본 사람들이 실제 사용 의사를 보였음
- 이후 겨울학기 일정 일부를 써서 봄학기 수강신청 전에 더 견고하게 다듬어 출시하려고 했음
구현 과정과 학습 목표
- 초기 MVP는 최신 .NET과 Angular를 따라잡기 위한 연습 성격도 있었음
- 구현 과정에서 다룬 주요 기능은 다음과 같음
- 데이터베이스 추상화
- 실시간 채팅
- 역할 기반 권한
- 원래도 만들 가능성이 있던 프로젝트였고, 동시에 CSE 403 학점도 받을 수 있어 적절한 기회였음
UW 등록 시스템 API 접근 요청
- JD Kaim은 등록 시스템 연동을 위한 Swagger 문서를 발견함
- 문서상 Student Web Service는 애플리케이션에 Student 데이터베이스의 여러 정보를 제공하는 것으로 되어 있었음
- 강의 데이터
- 등록 데이터
- 섹션 데이터
- 사람 데이터
- 학기 데이터
- 일반 학사 데이터
- 이 설명 때문에 HuskySwap 같은 시나리오를 학교가 지원한다고 받아들임
- 처음 요청한 범위는 크지 않았고, 모든 수업을 수동 입력하는 대신 강의 카탈로그 가져오기를 자동화하기 위한 읽기 전용 접근 토큰이었음
- 일이 잘 풀리면 프로세스를 더 자동화하거나 커뮤니티 경험을 개선할 다른 빈틈도 찾고 싶어 했음
위반 통지와 사이트 삭제 요구
- 토큰 요청 몇 시간 뒤 “Notice of Violation of Registration Tampering Abuse Policy”라는 답변을 받음
- 학교는 데모 사이트와 그 안의 가짜 데모 강의 몇 개를 내리라고 지시함
- 사이트를 내리지 않으면 퇴학으로 끝날 수 있는 절차를 시작하겠다는 내용이 포함돼 있었음
- JD Kaim은 학교 경험을 모두에게 더 낫게 만들려는 의도로 연락했지만, 학교가 곧바로 강경하게 대응했다고 받아들임
이후 계획과 구직 메시지
- 퇴학 위협 자체는 데모 사이트를 내리면 되기 때문에 크게 걱정하지 않는다고 함
- 다만 학교가 자신을 바라보는 방식에 실망했고, 학교가 시도 자체에 관심을 보이거나 기뻐할 것으로 기대했다고 전함
- 몇 달 뒤 졸업 예정이며, UW Registrar의 승인을 받을 필요가 없는 프로젝트로 옮겨가고 싶어 함
- 풀타임 소프트웨어 엔지니어를 찾는 사람이 있다면 연결해 달라고 했고, 6월부터 풀타임으로 시작할 수 있다고 알림
- 프로젝트 저장소로 HuskySwap을 공유함