앱
백엔드·데이터
생성
GitHub 저장소의 코드와 활동 기록을 분석해 취업용 포트폴리오와 이력서 초안을 만들어주는 AI 서비스입니다. GitHub로 로그인해 저장소와 강조할 경험을 고르면, 저장소 분석과 AI 생성을 거쳐 케이스 스터디 형식의 포트폴리오 웹페이지가 나옵니다.
Codex Community Korea 해커톤(2026.08)에서 시작했습니다. 280명 지원자 중 100명이 선발돼 25개 팀이 꾸려졌고, 당일 아침 처음 만난 4명(기획 2·개발 2)이 랜덤으로 팀이 되어 점심 시간을 빼면 6시간이 안 되는 시간 안에 기획부터 배포·발표 자료까지 끝내는 방식이었습니다. 제출 마감 약 10초 전에 업로드를 마쳤습니다 — 그날의 기록은 해커톤 후기에 따로 적어 뒀습니다. 해커톤이 끝난 뒤에는 혼자 이어받아 계속 개발하고 있습니다.
작업 행을 넣은 뒤 저장소 연결 삽입이 실패하면 보상 없이 예외만 던지고 있었습니다. 활성 작업은 사용자당 하나만 허용되는데, 남겨진 대기 행이 그 사용자의 다음 생성을 영원히 막았습니다. 재시도는 실패 상태에서만 가능해서 스스로 풀 방법도 없었습니다. 삽입이 실패하면 방금 넣은 행을 되돌리도록 고쳤습니다.
프로세스가 중간에 죽는 경우까지는 보상으로 못 막습니다. 그래서 오래 진척이 없는 작업을 실패로 돌리는 청소를 넣었는데, 문제는 실행 위치였습니다 — 무료 플랜의 크론은 하루 한 번뿐이라 리퍼로 쓸 수 없었습니다. 대신 막힌 사용자가 반드시 지나가는 두 지점, 생성 요청 진입부와 진행 화면이 2초마다 두드리는 조회에서 청소를 돌렸습니다. 서버 어디에도 외부 호출 시간 제한이 없던 것도 이때 함께 고쳤습니다 — 매달린 작업 하나가 다음 시도까지 막는 구조였기 때문입니다.
생성이 실패하면 원인이 무엇이든 "잠시 후 다시 시도해주세요" 한 문장이었습니다. GitHub 호출 한도에 걸린 사람과 연동이 끊긴 사람이 같은 화면을 보고, 둘 다 즉시 재시도를 눌러 같은 실패를 반복했습니다. 에러를 원인별로 분류해 사유를 보여주고, 다시 해도 결과가 같을 실패는 그 자리에서 끝내게 했습니다. 진행 화면 폴링도 한 번만 실패하면 즉시 멈춰서 네트워크가 잠깐 끊기면 멀쩡한 작업이 실패한 것처럼 보였는데, 세 번까지 간격을 늘려 기다리게 했습니다.
이 결함들이 오래 남아 있던 이유가 핵심입니다 — 목 백엔드가 한 번도 실패하지 않아서, 실패 경로는 로컬에서 실행될 일이 없었습니다. 그래서 목에 실패를 주입하는 스위치를 만들어, 이제 실패 화면도 로컬에서 개발하고 확인할 수 있습니다.
커밋과 PR을 저자 구분 없이 생성 근거로 넘기고 있었습니다. 팀 저장소라면 팀원의 작업이 지원자의 성과로 서술될 수 있는 구조입니다 — 포트폴리오 생성 서비스가 가장 해서는 안 되는 실수입니다. 응답에 이미 들어 있던 저자 정보로 본인 작업과 팀 작업을 나눠 담고, 팀 작업은 맥락으로만 쓰라는 지침을 더했습니다. 추가 API 호출은 없습니다.
같은 이유로 근거에 없는 기술이 결과에 섞이면 걸러냅니다. 프롬프트로 금지해도 모델은 그럴듯한 이름을 덧붙이는데, 면접에서 설명하지 못할 한 줄이 남는 쪽이 더 큰 손해이기 때문입니다. 무엇을 걸렀는지는 로그로 남겨 프롬프트를 고칠 근거로 씁니다.



해커톤 제출 자료입니다. 기획·시장 조사 슬라이드는 Insight 팀원들이 만들었고, 저는 Builder로 제품 화면 쪽을 맡았습니다.












