
코드를 빨리 쓰는 게 실력이라면, 코드를 빨리 고치는 건 진짜 실력입니다. 개발자는 새 코드를 작성하는 시간보다 기존 코드를 읽고, 버그를 잡고, 성능을 개선하는 데 더 많은 시간을 쓰는 경우가 많습니다. 그런데 정작 코드 리뷰는 늘 시간 부족으로 미뤄지기 마련입니다. 시니어에게 물어보면 “나중에”라는 답이 돌아오죠.
AI 코딩 도구가 이 간극을 메워줄 수 있습니다. 코드를 “작성”하는 용도로만 쓰던 Cursor와 GitHub Copilot을 코드 리뷰, 보안 분석, 성능 최적화, 리팩토링에 활용하는 방법을 실제 FastAPI 프로젝트 사례와 함께 단계별로 정리했습니다.
AI 코드 리뷰란 무엇인가?
전통적인 정적 분석 도구(SonarQube, ESLint)는 “규칙 위반”을 찾습니다. 사용하지 않는 변수, 너무 긴 함수, 코딩 컨벤션 위반 같은 패턴이죠. AI 코드 리뷰는 여기에 더해 맥락 이해가 들어갑니다. “이 로직은 특정 상황에서 경쟁 상태를 일으킬 ” 같은 분석이 가능하다는 뜻입니다.
정적 분석과 AI 리뷰는 대체재가 아닙니다. 보완재입니다. 정적 분석으로 규칙 기반 문제를 잡고, AI로 맥락 기반 문제를 잡으면 리뷰어는 진짜 중요한 설계 결정에 집중할 수 있습니다. 무엇보다 AI는 24시간 즉시 응답합니다. 새벽 3시에 코드를 고쳤을 때 “이거 괜찮아?” 하고 물어보면 바로 답이 옵니다.
Cursor로 보안 취약점 찾기 (실전)
실제 북마크 관리 앱(FastAPI + SQLite)을 Cursor로 리뷰해 봤습니다. Cmd+L(Mac) 또는 Ctrl+L(Windows)로 사이드 패널을 열고 프로젝트 전체를 컨텍스트로 인식시킨 뒤 질문합니다.
이 프로젝트의 코드를 보안 관점에서 리뷰해줘.
특히 SQL Injection, XSS, 인증 관련 취약점이 있는지 확인해줘.
5분 만에 세 가지 문제가 발견됐습니다.
1. SQL Injection — 검색 기능에서 raw SQL 문자열 포맷팅을 하고 있었습니다. f"SELECT * FROM bookmarks WHERE title LIKE '%{query}%'" 형태라 사용자 입력이 직접 SQL에 들어갑니다. Cursor가 parameterized query로 수정을 제안했습니다.
# 수정 전 (위험)
results = db.execute(f"SELECT * FROM bookmarks WHERE title LIKE '%{query}%'").fetchall()
# 수정 후 (안전)
from sqlalchemy import text
results = db.execute(text("SELECT * FROM bookmarks WHERE title LIKE :query"), {"query": f"%{query}%"}).fetchall()

