logo
aillmagent

AI 에이전트 이해하기 - ReAct와 계획-실행 루프

함수 호출로 LLM에 도구를 쥐여줬다면, 그다음 질문은 자연스럽습니다. "목표만 던지면 알아서 여러 단계를 밟아 끝내주면 안 되나?" 이 아이디어가 AI 에이전트(agent) 이고, 그 대표적인 동작 방식이 ReAct계획-실행 루프입니다.

이 글에서는 에이전트가 무엇이고, 어떤 루프로 도는지, 그리고 실패·무한루프를 어떻게 막으며 현실적으로 어디까지 되는지를 정리합니다.


1. 에이전트란 - 관찰·사고·행동의 루프

일반적인 LLM 호출은 "질문 → 답변" 한 번으로 끝납니다. 에이전트는 다릅니다.

에이전트 = LLM을 두뇌로 삼아, 목표를 달성할 때까지 [사고 → 행동 → 관찰]을 스스로 반복하는 시스템.

핵심은 루프입니다.

목표 입력 ┌───────────────────────────────┐ │ 관찰(Observation): 지금 상황 파악 │ │ ↓ │ │ 사고(Thought): 다음에 뭘 할지 판단 │ │ ↓ │ │ 행동(Action): 도구 호출/답변 │ └───────────────────────────────┘ │ (목표 달성까지 반복) 최종 결과

한 번의 응답으로 못 끝내는 일을, 여러 스텝에 걸쳐 도구를 쓰며 처리한다는 게 에이전트의 본질입니다.


2. ReAct 패턴 - Reasoning + Acting

에이전트의 가장 기본적인 패턴이 ReAct입니다. 이름 그대로 Reasoning(추론)과 Acting(행동)을 번갈아 합니다.

각 스텝에서 LLM은 세 가지를 만들어냅니다.

  • Thought: 지금 상황에서 무엇을 해야 하는지에 대한 생각
  • Action: 실제로 호출할 도구와 인자
  • Observation: 그 도구가 돌려준 결과(이건 시스템이 채워줌)
질문: "우리 팀에서 이번 주 마감인 이슈가 몇 개야?" Thought: 이슈 트래커를 조회해야겠다. Action: search_issues({ team: "backend", due: "this_week" }) Observation: 7건 반환됨 Thought: 개수만 세면 되니 답할 수 있다. Action: finish("이번 주 마감 이슈는 7건입니다.")

이게 앞 글의 함수 호출 루프와 거의 같은 구조라는 걸 눈치챘을 겁니다. 실제로 ReAct는 함수 호출 위에 "생각을 명시적으로 뱉게 하고, 목표 달성까지 반복" 을 얹은 것입니다.


3. 계획-실행(Plan-and-Execute) 패턴

ReAct는 매 스텝 즉흥적으로 다음 행동을 정합니다. 단계가 많아지면 길을 잃기 쉽죠. 그래서 나온 게 계획-실행 방식입니다.

먼저 전체 계획을 세우고(Plan), 그 계획을 순서대로 실행(Execute)한다.

[Plan] LLM이 큰 그림을 먼저 짬 1. 지난달 매출 데이터 조회 2. 카테고리별 집계 3. 표로 정리해 요약 [Execute] 각 단계를 도구로 실행하며 진행 → 중간에 어긋나면 계획을 다시 조정(re-plan)
패턴방식강점약점
ReAct매 스텝 즉흥 판단유연함, 단순함긴 작업에서 방향 상실
계획-실행계획 먼저, 그다음 실행복잡한 다단계에 강함계획이 틀리면 전체 흔들림

실무에서는 둘을 섞습니다. 큰 계획을 세우되, 각 단계 안에서는 ReAct처럼 관찰에 따라 유연하게 대응하는 식입니다.


4. 에이전트를 이루는 3요소

에이전트를 제대로 만들려면 LLM 두뇌 외에 세 가지가 붙습니다.

4-1. 도구(Tools)

에이전트가 세상과 상호작용하는 손발입니다. 검색, DB, API, 파일, 코드 실행 등. 앞 글의 함수 호출이 바로 이 부분입니다. 도구가 다양할수록 할 수 있는 일이 늘지만, 너무 많으면 선택이 흐트러집니다.

