바이브 코딩은 다 허상이다
서론
이전 글에서 바이브 코딩 짱짱맨! 외쳤지만 2주쯤 써보니 조금은 더 현실적인 판단이 가능하게 되지 않았나 싶다.
문제
디스어셈블된 C 코드를 적당히 이해할 수 있는 수준으로 변환하는 작업을 하려고 한다. 이를테면 다음과 같은 코드를 보면
result = (void*)(*(uint32_t*)((uint32_t)dword_587000_155144 + 24) - 1);
*(uint32_t*)((uint32_t)dword_587000_155144 + 24) = result;
if ((int)result < 0) {
result = *(void**)&dword_587000_155144;
*(uint32_t*)((uint32_t)dword_587000_155144 + 24) = 0;
}
dword_587000_155144가 어떤 struct의 포인터고, 해당 struct의 +24 위치에는 uint32_t 타입의 값이 들어있으며 해당 값을 1 뺀다음에 0보다 작아지는 경우 뭔가 특수처리를 하고 해당 값을 0으로 리셋한다는 것을 알 수 있다.
내가 원하던 것
적당한 프롬프트를 넣어서 dword_587000_155144에 해당하는 어떤 struct를 제안하거나, 이미 해당 struct가 있으면 해당 struct의 +24 offset 위치에 uint32_t 형태의 값이 들어가는 것을 assert하는 식의 코드를 원했다.
내가 받은 것
불필요하게 과다한 struct 선언이라던가, inconsistent한 naming이라던가, 이후 저런 류의 access를 struct field 접근으로 변경해야 하는데 변경을 제대로 하지 못한다던가… 심지어는 pointer를 deref하는 원본 코드를 deref하지 않고 바로 포인터 값으로 쓰도록 잘못 오역해서 의도치 않은 버그를 발생시킨다던가 하는 류의 여러 삽질이 있었다.
어쨌든;; 배운것들
- 시작할땐 다 잘될줄 알았는데… 2주동안 삽질한 느낌이여…
- 중요한 것은 Back to the basics - 모델이 잘 하고있는지 스스로 테스트할 수 있는 환경이 있는것과 없는것 사이의 간극이 크다.
- Self evaluation framework? - 모델이 스스로 잘 하고있는지 판단할 수 있는 툴을
만들도록 해야 하나? 앞으로 한동안 위와같은 작업을 반복해서 적용할 필요가
있는데, 별도의 검증 없이 ‘컴파일만 되면 되지’하는 식의 접근으론 한계가 있다.
모델이 스스로 검증할 수 있는 evaluation tool을 만들고 MCP에 넣어서 직접
테스트를 돌릴 수 있도록 해야 하나? 뭐랄까 Meta-programming?
- 이를테면 LLM이 직접 *(A + 24)를
AA->field_24
로 고치도록 하는게 아니라, 특정 함수와 variable, 해당 variable의 실제 type을 주면 자동으로 코드 변환을 수행하는 툴을 만들고 LLM이 해당 툴을 돌리도록 하는 게 더 효율적일 것 같다는 생각이다. 다만 배보다 배꼽이 커지잖아…
- 이를테면 LLM이 직접 *(A + 24)를