# 그래프 엔지니어링

> 영상이 「그래프의 핵심」이라 부른 것은 제 52개 런에서 발동 조건이 단 한 번 나왔습니다. 대신 안 갖고 있던 하나는 실측으로 이득이 확인됐습니다.

- 수치: 8종 중 순증 1
- 사람이 보는 화면: https://aitryed.com/ko/teardowns/memory/graph-engineering/
- 반대 언어: https://aitryed.com/en/teardowns/memory/graph-engineering/index.md
- 출처(원본 영상): https://www.youtube.com/watch?v=SBLDc4R1d_E
- 이 사이트 안내(AI용): https://aitryed.com/ko/llms.txt

---

**「AI에게 일 시키는 방식」의 최신 단계를 설명하는 14분짜리 강의를 봤습니다. 그런데 강의가 「이게 핵심」이라고 말한 기능은, 제 실제 작업 52번 중 딱 한 번만 쓸 일이 생겼습니다.**

> **[도판]** 파란 칸이 제가 유일하게 안 갖고 있던 것이다. 나머지 일곱은 이미 코드로 들어가 있었다.
>
> 영상이 쓰는 어휘. 그래프를 노드·엣지·상태·조건 넷으로만 설명하고, 패턴도 라우터·병렬·생성과 평가·사람 승인 넷으로 제한한다. 실질적 주장은 애매한 판단은 AI에게 확정 규칙은 코드에게 맡기라는 하나다.

## 강의가 말한 네 단계

강의는 AI 활용 방식이 이렇게 발전해 왔다고 정리합니다.

| 단계 | 무엇 |
|---|---|
| 1. 질문 잘 하기 | AI에게 어떻게 물어볼지 고민하는 단계 |
| 2. 자료 잘 붙이기 | 질문에 필요한 자료를 같이 주는 단계 |
| 3. 반복시키기 | AI가 스스로 확인하고 고치게 하는 단계 |
| 4. **일을 쪼개서 배치하기** | 이 강의의 주제 |

4단계를 설명하는 예가 좋았습니다. <strong>「시장조사 기획서를 써 줘」</strong>를 두 가지 방식으로 시킵니다.

- **통째로 던지기**: 「시장조사 기획서 써 줘」 한 마디
- **쪼개서 배치하기**: ①경쟁사 찾기 → ②각각 조사 → ③정리 → ④검토 → ⑤부족하면 ①로 되돌리기

두 번째가 왜 나은지는 **틀렸을 때** 드러납니다. 통째로 던지면 결과가 이상해도 **어디서 잘못됐는지 알 수 없습니다.** 쪼개 두면 **몇 번째 칸에서 틀렸는지가 보입니다.**

## 그런데 이건 「새로운 유행」이 아닙니다

강의 제목과 도입부는 이걸 **새 유행어**처럼 팝니다. 그런데 사실이 아닙니다.

**일을 칸으로 쪼개고 조건에 따라 흐름을 바꾸는 방식은 수십 년 된 것**입니다. 이름만 새로 붙었습니다.

재미있는 건, **강의 자신도 후반부에 그걸 인정**한다는 점입니다. 「사실 개발자들과 늘 함께해 온 패턴」이라고 말합니다. **앞에서는 새 것처럼 팔고 뒤에서 인정**하는 구성입니다.

## 제 것과 대 봤더니 — 여덟 중 일곱은 이미 있었습니다

강의가 말한 요소 여덟 개를 뽑아서 제 작업 파이프라인과 하나씩 대 봤습니다.

**일곱은 이미 코드로 들어가 있었습니다.** 다만 **모양이 달랐습니다.**

예를 들어 강의는 「칸끼리 주고받는 정보를 상태 덩어리 하나에 담으라」고 합니다. 제 것은 덩어리가 아니라 **파일**입니다. 작업 폴더에 결과 파일이 쌓이고, 다음 칸은 그 파일만 봅니다.

