지난 편에서 우리는 이상한 장면을 목격했다. "'집에서 커피 맛있게 내리는 법'을 조사해 초보용 핵심 3가지로 정리하기." 목표 한 줄을 던졌을 뿐인데, AI는 아무도 시키지 않은 검색을 스스로 하고, 뭔가 부족하다 싶으면 한 바퀴 더 돌고, 됐다 싶을 때 혼자 멈췄다.

그런데 우리가 본 건 결과뿐이었다. 그 세 바퀴 안에서 무슨 일이 벌어졌는지는 여전히 캄캄한 상자 속이었다. "알아서 잘 한다는데… 대체 안에서 뭘 하는 거지?" 이 찜찜함이 정상이다. 남이 알아서 해준 일일수록, 안이 안 보이면 불안하다.

그래서 이번 편은 그 상자의 뚜껑을 연다. 설명부터 하지 않겠다. 옆에 「루프 해부기」 위젯을 심어 뒀다. 읽지 말고, 일단 버튼부터 눌러보자.

🔧 지금 해보기 ACT-2-loop-anatomy ★☆☆ · 첫 성공 보장

위젯 맨 위에 아까 그 커피 목표가 걸려 있고, 그 아래 빈 칸 세 개가 있다. [🧠 첫 바퀴: 생각 열기] 버튼을 한 번 누르자. 첫 칸에 에이전트의 속마음이 툭 떠오른다. 그게 첫 성공이다. 뭘 눌러야 할지 고민할 필요 없다 — 버튼 이름이 항상 다음에 할 일을 알려준다.

페이지 내장 해부기 · 외부 의존 0 · 실제 에이전트 루프 구조를 그대로 반영한 '녹화 트레이스'를 한 스텝씩 재생합니다(진짜 브라우저 LLM은 1·3·5편에서).ACT-2-loop-anatomy

한 바퀴는 딱 세 칸이다 — 💭생각 · 🔧도구 · 👀관찰

버튼을 눌러봤다면 이제 눈치챘을 거다. 에이전트의 한 바퀴는 마법이 아니라 딱 세 칸으로 되어 있다.

  • 💭 생각(보라 칸) — "다음에 뭘 하지?"를 정한다. 첫 바퀴에서 에이전트는 이렇게 생각한다. "아는 게 없으니 우선 초보용 기본부터 웹에서 검색해 정보를 모으자."
  • 🔧 도구(파랑 칸) — 생각한 걸 실제로 실행한다. 여기선 검색 도구를 부른다. web_search("집에서 커피 내리는 법 초보 기본"). 손을 뻗어 진짜로 무언가를 하는 단계다.
  • 👀 관찰(초록 칸) — 도구가 돌려준 결과를 받아본다. "물 온도는 90~96℃가 적당 · 원두는 중간 분쇄 · 갓 볶은 원두일수록 향이 좋다."

요리에 비유하면 이렇다. 냉장고를 열어 뭐가 있나 확인하려는 마음(생각), 실제로 냉장고 문을 여는 손(도구), 그리고 눈에 들어온 재료들(관찰). 생각만으로는 아무 일도 안 일어나고, 손만 있으면 뭘 할지 모른다. 셋이 한 세트로 움직여야 비로소 '한 바퀴'가 된다.

색만 따라가도 흐름이 보이도록 위젯은 세 칸을 보라·파랑·초록으로 나눠 뒀다. 캄캄하던 상자가, 여기서부터 유리상자가 되기 시작한다.

왜 한 번에 안 끝날까 — 관찰이 다음 '생각'으로 흘러간다

여기가 이 글의 핵심이다. 한 바퀴로 끝났으면 자판기랑 다를 게 없다. 그런데 에이전트는 한 바퀴를 돌고 나서 곧장 답을 내지 않았다. 왜일까?

1번 바퀴의 관찰을 다시 보자. 온도와 분쇄도는 알아냈다. 그런데 정작 커피를 얼마나 넣어야 하는지 '비율'이 빠져 있다. 초보가 제일 헷갈리는 바로 그 부분이. 그래서 2번 바퀴의 생각은 이렇게 이어진다.

"온도와 분쇄도는 알았다. 그런데 '원두를 얼마나 넣는지' 비율이 빠졌다 — 초보가 제일 헷갈리는 부분이다. 아직 부족하니 한 바퀴 더 검색하자."

보이는가? 2번 바퀴의 생각이, 1번 바퀴에서 본 것을 근거로 삼는다. 관찰이 그냥 버려지지 않고, 다음 생각의 재료로 흘러 들어간 것이다. 이걸 되먹임(feedback)이라고 부른다.

