원문 캡처 · github.com
원문 캡처 · github.com

Would You Merge It?는 AI 코딩 도우미가 만들 법한 버그 24개를 찾아 고치고 테스트를 통과시키는 연습용 저장소다. GitHub에서 문제를 읽는 데는 설치가 필요 없고, 직접 풀려면 저장소를 포크해 Python 3.10 이상을 사용하면 된다. JavaScript 문제 10개를 풀려면 Node.js 20 이상도 필요하다.

예를 들어 processAll(ids, fn)이 각 ID에 비동기 함수를 적용하고 결과를 순서대로 반환하도록 요청했을 때, 저장소는 다음 코드를 제시한다.

javascript
async function processAll(ids, fn) {
 const results = [];
 ids.forEach(async (id) => {
 results.push(await fn(id));
 });
 return results;
}

문제는 forEach가 async 콜백이 반환하는 프라미스를 기다리지 않는다는 점이다. 함수가 작업이 끝나기 전에 빈 배열을 반환하고 콜백 안의 오류도 사라질 수 있다. 저장소는 이 문제의 수정 예로 Promise.all(ids.map((id) => fn(id)))를 제시한다. 이는 13번 문제이며, 전체 24개 중 나머지 23개도 직접 풀 수 있다.

문제는 Python 14개와 JavaScript 10개로 구성된다. 경계값·논리·데이터 처리·오류 처리·비동기 동작과 보안 취약점 등을 다루며, 난이도는 별 1~3개로 표시한다. 전체 문제 목록에서 각 문제를 확인할 수 있다. 예를 들면 존재하지 않는 패키지, 비동기 콜백을 기다리지 않는 코드, SQL 인젝션, 이메일 정규식으로 CPU를 과도하게 쓰는 문제 등이 있다.

문제를 읽기만 할 때는 각 문제를 GitHub에서 열어 README의 코드와 힌트를 보고, 정답 공개 내용을 확인하면 된다. 직접 풀 때는 포크한 저장소를 클론하고 버그가 있는 파일을 수정한다. 테스트 파일은 바꾸지 않는다. 다음 명령으로 전체 점수를 확인하거나 01번 문제를 검사할 수 있다.

bash
# 1. Click "Fork" (top right), then clone YOUR fork:
git clone https://github.com/YOUR_USERNAME/would-you-merge.git
cd would-you-merge

# 2. See the scoreboard (it starts at 0/24)
python tools/check.py

# 3. Open a kata, find the bug, fix it, re-run
python tools/check.py 01

Python은 표준 라이브러리만 사용하므로 pip install할 의존성이 없다. Python만 설치한 경우 JavaScript 문제는 건너뛴다. 각 문제 폴더에는 수정할 파일과 테스트, 힌트 및 정답을 공개하는 README가 있다. python tools/check.py --reset 07로 7번 문제의 원본 파일을 복원하고, python tools/check.py --list로 문제 목록을 볼 수 있다. 테스트는 특정한 풀이가 아니라 동작을 확인하며, 참고 풀이도 저장소의 solutions/에 있다.

문제에는 의도적으로 버그와 취약점이 들어 있다. 제작자는 코드가 네트워크에 접속하지 않고 임시 폴더에만 쓰지만 실제 프로젝트에 복사하지 말라고 경고한다. 포크에서 GitHub Actions를 활성화하고 main에 푸시하면 채점 결과와 배지를 생성할 수 있다. 다만 채점기를 직접 수정할 수 있는 명예 기반 방식이므로, 채점 결과가 독립적으로 검증되는 것은 아니다.

저장소는 AI 코드 검토 도구에 문제 코드를 넣어 버그를 찾는지도 살펴볼 수 있다고 제안한다. 관련 절차는 벤치마크 안내에 있다. 다만 일부 모델의 학습 데이터에 문제가 포함됐을 수 있으므로, 결과를 벤치마크가 아닌 참고 신호로 다뤄야 한다고 안내한다.

프로젝트 소개는 AI 코드의 보안과 결함에 관한 외부 자료도 인용한다. Veracode의 2025 GenAI Code Security Report는 Java, Python, C#, JavaScript에서 100개가 넘는 모델을 시험했고 생성 샘플의 45%가 보안 테스트에 실패해 OWASP Top 10 취약점을 도입했다고 보고했다. CodeRabbit의 AI와 인간 코드 생성 비교 보고서는 오픈소스 PR 470개를 분석해 AI 공동 작성 PR에서 PR당 10.83개, 인간만 작성한 PR에서 6.45개의 문제를 집계했다. 이 보고서는 코드 검토 서비스를 판매하는 CodeRabbit이 작성했고 작성 주체를 신호로 추정했으므로, 저장소도 결과를 그에 맞게 판단하라고 덧붙인다. USENIX Security 2025 연구는 16개 모델이 만든 코드 샘플 576,000개를 분석해 참조된 패키지의 19.7%가 존재하지 않았다고 보고했다(학회 발표, arXiv 논문).

저장소는 MIT 라이선스로 배포된다. 문제를 추가하는 방법과 아이디어 목록은 기여 안내와 문제 아이디어 문서에서 확인할 수 있다.