
이 글에서 다루는 내용: 잘 통하는 지시 방법, AI 테스트의 3가지 함정, Rules 설정, 커버리지 운용 팁.
기본기: 스타일 앵커를 주고 시키기
가장 결과가 좋은 지시는 기존 테스트 파일을 앵커로 주는 것입니다. "@test_orders.py 이 스타일 그대로 payments 모듈의 테스트를 작성해줘"처럼요. 프로젝트에 테스트가 아예 없다면 첫 테스트 파일 하나를 공들여 만들고(픽스처 구조, 네이밍, given-when-then 등), 이후 그것을 앵커로 확장하는 방식이 좋습니다. 테스트 관례를 Rules에 넣어두면 앵커 없이도 일관성이 유지됩니다(Rules 글 참고).
AI 테스트의 함정 3가지
① 동어반복 테스트. 구현 코드를 보고 테스트를 만들다 보니, 구현의 버그까지 그대로 "정답"으로 굳히는 테스트가 나옵니다. 대책: 중요한 로직은 "구현을 보지 말고 이 명세 기준으로 테스트를 작성해줘"라고 명세 기반으로 시키기. ② 해피패스 편중. 정상 흐름만 잔뜩 만들고 경계값·예외는 빈약한 경우. 대책: "경계값, 빈 입력, 권한 없음, 동시성 케이스를 반드시 포함"처럼 카테고리를 명시. ③ 과도한 모킹. 모든 걸 모킹해서 사실상 아무것도 검증하지 않는 테스트. 대책: Rules에 모킹 범위 원칙(외부 API만 모킹 등)을 정의.
작업 유형별 활용
신규 코드: 기능 구현 지시에 "테스트 포함"을 붙이는 것만으로 대부분 해결됩니다. 레거시 커버리지 채우기: 현재 동작을 고정하는 테스트를 모듈 단위로 위임 — 리팩토링 안전망 만들기의 핵심입니다(리팩토링 글 참고). 버그 수정: "먼저 이 버그를 재현하는 실패 테스트를 만들고, 그다음 고쳐줘" 순서로 시키면 수정 검증까지 한 번에 됩니다. 이 순서 지시가 제가 찾은 가장 값진 패턴입니다. Flutter 위젯 테스트: 화면 단위로 스타일 앵커를 주면 잘 따라옵니다(Flutter 글 참고).
커버리지는 목표가 아니라 부산물
AI로 커버리지 숫자를 올리는 건 쉽습니다. 하루면 90%도 만듭니다. 문제는 그 숫자가 품질을 보장하지 않는다는 것입니다. 저는 커버리지 리포트를 "테스트가 없는 곳을 찾는 지도"로만 쓰고, 새로 채운 테스트는 뮤테이션적 검증(일부러 구현을 살짝 망가뜨려보고 테스트가 실패하는지 확인)을 샘플링으로 돌려봅니다. AI가 만든 테스트가 실제로 뭔가를 지키고 있는지 확인하는 가장 빠른 방법이었습니다.
직접 운용하며 정착된 루틴
지금 제 루틴은 이렇습니다. 새 엔드포인트는 구현+테스트를 한 번에 위임하고, 주 1회 커버리지 리포트에서 구멍 난 모듈을 골라 20~30분짜리 테스트 채우기 작업을 Agent에 맡깁니다. 처음에는 "테스트 짜줘"라고만 했다가 해피패스 40개짜리 파일을 받고 현타가 왔는데, 케이스 카테고리를 명시하는 지시로 바꾼 뒤 테스트 수는 절반, 잡아내는 버그는 배로 늘었습니다. 테스트 생성에서 지시의 품질은 곧 테스트의 품질입니다.
자주 묻는 질문 (FAQ)
Q. 테스트 생성에 어떤 모델이 좋나요?
A. 대부분 Auto로 충분합니다. 테스트는 패턴이 명확한 작업이라 자체 모델이 잘 처리합니다. 까다로운 동시성·경계 케이스 설계만 상위 모델의 도움이 유의미했습니다.
Q. AI가 만든 테스트가 실패하면 코드와 테스트 중 뭘 고쳐야 하나요?
A. 그 판단이 사람의 핵심 역할입니다. 명세 기준으로 어느 쪽이 틀렸는지 판단해야 하며, 애매하면 명세부터 명확히 하세요. AI에게 "실패하니까 테스트를 고쳐줘"라고 시키면 동어반복 테스트로 수렴합니다.
Q. TDD도 Cursor로 가능한가요?
A. 가능합니다. "실패하는 테스트 먼저 → 구현" 순서로 지시하면 됩니다. 버그 수정에서 특히 효과적입니다.
한눈에 보는 요약
스타일 앵커 + 케이스 카테고리 명시 + 명세 기반 지시 — 이 세 가지가 AI 테스트 품질을 결정합니다. 커버리지 숫자는 지도일 뿐이고, "이 테스트가 실제로 뭔가를 지키는가"의 확인은 여전히 사람의 일입니다.
함께 보면 좋은 글
Cursor로 레거시 코드 리팩토링한 경험
Cursor로 Django 개발하기
Cursor Rules 설정 방법
참고 자료
'Cursor' 카테고리의 다른 글
| Cursor Cloud Agents 사용법: 작업 맡겨두고 결과만 확인하기 (0) | 2026.07.07 |
|---|---|
| Cursor 단축키 총정리: Cmd+K, Cmd+L, Cmd+I 뭐가 다를까? (0) | 2026.07.07 |
| Cursor로 레거시 코드 리팩토링한 경험: 통했던 순서와 실패했던 방식 (0) | 2026.07.07 |
| Cursor 프라이버시 모드: 내 코드는 안전할까? (0) | 2026.07.07 |
| 팀/회사에서 Cursor 도입 시 고려할 점: 플랜, 보안, 정착까지 (0) | 2026.07.07 |