우리도 매일 이렇게 한다. 국을 끓이다 간을 보고("좀 싱겁네"), 그 결과를 근거로 다음 행동을 정한다("소금 더 넣자"). 검색하다 원하는 게 안 나오면("이 결과는 별로네"), 검색어를 바꿔 다시 친다. 본 것을 근거로 다음 수를 두는 것 — 에이전트가 여러 번 도는 이유가 딱 이거다. 한 번의 관찰로는 부족하니까, 부족한 걸 채우러 한 바퀴 더 도는 것이다.

🔧 지금 해보기 ACT-2-loop-anatomy ★☆☆ · 되먹임 확인

방금 읽은 걸 손으로 확인할 차례다. 위젯에서 계속 스텝을 밟아 1번 바퀴의 👀관찰을 채우면, 세 칸 바로 아래 되먹임 레인에 초록 화살표가 켜진다"이 관찰 결과가 다음 바퀴 생각의 재료로 흘러갑니다 →". 그리고 [↩ 다음 바퀴 돌기]를 누르면, 새 생각 칸이 잠깐 빛나며 "비율이 빠졌네, 한 바퀴 더"로 이어진다. 방금 본 관찰이 다음 판단의 재료가 되는 그 화살표 하나 — 붙잡았다면, 당신은 에이전트가 왜 여러 번 도는지를 이미 이해한 것이다.

💡 더 깊이 — ReAct: 추론하며 행동하기 개념

이 '생각 → 도구 → 관찰 → 다시 생각'의 반복에는 이름이 있다. ReAct(Reasoning + Acting), 즉 '추론하며 행동하기' 패턴이다. 요즘 나오는 에이전트 상당수가 이 골격 위에서 돈다. 대단한 신기술처럼 들리지만, 뜯어보면 방금 당신이 커피 예시로 본 그 단순한 되먹임 루프가 전부다.

"이만하면 됐나?" — 매 바퀴 스스로 묻고, 충분하면 멈춘다

되먹여 돈다는 건 알겠는데, 그럼 언제 멈출까? 무한정 도는 건 아니다.

에이전트는 매 바퀴 끝에서 스스로에게 딱 하나를 묻는다. "이만하면 충분한가?" 부족하면 한 바퀴 더, 충분하면 멈춘다. 우리 커피 에이전트는 3번째 바퀴에서 온도·분쇄·비율 세 가지가 다 모이자 이렇게 판단한다.

"세 가지가 다 모였다. 초보용 3가지로 정리하기에 충분하다. 종료하고 답을 정리하자."

그러고는 검색 도구를 부르는 대신 finish를 부른다. 더는 도구를 쓰지 않고 답을 확정하는 신호다 — ① 물 온도 90~96℃ · ② 원두는 중간 분쇄 · ③ 커피 : 물 = 1 : 16. 아무도 "그만해"라고 하지 않았는데, 스스로 충분하다고 판단해서 멈춘 것이다. 정리하면 이번 루프는 web_searchweb_searchfinish, 딱 세 바퀴였다.

🔧 지금 해보기 ACT-2-loop-anatomy ★☆☆ · 미니 퀴즈

3번째 바퀴에서 에이전트가 finish로 멈추면, 위젯에 미니 퀴즈 2문항이 자동으로 열린다. 방금 손으로 익힌 걸 언어로 굳히는 문제다 — "관찰 결과는 다음에 어디로 갈까?"와 "왜 곧장 안 끝내고 한 바퀴 더 돌았을까?". 답을 고르고 [채점하기]를 눌러보자. 헷갈렸다면 해설이 다시 짚어준다.

이 '충분한가?'라는 종료 판단이 별것 아닌 것 같지만, 사실 루프의 안전핀이다. 이게 없으면 에이전트는 멈출 줄 모르고 같은 행동을 끝없이 반복한다 — 이른바 '폭주'다. 그 아찔한 장면과, 폭주에 안전벨트를 채우는 법은 4번 편에서 정면으로 다룬다.

도는 내내, 기억이 계속 불어난다

위젯 오른쪽에 슬쩍 커지는 게 하나 더 있다. 누적 맥락 게이지다. 스텝을 밟을 때마다 오렌지 바가 차오르고, 옆의 토큰 숫자가 계속 불어난다. 이게 뭘까?

에이전트는 매 바퀴, 앞에서 생각하고·도구 쓰고·관찰한 걸 전부 안고 다음 바퀴로 넘어간다. 1번 바퀴의 기억을 지운 채 2번 바퀴를 도는 게 아니라, 1·2번을 다 짊어진 채 3번을 도는 것이다. 회의가 길어질수록 "아까 그 얘기 다시 요약해줄게"가 매번 앞에 붙어 발언이 점점 길어지는 것과 비슷하다. 지울 수 없는 기억처럼, 맥락은 매 바퀴 차곡차곡 쌓인다.

