AI 에이전트 Koal & KoalStudio

Cursor Gateway 구축기(1) — 요청·실행·결과를 연결하는 최소 설계

Cursor CLI는 강력하지만, 팀 협업에는 '요청·진행·결과 회수' 루프가 필요합니다. KoalStudio가 OpenClaw ↔ Cursor Gateway로 그 루프를 최소 구성으로 붙인 과정과 체크리스트를 공유합니다.

들어가며

“Cursor 쓰면 코딩이 빨라진다” — 맞아요. 혼자라면.

팀에서는 실행 속도보다 먼저 필요한 게 있어요. 요청이 어디서 왔는지, 지금 어디까지 됐는지, 결과가 어디로 갔는지 — 이게 모두가 볼 수 있는 형태로 남아야 협업이 돌아가니까요.

지난 글에서 “Cursor는 개발에 강하고, OpenClaw는 운영에 강하다. 그래서 둘을 연결하는 Gateway가 필요했다”고 했어요. 오늘은 그 Gateway를 어떻게 만들었는지, 최대한 따라할 수 있는 형태로 정리해볼게요.


1) 우리가 필요했던 건 ‘운영 루프’였어요

Cursor 같은 도구를 처음 도입하면 이렇게 시작해요.

  • “코드를 더 빨리 짜고 싶다”

그런데 팀이 되면 목표가 달라져요.

  • 요청이 들어오면 실행까지 끊기지 않게 하고 싶다
  • 누가 무엇을 했는지 남기고 싶다
  • 결과를 다음에도 다시 쓸 수 있게 하고 싶다

요청이 문서로 고정되고 → 실행이 이어지고 → 결과가 다시 팀 자산으로 회수되는 구조. 이 루프가 굳어지면, 아무도 “그거 어떻게 됐어요?”를 물어볼 필요가 없어요.


2) Cursor CLI만으로 부족한 이유

Cursor CLI는 실행 도구로서 굉장히 유용해요. 그런데 운영 루프를 만들려고 하면 빈틈이 생겨요.

  • 요청이 들어왔을 때 일관된 형식으로 정리하는 단계가 없어요
  • 실행이 돌아가는 동안 “지금 어디까지?” 같은 상태를 팀이 공유할 수 없어요
  • 끝났을 때 결과를 재사용 가능한 형태로 모으는 단계가 없어요

이 빈틈을 “사람이 더 열심히” 메우는 건 지속이 안 돼요. 그래서 Gateway가 필요했습니다.


3) Gateway가 하는 일은 딱 3가지

Gateway라고 하면 거창하게 들리지만, 기능을 줄이면 단순해요.

1) 실행을 대신 눌러준다

  • Cursor CLI를 호출해서 작업을 시작한다

2) 결과를 회수한다

  • 실행 결과(로그/변경 요약/파일)를 정해진 위치로 모은다

3) 상태를 전달한다

  • “요청 접수됨 / 실행 중 / 완료 / 실패” 정도만이라도 외부에서 알 수 있게 한다

이 3가지만 되면 ‘요청→실행→결과’가 끊기지 않아요.


4) 최소 구성 (따라하기 버전)

“완벽한 설계”가 아니라 지금 당장 굴릴 수 있는 설계를 먼저 보여드릴게요.

구성 요소

  • OpenClaw: 요청을 정리하고 결과를 모으는 팀 운영 허브
  • Gateway(브리지 서버): 실행·회수·상태 전달
  • Cursor: 실제 코드 수정/리팩토링/디버깅

흐름 한눈에 보기

요청(사람)

요청서(문서로 고정)

Gateway가 Cursor 실행

코드 변경/검증

결과 회수(outbox/문서)

다음에 재사용

실전 시나리오: “CORS 에러가 납니다”

  1. 요청서 작성: “CORS 에러 / 재현 방법: POST /api/comments 호출 / 완료 조건: 200 응답 / 산출물: outbox에 수정 요약”
  2. Gateway 실행: 요청서를 보고 Cursor CLI 호출, 해당 파일 수정 시작
  3. 결과 회수: 수정된 파일 diff + “헤더에 Access-Control-Allow-Origin 추가” 요약을 outbox에 저장
  4. 다음 재사용: 같은 에러가 다시 나면 outbox에서 수정 요약을 꺼내서 바로 참고

