🌏 인트로
학부 시절, AI 개발 과정이 지나치게 복잡하고 비효율적이라는 점에서 불편함을 느꼈다. 이를 해결하기 위해 AI 개발 생산성 플랫폼 ‘AIGOYA’를 직접 기획·개발했다.
AIGOYA에서는 사용자가 쉽게 AI 개발을 시작할 수 있도록, 모듈 단위의 코드 블록(프리셋모듈) 을 미리 만들어놔서 사용자가 Drag&Drop으로 가볍게 가져다 사용할 수 있는 기능을 제공했다. 베타 사용자의 테스트 기간이 오기까지 수천 개의 프리셋모듈을 만들던 당시 발생한 이슈에 대해 이번 포스팅에서는 정리해보려고 한다.
초기에는 AI 연구실 대학원생들이 직접 제작한 코드 모듈 우리 팀 사람들이 검토하고 제공할 수 있는 시스템을 만들었지만, 베타 사용자 유입 전까지 충분한 양을 확보하기에는 코드가 턱없이 부족하고 일정이 촉박했다.
대표로서 일정 준수와 품질 확보를 동시에 달성해야 했던 나에게 결국 남은 선택지는 하나였다.
사람의 손으로는 불가능한 규모였기에, 나는 LLM으로 코드를 ‘직접 만들어내는 시스템’을 설계하기로 했다.
이번 포스팅에서는 이 과정에서 사용한 LLM 기반 코드 생성 파이프라인 설계, RAG를 활용한 중복 검증 방식, 그리고 생성된 코드의 품질 평가(Evaluation) 절차에 대해 구체적으로 다루려고 한다.
🌏 LLM 기반 코드 생성 파이프라인 설계
[ 노드 카테고리 정의 ]
│
▼
(Tag, Title 생성)
[ LLM 1차 생성 요청 ]
│
▼
(유사도 검색 / 중복 검증)
[ 벡터 DB 비교 (RAG) ]
├───────────────▶ 중복 ≥ 3개 → [ 스킵 ]
│
▼
(중복 적음 → 신규 생성 진행)
[ 코드 5개 생성 (LLM 2차) ]
│
▼
(스타일·간결성·주석 평가)
[ 평가 LLM (Evaluation) ]
│
▼
(최고 점수 선택)
[ 최종 코드 선택 및 DB 저장 ]
│
▼
[ 프리셋 모듈 제공 / 서비스 반영 ]
✅ 코드 카테고리 정의
AI 개발에 사용될 수 있는 모든 코드의 기본 단위를 노드(Node) 로 정의했다.
각 노드는 ‘제목’, ‘설명’, ‘코드’, ‘태그’, ‘데이터 유형’, ‘작업 분야’, ‘수행 작업’으로 구성된다.
예를 들어서
- 데이터 유형(Data Type): Image
- 작업 분야(Task): Image Classification
- 수행 작업(Category): TRAINING
이런 식으로 노드를 구조화하면, 나중에 자동화 시스템이 정확한 맥락을 인식하고 코드를 생성할 수 있다.
아래는 우리 팀원이 정리했던 분류이다. (결국 구현도 비슷하게 흘러갔다)

