본문 바로가기

AI 활용법 & 튜토리얼

AI 코딩 도구, 왜 나는 못 쓰는 것 같을까?

 

"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에게 맡김

당장 시도해볼 미션

  1. 프로젝트에서 가장 복붙이 많은 모듈 하나 고르기
  2. 그 모듈을 "템플릿"으로 설명하고, 다른 도메인 코드 생성을 AI에게 맡겨보기
  3. 핵심 서비스 한 곳을 골라 리팩토링 + 테스트 코드를 AI와 함께 만들어보기

며칠만 제대로 써봐도 느낌이 올 겁니다.

", 이건 자동완성 도구가 아니라, 내가 하기 싫어하던 패턴 작업을 대신 맡기는 동료구나."