-
AI와 협업하는 개발 환경에서는 인간이 프로젝트의 방향과 의사결정을 명확히 정의해야 품질을 유지할 수 있음
-
정확한 문서화를 통해 AI와 다른 개발자 모두가 요구사항과 제약을 명확히 이해하도록 해야 함
-
디버그 시스템과 코드 리뷰 체계를 구축해 AI가 생성한 코드의 신뢰성과 검증 과정을 강화함
-
보안 위험 함수 표시, 테스트 분리, 엄격한 린팅 규칙 등으로 코드의 안정성과 일관성을 확보함
-
작업 단위 분할과 복잡도 최소화를 통해 AI 코드 생성의 통제력을 유지하고 효율성을 극대화함
1. 명확한 비전 수립
- 인간은 세계와 팀, 사용자 행동을 이해하지만 AI는 경험이 없으므로 명시적 지침이 필요함
- 프로젝트에서 문서화되지 않은 결정은 AI가 대신 내리게 됨
-
아키텍처, 인터페이스, 데이터 구조, 알고리듬을 사전에 논의하고 테스트 방법을 정의해야 함
- 장기적이고 변경이 어려운 결정은 반드시 인간이 직접 관리해야 함
2. 정확한 문서 유지
- AI가 목적에 맞는 코드를 생성하려면 세부적인 요구사항 전달이 필수임
- 다른 개발자도 동일한 정보를 AI에 제공해야 하므로, 표준화된 형식의 문서를 코드 저장소에 포함해야 함
- 요구사항, 제약, 아키텍처, 코딩 표준, 디자인 패턴 등을 상세히 기록
-
UML 다이어그램, 플로우차트, 의사코드 등을 활용해 복잡한 구조를 시각적으로 표현
3. AI를 지원하는 디버그 시스템 구축
-
효율적인 디버그 시스템을 마련해 AI가 코드 기능을 빠르게 검증할 수 있도록 해야 함
- 예: 분산 시스템의 모든 노드 로그를 수집해 “데이터가 모든 노드로 전송됨” 등 요약 정보를 제공
- 이를 통해 명령어 실행 비용 절감과 문제 식별 속도 향상이 가능함
4. 코드 리뷰 수준 표시
- 코드의 중요도에 따라 리뷰 강도를 구분해야 함
- 예: AI가 작성한 함수 뒤에 //A 주석을 추가해 인간 검토 여부를 표시
- 이 체계는 검토되지 않은 코드의 식별과 관리를 용이하게 함
5. 고수준 명세 작성 및 직접 테스트
- AI는 테스트 통과를 위해 모의 객체나 하드코딩 값으로 속임수를 쓸 수 있음
- 이를 방지하기 위해 속성 기반 테스트(property-based testing) 를 직접 작성해야 함
- 예: 서버를 재시작하고 데이터베이스 값의 일관성을 검증
- 테스트 코드는 AI가 수정하지 못하도록 별도 영역에 분리해야 함
6. 인터페이스 테스트의 분리
-
AI가 다른 코드 맥락을 모른 채 인터페이스 테스트를 작성하도록 해야 함
- 구현 AI의 영향을 받지 않아 테스트의 객관성이 유지됨
- 이 테스트 역시 AI가 임의로 수정하지 못하도록 보호해야 함
7. 엄격한 린팅 및 포맷팅 규칙
-
일관된 코드 스타일과 린팅 규칙은 품질 유지와 오류 조기 발견에 필수적임
- AI와 인간 모두가 코드 품질을 쉽게 점검할 수 있음
8. 컨텍스트별 코드 에이전트 프롬프트 활용
-
프로젝트별 CLAUDE.md 등 프롬프트 파일을 사용해 AI의 초기 이해 비용을 줄임
- 코딩 표준, 디자인 패턴, 요구사항 등을 포함해 AI의 코드 생성 품질과 효율성을 높임
9. 보안 위험 함수 식별 및 표시
- 인증, 권한, 데이터 처리 등 보안 민감 함수를 명시적으로 표시해야 함
- 예: //HIGH-RISK-UNREVIEWED, //HIGH-RISK-REVIEWED 주석 사용
- AI가 해당 함수를 수정하면 리뷰 상태를 자동 변경하도록 설정해야 함
- 개발자는 항상 이 상태가 정확한지 확인해야 함
10. 코드 복잡도 최소화
-
불필요한 코드 한 줄도 AI의 컨텍스트 창을 차지하고 비용을 증가시킴
- 가능한 한 단순한 구조로 유지해 AI와 인간 모두의 이해도를 높여야 함
11. 실험과 프로토타입을 통한 문제 탐색
-
AI 코드 생성의 저비용 특성을 활용해 다양한 해결책을 실험할 수 있음
- 최소한의 명세로 여러 프로토타입을 만들어 최적의 접근법을 탐색함
12. 무분별한 대규모 생성 금지
- 복잡한 작업은 작은 단위로 분할해 AI가 단계적으로 처리하도록 해야 함
- 예: 전체 프로젝트 대신 개별 함수나 클래스를 생성
- 각 구성요소가 명세에 부합하는지 검증해야 하며,
코드의 복잡성을 통제하지 못하면 프로젝트를 초기 상태로 되돌려야 함