Vibe Coding에서 배운 10가지 (또는: AI Agent에게 내 Audio Library를 작성하게 한 방법)
Source: Dev.to
번역할 텍스트가 제공되지 않았습니다. 번역을 원하는 본문을 알려주시면 한국어로 번역해 드리겠습니다.
TL;DR — 최종 결과가 여기 있습니다
다른 사람에게도 도움이 되길 바랍니다.
최근에 작은 사이드 프로젝트를 마쳤고, 일반적인 방법과 다르게 필수 기능 하나를 처리하기로 했습니다.
표면적으로는 작업이 간단했습니다: 거의 모든 형식의 업로드된 오디오 파일을 받아서 PCM 16‑bit signed, mono, 8 kHz WAV 로 리샘플링하고 변환하는 것이었습니다.
통신 분야에서는 이 초저사양 포맷이 여전히 지원해야 하는 표준입니다 — 대부분의 클래스‑4 및 클래스‑5 PBX는 정확히 G.711‑compatible PCM: 8000 Hz, mono, 16‑bit linear을 기대하거나(조용히) 모든 것을 변환합니다. 다른 포맷은 보통 트랜스코딩되거나, 통화가 실패합니다.
보통은 ffmpeg를 호출해서 끝냈지만, 이번에는 순수 네이티브 Go 코드만 사용하고 싶었습니다 — 외부 바이너리 없이.
몇 년 전, 원시 PCM 샘플을 받아 .wav 파일로 감싸는 작은 Go 패키지를 만들었습니다. 그게 전부였고 — 디코딩도, 리샘플링도, 포맷 변환도 없었습니다. 실제 리샘플링과 다중 포맷 입력으로 확장하려고 하자 곧 문제에 부딪혔습니다.
하루에 한 시간씩 저녁에 일주일을 보낸 후에도 코드는 여전히:
- 여러 입력에서 충돌 (버퍼 로직 오류)
ffmpeg나 Audacity보다 눈에 띄게 낮은 오디오 품질을 생성 (단순 선형 리샘플링)- PCM
.wav파일만 지원 (RIFF 메타데이터 처리 없음, 다른 컨테이너도 없음) - 진전이 거의 없어서 시간이 오래 걸림
그때 나는 무료 비에이전트 AI가 도움이 될지 확인해 보기로 했습니다. 다음을 시도했습니다:
- 🟡 Claude
- 🔵 Grok
- 🟢 GitHub Copilot
- 🟣 ChatGPT
- 🟠 Gemini
Copilot이 가장 유용한 시작점을 제공했습니다. 다음을 할 수 있는 코드를 만들었습니다:
- RIFF WAVE 파일 읽기 및 쓰기
- Ogg Vorbis 디코딩
- MP3 디코딩
…모두 대략 동일한 인터페이스를 공유하려고 했습니다.
하지만 여전히 많은 충돌, 메모리 손상, 무한 루프, 잘못된 버퍼 관리가 있었고, 인터페이스는 실제로 거의 무시되었습니다.
수동으로 정리해서 이 early commit 에 도달했습니다 — 아직도 매우 불안정하지만, 최소한 추상화가 형태를 갖추기 시작했습니다.
1월 9일에 에이전트/컴퓨터 사용 기능이 있는 Claude로 전환했으며, 이는 큰 차이를 만들었습니다. 이 글의 나머지는 두 번째, 에이전트 구동 단계에서 배운 내용입니다.
내가 배운 점
1. 명확하게 하라
현대 AI—심지어 에이전트조차—는 당신이 명시적으로 비판을 요청하지 않는 한 “이 설계는 잘못됐다”거나 완전히 다른 접근 방식을 제안하지 않는다.
당신이 원하는 것(경계, 실패 모드, 안전성, 레이어링)에 대한 정신 모델이 아직 없다면, AI는 컴파일은 되지만 핵심을 놓친 코드를 기꺼이 생성한다.
해결책: 아주 작고 구체적인 작업부터 시작하라.
예시: “이 충돌을 고쳐라” 대신 “이 백트레이스를 보라 — 왜 충돌했을 것 같은지, 그리고 이를 방지하려면 무엇을 바꿔야 할지 말해줘”라고 물었다.
대부분 첫 번째 답변은 틀렸다(예: 실제 문제는 경계 검사 누락이었는데 “버퍼가 초기화되지 않았다”고 답함). 나는 에이전트가 쓸모없는 방향으로 가고 있을 때 여러 번 멈춰야 했다.
2. 제공된 내용을 항상 확인하라
Claude는 종종 구식이거나 비관용적인 Go 코드를 작성했다:
// outdated
interface{} // instead of any
실제로 내가 틀린 경우는 몇 번뿐이었고, 그때도 에이전트 버전이 보통 과도하게 복잡했다.
for i := 0; i 90 % of the memory leaks, slice‑shadowing bugs, uninitialized values, and off‑by‑one errors myself — usually faster than waiting for another iteration.
5. 나중에 사람이 유지보수해야 할 것처럼 코드를 작성하라
“쓰기 전용” 코드를 피하라—첫 초안이 AI에서 나왔더라도.
KISS 원칙은 여전히 적용된다. 명확한 이름 > 교묘한 트릭.
미래의 독자(6개월 뒤의 당신 포함)는 당신에게 감사할 것이다.
6. 현대 Go 관용구를 사용한 적절한 단위 테스트와 벤치마크를 요구하라
초기에 에이전트가 작성한 내용:
BenchmarkSomething대신TestSomething이라는 이름의 벤치마크Test접두사가 없는 단위 테스트- 메모리 누수, 슬라이스‑섀도잉 버그, 초기화되지 않은 값, 오프‑바이‑원 오류를 일으키는 고전적인
for i := 0; i < …루프
이것이 바로 강력한 코딩 에이전트, 즉 매우 빠르고 지식이 풍부한 코드 원숭이다.
- 짧은 시간에 방대한 양의 코드를 생산할 수 있다.
- 아키텍처적 책임을 질 수는 없다.
- 주제를 강제로 꺼내지 않으면 향후 유지보수 문제에 대해 경고하지 않는다.
제대로 조정하지 않으면 작동은 하지만 형편없는 코드를 얻게 된다.
매우 주니어이지만 빠른 페어 프로그래머처럼 사용하라: 당신이 사고와 감각을 제공하고, 에이전트가 타이핑을 담당한다.
그리고 재미로—이 섹션 이름의 유래가 된 노래를 소개한다:
Code Monkey — AI와 페어 프로그래밍을 해본 모든 개발자를 위한 비공식 찬가 😄
행복한 코딩 되세요 — 로봇을 너무 믿지는 마세요. 😉
AI 에이전트와 함께 vibe‑coding을 하면서 비슷한 (좋은 혹은 끔찍한) 경험을 해보셨나요?
댓글을 남겨 주세요 — 여러분의 전쟁 이야기를 듣고 싶습니다!
