JetBrains AI Assistant 실무 심층 탐구: 코드 생성부터 리팩토링까지
개발자는 코드 작성 외에도 수많은 인지적 노동을 합니다. 레거시 코드를 분석하고, 더 나은 구조를 고민하며 리팩토링하고, 변경 사항을 명확히 설명하는 커밋 메시지를 작성하는 일들입니다. GitHub Copilot이 코드 자동 완성의 시대를 열었다면, 이제 AI 도구들은 개발 워크플로 전체에 더 깊이 관여하고 있습니다.
JetBrains AI Assistant는 우리가 매일 사용하는 IntelliJ, PyCharm, WebStorm 같은 IDE에 직접 통합된 AI 도구입니다. 단순 코드 조각 생성을 넘어, IDE가 가진 풍부한 코드 인덱싱 정보를 바탕으로 훨씬 더 문맥에 맞는 제안을 하는 것을 목표로 합니다.
이 글에서는 JetBrains AI Assistant의 기본 설정부터 실무에서 유용한 핵심 기능, 그리고 제가 직접 겪은 실패 사례와 기술적 트레이드오프까지 시니어 개발자의 관점에서 솔직하게 다루겠습니다.
![]()
© AI Generated Image
JetBrains AI Assistant, 시작하기 전에: 설정과 모델
JetBrains AI Assistant는 별도 플러그인 설치가 필요 없이 최신 버전의 JetBrains IDE에 내장되어 있습니다. 다만 사용하려면 몇 가지 설정이 필요합니다.
초기 설정과 라이선스
AI Assistant를 활성화하면 JetBrains 계정으로 로그인하라는 메시지가 나타납니다. 이 도구는 구독 기반 유료 서비스입니다. 독립적인 AI Assistant Pro 구독을 구매하거나, All Products Pack 같은 상위 플랜에 포함된 형태로 쓸 수 있습니다. 초기에는 체험판(Trial) 기간을 제공하므로, 결제 전에 충분히 기능을 시험해 보는 것이 좋습니다.
API 키를 직접 입력하는 방식이 아니라, JetBrains 계정 자체에 라이선스가 귀속되는 점이 다른 서비스와의 차이점입니다.
동작 원리: 클라우드 LLM과 컨텍스트
AI Assistant는 기본적으로 JetBrains가 호스팅하는 서버를 통해 OpenAI, Anthropic 등 여러 파트너사의 LLM에 접근합니다. 사용자가 코드를 요청하면 IDE는 현재 파일의 코드, 프로젝트 구조 정보, 언어 설정 등 필요한 컨텍스트를 수집하여 JetBrains 서버로 전송합니다.
중요한 점은 코드가 외부 서버로 전송된다는 사실입니다. JetBrains는 데이터 보안과 프라이버시 정책을 통해 전송된 코드를 모델 학습에 사용하지 않는다고 명시하고 있습니다. 하지만 사내 보안 규정이 민감한 회사에서는 사용 전 반드시 정책 검토가 필요합니다.
코드베이스를 이해하는 AI: 핵심 기능 분석
단순 프롬프트 입력과 결과 확인을 넘어, IDE의 특정 기능과 결합될 때 AI Assistant의 진가가 드러납니다.
1. 문맥 인식 코드 생성 (Alt + \)
주석이나 함수 시그니처만 작성하고 Alt + \ (macOS: ⌥ + \) 단축키를 누르면, AI가 전체 구현부를 제안합니다. GitHub Copilot과 유사하지만, 현재 열린 파일뿐만 아니라 IDE가 인덱싱한 프로젝트 내 다른 클래스와 함수의 존재를 더 잘 인지하는 경향이 있습니다.
# users 테이블에서 특정 ID를 가진 사용자를 찾아
# User 객체로 반환하는 함수.
# 사용자가 없으면 None을 반환해야 함.
def find_user_by_id(user_id: int) -> User | None:
# 이 부분에서 Alt + \ 를 누르면 아래 코드가 생성됨
db = get_database_connection()
cursor = db.cursor()
cursor.execute("SELECT id, name, email FROM users WHERE id = %s", (user_id,))
user_data = cursor.fetchone()
if user_data:
return User(id=user_data[0], name=user_data[1], email=user_data[2])
return None
위 예시에서 User 객체나 get_database_connection 함수의 구조를 프로젝트 내 다른 파일에서 파악하고 코드를 생성해주는 점이 인상적입니다.
2. 지능형 리팩토링 제안
기존 코드를 선택하고 우클릭 메뉴에서 ‘AI Actions > Suggest Refactoring’을 선택하면, 코드 개선안을 제시합니다. 이는 단순히 코드를 새로 짜는 것과 다릅니다. 예를 들어, 긴 함수를 여러 개의 작은 함수로 분리하거나, 중첩된 if-else 문을 더 읽기 좋은 형태로 바꾸는 등 구조적 개선에 초점을 맞춥니다.
이 기능은 레거시 코드를 유지보수하거나, 동료의 복잡한 코드를 처음 분석할 때 특히 유용했습니다.
3. AI 커밋 메시지 작성
가장 실용적인 기능 중 하나입니다. IDE의 ‘Commit’ 패널에서 ‘Generate Commit Message with AI Assistant’ 버튼을 누르면, 변경된 코드(diff)를 분석해 자동으로 커밋 메시지 초안을 작성해 줍니다.
단순히 “Update file.py” 같은 메시지가 아니라, 변경 사항의 목적과 주요 내용을 요약한 제목과 본문을 생성합니다. 팀의 커밋 컨벤션에 맞게 약간만 수정하면 되므로, 문서화에 드는 시간을 크게 줄여줍니다.
실전에서 마주한 함정 (Failure Cases & Trade-offs)
모든 AI 도구가 그렇듯, JetBrains AI Assistant 역시 만능은 아닙니다. 맹목적으로 믿고 쓰다가는 오히려 문제가 생길 수 있습니다.
‘환각’ 현상과 잘못된 제안
가장 흔한 문제입니다. 존재하지 않는 라이브러리 함수를 호출하거나, 미묘하게 잘못된 로직을 제안하는 경우가 종종 있습니다. 특히 복잡한 비즈니스 로직이나 도메인 특화적인 코드를 다룰 때 이런 실수가 잦았습니다.
AI가 제안한 코드는 초안일 뿐, 최종 책임은 개발자에게 있습니다. 반드시 제안된 코드를 한 줄씩 읽고, 의도대로 동작하는지 검증하는 습관이 중요합니다.
컨텍스트 범위의 한계
AI Assistant는 프로젝트의 모든 파일을 한 번에 읽지 못합니다. 현재 열린 파일과 밀접하게 연관된 일부 파일들을 중심으로 컨텍스트를 구성합니다.
이 때문에 여러 모듈에 걸쳐 있는 복잡한 의존성을 가진 기능을 수정할 때는 엉뚱한 제안을 하기도 합니다. 예를 들어, A 모듈의 인터페이스 변경이 C 모듈의 구현에 미치는 영향을 전혀 파악하지 못하는 식입니다. 이런 경우, AI에게 의존하기보다 개발자가 직접 전체적인 구조를 파악하고 코드를 수정해야 합니다.
결론: 누구에게 가장 유용한 도구인가?
JetBrains AI Assistant는 단순 코드 완성을 넘어, 개발 워크플로에 깊숙이 통합된 ‘조수’ 역할을 합니다. 특히 다음과 같은 개발자에게 큰 도움이 될 수 있습니다.
- 이미 JetBrains IDE 생태계에 익숙한 개발자: 별도 학습 없이 기존 단축키와 UI에 자연스럽게 녹아들어 생산성을 즉시 높일 수 있습니다.
- 레거시 코드 유지보수 담당자: 코드 설명, 리팩토링 제안 기능은 복잡한 코드베이스를 빠르게 파악하는 데 큰 무기입니다.
- 문서화와 코드 품질에 신경 쓰는 개발자: 커밋 메시지 자동 생성, 이름 제안 등의 기능은 코드 품질을 일관되게 유지하는 데 소요되는 시간을 줄여줍니다.
물론 클라우드 기반 모델의 한계와 비용은 분명한 단점입니다. 하지만 잘 이해하고 사용한다면, 코딩의 지루한 부분을 자동화하고 개발자가 더 창의적이고 중요한 문제에 집중하도록 돕는 강력한 도구임이 분명합니다. 중요한 것은 AI의 제안을 비판적으로 수용하고 최종 결정을 내리는 주체는 언제나 개발자 자신이라는 점을 잊지 않는 것입니다.