27장. AI 코딩 도구 이해하기
앞 장에서는 클라우드 AI와 로컬 AI를 함께 사용하는 방법을 살펴보았다.
클라우드 AI는 성능과 편의성이 좋고, 로컬 AI는 보안과 비용 통제에 장점이 있다.
실무에서는 둘 중 하나만 고르는 것이 아니라, 업무의 성격에 따라 적절히 나누어 사용하는 것이 중요하다고 했다.
이번 장부터는 개발자가 매일 사용하는 개발 도구 관점으로 넘어간다.
AI는 이제 서비스 안에 들어가는 기능만이 아니다.
개발자가 코드를 작성하고, 기존 코드를 분석하고, 테스트를 만들고, PR을 리뷰하는 과정에도 들어오고 있다.
이런 도구를 보통 AI 코딩 도구라고 부른다.
AI 코딩 도구는 개발 생산성을 높여줄 수 있다.
하지만 잘못 사용하면 이해하지 못한 코드가 쌓이고, 보안 문제가 생기고, 팀의 코드 품질이 떨어질 수도 있다.
그래서 AI 코딩 도구를 볼 때는 단순히 “코드를 잘 만들어주는가”만 보면 안 된다.
- 어떤 코드를 AI에게 보낼 수 있는가
- AI가 만든 코드를 누가 검토하는가
- 회사 코드와 개인정보가 외부로 나가지 않는가
- 팀의 개발 방식과 맞는가
- 운영 서비스에 넣어도 안전한가
이런 관점까지 함께 봐야 한다.
1. AI 코딩 도구란 무엇인가
AI 코딩 도구는 개발자가 코드를 작성하거나 이해하는 과정을 AI가 도와주는 도구다.
예전에도 IDE에는 자동 완성 기능이 있었다.
예를 들어 객체 뒤에 점을 찍으면 사용할 수 있는 메서드나 속성을 보여주었다.
user.
이렇게 입력하면 IDE가 다음과 같은 후보를 보여주는 식이다.
user.name
user.email
user.createdAt
이런 자동 완성은 주로 현재 코드 안에 있는 타입, 변수, 함수 정보를 기반으로 동작했다.
AI 코딩 도구는 여기서 한 단계 더 나아간다.
단순히 변수명을 추천하는 것이 아니라, 개발자가 작성하려는 의도를 보고 함수 전체를 제안하기도 한다.
예를 들어 다음과 같이 주석을 작성했다고 해보자.
// 사용자 ID를 받아 최근 로그인 시간을 조회하는 함수
AI 코딩 도구는 이 설명을 보고 함수 초안을 만들어줄 수 있다.
또는 기존 코드를 선택한 뒤 이렇게 요청할 수도 있다.
이 함수가 어떤 역할을 하는지 설명해줘.
예외 처리가 부족한 부분이 있는지도 같이 봐줘.
이처럼 AI 코딩 도구는 코드 작성, 코드 설명, 리팩토링, 테스트 생성, 오류 분석 같은 작업을 도와준다.
다만 여기서 중요한 점이 있다.
AI 코딩 도구는 개발자를 대신하는 도구가 아니다.
개발자의 판단을 도와주는 도구다.
AI가 코드를 만들 수는 있지만, 그 코드가 실제 서비스에 맞는지는 개발자가 확인해야 한다.
AI 코딩 도구란?
개발자가 코드를 작성, 분석, 수정, 테스트하는 과정에서 AI가 보조 역할을 하는 도구를 말한다.
코드 자동 완성뿐 아니라 코드 설명, 리팩토링 제안, 테스트 코드 생성, PR 요약 같은 기능도 포함된다.
2. AI 코딩 도구가 도와주는 일
AI 코딩 도구가 도와주는 일은 생각보다 넓다.
단순히 코드를 몇 줄 대신 작성하는 수준이 아니다.
개발 과정의 여러 단계에서 사용할 수 있다.
요구사항 정리
→ 코드 초안 생성
→ 기존 코드 분석
→ 리팩토링 제안
→ 테스트 코드 생성
→ 오류 원인 분석
→ 문서 작성
→ PR 설명 작성
→ 코드 리뷰 보조
예를 들어 새로운 API를 만든다고 해보자.
개발자는 AI에게 다음과 같이 요청할 수 있다.
Node.js Express 기준으로 사용자 조회 API 예시를 만들어줘.
Controller, Service, Repository 구조로 나누고,
사용자가 없을 때는 404 응답을 내려줘.
이 요청을 받은 AI는 코드 초안을 만들어줄 수 있다.
하지만 실무에서는 여기서 끝나면 안 된다.
생성된 코드가 실제 프로젝트 구조와 맞는지 확인해야 한다.
인증과 권한 처리가 빠져 있지는 않은지 봐야 한다.
DB 접근 방식이 팀의 규칙과 맞는지도 확인해야 한다.
AI 코딩 도구는 다음과 같은 작업에 특히 유용하다.
- 반복적인 코드 초안 작성
- 익숙하지 않은 코드 설명
- 테스트 케이스 초안 생성
- 오류 메시지 해석
- 리팩토링 방향 제안
- 문서 초안 작성
- PR 변경 내용 요약
반대로 다음과 같은 작업은 AI에게만 맡기면 위험하다.
- 결제 로직 구현
- 정산 로직 구현
- 인증과 권한 처리
- 개인정보 처리
- 운영 DB 변경
- 장애 복구 자동화
- 보안 정책 코드 작성
이런 영역은 작은 실수가 큰 장애나 보안 사고로 이어질 수 있다.
AI가 초안을 만들 수는 있다.
하지만 최종 판단은 반드시 사람이 해야 한다.
3. 대표적인 AI 코딩 도구
AI 코딩 도구에는 여러 종류가 있다.
대표적으로 많이 언급되는 도구는 다음과 같다.
| 도구 | 특징 |
|---|---|
| GitHub Copilot | IDE 안에서 코드 자동 완성과 코드 제안에 강하다 |
| Cursor | AI 기능을 중심으로 만든 코드 에디터다 |
| JetBrains AI | IntelliJ, PhpStorm 같은 JetBrains IDE와 통합된다 |
| Claude Code | 터미널에서 프로젝트 코드를 분석하고 수정하는 방식에 가깝다 |
| ChatGPT | 설계, 설명, 코드 검토, 문서화에 폭넓게 사용할 수 있다 |
이 도구들은 모두 AI를 사용하지만, 사용 방식은 다르다.
어떤 도구는 코드 작성 중간에 자동 완성을 해주는 데 강하다.
어떤 도구는 프로젝트 전체 구조를 보고 수정 방향을 제안하는 데 강하다.
어떤 도구는 IDE보다 대화형 설명과 설계 검토에 더 잘 맞는다.
따라서 “어떤 AI 코딩 도구가 제일 좋은가”라고 묻기보다는, 먼저 어떤 목적으로 사용할지 정해야 한다.
- 빠른 코드 자동 완성이 필요한가
- 기존 프로젝트 분석이 필요한가
- 테스트 코드를 만들고 싶은가
- PR 리뷰를 보조하고 싶은가
- 설계 방향을 비교하고 싶은가
- 사내 보안 정책상 외부 전송이 가능한가
목적에 따라 적합한 도구가 달라진다.
4. GitHub Copilot
GitHub Copilot은 가장 많이 알려진 AI 코딩 도구 중 하나다.
주로 IDE 안에서 코드 자동 완성 형태로 사용한다.
개발자가 코드를 작성하고 있으면, Copilot이 다음 줄이나 함수 전체를 제안한다.
예를 들어 다음과 같은 코드를 작성하고 있다고 해보자.
function calculateTotalPrice(items) {
이때 Copilot은 함수 이름과 주변 코드를 보고 다음 내용을 제안할 수 있다.
let total = 0;
for (const item of items) {
total += item.price * item.quantity;
}
return total;
이런 방식은 반복적인 코드를 작성할 때 유용하다.
특히 다음과 같은 작업에서 도움이 된다.
- 간단한 유틸 함수 작성
- DTO 변환 코드 작성
- 테스트 코드 초안 작성
- 반복적인 CRUD 코드 작성
- 주석 기반 코드 생성
- 기존 코드 패턴을 따라가는 함수 작성
Copilot의 장점은 개발 흐름을 크게 끊지 않는다는 점이다.
개발자는 IDE 안에서 코드를 작성하다가 제안을 받고, 마음에 들면 적용하면 된다.
마음에 들지 않으면 무시하면 된다.
하지만 주의할 점도 있다.
Copilot이 제안한 코드는 그럴듯해 보일 수 있다.
하지만 항상 프로젝트 구조에 맞는 것은 아니다.
예를 들어 팀에서는 Controller에서 비즈니스 로직을 작성하지 않기로 했는데, Copilot이 Controller 안에 모든 로직을 넣는 코드를 제안할 수 있다.
또는 인증과 권한 검증이 필요한 API인데, 그 부분이 빠진 코드를 만들 수도 있다.
따라서 Copilot은 빠른 초안 작성에는 좋지만, 최종 코드를 보장해주는 도구는 아니다.
AI가 제안한 코드는 반드시 개발자가 읽고 이해해야 한다.
5. Cursor
Cursor는 AI 기능을 중심으로 만든 코드 에디터다.
겉으로 보기에는 VS Code와 비슷한 코드 에디터처럼 보이지만, AI와 대화하면서 프로젝트 코드를 분석하고 수정하는 데 초점이 있다.
Cursor의 특징은 프로젝트 맥락을 활용하기 쉽다는 점이다.
단순히 한 줄을 자동 완성하는 것을 넘어, 여러 파일을 참고해서 답변하거나 수정안을 제안할 수 있다.
예를 들어 다음과 같이 요청할 수 있다.
이 프로젝트에서 로그인 API가 어떤 흐름으로 동작하는지 설명해줘.
또는 이렇게 요청할 수도 있다.
이 API에 요청값 검증을 추가해줘.
기존 Validator 패턴을 따라가고,
에러 응답 형식은 다른 API와 맞춰줘.
이런 방식은 기존 코드 분석에 유용하다.
새로운 프로젝트에 들어갔을 때 개발자는 먼저 구조를 파악해야 한다.
- 라우팅은 어디에 정의되어 있는가
- Controller는 어떤 Service를 호출하는가
- DB 접근은 Repository에서 하는가
- 공통 응답 형식은 무엇인가
- 예외 처리는 어디에서 하는가
Cursor 같은 도구는 이런 탐색 시간을 줄여줄 수 있다.
하지만 Cursor처럼 프로젝트 맥락을 많이 활용하는 도구는 보안 검토가 더 중요하다.
프로젝트 전체를 분석하려면 코드 일부가 AI 도구로 전달될 수 있기 때문이다.
여기에는 단순 코드만 있는 것이 아니다.
- 사내 비즈니스 로직
- API URL
- DB 테이블 구조
- 인증 처리 방식
- 외부 연동 방식
- 설정 파일
- 운영 정책 코드
이런 정보가 포함될 수 있다.
따라서 Cursor 같은 도구를 팀에서 사용할 때는 다음을 확인해야 한다.
- 어떤 파일이 AI에게 전달되는가
- 특정 파일을 제외할 수 있는가
- .env 파일이나 인증키가 제외되는가
- 입력한 코드가 학습에 사용되는가
- 팀 또는 조직 단위 관리 기능이 있는가
도구가 강력할수록, 사용 기준도 명확해야 한다.
6. JetBrains AI
JetBrains AI는 IntelliJ IDEA, PhpStorm, WebStorm, PyCharm 같은 JetBrains IDE 안에서 사용할 수 있는 AI 기능이다.
이미 JetBrains 계열 IDE를 사용하고 있다면, 개발 환경을 크게 바꾸지 않고 AI 기능을 사용할 수 있다는 장점이 있다.
예를 들어 PhpStorm에서 PHP 코드를 보다가 특정 함수를 선택하고 설명을 요청할 수 있다.
이 함수가 어떤 역할을 하는지 설명해줘.
입력값 검증과 예외 처리 관점에서 문제도 같이 찾아줘.
또는 커밋 메시지 초안을 만들거나, 테스트 코드 생성을 요청할 수도 있다.
JetBrains IDE는 원래 코드 분석 기능이 강하다.
정적 분석, 타입 추론, 리팩토링, 검색 기능이 잘 갖춰져 있다.
JetBrains AI는 여기에 자연어 기반 설명과 코드 생성 기능을 더하는 방식으로 볼 수 있다.
특히 다음과 같은 작업에 유용하다.
- 선택한 코드 설명
- 리팩토링 방향 제안
- 테스트 코드 초안 작성
- 커밋 메시지 작성
- 오류 원인 설명
- 문서 주석 생성
하지만 JetBrains AI도 다른 AI 도구와 마찬가지로 한계가 있다.
IDE가 문법 오류를 잡아줄 수는 있다.
하지만 비즈니스 로직이 맞는지는 별개의 문제다.
예를 들어 결제 상태를 변경하는 코드가 문법적으로 맞다고 해서, 정산 로직까지 맞는 것은 아니다.
따라서 AI가 만든 코드는 IDE가 문제없다고 표시하더라도 다시 봐야 한다.
- 실제 요구사항과 맞는가
- 기존 아키텍처와 맞는가
- 예외 상황을 처리하는가
- 로그가 필요한 위치에 남는가
- 보안상 위험한 부분은 없는가
AI 코딩 도구는 IDE의 기능을 확장해주는 도구이지, 개발 검토 과정을 없애주는 도구가 아니다.
7. Claude Code
Claude Code는 일반적인 IDE 플러그인보다는 터미널 기반 개발 보조 도구에 가깝다.
개발자는 터미널에서 프로젝트 디렉터리를 기준으로 AI에게 작업을 요청할 수 있다.
예를 들어 다음과 같이 요청할 수 있다.
이 프로젝트에서 회원 탈퇴 API 흐름을 찾아서 설명해줘.
또는 다음과 같이 요청할 수도 있다.
방금 설명한 흐름에서 개인정보 삭제 처리 부분이 어디에 있는지 찾아줘.
누락된 로그가 있다면 어떤 위치에 추가하는 게 좋을지도 알려줘.
이런 방식은 여러 파일을 오가며 분석해야 하는 작업에 유용하다.
특히 다음과 같은 경우에 도움이 된다.
- 프로젝트 구조 파악
- 여러 파일에 걸친 수정
- 테스트 실행과 결과 분석
- 변경 전후 diff 확인
- 코드 정리 작업
- 문서 생성
하지만 터미널 기반 도구는 더 조심해야 한다.
단순히 코드를 추천하는 것을 넘어, 실제 파일을 수정하거나 명령어를 실행할 수 있기 때문이다.
예를 들어 테스트 실행은 괜찮을 수 있다.
npm test
하지만 잘못된 명령어가 실행되면 파일이 삭제되거나, 설정이 변경되거나, 의도하지 않은 외부 요청이 발생할 수도 있다.
따라서 이런 도구를 사용할 때는 최소한 다음 원칙이 필요하다.
- 운영 서버에서 직접 사용하지 않는다
- 로컬 개발 환경에서 사용한다
- 별도 브랜치에서 작업한다
- 파일 변경 전후 diff를 확인한다
- 실행 명령어를 무조건 승인하지 않는다
- 민감한 설정 파일을 읽지 못하게 한다
- 한 번에 큰 변경을 맡기지 않는다
Claude Code 같은 도구는 강력하다.
하지만 강력한 도구일수록 통제 기준이 필요하다.
diff란?
변경 전 코드와 변경 후 코드의 차이를 보여주는 정보다.
AI가 파일을 수정했을 때는 diff를 확인해서 어떤 부분이 바뀌었는지 반드시 검토해야 한다.
8. ChatGPT와 IDE 연동
ChatGPT는 원래 범용 대화형 AI에 가깝다.
하지만 개발 업무에서도 많이 사용된다.
- 코드 설명
- 오류 로그 분석
- 설계 방향 비교
- API 문서 작성
- 테스트 케이스 정리
- 코드 리뷰 관점 정리
- 장애 보고서 초안 작성
- 팀 가이드라인 작성
ChatGPT는 IDE 안에서 자동 완성만 하는 도구와는 조금 다르다.
코드를 직접 계속 제안받는 것보다, 생각을 정리하고 방향을 잡는 데 강하다.
예를 들어 다음과 같이 요청할 수 있다.
현재 회원 도메인을 모듈화하려고 한다.
바로 MSA로 분리하기보다는 먼저 내부 모듈 경계를 나누고 싶다.
Controller, Service, Repository 구조를 유지하면서
어떤 순서로 정리하면 좋을지 단계별로 설명해줘.
이런 요청은 단순 코드 자동 완성보다 대화형 AI에 더 잘 맞는다.
또는 운영 장애 상황에서도 활용할 수 있다.
아래 로그를 보고 장애 원인 후보를 정리해줘.
단, 개인정보로 보이는 값은 제거했고,
원인 후보와 추가 확인할 로그를 나눠서 정리해줘.
ChatGPT는 IDE 확장이나 API를 통해 개발 환경과 연결할 수도 있다.
또 뒤에서 배울 MCP 같은 방식을 사용하면 파일, 문서, 업무 도구와 연결하는 구조도 만들 수 있다.
하지만 ChatGPT를 사용할 때도 보안 주의가 필요하다.
개발자가 직접 코드를 붙여넣기 때문이다.
특히 다음 정보는 그대로 넣으면 안 된다.
- API 키
- DB 비밀번호
- 운영 서버 주소
- 사용자 개인정보
- 결제 관련 원문 로그
- 내부 인증 토큰
- 외부 업체 연동 비밀키
- 공개되면 안 되는 비즈니스 로직
ChatGPT는 범용성이 높다.
그만큼 사용자가 무엇을 입력하는지 스스로 통제해야 한다.
9. IDE형 AI와 채팅형 AI의 차이
AI 코딩 도구는 크게 IDE형 AI와 채팅형 AI로 나눠볼 수 있다.
IDE형 AI는 개발자가 코드를 작성하는 환경 안에서 바로 동작한다.
예를 들어 Copilot, JetBrains AI, Cursor 같은 도구가 여기에 가깝다.
채팅형 AI는 대화창을 중심으로 사용한다.
예를 들어 ChatGPT에 코드를 붙여넣고 설명을 요청하거나, 설계 방향을 물어보는 방식이다.
둘은 장단점이 다르다.
| 구분 | IDE형 AI | 채팅형 AI |
|---|---|---|
| 사용 위치 | IDE, 에디터, 터미널 | 웹, 앱, 별도 대화창 |
| 강점 | 코드 작성 흐름에 자연스럽게 연결된다 | 설명, 설계, 비교, 문서화에 강하다 |
| 맥락 전달 | 파일과 프로젝트 맥락을 자동으로 볼 수 있다 | 사용자가 직접 맥락을 제공해야 한다 |
| 위험 | 많은 코드가 자동으로 전달될 수 있다 | 민감 정보를 직접 붙여넣을 수 있다 |
| 적합한 작업 | 자동 완성, 리팩토링, 테스트 생성 | 아키텍처 상담, 원인 분석, 문서 작성 |
둘 중 하나만 사용해야 하는 것은 아니다.
실무에서는 함께 사용하는 경우가 많다.
예를 들어 ChatGPT로 리팩토링 방향을 먼저 정리할 수 있다.
이 모듈을 바로 MSA로 분리하지 않고,
내부 모듈화부터 진행하려고 한다.
어떤 순서로 나누는 것이 안전한지 설명해줘.
그다음 IDE형 AI를 사용해서 실제 코드를 작은 단위로 수정할 수 있다.
이 Service에서 DB 접근 로직을 Repository로 분리해줘.
기존 함수명은 유지하고,
외부 호출부가 깨지지 않도록 해줘.
이처럼 채팅형 AI는 방향을 잡는 데 좋고, IDE형 AI는 실제 코드 작업에 좋다.
중요한 것은 도구의 성격을 이해하고, 작업에 맞게 사용하는 것이다.
10. 개인 개발과 팀 개발에서의 사용 차이
개인 개발에서는 AI 코딩 도구를 비교적 자유롭게 사용할 수 있다.
작은 토이 프로젝트, 자동화 스크립트, 테스트용 API, 데이터 변환 도구를 만들 때 AI는 매우 유용하다.
예를 들어 다음과 같은 요청이 가능하다.
Node.js로 특정 API를 호출해서 결과를 JSON 파일로 저장하는 스크립트를 만들어줘.
실패하면 상태 코드와 응답 본문을 출력해줘.
개인 개발에서는 빠르게 만들고, 실행해보고, 다시 고치는 방식이 잘 맞는다.
하지만 팀 개발에서는 다르다.
팀 개발의 코드는 공동 자산이다.
내가 만든 코드가 다른 개발자의 유지보수 대상이 된다.
운영 서비스에 배포되고, 장애가 나면 팀 전체가 대응해야 한다.
따라서 팀 개발에서 AI 코딩 도구를 사용할 때는 더 엄격한 기준이 필요하다.
- 회사 코드가 외부 AI 서비스로 전송되어도 되는가
- 팀원별 사용 도구를 통제할 수 있는가
- 개인 계정 사용을 허용할 것인가
- AI가 만든 코드라는 사실을 PR에 표시할 것인가
- AI 생성 코드 리뷰 기준이 있는가
- 보안 검토가 필요한 영역은 어디인가
- 비용은 누가 관리하는가
특히 다음 영역은 팀 기준 없이 AI에게 맡기면 위험하다.
- 인증
- 권한
- 결제
- 정산
- 개인정보
- 관리자 기능
- 운영 자동화
- 데이터 삭제
- 외부 업체 연동
이런 영역은 코드가 동작하는 것만으로 충분하지 않다.
감사 로그가 필요한지 봐야 한다.
실패 시 재처리가 필요한지 봐야 한다.
권한이 없는 사용자가 호출할 수 없는지도 봐야 한다.
개인정보가 로그에 남지 않는지도 봐야 한다.
AI가 만든 코드는 초안이다.
팀 개발에서는 이 초안을 팀의 기준에 맞게 검토하는 과정이 반드시 필요하다.
11. 코드가 외부로 전송되는 문제
AI 코딩 도구를 도입할 때 가장 먼저 확인해야 하는 문제는 코드 전송이다.
AI가 코드를 추천하려면 맥락이 필요하다.
현재 작성 중인 파일, 주변 코드, 열려 있는 파일, 프로젝트 구조, Git 변경 사항, 오류 메시지 등이 AI 서버로 전달될 수 있다.
이 과정에서 다음 정보가 함께 전송될 수 있다.
- 사내 소스코드
- 비즈니스 로직
- DB 테이블 구조
- API URL
- 인증 처리 방식
- 외부 업체 연동 방식
- 로그에 포함된 사용자 정보
- 설정 파일
- API 키
- 토큰
물론 모든 도구가 같은 방식으로 데이터를 처리하는 것은 아니다.
도구마다 데이터 보관 정책, 학습 사용 여부, 관리자 제어 기능, 보안 옵션이 다르다.
그래서 AI 코딩 도구를 도입하기 전에는 반드시 다음을 확인해야 한다.
| 확인 항목 | 확인할 질문 |
|---|---|
| 데이터 전송 범위 | 어떤 파일과 코드가 AI 서버로 전달되는가 |
| 학습 사용 여부 | 입력한 코드가 모델 학습에 사용되는가 |
| 보관 기간 | 전송된 데이터가 얼마나 보관되는가 |
| 제외 설정 | 특정 파일이나 디렉터리를 제외할 수 있는가 |
| 관리자 제어 | 조직 단위로 정책을 강제할 수 있는가 |
| 계정 관리 | 퇴사자나 외주 인력 계정을 회수할 수 있는가 |
| 로그 확인 | 누가 어떤 기능을 사용했는지 확인할 수 있는가 |
특히 .env 파일, 인증키, 운영 로그, 개인정보가 포함된 파일은 AI 도구에 전달되지 않도록 해야 한다.
개발자가 실수로 붙여넣는 경우도 많다.
예를 들어 오류 분석을 위해 로그를 그대로 붙여넣었는데, 그 안에 사용자 이메일, 전화번호, 토큰이 포함되어 있을 수 있다.
따라서 팀에서는 AI 도구 사용 전에 입력 금지 항목을 정해야 한다.
- API 키 입력 금지
- 비밀번호 입력 금지
- 개인정보 원문 입력 금지
- 운영 DB 덤프 입력 금지
- 외부 업체 비밀키 입력 금지
- 고객 식별자 마스킹 후 사용
AI 코딩 도구는 편리하다.
하지만 편리하다는 이유로 보안 기준을 낮추면 안 된다.
12. AI 코딩 도구를 도입하기 전에 확인할 것
팀에서 AI 코딩 도구를 도입하려면 먼저 사용 기준을 정해야 한다.
도구를 먼저 열어주고 나중에 기준을 만들면 정리가 어렵다.
처음부터 완벽한 정책을 만들 필요는 없다.
하지만 최소한 다음 기준은 있어야 한다.
- 허용할 AI 도구
- 금지할 AI 도구
- 개인 계정 사용 여부
- 회사 계정 또는 팀 플랜 사용 여부
- 입력 가능한 데이터 범위
- 입력 금지 데이터
- AI 생성 코드 리뷰 기준
- 보안 검토 대상
- 비용 관리 방식
- 계정 회수 방식
예를 들어 다음과 같이 간단한 기준을 만들 수 있다.
| 구분 | 기준 예시 |
|---|---|
| 공개 문서 | AI 입력 가능 |
| 일반 샘플 코드 | AI 입력 가능 |
| 사내 소스코드 | 승인된 도구에서만 가능 |
| 운영 로그 | 개인정보 제거 후 제한적으로 가능 |
| API 키와 토큰 | 입력 금지 |
| 고객 개인정보 | 입력 금지 또는 강한 비식별화 필요 |
| 결제·정산 코드 | AI 사용 가능하더라도 리뷰 필수 |
| 관리자 기능 | 권한과 감사 로그 검토 필수 |
AI 도구를 도입할 때는 개발팀만 결정해서는 안 되는 경우도 있다.
보안팀, 인프라팀, 개인정보 담당자, 법무 담당자와 함께 검토해야 할 수 있다.
특히 회사 코드가 외부 서비스로 전송되는 경우에는 더 그렇다.
AI 도구 도입은 단순히 개발 편의 기능을 추가하는 일이 아니다.
회사 코드와 데이터를 어떤 기준으로 다룰지 정하는 일이기도 하다.
13. AI 코딩 도구를 사용할 때의 기본 습관
AI 코딩 도구를 안전하게 사용하려면 몇 가지 습관이 필요하다.
첫 번째는 작은 단위로 요청하는 것이다.
나쁜 요청은 보통 너무 크고 모호하다.
회원 시스템 전체 리팩토링해줘.
이런 요청은 위험하다.
AI가 여러 파일을 한 번에 수정하면서 예상하지 못한 변경을 만들 수 있다.
검토하기도 어렵고, 문제가 생겼을 때 되돌리기도 어렵다.
좋은 요청은 작고 구체적이다.
이 함수의 역할을 설명해줘.
이 함수에서 입력값 검증이 부족한 부분을 찾아줘.
기존 응답 형식은 유지하고,
userId 검증만 추가해줘.
변경된 부분에 대한 테스트 케이스를 만들어줘.
작게 요청하면 결과를 검토하기 쉽다.
두 번째는 AI가 만든 코드를 직접 설명할 수 있어야 한다.
AI가 만든 코드라도 내 코드가 되려면 이해해야 한다.
- 왜 이 함수가 필요한가
- 어떤 입력을 받는가
- 어떤 예외가 발생할 수 있는가
- 실패하면 어떻게 되는가
- 성능 문제는 없는가
- 보안 문제는 없는가
이 질문에 답하지 못하면 아직 병합하면 안 된다.
세 번째는 테스트를 함께 요청하는 것이다.
AI에게 코드만 만들게 하지 말고, 테스트 케이스도 요청하는 것이 좋다.
이 함수의 정상 케이스, 실패 케이스, 예외 케이스 테스트를 만들어줘.
Mock을 사용하되,
실제로 어떤 Repository 메서드가 호출되는지도 검증해줘.
다만 AI가 만든 테스트도 검토해야 한다.
테스트 이름은 그럴듯하지만 실제 검증이 없는 경우도 있다.
단순히 함수가 호출되는지만 보고, 중요한 비즈니스 조건을 확인하지 않을 수도 있다.
네 번째는 팀 규칙을 AI에게 알려주는 것이다.
AI는 우리 팀의 구조를 모른다.
따라서 필요한 규칙을 명확히 알려줘야 한다.
우리 프로젝트는 Controller에서 비즈니스 로직을 처리하지 않는다.
Controller는 요청 검증과 Service 호출만 담당한다.
DB 접근은 Repository에서만 한다.
응답 형식은 { result, message, data } 구조를 사용한다.
이 규칙을 지켜서 사용자 조회 API 초안을 만들어줘.
AI에게 맥락을 잘 줄수록 결과도 좋아진다.
14. AI 코딩 도구는 개발자를 대체하는가
AI 코딩 도구를 이야기하면 자주 나오는 질문이 있다.
이제 개발자가 필요 없어지는 것 아닌가?
실무 관점에서는 그렇게 단순하지 않다.
AI는 코드를 빠르게 만들 수 있다.
하지만 무엇을 만들어야 하는지, 왜 만들어야 하는지, 어디까지 허용해야 하는지는 개발자가 판단해야 한다.
특히 백엔드와 플랫폼 개발에서는 코드 작성보다 더 중요한 일이 많다.
- 도메인 규칙 이해
- 데이터 정합성 보장
- 장애 대응
- 보안 설계
- 권한 정책
- 배포 전략
- 운영 비용 관리
- 로그와 모니터링
- 레거시 시스템과의 호환성
- 다른 팀과의 조율
AI는 이런 일을 보조할 수 있다.
하지만 책임질 수는 없다.
예를 들어 AI가 결제 취소 API 코드를 만들 수는 있다.
하지만 다음 판단은 개발자가 해야 한다.
- 이미 정산된 결제도 취소 가능한가
- 부분 취소가 가능한가
- PG사 응답 실패 시 재시도할 것인가
- 중복 취소 요청은 어떻게 막을 것인가
- 관리자 감사 로그는 어디에 남길 것인가
- 사용자에게 어떤 메시지를 보여줄 것인가
- 장애가 나면 어떤 기준으로 복구할 것인가
이런 판단은 단순 코드 생성 문제가 아니다.
서비스 운영과 비즈니스 규칙의 문제다.
따라서 AI 시대의 개발자는 코드를 덜 쓰는 사람이 될 수는 있다.
하지만 판단을 덜 하는 사람이 되어서는 안 된다.
오히려 AI가 만든 결과를 검토하고, 시스템 전체 관점에서 판단하는 능력이 더 중요해진다.
15. 실무 예시: 관리자 API를 AI에게 요청하기
예를 들어 관리자 페이지에 사용자 메모 저장 기능을 추가한다고 해보자.
AI에게 단순히 이렇게 요청할 수 있다.
사용자 메모 저장 API 만들어줘.
이 요청은 너무 모호하다.
AI는 언어도 모르고, 인증 방식도 모르고, DB 구조도 모른다.
관리자 기능인지도 모르고, 감사 로그가 필요한지도 모른다.
조금 더 나은 요청은 다음과 같다.
PHP 기준으로 사용자 메모 저장 API 예시를 만들어줘.
Controller, Service, Repository 구조로 작성해줘.
하지만 이것도 아직 부족하다.
관리자 기능이라면 권한, 감사 로그, 입력값 제한, 개인정보 가능성까지 고려해야 한다.
더 좋은 요청은 다음과 같다.
관리자 페이지에서 사용자 메모를 저장하는 API 초안을 만들고 싶어.
조건은 다음과 같아.
- PHP 기반 Controller, Service, Repository 구조
- Controller는 요청 검증과 Service 호출만 담당
- 관리자 인증은 Middleware에서 처리된다고 가정
- Service에서는 대상 사용자 존재 여부 확인
- 메모는 최대 500자
- 저장 시 adminUserIdx, targetUserIdx, memo, createdAt 저장
- 감사 로그를 남길 수 있도록 Service 안에 auditLog 호출 위치를 주석으로 표시
- Repository는 실제 SQL 대신 메서드 형태로 작성
- 응답 형식은 { result, message, data } 구조 사용
- 테스트해야 할 케이스도 함께 정리
이렇게 요청하면 AI가 훨씬 실무에 가까운 초안을 만들 가능성이 높다.
하지만 결과를 받은 뒤에도 확인해야 한다.
- 관리자 권한 검증 위치가 실제 구조와 맞는가
- 대상 사용자 존재 여부를 확인하는가
- 메모 길이 제한이 서버에서 처리되는가
- 저장 실패 시 예외 처리가 있는가
- 감사 로그 위치가 적절한가
- Repository 구조가 기존 코드와 맞는가
- 테스트 케이스가 충분한가
AI에게 좋은 요청을 하는 것도 중요하다.
하지만 더 중요한 것은 받은 결과를 검토하는 것이다.
16. 실무 예시: 기존 코드 분석시키기
AI 코딩 도구는 새 코드를 만드는 것보다 기존 코드를 이해하는 데 더 유용할 때도 많다.
예를 들어 다음과 같은 코드가 있다고 해보자.
public function updateStatus($userIdx, $status)
{
$user = $this->userRepository->find($userIdx);
if (!$user) {
return false;
}
$this->userRepository->updateStatus($userIdx, $status);
if ($status === 'BLOCK') {
$this->sessionRepository->deleteByUserIdx($userIdx);
}
return true;
}
AI에게 단순히 이렇게 물어볼 수 있다.
이 코드 설명해줘.
하지만 실무에서는 조금 더 구체적으로 물어보는 것이 좋다.
이 함수의 역할을 설명해줘.
그리고 운영 코드로 봤을 때 위험할 수 있는 부분을 찾아줘.
특히 트랜잭션, 예외 처리, 권한 검증, 로그 관점에서 봐줘.
이렇게 질문하면 AI는 다음과 같은 검토 후보를 제안할 수 있다.
- 사용자 상태를 변경하는 함수다
- 사용자가 없으면 false를 반환한다
- BLOCK 상태가 되면 세션을 삭제한다
- 상태 변경과 세션 삭제가 하나의 트랜잭션으로 묶여 있지 않을 수 있다
- updateStatus 실패 여부를 확인하지 않는다
- 누가 상태를 변경했는지 감사 로그가 없다
- status 값 검증이 없다
- 권한 검증이 이 함수 밖에서 이루어지는지 확인해야 한다
이런 분석은 도움이 된다.
하지만 AI의 지적이 모두 맞는 것은 아니다.
예를 들어 권한 검증은 이미 Middleware에서 처리되고 있을 수 있다.
트랜잭션도 Repository 내부에서 처리되고 있을 수 있다.
따라서 AI의 답변은 최종 결론이 아니다.
검토해야 할 후보 목록으로 보는 것이 안전하다.
17. 정리
AI 코딩 도구는 개발자의 생산성을 높여주는 강력한 도구다.
GitHub Copilot은 IDE 안에서 빠른 코드 자동 완성에 강하다.
Cursor는 프로젝트 맥락을 활용한 코드 분석과 수정에 강하다.
JetBrains AI는 기존 JetBrains IDE 흐름 안에서 AI 기능을 사용할 수 있게 해준다.
Claude Code는 터미널 기반으로 여러 파일을 분석하고 수정하는 작업에 유용하다.
ChatGPT는 설계, 설명, 문서화, 문제 분석처럼 대화형 작업에 강하다.
하지만 AI 코딩 도구는 코드를 대신 책임져주지 않는다.
AI가 만든 코드는 초안이다.
실제 서비스에 넣기 전에는 개발자가 반드시 검토해야 한다.
특히 팀 개발에서는 더 조심해야 한다.
- 회사 코드가 외부로 전송되는가
- 개인정보나 인증키가 포함되지 않는가
- AI가 만든 코드에 대한 리뷰 기준이 있는가
- 보안과 권한 검토가 이루어지는가
- 테스트로 검증했는가
- 비용과 계정 관리는 가능한가
AI 코딩 도구를 잘 쓰는 개발자는 단순히 AI에게 코드를 많이 시키는 사람이 아니다.
요구사항을 명확히 설명하고, 작업을 작은 단위로 나누고, AI가 만든 결과를 검증할 수 있는 사람이다.
앞으로 개발자의 역할은 코드를 직접 타이핑하는 것에서 끝나지 않는다.
AI와 함께 일하면서도 최종 판단과 책임을 지는 방향으로 바뀌고 있다.
27장 핵심 요약
| 핵심 내용 | 설명 |
|---|---|
| AI 코딩 도구는 개발 보조 도구다 | 코드 작성, 분석, 리팩토링, 테스트 생성 등을 도와준다 |
| AI가 만든 코드는 초안이다 | 실제 서비스에 맞는지는 개발자가 검토해야 한다 |
| GitHub Copilot은 자동 완성에 강하다 | 반복 코드 작성과 IDE 안에서의 빠른 제안에 유용하다 |
| Cursor는 프로젝트 맥락 활용에 강하다 | 여러 파일을 참고한 분석과 수정 요청에 적합하다 |
| JetBrains AI는 기존 IDE 흐름에 잘 맞는다 | IntelliJ, PhpStorm 같은 IDE 안에서 자연스럽게 사용할 수 있다 |
| Claude Code는 터미널 기반 작업에 유용하다 | 프로젝트 분석, 파일 수정, 테스트 실행 흐름에 사용할 수 있다 |
| ChatGPT는 설계와 설명에 강하다 | 코드 작성뿐 아니라 아키텍처 상담, 문서화, 장애 분석에도 활용할 수 있다 |
| IDE형 AI와 채팅형 AI는 다르다 | IDE형은 코드 작업에, 채팅형은 설명과 방향 정리에 강하다 |
| 팀 개발에서는 보안 기준이 필요하다 | 소스코드, 개인정보, API 키가 외부로 전송되지 않도록 해야 한다 |
| AI 코딩 도구 도입 전 정책이 필요하다 | 허용 도구, 입력 가능 데이터, 리뷰 기준, 비용 관리 방식을 정해야 한다 |