🔧 지금 해보기 ACT-2-loop-anatomy ★☆☆ · 게이지 관찰

위젯 게이지 아래 칩 목록을 보자. 🎯목표부터 시작해 💭생각·🔧도구·👀관찰 조각이 스텝마다 하나씩 붙으며 숫자가 불어난다. 지금은 "점점 커진다"는 감각 하나만 챙기면 된다.

그런데 이 '불어나는 기억'에는 대가가 있다. 맥락이 커질수록 매 바퀴 처리해야 할 양이 늘고, 그게 곧 시간과 돈(토큰)이 된다. 왜 이게 문제가 되고 어떻게 예산을 걸어 막는지는 — 그렇다, 4번 편의 몫이다. 지금은 게이지가 왜 자꾸 커지는지만 눈에 담아두자.

그래서 몇 바퀴 도냐고? — 그때그때 다르다

여기까지 오면 자연스러운 질문이 하나 남는다. "그럼 항상 세 바퀴 도는 거야?" 아니다. 몇 바퀴 돌지는 미리 정해져 있지 않다. 관찰 결과에 따라 그때그때 정해진다 — 이게 "정해진 횟수만큼 도는 게 아니다"의 증거다.

💡 더 깊이 — 관찰을 바꾸면 바퀴 수가 갈라진다 개념

위젯 상단의 [관찰: 정보 부족 →다시] 토글을 눌러보자(★★☆). 2번 바퀴 검색이 "쓸 만한 결과 없음"을 돌려주자, 에이전트의 다음 생각이 '종료' 대신 "검색어를 바꿔 한 바퀴 더"로 갈라진다. 같은 목표인데 루프가 3바퀴 → 4바퀴로 늘어난다. 관찰(입력)을 바꾸니 판단(다음 바퀴)이 달라지는 것 — 되먹임을 손으로 만지는 계단이다. 더 파보고 싶다면 [🔮 예측 모드](★★★)를 켜고, 생각을 열기 전에 "이번엔 검색을 더 할까, 끝낼까?"를 먼저 맞혀보자. 이 '종료 판단'을 직접 다루는 건 3·4번 편이다.

한 가지는 정직하게 짚고 가자. 이 해부기는 진짜 LLM을 실시간으로 돌리는 게 아니다. 실제 에이전트가 도는 구조를 그대로 본떠 미리 짜둔 '녹화 필름'을 한 프레임씩 재생하는 것이다. 왜 그렇게 했냐면 — 이 편의 목적은 구조를 또렷이 보여주는 것이라, 매번 문장이 달라지는 진짜 LLM보다 결정적으로 재생되는 트레이스가 낫기 때문이다. 진짜 브라우저 LLM이 즉석에서 도는 짜릿함은 1번·3번·5번 편이 맡는다. 여기선 뼈대를 보는 데 집중하자.

마치며 — 이제 당신은 루프를 그림으로 그릴 수 있다

캄캄한 상자였던 게, 몇 번의 버튼 클릭 만에 유리상자가 됐다. 정리하면 이렇다. 에이전트는 💭생각 → 🔧도구 → 👀관찰을 한 바퀴로 삼아, 그 관찰을 다음 생각의 재료로 되먹이며 돌고, 매 바퀴 "충분한가?"를 스스로 물어 부족하면 한 바퀴 더, 충분하면 스스로 멈춘다. 마법이 아니라, 의외로 단순한 반복이었다.

이제 당신은 에이전트가 "왜 한 번에 안 끝나고 여러 번 도는지"를 남에게 그림으로 그려가며 설명할 수 있다.

🔧 지금 해보기 ACT-2-share ★☆☆ · 불씨 넘기기

완주 박스의 [📋 한 줄 요약 복사]를 눌러보자. "에이전트는 마법이 아니었다. 생각→도구→관찰을 3바퀴 돌며 관찰을 다음 생각으로 되먹이고, 충분해지자 스스로 멈췄다 #루프해부" — 방금 손으로 얻은 통찰이 한 줄로 담긴다. SNS든 디스코드든, 아직 에이전트가 캄캄한 다음 사람에게 "너도 열어봐"의 불씨를 넘겨주자.

원리를 만졌으니, 다음은 만들 차례다. 3번 편 「'검색→요약→다시' 도는 미니 에이전트 조립하기」에서는, 방금 해부한 이 루프를 이번엔 당신이 직접 손으로 잇는다. 그 심장인 '한 바퀴 더 돌까?' 판단 한 칸을 채워서 말이다.