**하는 일은 같고 생김새만 다릅니다.** 그래서 「없다」고 세면 틀립니다.

## 강의가 제일 강조한 기능은 제 로그에서 죽어 있었습니다

강의가 「이게 핵심」이라고 한 것은 <strong>「조건이 안 맞으면 앞 단계로 되돌아가기」</strong>였습니다. 개념적으로는 훌륭합니다.

제 실제 실행 기록 **52건**을 열어서 그 조건이 몇 번 발동했는지 세어 봤습니다. **1번**이었습니다.

그래서 기각했습니다. 이유가 둘입니다.

1. **거의 안 쓰입니다** — 52번 중 1번
2. **되돌리면 앞에서 쓴 비용이 날아갑니다** — 되돌아가면 이미 한 일을 다시 합니다

「개념적으로 맞다」와 **「내게 이득이다」는 다른 문제**였습니다.

## 진짜 이득은 강의가 지나가듯 말한 하나에 있었습니다

제가 안 갖고 있던 게 **딱 하나** 있었습니다. <strong>「서로 상관없는 일은 동시에 시키기」</strong>입니다.

강의에서는 비중 있게 다루지 않았습니다. 그런데 제 실제 실행 기록 8건을 다시 분석해 보니, **한 번 돌 때마다 중앙값 9.9분**이 절약되는 것으로 나왔습니다.

| | 강의에서의 비중 | 제 실측 이득 |
|---|---|---|
| 되돌아가기 | **핵심이라고 강조** | 52번 중 1번 발동 |
| 동시에 시키기 | 지나가듯 언급 | **런당 9.9분** |

**정확히 반대**였습니다.

## 이 강의를 근거로 인용하지 않습니다

내용이 틀렸다는 뜻은 아닙니다. 다만 인용할 수 있는 자료가 아닙니다.

- 출처 **0건** — 어디서 가져온 이야기인지 안 밝힘
- 코드 **0줄** — 실제로 어떻게 짜는지 안 보여 줌
- 실행 시연 **0회** — 돌아가는 걸 안 보여 줌
- 숫자 **1건**인데 근거 없음

개념을 정리해 듣기에는 좋은 자료이고, **근거로 삼기에는 못 쓰는 자료**입니다. 둘은 다릅니다.

## 이 편에서 값을 치른 교훈

**개념이 맞다는 것과 내게 이득이라는 것은 다른 문제입니다.**

여덟 요소 전부 개념적으로는 옳았습니다. 그런데 **일곱은 이미 있었고, 제일 강조된 하나는 제 로그에서 죽어 있었고, 실제 이득은 지나가듯 언급된 하나**에 있었습니다.

이 판정은 **제 실행 기록 52건을 열어 보기 전에는 절대 안 나옵니다.** 강의만 보고 「좋네, 다 도입하자」 했으면 **쓸 일 없는 장치를 만드느라 시간을 썼을 것**입니다.

## 여기부터는 자세한 기록입니다

**영상이 그래프의 핵심이라고 부른 기능은, 제 52개 런에서 발동 조건이 한 번 나왔습니다.** 14분짜리 개념 강의가 LLM 활용 기법의 계보를 **프롬프트 → 컨텍스트 → 루프 → 그래프** 네 단계로 세우고 마지막 단계를 설명합니다. 정리는 깔끔한데, 여덟 요소를 제 [테스트 케이스 파이프라인](/ko/built/tc-team/index.md)에 대고 세어 보니 **일곱은 이미 코드로 들어가 있었고**, 안 갖고 있던 **병렬 실행 하나만이 실측상 진짜 이득**이었습니다 — 실제 런 8건의 로그를 다시 분석해 **런당 중앙값 9.9분**이 나왔습니다.

## 무엇을 말한 영상인가

