개발 경험이 없던 Developer Relations 담당자가 사내 해커톤 '우아톤'의 제출·심사·집계를 자동화하는 플랫폼을 Claude와 함께 직접 만든 기록이다. 36개 팀 153명 규모에서 예선 15분·결선 10분 안에 집계를 끝내야 하는 제약이 출발점이었다. 배포 권한, DB 권한, 디자인 정확도, Bedrock 인증이라는 네 개의 벽을 넘는 과정과, AI가 95%까지 끌어올린 뒤 남는 5%의 정체를 다룬다.
핵심 포인트- FastAPI로 시작했다가 사내 표준인 Kotlin + Spring Boot로 포팅했다. 이후 운영 시 중복 작업을 피하기 위한 선택이었고, 포팅 자체는 한 줄 요청으로 끝났다.
- SQLite는 서버마다 파일이 따로 생겨 로그인 세션이 풀렸다. MySQL 공유 DB로 옮기고 세션을 DB에 저장해 해결했다.
- 디자인 handoff 링크만 주면 색·간격이 어긋나고, HTML만 주면 동작이 빠졌다. 둘을 함께 주고 "근사치 금지" 지침서를 붙여야 설계값이 유지됐다.
- Bedrock 인증이 표준 SDK의 서명 방식이 아니라 Bearer 토큰이어서, SDK의 서명 동작을 끄고 토큰을 직접 삽입해야 통과했다.
- 최종 커밋 392개. AI로 체감 95%를 만들어도 색상 정확도·간격·한글 줄바꿈·반응형 검증 같은 마지막 5%는 사람의 반복 수정이 필요했다.
상세 정리- 배경: 우아톤은 2019년 시작해 2026년 7회를 맞았고, 올해는 무박 2일에서 원데이 챌린지로 바뀌며 36개 팀 153명이 참가했다. 참가팀이 늘면서 수작업 집계의 위험이 커졌다.
- 목표 설정: "참가자는 편하게, 운영자는 실수 없이". 제출부터 동료평가·예선 통과·최종심사·집계·전시까지 단계 사이의 수작업을 없애는 것이 설계 원칙이었다.
- 1단계 배포 실패: 사내 배포 콘솔에서 AWS 계정을 잘못 골라 "Failed to create deployment group"이 떴다. 보안팀의 사전 안내를 받고도 감을 못 잡았고, 배포 담당팀과 오프라인 미팅으로 풀었다. 이후 5단계 프로세스로 3분 내 배포가 됐다.
- 2단계 DB 선택: SQLite의 서버별 파일 분리가 세션 유실로 이어졌다. 사내 표준·동시 제출 용량·지원팀 대응 속도를 이유로 MySQL을 골랐다.
- 로그 없는 장애: 첫 명령이 0.1초 만에 실패하는데 DEBUG 로깅을 켜도 원인이 안 보였다. 사내 보안 정책상 계정에 테이블 생성 권한이 없던 것이 원인이었고 권한 신청으로 즉시 해결됐다.
- 3단계 디자인: Claude Design으로 시안을 만들고 Figma Make와 비교한 뒤 handoff로 코드에 옮겼는데, 링크만 주면 구조와 자산만 넘어가 색·간격이 왜곡되고 HTML만 주면 시각은 맞지만 버튼 동작이 빠졌다.
- AI의 근사치 습성: 지시가 없으면 #2E7D6B를 #2E7C6A처럼 비슷한 값으로 바꿔놓는다. 그래서 Hex·px·폰트를 값 그대로 쓰고 텍스트는 한 글자도 바꾸지 말며 코드 스타일과 충돌하면 디자인 값을 우선하라는 지침서를 만들었다.
- 잔손질의 실체: 원인 모를 흰 여백 하나를 없애는 데 14번을 반복했고, 프로젝트 라운지 페이지는 색·간격·오타 수정으로만 22개 커밋이 더 붙었다. 브라우저를 80% 축소한 채 작업해 페이지 전체가 80% 기준으로 확정된 실수도 있었다.
- 작업 순서의 교훈: 기능을 확정한 뒤 디자인을 입혀야 한다. 역순으로 가면 기능이 바뀔 때마다 화면을 다시 만들게 된다.
- 4단계 Bedrock: 표준 AWS SDK는 요청마다 비밀키로 서명을 만드는데 사내 발급 키는 Bearer 토큰이었다. SDK가 비밀키를 찾다 서명에 실패하는 루프에 빠졌고, 사내 가이드대로 서명을 비활성화하고 토큰을 직접 넣어 통과했다.
- 자동화 흐름: 제출이 공유 DB에 저장되면 자동 분배되고, 동료평가가 참가자 화면에 즉시 뜨며, 예선 TOP10이 자동 승격돼 경영진 심사 화면에 오르고, 종료 후 집계와 프로젝트 라운지 전시가 자동 생성된다. 운영자는 어드민에서 단계를 열고 닫기만 한다.
- 개발 환경의 진화: 데스크톱 앱과 터미널을 오가며 스크린샷을 주고받다가, Cowork로 다중 파일을 다루고, IntelliJ에서 코드를 확인하다, 최종적으로 IDE 터미널에서 Claude Code를 직접 불러 커밋·푸시까지 이어붙였다.
- 남은 5%의 정체: 명확한 지시와 자산을 주면 95%까지는 나오지만, 픽셀 단위 시각 일치와 한글 처리, 반응형 검증은 사람의 눈이 필요했다는 것이 저자의 결론이다.