Vibe Coding에서 배운 10가지 (또는: AI Agent에게 내 Audio Library를 작성하게 한 방법)

발행: (2026년 1월 16일 오후 06:40 GMT+9)
9 min read
원문: Dev.to

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 loves you

Code Monkey — AI와 페어 프로그래밍을 해본 모든 개발자를 위한 비공식 찬가 😄

행복한 코딩 되세요 — 로봇을 너무 믿지는 마세요. 😉


AI 에이전트와 함께 vibe‑coding을 하면서 비슷한 (좋은 혹은 끔찍한) 경험을 해보셨나요?

댓글을 남겨 주세요 — 여러분의 전쟁 이야기를 듣고 싶습니다!

Back to Blog

관련 글

더 보기 »

기술은 구원자가 아니라 촉진자다

왜 사고의 명확성이 사용하는 도구보다 더 중요한가? Technology는 종종 마법 스위치처럼 취급된다—켜기만 하면 모든 것이 개선된다. 새로운 software, ...

에이전틱 코딩에 입문하기

Copilot Agent와의 경험 나는 주로 GitHub Copilot을 사용해 인라인 편집과 PR 리뷰를 수행했으며, 대부분의 사고는 내 머리로 했습니다. 최근 나는 t...