4-2. 메모리(Memory)

  • 단기 기억: 지금 진행 중인 대화·중간 결과. 보통 컨텍스트 창에 쌓입니다.
  • 장기 기억: 세션을 넘어 유지할 정보. 벡터 DB 등에 저장해 필요할 때 검색(RAG)해서 불러옵니다.

스텝이 쌓이면 컨텍스트가 금방 커지므로, 오래된 관찰을 요약하거나 중요한 것만 남기는 관리가 필요합니다.

4-3. 계획(Planning)

목표를 하위 작업으로 쪼개고 순서를 정하는 능력. 앞서 본 계획-실행이 여기에 해당합니다.

┌── 도구: 검색 / DB / API / 코드실행 LLM 두뇌─┼── 메모리: 단기(대화) + 장기(벡터DB) └── 계획: 목표 분해 → 순서 결정 → 재조정

5. 실패와 무한루프 막기

에이전트가 스스로 루프를 돈다는 건 잘못 돌면 스스로 망가진다는 뜻이기도 합니다. 현실적으로 반드시 방어막을 둡니다.

  • 최대 스텝 제한: 예) 10스텝 안에 못 끝내면 중단하고 사람에게 넘깁니다. 무한루프의 1차 방어선.
  • 반복 감지: 같은 도구를 같은 인자로 계속 부르면 멈추게 합니다.
  • 타임아웃·예산: 총 소요 시간·토큰·비용 상한을 둡니다.
  • 에러 되먹임: 도구가 실패하면 에러를 관찰로 넣어 LLM이 다른 방법을 시도하게 합니다. 단, 재시도 횟수도 제한합니다.
  • 사람의 개입(human-in-the-loop): 삭제·결제·외부 발송 같은 위험한 행동 전엔 승인 단계를 둡니다.
  • 검증 단계: 최종 결과가 목표를 실제로 충족했는지 확인하는 스텝을 추가합니다.
let step = 0; const MAX_STEPS = 10; while (step++ < MAX_STEPS) { const { thought, action } = await agentStep(state); if (action.type === "finish") return action.result; if (isRepeating(action, history)) break; // 같은 행동 반복 → 중단 const observation = await runTool(action); history.push({ thought, action, observation }); } // 상한 도달 → 안전하게 종료 / 사람에게 이관

6. 현실적으로 어디까지 되나

과장 없이 짚겠습니다. 에이전트는 강력하지만 만능이 아닙니다.

잘 되는 영역:

  • 도구가 명확하고 검증 가능한 작업(검색·조회·집계·정형 문서 작성).
  • 스텝이 비교적 짧고 각 단계 결과를 확인할 수 있는 워크플로.
  • 사람이 최종 확인하는 보조(assistant) 형태.

아직 조심할 영역:

  • 스텝이 길어질수록 오류가 누적됩니다. 초반의 작은 실수가 뒤로 갈수록 커집니다.
  • 되돌릴 수 없는 행동을 자율적으로 맡기는 것(무인 결제·대량 삭제 등)은 위험합니다.
  • 목표가 모호하면 엉뚱한 방향으로 열심히 갑니다. 목표·도구·제약을 좁게 줄수록 잘 작동합니다.

감각: 지금의 에이전트는 "믿고 맡기는 자율 직원" 보다 "감독이 붙은 유능한 인턴" 에 가깝습니다. 범위를 좁히고 안전장치를 두면 실무에서 큰 값을 합니다.


마무리

AI 에이전트는 LLM을 두뇌로, [사고 → 행동 → 관찰] 루프를 목표 달성까지 반복하는 시스템입니다. ReAct는 매 스텝 유연하게 판단하는 방식, 계획-실행은 큰 그림을 먼저 세우는 방식이며, 실무에선 둘을 섞습니다.

핵심 정리.

  1. 에이전트 = LLM + 도구 + 메모리 + 계획의 반복 루프.
  2. 최대 스텝·반복 감지·사람 승인 같은 안전장치는 선택이 아니라 필수.
  3. 목표와 권한을 좁게 줄수록 안정적으로 작동한다.

"완전 자율"을 노리기보다 "좁은 범위를 안전하게 자동화" 하는 데서 시작하는 게 현실적인 출발점입니다.

me

강경원

Backend Developer

성능과 안정성으로 신뢰받는 백엔드 개발자 · 요즘은 AI/LLM을 서비스에 접목합니다

이력서 보기