**순수 개념 강의입니다.** 코드 0줄, 실행 데모 0회, 프레임워크 이름 0건. **시장조사 기획이라는 가상 과제 하나**를 (a) 단일 에이전트에 통째로 던지는 방식과 (b) 그래프로 쪼개는 방식으로 두 번 풀어 대비시키는 게 구성의 축입니다.

**단일 에이전트의 한계를 짚는 대목이 정확합니다.** 계획·검색·해석·검증이 **한 상자 안에 있으면 결과가 틀렸다는 것만 알 수 있습니다** — 어디서 틀렸는지는 모릅니다. 그래프로 쪼개는 이유가 여기서 나옵니다.

**노드마다 수치화된 완료 조건을 붙이라고 합니다.** 경쟁사 최소 10개, 시장 규모는 출처 필수, 사용자 의견 최소 20개. 그리고 **그 판단을 누가 하는지를 성격으로 가릅니다** — `경쟁사 ≥ 10` 은 코드가, *"어느 시장이 더 매력적인가"* 는 AI나 사람이.

**적용 금지 구간을 따로 슬라이드로 뗀 게 드뭅니다.** 툴 호출 한두 번이면 끝나는 일에 그래프를 쓰지 말라고 합니다 — **구조 복잡도와 디버깅 지점과 비용이 늘고 "토큰이 그냥 녹는다"** 고. 개념 강의가 자기 주제의 안 쓰는 조건을 말하는 경우는 많지 않습니다.

## 깨본 결과

**"새로운 트렌드"가 아닙니다.** 노드·엣지·조건부 엣지·상태로 작업 흐름을 짜는 건 **워크플로 엔진의 수십 년 된 모델 그대로**입니다. 영상 자신도 후반에 *"사실 개발자들과 늘 공존해온 패턴"* 이라고 인정하는데, **제목과 도입부는 새 유행어로 팝니다.**

**계보 서사가 앞뒤로 어긋납니다.** 도입부 나레이션은 각 단계가 이전 단계의 **상위 버전**이라고 말하는데, 후반 슬라이드는 정반대로 **동심원**을 그립니다. 후자가 맞습니다 — **프롬프트가 나쁜 그래프는 여전히 나쁩니다.** 앞부분만 보고 *"이제 프롬프트는 안 중요하다"* 로 읽으면 오독입니다.

**루프와 그래프의 구분이 공학적 구분이 아닙니다.** 근거로 든 게 이름뿐입니다 — *"계속 도는 것"* vs *"노드와 엣지"*. **루프는 역방향 엣지가 하나 있는 그래프**라서 이 대비는 성립하지 않습니다. 영상이 실제로 짚으려던 차이는 **제어 흐름이 에이전트 머릿속에 암묵적으로 있느냐, 밖에 명시적으로 있느냐**인데 그 문장이 끝까지 안 나옵니다.

**비용 주장이 자기모순입니다.** *"AI를 덜 써서 돈을 아낀다"* 와 *"에이전트가 늘어 토큰이 그냥 녹는다"* 가 1분 간격으로 나옵니다. 둘 다 참일 수 있는데 **어느 조건에서 어느 쪽인지를 말하지 않아** 비용 논의가 방향 없이 남습니다.

**그리고 그래프의 실패 모드가 통째로 빠졌습니다.** *"디버깅 지점이 는다"* 한 줄이 전부입니다. 무한 재시도, 상태 비대, 부분 실패와 멱등성, **되돌렸을 때 이미 쓴 비용은 회수가 안 된다는 것** — 실제로 그래프를 운영할 때 사람을 잡는 것들이 하나도 없습니다.

**검증 가능한 것이 0건입니다.** 출처 0, 코드 0, 실행 0. 수치 주장은 화면의 `AI 노드 5개 · 런당 $2.40` 딱 하나인데 **모델명도 토큰 수도 「1 런」의 정의도 없습니다.** 애니메이션 소품에 가까워서 근거로 인용할 수 없습니다.