2. XSS 취약점 — Jinja2 템플릿에서 사용자 입력을 |safe 필터로 출력하고 있었습니다. 북마크 제목에 악성 스크립트를 넣으면 다른 사용자의 페이지에서 실행됩니다. |safe를 제거하거나 escape 처리로 해결합니다.
3. 인증 누락 — 북마크 삭제 API에 권한 확인이 없었습니다. 누구나 URL만 알면 다른 사람의 북마크를 지울 수 있는 상태였습니다. DELETE 엔드포인트에 인증 미들웨어를 추가했습니다.
GitHub Copilot Chat으로 성능 병목 분석
보안 다음은 성능입니다. VS Code에서 Copilot Chat 패널을 열고 이렇게 물어봤습니다.
이 FastAPI 프로젝트에서 응답 속도를 느리게 만드는
잠재적 성능 병목을 찾아줘. 특히 N+1 문제가 있는지 확인해줘.
가장 중요한 발견은 N+1 쿼리 문제였습니다. 북마크 목록을 불러올 때 각 북마크마다 태그를 별도로 조회하고 있었습니다. 100개의 북마크 = 101번의 쿼리. selectinload를 적용하면 2번으로 줄어듭니다.
# 수정 전 (N+1 문제)
bookmarks = db.query(Bookmark).all()
for b in bookmarks:
tags = b.tags # 각 북마크마다 별도 쿼리 실행
# 수정 후 (단일 쿼리)
from sqlalchemy.orm import selectinload
bookmarks = db.query(Bookmark).options(selectinload(Bookmark.tags)).all()
추가로 동기식 파일 I/O(파비콘 다운로드)를 BackgroundTasks로 비동기화하고, 검색 컬럼에 인덱스를 추가했습니다. 이런 최적화는 보통 프로파일링 도구를 돌려야 발견할 수 있지만, AI가 코드를 읽고 잠재적 병목 후보를 미리 좁혀줍니다.
AI 리팩토링 — 구조 개선
개별 수정을 넘어 프로젝트 구조 자체를 개선할 수 있습니다. 북마크 앱의 main.py에 라우트, 비즈니스 로직, DB 쿼리가 전부 섞여 있었습니다. Cursor Agent로 역할별 분리를 요청했습니다.
main.py의 코드를 역할별로 분리해줘.
- routers/bookmarks.py (라우트 핸들러)
- services/bookmark_service.py (비즈니스 로직)
- repositories/bookmark_repo.py (데이터베이스 쿼리)
의존성 주입 패턴을 사용하고, 각 계층의 책임을 명확히 해줘.
다만 주의할 점이 있습니다. AI는 과도한 추상화를 좋아하는 경향이 있습니다. 간단한 CRUD 앱에 Factory 패턴, Strategy 패턴, Observer 패턴을 다 넣으라고 할 수 있습니다. “이 패턴이 왜 필요한지”를 AI에게 물어보고, 설득력 있는 답이 안 나오면 적용하지 않습니다. YAGNI(You Aren’t Gonna Need It) 원칙을 지키는 게 중요합니다.

또한 리팩토링 전에는 반드시 테스트 코드를 먼저 확인합니다. 테스트가 없다면 AI에게 “이 코드에 대한 기본 테스트를 작성해줘”라고 먼저 요청한 뒤 리팩토링을 진행합니다. 테스트 없는 대규모 리팩토링은 위험합니다.
CI/CD에 AI 리뷰 자동화하기
에디터 안에서 수동으로 리뷰하는 것을 넘어, PR이 올라올 때마다 자동으로 AI 리뷰가 실행되도록 만들 수 있습니다. GitHub Copilot의 코드 리뷰 기능이나 CodeRabbit 같은 서비스를 PR에 연결하면 됩니다.
# 별도 워크플로 파일 없이 GitHub App·내장 기능으로 연결합니다
# 1) CodeRabbit: 공식 문서(docs.coderabbit.ai)의 안내대로 GitHub App 을 설치하고 저장소를 선택
# 2) GitHub Copilot: PR 화면의 Reviewers 에서 Copilot 을 선택해 코드 리뷰 요청
# 3) 팀 규칙은 각 서비스의 설정 파일(예: .coderabbit.yaml)로 관리
CodeRabbit은 앱을 설치하면 PR이 생성될 때마다 자동으로 코드를 분석해 리뷰 코멘트를 달고, Copilot은 리뷰어로 지정하면 같은 방식으로 코멘트를 답니다. 새벽에 PR을 올려도 즉시 피드백이 오고, 기본적인 보안 체크를 자동으로 해줍니다. AI 리뷰는 보조 도구로 쓰고, 최종 머지 결정은 사람이 합니다.
정리
AI 코드 리뷰의 핵심은 1차 필터링을 AI에게 맡기고, 사람은 설계 수준의 의사결정에 집중하는 것입니다. Cursor 채팅 패널로 보안 취약점을 점검하고, Copilot Chat으로 성능 병목을 찾고, Agent로 리팩토링까지 할 수 있습니다.
처음부터 완벽하게 할 필요는 없습니다. 먼저 Cursor나 Copilot Chat을 열고 “이 코드에서 보안 문제를 찾아줘”라고 물어보는 것부터 시작해 보세요. 거기서부터가 AI 코드 리뷰의 출발점입니다.
—
관련 영상: 이 글은 유튜브 영상의 보충 자료입니다. 영상에서 실제 화면 조작과 코드 수정 과정을 확인할 수 있습니다.
관련 글
- AI랑 코딩하면 하루 만에 앱이 완성됩니다 — Vibe Coding 실전 튜토리얼
- AI로 코딩 배우기 — 비전공자 파이썬 첫 코드 1시간 (2026)
- AI로 블로그 글쓰기 — SEO까지 한 번에 끝내는 법 (2026)



