이 흐름이 한 번 굳어지면, “그 에러 어떻게 고쳤더라?”를 다시 물어볼 필요가 없어요.


5) “요청서”가 먼저인 이유

Gateway 구축에서 사실 제일 중요한 건 서버가 아니라 요청서예요.

요청서는 쉽게 말하면 ‘작업 지시서’예요. 아래 4가지가 없으면, 실행이 아무리 빨라도 협업이 깨져요.

항목이유
문제: 지금 뭐가 문제인지없으면 엉뚱한 걸 고쳐요
확인 방법: 어떻게 재현/확인하는지없으면 “됐는지 어떻게 알아요?” 상황
완료 조건: 뭐가 되면 끝인지없으면 “어디까지 하면 되나요?” 루프
산출물 위치: 결과를 어디에 남길지없으면 결과가 사라져요

이걸 문서로 고정해두면, 실행 담당자가 바뀌거나 하루가 지나도 일관된 방식으로 처리할 수 있어요.


6) 실패를 줄이는 체크리스트

Gateway는 “잘 될 때”보다 “안 될 때”가 더 중요해요. 저희가 실제로 체크하는 항목이에요.

실행 전

  • 작업 범위가 한 문장으로 정리돼 있나? — “로그인 버튼 클릭 시 500 에러 수정”처럼 구체적이어야 해요
  • 바꾸면 위험한 곳이 포함돼 있나? — 배포/결제/인증 관련이면 반드시 확인
  • 되돌리는 방법(롤백)이 있나? — git stash, 브랜치, 백업 중 하나는 있어야 해요

실행 중

  • 로그가 남고 있나? — 에러가 나도 로그가 있으면 원인을 찾을 수 있어요
  • 중간에 멈추면 ‘실패’로 표시되나? — 조용히 멈추는 게 제일 위험해요

완료 후

  • 무엇을 바꿨는지 10줄로 설명할 수 있나? — 못 하면 결과를 아직 모르는 거예요
  • 결과 파일/링크가 outbox에 남았나? — 여기 없으면 팀이 재사용 못 해요
  • 다음 사람이 보고 따라할 수 있나? — “왜 이렇게 했는지”가 한 줄이라도 있어야 해요

7) 어디까지 자동화해야 하나요?

욕심을 너무 내면 프로젝트가 산으로 가요. 저희가 추천하는 순서예요.

  1. 요청서 포맷 고정 — 가장 먼저. 나머지는 여기서 출발해요
  2. 실행 트리거(Gateway) — 요청서가 있어야 Gateway가 뭘 할지 알아요
  3. 결과 회수(outbox) — 실행이 됐으면 어디에 남길지
  4. 상태 전달 — 최소한 “진행 중/완료/실패”만이라도

이 순서로 가면 작은 성공을 계속 쌓을 수 있어요. 한 번에 다 만들려고 하면 대부분 3번에서 멈춰요.


마무리

지금 당장 시작해보고 싶다면, 서버나 자동화가 없어도 괜찮아요.

  1. 가장 자주 반복되는 작업 요청을 하나 고르세요.
  2. 요청서 4개 항목(문제 / 확인 방법 / 완료 조건 / 산출물 위치)을 메모 앱에 적어보세요.
  3. 다음에 같은 요청이 오면, 그 메모를 기준으로 처리하고 결과를 한 폴더에 남겨보세요.

이 루프가 굳어지는 것만으로 팀이 달라져요.


다음 편에서는 Gateway가 결과를 회수할 때 어떤 포맷을 쓰는지, 실패와 재시도를 어떻게 설계하는지, 팀 충돌을 줄이는 운영 규칙은 어떻게 붙이는지를 정리해볼게요.

댓글

댓글 남기기

댓글 삭제 시 사용됩니다
공개되지 않습니다
0/2000
← 목록으로