GN⁺: AI에게 시니어 개발자처럼 코드를 읽도록 가르치다
(nmn.gl)- "AI 코드 분석에 대한 사고방식을 바꾼 혼란스러운 실험"
- 기존 AI가 React 코드베이스를 분석하다가 자주 실패하는 상황을 목격했음
- 원인은 주니어 개발자가 코드를 처음 읽을 때처럼 라인 단위로만 분석하는 방식에 있었다고 깨달음
부트캠프 시절과 시니어 마인드셋의 차이
- 주니어 시절에는 파일을 순서대로, 라인 단위로 읽다가 금방 길을 잃는 경우가 많음
-
시니어 개발자는 대규모 PR을 볼 때 다음과 같은 방식을 사용함
- 핵심 파일을 먼저 확인함
- 기능별로 변경 사항을 묶어서 파악함
- 전체 아키텍처를 먼저 이해하고, 이후에 세부 구현을 살핌
- 이러한 접근 방식을 AI에게 적용하기로 결정함
실험
- 파일을 기능별로 그룹화하고, 그룹에 대한 맥락 정보를 AI에게 먼저 제공하는 방식을 시도함
- 예시 코드에서
FileGroup
인터페이스를 정의하고, 파일을 관련 기능과 파일 크기에 따라 묶어서 처리함 - 그룹 단위로 AI에게 “어떤 기능 영역인지, 무엇을 중점적으로 살펴야 하는지” 등을 안내하는 프롬프트를 구성함
놀라운 변화의 순간
- 기존에는 “JWT 토큰 인증 로직이 포함되어 있음” 정도로 단순 응답하던 AI가
- “웹소켓 연결 등에 미칠 영향, 최근 합쳐진 PR에 대한 레이스 컨디션 가능성” 등 시니어 개발자 수준 통찰을 제시하게 됨
- AI가 시스템 전체 맥락을 고려해 지적하기 시작했음
실제로 달라진 점
- 더 복잡한 머신러닝 모델을 쓴 게 아니라, 시니어 개발자처럼 생각하는 순서를 AI에게 부여한 것이 핵심임
- 맥락 우선: 전체 시스템 이해부터 진행함
- 패턴 매칭: 유사한 파일을 그룹화해 반복되는 로직을 찾음
- 영향 분석: 변경 사항이 시스템 전체에 주는 영향을 인식함
- 히스토리 이해: 과거 코드 변경 이유나 맥락까지 추적함
예상치 못한 부수 효과
- 단순히 원하는 지점만 고치는 것이 아니라, 다음과 같은 인사이트들도 포착함
- 복사-붙여넣기로 인한 중복된 코드 블록 식별
- 일관되지 않은 오류 처리 패턴 경고
- 잠재적인 성능 병목 가능성 파악
- 사용 패턴에 따른 아키텍처 개선 제안
왜 중요한가
- 최근 AI 기반 IDE들은 코드를 자동 생성하는 데 집중하고 있음
- 하지만 전체 시스템 맥락 없이 단순 제안만 하는 것은 “방금 합류한 주니어 개발자”처럼 위험할 수 있음
- 진정 중요한 것은 “깊이 있는 코드 이해”임
남은 질문
- 콘텍스트(역사 정보)을 언제 갱신하고 언제 유지할지를 결정하는 문제
- 서로 충돌하는 패턴이 발견될 때 어떻게 대응할지
- 불확실성이 높은 분석 결과를 사용자에게 어떻게 표시할지
앞으로의 방향
- 시니어 개발자처럼 다음과 같은 감각도 AI에게 가르칠 수 있을지 고민 중임
- 기술 부채를 사전에 감지하는 능력
- 아키텍처 개선안을 능동적으로 제안하는 역량
- 사용 패턴에서 보안 문제를 감지하는 능력
- 팀 내부의 비공식적 규칙을 파악하는 감각
- 단순히 “더 많은 코드”를 생성하는 것이 아니라, “시니어 개발자처럼 코드 전체를 깊이 있게 이해하는 방법”을 가르치는 것이 궁극적인 목표임
Hacker News 의견
-
댓글에서 사람들이 비판적임. 이 글은 새로운 도구 가능성에 대한 짧고 긍정적인 결과를 다루고 있으며, 솔직하고 합리적인 생각을 포함하고 있음
- "Senior vs Junior Developer" 내러티브가 다소 과장되었을 수 있지만, 글의 본질은 훌륭함
- 사람들이 위협을 느껴 화를 내는 것인지 궁금함
-
LLM이 놀라운 일을 하는 또 다른 예시임. 그러나 일관되고 정확하게 모든 입력에 대해 작동하는 시스템을 구축하는 것은 매우 어려움
- 인증 시스템 파일 분석 예시가 있음
- 이 하드코딩된 문자열이 중요한 역할을 하지만, 모든 PR에 대해 정확하고 일관되게 생성될 때까지 특별하지 않음
- 다양한 코드베이스와 실제 PR을 통해 평가를 설정해야 함
-
코드 작성에 있어 더 나은 에이전트 시스템을 위한 교훈이 있을 것임
- Claude/chatGPT 등에게 코드를 생성하지 말라고 지시함. 초기 구조를 생성한 후에 코드를 작성하도록 함
-
글의 첫 줄을 읽고 외계인처럼 느껴졌음. 전체 글을 읽어야겠지만, 기존 코드를 순차적으로 읽는다는 것은 이상하게 느껴짐
- "주니어 개발자"에 대한 잘못된 인식이 많음
-
인간 요소의 중요성을 강조함. 코드베이스의 맥락적 이해 없이는 AI 경고의 의미를 알 수 없음
- "공유 패턴"이 무엇인지, 왜 경합 조건을 유발하는지 이해하기 어려움
- 인증 변경과 "재시도 로직" PR 간의 관계가 명확하지 않음
-
AI가 존재하지 않는 API를 만들어내는 것을 막기 어려움. 잘 작동할 때는 좋지만, 대부분은 잘 작동하지 않음
- AI가 잘 작동하는 것은 많은 사람들이 이미 작성한 코드를 작성하고 있을 때임
-
코드 맥락과 이해가 LLM 생성 코드의 품질을 향상시키는 데 중요함
- Bismuth 제품은 사용자 요청에 따라 프로젝트를 논리적 영역으로 나누고, 심볼 정보를 검색하여 코드베이스를 탐색함
- 경쟁 제품 중 일부만이 이와 같은 수준의 검색 기능을 제공함
-
John McCarthy의 불만처럼, 이건 실험이나 증명이 아닌 이야기임
- 커뮤니티가 비판적 사고와 훈련을 활용하길 바람
-
결과가 인상적임. 스타일과 통일성에 대한 비판은 있지만, 결과는 유용해 보임
- 제목에서 AI가 다른 사람의 작업을 무시하고 자신의 작업만을 강조하는 내용일 줄 알았음
-
이 기술의 중요한 부분이 글에서 빠진 것 같음. getFileContext()와 shouldStartNewGroup()의 구현이 없음