게이트
한 줄 정의
통과시켜도 되는지 검사하는 문. 에이전트의 브레이크
1. 비유로 이해하기
놀이공원 롤러코스터 입구를 떠올리면 된다.
- 키 재는 막대 — 130cm가 안 되면 못 탄다
- 표 검사 — 표가 없으면 못 들어간다
- 직원 — “안전벨트 확인하셨나요?”
이 문들의 공통점은 통과시킬지 말지를 판단한다는 것이다. 그리고 더 중요한 공통점이 하나 있다. 문은 문제가 커지기 전에 앞에서 막는다. 롤러코스터가 출발한 다음에 “키가 작으시네요”라고 하면 이미 늦었다.
2. 왜 필요한가
에이전트는 스스로 판단해서 행동한다. 그래서 “이 판단을 그대로 실행해도 되는가?”를 검사하는 문이 반드시 필요하다. 게이트가 없는 에이전트는 브레이크 없는 자동차다.
판단 기준은 딱 하나
“실수했을 때 되돌릴 수 있는가?”
| 행동 | 문이 필요한가 | 이유 |
|---|---|---|
| 파일 읽기 | 아니오 | 되돌릴 수 있다 |
| 검색하기 | 아니오 | 부작용이 없다 |
| 메일 보내기 | 예 | 보내면 회수 불가 |
| 파일 삭제 | 예 | 복구가 어렵다 |
| 결제하기 | 예 | 돈이 나간다 |
| 코드 배포 | 예 | 실제 서비스에 영향 |
게이트의 종류
승인 게이트 — 되돌릴 수 없는 행동 앞에서 사람에게 물어본다. HITL(Human-in-the-Loop)이라고도 부른다.
품질 게이트 — 다음 단계로 넘어가기 전에 자동으로 검사한다.
에이전트가 코드 작성
↓
[게이트 1] 문법 오류 없나? ──실패──▶ 다시 고쳐
↓ 통과
[게이트 2] 테스트 통과하나? ──실패──▶ 다시 고쳐
↓ 통과
[게이트 3] 사람 리뷰 ──────────────▶ 승인 후 반영
안전 게이트 — 들어오는 질문이 위험한 요청은 아닌지(입력), 나가는 답변에 개인정보나 API 키가 섞이지 않았는지(출력) 확인한다.
코드로 보면
앞서 본 하네스 루프에 게이트를 넣으면 이렇게 된다.
DANGEROUS_TOOLS = {"send_email", "delete_file", "make_payment"}
for call in response.tool_calls:
# ▼▼▼ 여기가 게이트 ▼▼▼
if call.name in DANGEROUS_TOOLS:
print(f"[확인] {call.name} 을(를) 실행할까요?")
print(f" 내용: {call.input}")
if input("y/n > ") != "y":
result = "사용자가 거절했습니다."
messages.append(to_message(result))
continue # 실행하지 않고 넘어간다
# ▲▲▲ 게이트 끝 ▲▲▲
result = run_tool(call.name, call.input)
messages.append(to_message(result))
설계할 때 지킬 것
| 원칙 | 설명 |
|---|---|
| 누적을 봐야 한다 | 한 번에 1만 원씩 열 번이면 10만 원. 단계마다 통과해도 합계는 위험할 수 있다 |
| 문이 너무 많으면 무의미하다 | 매번 물어보면 사용자가 아무 생각 없이 y를 누른다 |
| 무엇을 승인하는지 보여줄 것 | “메일 보낼까요?”가 아니라 “누구에게 무슨 내용을” |
| 기본값은 차단 | 애매하면 막는 쪽. 모르는 것은 통과시키지 않는다 |
3. 어디서 만났나
이 용어 자체는 수업에서 정식으로 다루기 전에 따로 정리한 것이다. 다만 게이트가 필요한 이유는 이미 두 번 만났다.
7회차에서 에이전트가 파일을 고치고 명령어를 직접 실행하는 구조를 봤다. 스스로 실행한다는 건 곧 스스로 사고도 칠 수 있다는 뜻이었다.
7회차 — 에이전트, MCP, 스킬 — 범용 AI를 내 전용 조수로
8회차에서는 막혔을 때 되돌아올 자리를 남겨 두는 규율을 배웠다. 게이트는 그 “되돌아올 자리”를 사고가 나기 전에 만들어 두는 쪽의 장치다.
8회차 — MVP, 다 만들려 하지 말고 한 흐름이 끝까지 굴러가게
4. 헷갈리는 개념
| 이 용어 | 비슷하지만 다른 것 | 차이 |
|---|---|---|
| 게이트 | 에러 처리 | 에러 처리는 일이 터진 뒤 수습한다. 게이트는 터지기 전에 막는다 |
| 게이트 | 라우팅 | 게이트가 판단하고, 라우팅이 그 판단에 따라 실행한다. “이건 위험해”가 게이트, “그럼 사람에게 보내”가 라우팅 |
| 게이트 | 논리 게이트 (AND·OR·NOT) | 전자회로의 게이트. “게이트”라는 말이 컴퓨터 분야로 들어온 출발점이지만, 층이 완전히 다르다 |
| 모델 밖의 게이트 | 모델 안의 게이트 | 모델 밖에서는 통과/차단의 문이다. 모델 안(LSTM, MoE)에서는 수도꼭지에 가깝다. 0과 1 사이 값으로 “얼마나 흘려보낼까”를 조절한다 |
5. 많이들 오해하는 지점
ㄱ. “문을 많이 세울수록 안전하다”
정반대다. 매번 확인을 요구하면 사람은 내용을 읽지 않고 y를 누르게 된다. 이걸 경고 피로(alert fatigue)라고 하는데, 이 상태가 되면 문이 백 개여도 실질적으로는 하나도 없는 것과 같다. 되돌릴 수 없는 것에만 문을 세워야 문이 의미를 갖는다.
ㄴ. “거절했으면 조용히 넘어가면 된다”
거절당했다는 사실을 모델에게 알려줘야 한다. 안 알려주고 그냥 건너뛰면 모델은 그 작업이 성공한 줄 알고 다음 단계로 넘어간다. “메일을 보냈으니 이제 답장을 기다리자”는 식으로 엉뚱한 길을 계속 간다. 거절 사실을 알려주면 모델은 “이건 하면 안 되는구나” 하고 다른 방법을 찾는다.
ㄷ. “게이트 = 차단”
문의 결과는 세 갈래다. 통과 / 차단 / 우회. 셋째가 특히 중요하다. 확신이 낮으면 더 검색하게 하고, 위험하면 사람에게 보내는 식으로 다른 길로 돌리는 것도 게이트의 일이다.