LLM으로 실제 문제 해결하기: 예측 불가능성

Oak_Cassia·2025년 8월 24일
0

개요

LLM을 활용해 실제 문제를 해결하며 얻은 인사이트를 공유한다. 바로 소개하면 예측 가능성을 어떻게 확보하는가에 대한 과정이다.

바이브 코딩의 결과물을 배포할 수 없는 이유

복잡도가 높은 상용 서비스에서는 바이브 코딩 결과물을 그대로 배포할 수 없다. LLM이 만든 코드는 출력이 매번 달라질 수 있거나(또는 일관되게 잘못될 수 있어) 매번 어떤 논리로 동작하는지 완전히 파악해야 한다. 안정적인 서비스는 코드의 과정과 결과를 모두 예측할 수 있어야 한다. 이를 위해서는 프롬프트와 컨텍스트를 구체적이고 모호하지 않으며, 모순되지 않게 구성해, 과하지도 부족하지도 않은 맥락을 제공해야 한다. 결국 배포 가능한 코드는 결정적(deterministic)이어야 한다.

Deterministic

본질적으로 예측 불가능한 LLM로부터 어떻게 결정적인 결과를 얻을 것인가? 단순히 프롬프트와 컨텍스트를 조절하는 것을 넘어서는 전략이 필요하다. 퇴근 후 코딩 에이전트를 활용하면서, 그리고 회사에서 코드 생성 자동화를 연구하며 내린 두 가지 방법이 있다.
1. 작업을 작게 분할한다.
2. 결정적인 도구와 연계한다.

작업 분할하기

작업이 커지고 컴포넌트와 클래스 간 관계가 얽힐수록 엉망이지만 동작하는 코드일관되게 잘못된 코드가 나왔다. 반면 작은 기능 단위로 세분화하고, 참조할 파일, 사용해야 할 라이브러리, 코딩 스타일, 설계 등의 제약을 명시하면 예측 가능한 결과가 나올 확률이 높았다. 그리고 결과물의 흐름을 확인하기 쉽다.
이 과정에는 상당한 리소스가 든다. 상세 명세를 전달하고, 결과가 마음에 들지 않으면 추가 지시로 보정하거나 직접 수정하는 조정이 필요하다. "숙련된 개발자는 에이전트를 쓰면 오히려 느릴 수 있다"는 말은, 결국 이 예측 가능성 확보 비용 때문이라 본다. 그래도 목표까지의 과정이 짧다면 에이전트만으로도 충분히 예측 가능한 코드를 만들 수 있었고, 컨텍스트를 조절하면 작업 범위가 커져도 어느 정도 쓸만한 결과물을 얻을 수 있었다.

결정적인 도구와 연계하기

LLM으로 생성한 코드를 활용하려고 claude 3.7로 시도했다. 코드 명세서를 만든 뒤, 프롬프트를 구체적으로 작성하고, 컨텍스트를 조절했지만 빈 파일에서 코드를 생성하는 것은 매번 달라졌다. 실제 서비스에 사용할 수 도 없었다.
개선하기 위해 시도한 방법들은 다음과 같다.
1. LLM에 제공되는 컨텍스트를 조절하기 위해 코드 명세를 기능별로 분리했다.
2. 제공된 템플릿을 보고 파일을 생성 -> LLM이 템플릿 파일을 수정
3. 템플릿에 LLM이 작성 및 수정할 부분을 주석으로 명시

// Agent_Start
// 기능
// Agent_Parmeter (param) 가변 요소
// if (param) ...
// AgentEnd

위 방법들은 효과가 있었다. 이제 결과물이 동일하게 나오는 빈도가 높아졌으며, 해당 코드를 기반으로 작업을 시작해도 됐다.
하지만 주석을 보니 학부 때 사용했던 Jinja 템플릿 엔진이 떠올랐다. 일관된 결과를 내기 위해서 템플릿 엔진을 활용하여 코드를 생성하는 방법이 더 적합해 보였다. python Jinjafast_mcp로 MCP 도구를 만들고 LLM이 활용할 수 있게 하였다. 파라미터는 LLM으로 만들고 결과물 생성은 MCP를 통해 생성할 수 있었다.

지금 상위 모델을 사용하면 코드 생성의 결과를 활용할 수 있을까?

LLM, 코딩 에이전트를 잘 활용하는 방법

결국 LLM 코딩 에이전트를 잘 쓰는 능력이란, 특정 직접 코딩과 에이전트를 통한 결정적인 결과물 확보 중 어느 쪽이 더 적은 리소스로 목표를 달성하는지 판단하는 것이다. 이 판단에 silver bullet은 없다. 프로젝트와 모델마다 다르며, 경험을 통해 휴리스틱 하게 쌓여 간다. 때로는 외부 도구와 연계하는 편이 좋을 것이다.
무엇보다도 문제 정의와 해결에 LLM이 활용 가능한지 판단 하는 게 우선 일 것이다.

최근에는 랭체인, 구글 adk로 작업에 적합한 에이전트를 만드는 것이 괜찮아 보인다. n8n을 활용하려고 했지만 노코드 툴이라 (개발자에게) 답답한 부분이 존재한다.
다음 내용을 학습하고 문제를 해결할 수 있는 에이전트를 만들어 보려고 한다.
Agentic Design Patterns

profile
https://velog.io/@oak_cassia/A-Game-Developers-Vision

0개의 댓글