> **[도판]** 대조표를 만들면 "좋은 개념"과 "내게 이득인 것"이 갈린다. 이 둘은 같은 줄에 있지 않았다.
>
> 영상의 여덟 요소를 내 파이프라인에 대조한 결과. 여섯은 이미 코드로 들어가 있었고, 병렬 실행 하나만 순증이며 실측으로 런당 중앙값 9.9분 단축이 확인됐다. 영상이 핵심이라 부른 되돌림 엣지는 52개 런에서 한 번만 조건이 나왔다.

## 내 환경에 대봤다

**노드 분할·상태 전달·노드별 코드 규칙은 형태만 다르지 같은 자리에 있었습니다.** 상태는 단일 객체가 아니라 **파일 계약**입니다 — 작업 폴더에 json 30종이 누적되고 다음 노드가 그것만 봅니다. 노드별 규칙은 게이트 4종이 한 런에서 여덟 번 호출됩니다. 영상이 *"`경쟁사 ≥ 10` 은 코드로"* 라고 말한 바로 그 자리입니다.

**생성↔평가는 제 쪽이 제일 활발합니다.** 청크 재시도, 열 위반 교정, 게이트 교정 1라운드, 렌즈 산출 검증 재시도 — **52개 런 중 36건이 실제로 발동**했습니다.

**그런데 영상이 그래프의 핵심이라 부른 것은 안 씁니다.** *"검증 실패 시 어느 노드로 돌아갈지를 그래프에 미리 적어 둔다"* — 제 로그에서 **그 조건이 발동한 건 52개 런 중 1번**이었습니다. 이유는 명확합니다. 제 파이프라인은 **되돌아가는 대신 그 자리에서 교정**하기 때문입니다. 되돌리면 앞 노드가 이미 쓴 비용이 통째로 날아갑니다 — **영상이 안 다룬 실패 모드가 바로 그것**입니다.

**남은 하나가 병렬 실행이었고, 이건 실측했습니다.** 적대 리뷰 단계에서 렌즈 셋을 순차로 돌리고 있었는데, 실제 런 8건의 로그를 다시 분석하니 **병렬로 바꾸면 런당 중앙값 9.9분**이 줄어듭니다. 총 런 시간의 8~9%입니다.

## 판정

| 무엇 | 판정 |
|---|---|
| **병렬 실행** | **채택.** 실측 근거가 있는 유일한 순증 — 런당 9.9분 |
| 노드 분할 · 상태 전달 · 노드별 코드 규칙 | **이미 있음.** 형태만 다르다 |
| 생성 ↔ 평가 | **이미 있음.** 제 쪽이 더 활발하다 |
| 사람 승인 게이트 | **이미 있음** |
| **조건부 되돌림 엣지** | **기각.** 52개 런 중 발동 1회. 되돌리면 앞 비용이 날아간다 |
| 라우터 · 단일 상태 객체 | **기각.** 파일 계약이 이미 그 자리를 채우고 있다 |
| 영상을 근거로 인용 | ⛔ **금지.** 출처 0 · 코드 0 · 실행 0 · 수치 1건(근거 없음) |

**이 편에서 값을 치른 교훈은 이겁니다 — 개념이 맞다는 것과 내게 이득이라는 것은 다른 문제입니다.** 여덟 요소 전부 개념적으로는 옳았습니다. 그런데 **일곱은 이미 있었고, 영상이 제일 강조한 하나는 제 로그에서 죽어 있었고, 실제 이득은 영상이 지나가듯 언급한 하나**에 있었습니다.

**그리고 그 차이는 개념으로는 절대 안 갈립니다.** 52개 런의 로그를 다시 읽어야 나옵니다. 남의 정리를 읽고 *"우리도 이거 해야겠다"* 로 끝냈으면, **저는 발동 1회짜리 기능을 만드느라 시간을 쓰고 9.9분짜리는 놓쳤을 겁니다.**
