"Cursor 좋다던데, Copilot 미쳤다던데..."
실제로 써보면 이런 생각 들죠.
"음... 자동완성은 되는데, 이게 그렇게 대단한 건가?"
차이는 도구가 아니라 쓰는 방식에 있습니다.
이번 글에서는 AI 코딩 어시스턴트를 제대로 쓰는 방법을 세 가지 상황으로 정리했어요.
- 반복 코드 작성
- 리팩토링
- 테스트 코드 생성
예시는 Cursor와 GitHub Copilot 기준이지만, 다른 AI 코딩 도구도 비슷하게 적용 가능합니다.
1. 먼저, 못 쓰는 패턴부터 보자
자동완성만 쓰는 경우
함수 이름 몇 글자 치면 회색 글자로 코드가 나오고, 주석 쓰면 구현이 채워지고.
여기까지만 쓰면 결국 "타이핑 좀 줄였네" 정도로 끝납니다.
"이거 짜줘"만 던지는 경우
"주문 목록 조회 API 만들어줘"
이렇게만 말하면 AI는 내 프로젝트의 도메인도, 코드 스타일도, 예외 처리 규칙도 모른 채 교과서적인 예시만 만들어줍니다.
폴더 구조도 안 맞고, 예외 처리도 애매하고, 로그 포맷도 제각각.
"이걸 우리 스타일에 맞춰 고치는 게 더 오래 걸리잖아..."
2. 제대로 쓰는 기본 원칙
AI 코딩 어시스턴트를 잘 쓰는 사람들의 공통점:
맥락을 먼저 깔아준다
- "우리는 이런 스택, 이런 폴더 구조, 이런 스타일을 쓴다"
- "이 파일을 기준으로 여기에 맞춰서 만들어라"
역할을 명확히 나눈다
- 사람: 설계·이름 짓기·경계 정하기
- AI: 반복 패턴 구현·리팩토링·테스트 생성
3. 반복 코드: 패턴을 이해시키는 질문법
❌ 못 쓸 때
"상품 CRUD API 코드 전부 만들어줘"
AI는 범용적인 예시를 찍어냅니다. 내 프로젝트 구조와는 전혀 다른.
✅ 잘 쓸 때
지금 열려 있는 UserController와 UserService 패턴을 기준으로,
같은 스타일의 Product CRUD 코드를 만들어줘.
· HTTP 상태코드, 에러 처리, 로깅 방식은 User 모듈과 동일하게
· validation은 validateProductPayload 함수를 새로 만들어서 사용
이렇게 하면 AI가 기존 코드에서 패턴을 학습해서 비슷한 스타일로 만들어줍니다.
핵심 팁
- "이 파일 스타일을 기준으로"
- "같은 패턴으로"
- "이 도메인으로 바꿔서"
명확히 명시하세요.
한 번 정해두면 계속 써먹기
이 User 모듈 구조를 '템플릿'으로 생각하고,
앞으로 Order, Product, Category 추가할 때
이 패턴으로 코드를 생성해줘.
새 도메인마다 "User 패턴 기반으로 Order 버전 만들어줘"라고 부르면 됩니다.
4. 리팩토링: 제약 조건을 걸고 시키기
❌ 못 쓸 때
"이 함수 리팩토링해줘. 너무 긴 것 같아."
함수 이름 살짝 바꾸고, 변수 정리하고, if문 순서 좀 고치는 정도로 끝.
✅ 잘 쓸 때
지금 이 processOrder 함수는 150줄이 넘고, 역할이 여러 개 섞여 있어.
리팩토링 목표:
- 결제 처리, 재고 확인, 포인트 적립을 각각 별도 메소드로 분리
- 기존 public 메소드 시그니처는 절대 바꾸지 말 것
- 예외 메시지와 로그 포맷도 지금과 동일하게 유지
리팩토링 후에 변경된 함수 호출 예시도 같이 보여줘.
이 정도로 말하면 AI는:
- 메소드 분리 기준을 잡고
- 기존 로직을 훼손하지 않으면서
- private 메소드들로 쪼개줍니다
보너스로 try/catch 정리, 중복 코드 제거, early return 적용까지.
Cursor 활용 팁
파일을 열어둔 상태에서:
- Cmd + L로 코드 블록 선택
- "리팩토링해줘. 위 조건대로." 전달
- diff 확인 후 Accept/Reject
포인트: "리팩토링 방향" + "절대 건들면 안 되는 것" 두 개만 명확히 말해도 결과가 확 달라집니다.
5. 테스트 코드: 뼈대와 케이스 설계 맡기기
테스트 코드는 AI가 제일 잘 도와줄 수 있는 영역입니다.
❌ 못 쓸 때
"이 서비스에 대한 JUnit 테스트 코드 작성해줘"
해피 케이스 1~2개, 실패 케이스 1개, 애매한 assert들로 끝.
✅ 잘 쓸 때
UserService에 대한 테스트를 작성해줘.
아래 규칙을 지켜줘.
- JUnit5 + Mockito 사용
- Given/When/Then 주석 패턴 사용
- UserFixture.createActiveUser() 같은 기존 Fixture 함수 활용
아래 시나리오는 반드시 포함:
· 정상 가입
· 중복 이메일로 가입 시 예외
· 탈퇴 회원 재가입 시 특별 로직
테스트 메소드 이름은 should_동사_조건 형식으로 작성
AI가 우리 스타일에 맞는 메소드 이름, 시나리오별 테스트, Given/When/Then 구분까지 자동으로 맞춰줍니다.
Cursor로 한 번에 뽑기
이 파일에 대해 위 규칙으로 테스트 클래스를 새로 만들어줘.
파일 이름은 UserServiceTest로 하고,
테스트 대상 메소드는 register, withdraw, reactivate 중심으로 작성해줘.
새 파일 전체를 제안받고, 그대로 저장.
"뼈대 + 기본 케이스"는 AI에게 맡기고, 사람이 직접:
- 엣지 케이스
- 비즈니스 핵심 규칙
- 경계값 테스트
를 추가하는 방식이 제일 효율적입니다.
6. Cursor vs Copilot, 뭐가 다를까?
Copilot: 기존 IDE에 AI를 살짝 덧입힌 느낌
- VS Code, JetBrains 등 익숙한 IDE 위에서 사용
- 처음 설치/적응이 쉬움
- "기존 워크플로우 + 자동완성 업그레이드"
Cursor: 처음부터 AI 중심으로 설계된 IDE
- VS Code 기반이지만 AI와 함께 작업하도록 UI 구성
- 선택 영역에 바로 프롬프트 전달
- diff 기반 수정 제안
- 반복 작업·리팩토링·테스트 뼈대 생성에 강함
정리하면:
- Copilot → 기존 IDE에서 자동완성 + 미니 ChatGPT
- Cursor → 프로젝트 전체를 AI와 같이 작업
둘 다 "맥락 + 역할 분담"을 제대로 해줄 때 진가가 나옵니다.
7. 질문 패턴 정리
반복 코드
❌ "주문 CRUD API 구현해줘"
✅ "지금 열려 있는 User 모듈의 패턴을 기준으로, 같은 스타일의 Order 모듈 CRUD 코드를 만들어줘. 예외 처리, 로깅, Response 포맷은 User와 동일하게."
리팩토링
❌ "이 함수 리팩토링해줘. 너무 길어."
✅ "processOrder 함수가 150줄이라 가독성이 떨어져. 결제, 재고, 포인트 적립을 각각 별도 메소드로 분리하고, public 메소드 시그니처는 절대 바꾸지 말고, 예외 메시지·로그 포맷은 그대로 유지한 채 리팩토링해줘."
테스트 코드
❌ "테스트 코드 작성해줘."
✅ "UserService에 대한 JUnit5 테스트 클래스를 작성해줘. Given/When/Then 주석, UserFixture 사용, 정상 가입/중복 이메일 예외/탈퇴 회원 재가입 시나리오 포함."
8. 다음 주부터 해볼 수 있는 것
AI 코딩 어시스턴트를 잘 쓰는 개발자는:
반복 코드 → 패턴을 먼저 제대로 보여주고 나머지를 AI에게 복제시킴
리팩토링 → 목표와 제약을 분명히 말하고, 결과 diff를 보며 최종 설계는 직접 컨트롤
테스트 코드 → 테스트 스타일과 시나리오를 정의하고, 뼈대 생성은 AI에게 맡김
당장 시도해볼 미션
- 프로젝트에서 가장 복붙이 많은 모듈 하나 고르기
- 그 모듈을 "템플릿"으로 설명하고, 다른 도메인 코드 생성을 AI에게 맡겨보기
- 핵심 서비스 한 곳을 골라 리팩토링 + 테스트 코드를 AI와 함께 만들어보기
며칠만 제대로 써봐도 느낌이 올 겁니다.
"아, 이건 자동완성 도구가 아니라, 내가 하기 싫어하던 패턴 작업을 대신 맡기는 동료구나."
'AI 활용법 & 튜토리얼' 카테고리의 다른 글
| 내 하루 루틴에 AI를 넣어본 1주일 실험기 (0) | 2025.11.23 |
|---|---|
| 캘린더 + AI로 매일 아침 '오늘 할 일' 자동 정리하는 법 (0) | 2025.11.20 |
| “말투만 바꿨을 뿐인데” 상사 스타일에 맞게 보고서 톤 조절하는 AI 활용법 (0) | 2025.11.18 |
| PPT 초안은 AI에게 맡기고, 사람은 디테일만 다듬는 법 (0) | 2025.11.18 |
| 회의록, 이제 AI가 알아서 씁니다 (0) | 2025.11.17 |