임대 카드와 도메인이 없으면: 빌려온 에이전트 호스트에 대한 폐쇄 게이트
요약
본 문서는 에이전트 및 모델 배포 시 '소유권'과 '종료(termination)'를 게이트하는 중요성을 강조합니다. 임시적인 무료 리소스나 빌려온 호스트는 생산 환경으로 간주해서는 안 되며, 모든 변경 사항은 명확한 소유권 증거와 최신 약관을 기반으로 해야 합니다.
핵심 포인트
- 임대 카드(Lease card)가 필수적이며, 최신 상태여야 함.
- 빌려온 호스트나 무료 모델 경로는 임시적인 것으로 간주해야 함.
- 배포는 '소유권'과 '종료'를 게이트하는 것이지, CI의 색깔을 게이트하는 것이 아님.
- 모든 배포 결정은 명확한 소유 증거(예: `ops/lease-card.yaml`)를 요구함.
자신이 소유하지 않은 호스트에는 도메인, 웹훅 또는 고객 대기열을 연결하지 않습니다. 무료 모델 경로와 무료 서버는 잠시 동안의 급증(spike)에 대한 임대이며, 조용히 승격시키는 런타임이 아닙니다. 임대 카드가 누락되었거나, 오래되었거나, 종료 시 침묵하면 변경은 폐쇄적으로 실패하고 급증은 격리 상태를 유지합니다.
그 규칙은 '테스트가 녹색(green)'이라는 것보다 더 구체적입니다. 녹색으로 표시된 작업이라도 할당량이 끝나거나 약관 페이지가 변경될 때 사라지는 박스에서 통과할 수 있습니다. 당신이 게이트하는 것은 소유권과 종료입니다. CI의 색깔을 게이트하는 것이 아닙니다.
도구를 이름 붙이기 전에 폭발 반경(blast radius)부터 명명하라
당신은 하나의 사고를 막으려고 합니다. 팀원이 빌려온 호스트에서 에이전트를 프로토타입하고, 데모가 성공하며, 이미 URL이 존재하기 때문에 누군가가 실제 트래픽을 그곳에 가리킵니다. 그 호스트는 생산용으로 약속된 적이 없습니다. 임대가 끝나면, 당신은 프로세스나 디스크 중 하나 또는 둘 다를 잃게 되며, 롤백은 채팅 스레드일 뿐입니다.
모델 헤드라인도 같은 방식으로 취급해야 합니다. 뉴스 게시물의 별명은 배포할 수 있는 핀이 아닙니다. 전환일에 오퍼 페이지를 다시 읽고, 그 날짜를 레포지토리에 저장합니다. 당신이 읽었던 페이지를 가리킬 수 없다면, 승격시키지 않습니다.
급증을 유지하고, 바인딩(binding)은 거부하십시오. 그것들은 다른 변경 사항이며, 커밋을 공유해서는 안 됩니다.
가정할 수 있는 것들
스파이크를 실행하기에는 두 가지 가용성 주장만으로 충분하며, 그 이상은 없습니다. 무료 모델 접근이 존재합니다. 무료 서버 옵션이 존재합니다.
공개: 본 기사는 MonkeyCode의 제품 아웃리치(product outreach)의 일환으로 준비되었습니다. MonkeyCode는 아래 임대 카드를 작성하는 동안 이 두 가지 옵션을 사용할 수 있는 한 곳입니다. 본 기사는 할당량, 하드웨어 형태, 기간, 모델 카탈로그, 벤치마크 또는 해당 오퍼가 유지됨을 주장하지 않습니다.
현재 제품 페이지의 라이브 필드를 카드에 복사합니다. 빈 필드는 추측해서 채우는 게이트 실패가 아니라, 기억이나 오래된 채팅에서 가져온 것이 아닙니다. 만약 제품 이름을 삭제한다면, 그 게이트는 모든 빌려온 모델 경로와 모든 빌려온 호스트에 적용됩니다.
증거를 갖춘 여섯 개의 게이트
이 목록을 트래픽을 연결할 풀 리퀘스트에 복사하세요. 각 게이트는 레포지토리 내 아티팩트를 필요로 합니다. 구두로 '확인했다'고 말하는 것은 인정되지 않습니다.
1. 임대 카드(Lease card)가 존재하고 최신 상태일 것
증거는 ops/lease-card.yaml 파일이며, 여기에는 terms_read_on, allowance_note, host_offer, model_route, 그리고 reader 정보가 포함되어야 합니다. 이 파일이 없거나, terms_read_on 날짜가 지정된 기간을 벗어나거나, allowance_note가 비어 있으면 실패 처리(Fail closed)합니다.
필드를 통과시키기 위해 임의로 숫자를 만들지 마세요. 오래된 수치는 공백인 것보다 더 나쁩니다. 검토자들이 그것을 신뢰하기 때문입니다. 오늘 읽은 내용을 작성하고, 만약 '게시된 할당량을 찾을 수 없었음'이 사실이라면 그 내용까지 포함하세요.
2. 모델 경로(Model route)는 헤드라인이 아닌 식별자일 것
증거는 사용자가 읽은 페이지와 일치하는 경로 문자열과, 어디서 읽었는지에 대한 한 줄의 메모여야 합니다. 이 경로가 latest, free, default이거나 요약본에서만 본 이름이라면 실패 처리합니다.
핀(pin)은 나중에 변경할 수 있습니다. 움직이는 별명으로는 홍보할 수 없습니다. 헤드라인은 주제 신호일 뿐, 배포 구성(deploy config)이 아닙니다.
3. 빌려온 호스트가 장기적인 비밀을 보유하지 않을 것
증거는 비밀 스캔 로그 또는 해당 경로에 .env 파일과 클라우드 키를 거부하는 CI 체크여야 합니다. 고객 토큰이나 배포 키가 호스트에 남아 있으면 실패 처리합니다.
무료 서버는 임시 작업 공간(spike box)일 뿐, 금고(vault)가 아닙니다. 데모 로그인 역시 비밀이며, 공유할 수 있는 노트북 안에 담겨서는 안 됩니다.
4. 데이터 외부 반출이 연습되었을 것
증거는 프롬프트, 로그 및 모든 사용자 콘텐츠를 사용자가 소유한 곳으로 복사하고, 이후 임시 사본을 삭제하는 드라이-런(dry-run) 로그여야 합니다. 유일한 사본이 빌려온 디스크에 남아 있으면 실패 처리합니다.
'나중에 내보낼 수 있다'는 연습이 아닙니다. 나중은 이미 디스크가 사라진 시점입니다. 이 절차(drill)를 실행하지 않았다면, 데모가 아무리 좋아 보여도 게이트는 빨간색(fail)입니다.
5. 트래픽 연결은 별도의 변경 사항일 것
증거는 DNS, 웹훅 또는 큐 차이점(diff)이 자체 풀 리퀘스트에 포함되어 있어야 하며, 해당 요청이 임대 카드와 연결되어야 합니다. 하나의 커밋으로 데모를 생성하고 프로덕션 트래픽을 바인딩하면 실패 처리합니다.
리뷰어는 혼합된 diff에서는 blast radius를 볼 수 없습니다. 분리하세요. 데모는 월요일에 병합할 수 있습니다. 바인딩은 카드(card)를 기다립니다.
6. 롤백 주체(rollback owner)가 있고, 키 스위치(kill switch) 타이밍이 정해짐
증거는 이름이 지정된 사람인 rollback_owner와 지속 시간을 포함하는 드릴 노트입니다. 소유자가 "팀"이거나 드릴이 실행된 적이 없다면 실패 처리(Fail closed)해야 합니다.
경로를 누가 비밀번호가 있는지 묻지 않고 언바인드할 수 있는 사람이 필요합니다. 로테이션 별칭(rotation alias)은 사람이 아닙니다. 이 전환 지점(cutover)을 위해 누군가의 이름을 지정하세요.
리뷰 전에 실행하는 검사기 (The checker you run before review)
아래 스크립트는 제안입니다. 표준 라이브러리만 사용합니다. 벤더를 호출하지 않으며, 할당량(quota)도 알지 못합니다. 로컬에서 실행한 다음, 트래픽을 바인딩하는 풀 리퀘스트에 0이 아닌 종료 코드(non-zero exit)를 연결하세요.
# ops/lease-card.yaml
# 예시일 뿐입니다. 라이브 페이지를 읽은 후 모든 값을 교체하세요.
terms_read_on: "2026-10-10"
...
#!/usr/bin/env python3
"""임대 호스트 카드(borrowed-host lease card)가 완전하고 최신이 아닐 경우 실패 처리됩니다.
제안일 뿐입니다: stdlib, 네트워크 없음, 벤더 클라이언트 없음.
..."""
python3 ops/check_lease_card.py ops/lease-card.yaml
echo $?
카드가 누락된 것은 경고가 아닙니다. 중단입니다. 데모가 20분 후에 통화로 예정되어 있다고 해서 우회(bypass) 레이블을 추가하지 마세요.
드릴 로그에 포함되어야 할 내용
드릴 로그는 카드 옆, ops/exit-drill.md에 보관합니다. 네 줄이면 충분합니다. 각 줄은 리뷰어가 diff할 수 있는 증거입니다.
- UTC 기준 시작 시간 및 종료 시간으로, 지속 시간이 느낌(vibe)이 아니도록 합니다.
- 임대 호스트의 소스 경로와 사용자가 소유한 목적지 경로.
- 스파이크 복사본을 삭제하기 전에 양쪽에서 일치하는 체크섬 또는 파일 개수.
- DNS, 웹훅(webhook), 또는 큐를 언바인드하는 명령어 또는 콘솔 단계, 그리고 누가 실행했는지.
또한 복사하지 않은 내용도 기록하세요. 스파이크 박스에 절대 올라가서는 안 될 고객 페이로드는 성공적인 종료(exit)가 아니라 사고 보고서입니다. 체커는 이를 잡아내지 못할 것입니다. 로그를 읽는 사람이 알아차릴 것이기 때문에 게이트 6에서는 담당자 이름을 명시합니다.
트래픽 풀 리퀘스트 검토 순서
- 임대 카드(lease card)를 열어보세요.
terms_read_on이 지정된 기간을 벗어나면 거부하세요. allowance_note를 읽으세요. 기억한 것처럼 보인다면, 작성자를 라이브 오퍼 페이지로 돌려보내세요.- 비밀 정보(secrets)의 차이를 확인하세요. 빌려온 호스트 경로(borrowed host path)는 키(key), 토큰(token), 또는
.env파일을 획득해서는 안 됩니다. - 종료 로그(exit log)를 읽으세요. 자신이 소유한 경로는 복사된 내용을 보여야 하며, 스파이크 복사본은 드릴(drill)에서 삭제되어야 합니다.
- DNS, 웹훅(webhook), 또는 큐(queue) 차이가 요청에 포함된 유일한 프로덕션 바인딩인지 확인하세요.
- 지정된 롤백 소유자(rollback owner)가 풀 리퀘스트를 승인하도록 요구하세요.
- 체커(checker)를 실행하세요. 0이 아니면 병합할 수 없습니다.
짧은 요청도 전체 목록을 받습니다. 고객이 접근할 수 있다면 작은 웹훅이라도 프로덕션 트래픽입니다.
간단한 결정표
| 상황 | 결과 | 조치 사항 |
|---|---|---|
| 카드가 신규이고, 비밀 정보가 없으며, 종료가 리허설되었고, 트래픽 변경이 별개인 경우 | 검토 진행 가능 | 이미 시간을 맞춘 킬 스위치(kill switch) 뒤의 트래픽만 첨부하세요 |
| ... | ||
| 사용하는 결정표는 풀 리퀘스트 댓글에 붙여넣으세요. 일치한 행을 붙여넣고, 그 아래에 체커 출력을 붙여넣으세요. 검토자는 녹색 데모 GIF에서 여러분의 추론 과정을 재구성할 필요가 없어야 합니다. |
제한 사항 및 건너뛰어도 되는 경우
이 체크리스트는 무료 서버를 프로덕션급으로 만들지 않습니다. 스파이크(spike)가 커버오버(cutover)인 것처럼 가장하는 것을 막아줄 뿐입니다. 규제 데이터, 장기간 유지되는 고객 비밀 정보 또는 가동 시간 보장(uptime promise)이 필요한 워크로드에 대해서는 이 체크리스트를 건너뛰세요.
롤백 소유자가 아무도 없을 경우에도 건너뛸 수 있습니다. 통과하는 스크립트가 침투 테스트(penetration test), 백업 증명, 또는 오퍼에 대한 법적 검토를 대체할 수는 없습니다. 7일 기간은 공급업체 규칙이 아니라 제안서 상의 팀 선택입니다. 의존하는 페이지가 자주 변경된다면 이 기간을 단축하세요.
체커는 검토자가 모든 실패 사례를 볼 수 있도록 평면 파일(flat file)을 의도적으로 파싱합니다. 중첩된 YAML은 이해하지 못할 것입니다. 카드는 평평하게 유지하세요. 카드에 할당량 수치, 하드웨어 이름 또는 "무제한"이라는 표현을 게시하지 마세요. 그러한 주장은 구식이 되기 쉬우며, 구식인 카드가 바로 빌려온 호스트가 소유되지 않은 의존성(unowned dependency)이 되는 방식입니다.
스파이크를 버릴 만큼 저렴하게 유지하기
빌려온 박스에서도 여전히 학습할 수 있습니다. 프롬프트를 깨보세요. 요청 시간을 측정하세요. 실패한 내용을 기록하세요. 그 메모는 당신이 소유하는 곳에 있어야 합니다.
무료 모델 접근과 무료 서버는 스파이크가 폐기하기에 충분히 저렴해야 하기 때문에 유용합니다. 폐기는 출구가 노트북을 떠나기 전에 리허설되어야만 작동합니다. 저렴하다는 것이 바인딩(bind)하기에 안전하다는 것과는 다릅니다.
스파이크를 시도할 구체적인 장소를 원한다면, MonkeyCode의 무료 모델 접근과 무료 서버를 사용하고, 현재 제공되는 혜택을 임대 카드에 복사한 다음, 도메인 변경 전에 체커를 실행하세요. 사람이 트래픽 풀 리퀘스트(traffic pull request)를 검토할 때까지 거기서 멈추세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기