✅ 태그 기반 노드 생성 요청
백엔드에서는 카테고리 중 하나를 선택해 새로운 코드를 만들 때, 태그(tag) 와 제목(title) 을 기준으로 자동 생성 요청을 보낸다. 이건 그냥 골고루 만들기 위해서 위의 노드 구성요소를 순회하면서 처음부터 끝까지 1개씩 만들고 이 과정을 쉬지 않고 일정 시간 간격을 두고 LLM을 호출하도록 했다.
Image Classification을 가지고 1차로 LLM을 호출하면,
Tag: ["ResNet training", “image”, “image classification”], Title: Tag: "ResNet image training"
머 이런 Tag, Title을 얻을 수 있다.
AIGOYA에서는 경량화된 정보로만 소통하기 위해서 이런 과정에서는 Tag, Title만 사용했다.
✅ 코드 벡터 DB 중복 검사
새로운 태그로 생성 요청을 보내기 전에, 백엔드는 기존 코드 벡터 데이터베이스에서 유사한 코드가 이미 존재하는지 확인한다.
- 가지고 있는 모든 프리셋모듈의 태그 및 제목을 임베딩
- 1차 LLM 호출로 생성된 Tag, Title을 벡터 유사도 기반으로 검색
- 3개 이상 비슷한 코드가 있으면 중복으로 판단 → 생성 스킵하고 해당 Tag, Title은 폐기
이 과정을 통해 코드 중복을 방지하고, 불필요한 2차 LLM 호출 비용을 줄였다.
✅ LLM을 통한 코드 생성
유사한 코드가 충분하지 않다면, 해당 태그와 제목을 기반으로 LLM에 코드 생성을 요청한다.
- 한 번에 5개의 후보 코드를 생성하도록 요청 (품질 좋은 1개를 고르기 위해 일단 5개를 만들라고 지시했다)
- 모델에 AIGOYA의 코드 스타일 가이드(주석 형식, 함수 구조, 변수 네이밍 등)를 시스템 프롬프트로 제공
- 결과적으로 코드와 설명이 일관된 포맷으로 반환되도록 유도
이 과정은 완전한 자동화 파이프라인으로, 사람이 개입하지 않아도 코드를 대량으로 생성할 수 있다.
서버에 일정 시간 간격을 두고 이 파이프라인을 실행하도록 했다.
✅ 5. 코드 평가(Evaluation)
생성된 코드 5개는 다시 평가용 LLM을 통해 검증된다.
LLM에게 다음 네 가지 기준으로 1~10점을 부여하도록 프롬프트를 설계했다.
[평가 기준]
- AIGOYA 코드 스타일에 부합하는가
- 코드가 충분히 간결한가
- 범용성이 있는가
- 주석 설명이 명확한가
평가 결과 점수가 가장 높은 코드를 최종적으로 선택했다.
우리는 비용문제로 한번만에 평가를 했지만 만약에 더 좋은 코드를 선택할 확률을 높이고 싶을 경우, 같은 평가를 여러 번 반복해 평균 점수를 낼 수도 있다. 비용과 품질 간의 트레이드오프로, 목적에 따라 조정 가능하다.
🌏 결과
이 과정을 통해 수천 건의 고품질 코드 프리셋을 자동으로 생성했다.
덕분에 초반 사용자들은 서비스 첫날부터 다양한 AI 모델 코드를 탐색하고 실행할 수 있었고, 직접 작성한 코드가 아니더라도 충분한 사용자 경험을 주어서 좋은 피드백을 받을 수 있었고 (결과적으로 정부지원사업 최종 보고도 아주 성공적이었다!)
덕분에 첫날부터 사용자는 실제 AI 모델을 실행하며 ‘진짜 개발자 경험’을 느낄 수 있었다.
그리고 나는 그때 처음으로, AI가 사람의 시간을 진짜로 절약해줄 수 있구나 하는 걸 실감했다.

도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
비밀댓글과 메일을 통해 오는 개인적인 질문은 받지 않고 있습니다. 꼭 공개댓글로 남겨주세요!
'PROJECT > AIGOYA LABS' 카테고리의 다른 글
| [AIGOYA LABS] 비동기 이벤트끼리 Race Condition 박멸 기록: 이벤트 직렬 처리부터 Spring 내부에 미니 메시징 큐 구현까지 (0) | 2025.10.29 |
|---|---|
| [AIGOYA LABS] 비동기 이벤트에서 데이터가 덮어씌워진다고요?: 비동기 이벤트를 직렬화하기 (5) | 2025.05.27 |
| [AIGOYA LABS] 트랜잭션 내에서 외부 API 호출을 하겠다고요?!!! (9) | 2025.04.21 |