이 자료는 LLM(대형 언어 모델)을 활용한 코딩 방식인 '바이브 코딩'을 최대한 활용하기 위한 여러 조언과 모범 사례를 제공합니다. 전문가 수준의 소프트웨어 개발자가 사용하는 기술을 LLM에도 적용하는 것이 핵심이며, 이를 통해 더 나은 결과를 얻을 수 있음을 강조합니다.
핵심 전략 및 조언:
- LLM을 다른 프로그래밍 언어처럼 생각하라: 언어를 통해 프로그래밍하는 것이므로 상세하고 필요한 모든 컨텍스트와 정보를 제공해야 합니다.
- 계획 수립: 코딩 도구에 바로 뛰어들기보다 LLM과 협력하여 포괄적인 계획을 작성하고, 이를 프로젝트 폴더 내 마크다운 파일에 저장하여 참조합니다. 계획을 세분화하여 단계별로 구현하고 테스트하며 Git에 커밋하는 것이 좋습니다.
- 버전 관리 사용 (Git): Git을 철저히 사용하여 변경 사항을 추적하고 문제가 발생했을 때 이전의 작동하는 버전으로 되돌아갈 수 있도록 합니다. AI가 잘못된 방향으로 진행될 경우 git reset head hard를 사용하여 깨끗한 상태에서 다시 시작하는 것이 효과적입니다.
- 테스트 작성: LLM이 작성한 코드를 검증하기 위해 테스트를 작성하거나 LLM에게 테스트 작성을 요청합니다. 특히 LLM이 불필요한 변경을 자주 일으키므로 회귀를 잡기 위해 고수준 통합 테스트를 작성하는 것이 중요합니다.
- 다양한 LLM 도구 활용: Windsurf, Cursor, Claude Code 등 다양한 도구를 사용하고, 막히는 경우 LLM의 웹사이트 UI에 직접 코드를 붙여넣어 문제를 해결해 볼 수 있습니다. Cursor는 빠르고 Windsurf는 더 오래 생각하는 경향이 있어 동시에 두 도구를 사용하는 것도 효과적입니다.
- 디버깅: 버그 발생 시 오류 메시지를 LLM에 바로 복사하여 붙여넣는 것이 첫 번째 단계입니다. 더 복잡한 버그는 LLM에게 가능한 원인 3-4가지를 생각하게 한 후 코드를 작성하도록 요청하고, 실패 시 git reset 후 로깅을 추가하여 다시 시도합니다. 다른 모델로 전환하는 것도 좋은 방법입니다.
- 모델 전환: 특정 작업에서 한 모델이 실패하면 다른 LLM 모델(Claude Sonnet, OpenAI 모델, Gemini 등)을 시도해 봅니다. 각 모델마다 강점이 다를 수 있습니다.
- 지침 파일 작성: 각 코딩 도구에 맞는 형식으로 LLM에 대한 지침 파일을 작성하여 행동 방식과 제약 사항을 명확히 합니다.
- 로컬 문서 활용: 온라인 문서는 아직 불안정할 수 있으므로, API 문서를 다운로드하여 작업 폴더에 넣고 LLM이 로컬에서 참조하도록 지침을 주는 것이 정확도를 높이는 데 도움이 됩니다.
- LLM을 교사로 활용: 구현된 코드를 LLM에게 한 줄씩 설명해 달라고 요청하여 새로운 기술을 학습하는 데 사용할 수 있습니다.
- 복잡한 기능 처리: 복잡한 새 기능은 기존 코드베이스와 분리된 독립적인 프로젝트에서 참조 구현을 먼저 만들거나 다운로드한 후, LLM에게 이를 참조하여 주 코드베이스에 구현하도록 요청합니다.
- 작은 파일과 모듈성: 코드베이스를 작고 모듈화된 파일로 유지하는 것이 인간과 LLM 모두에게 이해하기 쉽고 유지보수하기 편리합니다.
- 기술 스택 선택: Ruby on Rails처럼 오래되고 잘 확립된 규칙과 풍부한 학습 데이터가 있는 기술 스택은 LLM의 성능이 뛰어날 수 있습니다. Rust나 Elixir처럼 데이터가 적은 언어는 아직 어려움을 겪을 수 있습니다.
- 스크린샷 및 음성 활용: 스크린샷을 복사하여 UI 버그 시연이나 디자인 영감 제공에 활용하고, Aqua와 같은 도구를 통해 음성으로 지침을 입력하여 효율성을 높일 수 있습니다.
- 잦은 리팩토링: 코드가 작동하고 테스트가 통과한 후에는 테스트를 활용하여 안전하게 리팩토링합니다. LLM에게 반복적이거나 리팩토링에 적합한 부분을 식별해 달라고 요청할 수도 있습니다.
- 지속적인 실험: 이 분야는 빠르게 변화하므로 새로운 모델 출시마다 어떤 모델이 특정 작업에 더 나은지 계속 실험하는 것이 중요합니다.