무료 실행이 시작되기 전에 다음 변경 사항을 정의해야 합니다. 저렴한 답변이라도 실제 시스템의 특성을 담고 있습니다. 무료 용량은 문서화된 아키텍처 검토를 대체할 수 없습니다.
모델이 몇 초 만에 응답하는 것을 느끼면 그 매력에 빠지기 쉽습니다. 속도는 진전처럼 보이지만, 그렇지 않습니다. 그 속도는 단지 더 빠른 신뢰할 수 없는 초안일 뿐입니다.
당신의 역할은 그 초안과 실제 호스트 사이의 경계(seam)를 만드는 것입니다. 이 경계에는 제약 조건, 데이터 흐름, 그리고 실패 영역이 있습니다. 건너기 전에 다음 변경 사항을 명시해야 합니다.
공개 고지: 본 문서는 MonkeyCode의 제품 홍보의 일환으로 작성되었습니다. MonkeyCode는 무료 모델 접근 및 무료 서버 옵션을 제공합니다. 이 두 가지 사실은 가용성 주장일 뿐, 설계 자체가 아닙니다.
당신이 여전히 경로의 아키텍처를 소유하고 있습니다. 무료 모델은 당신의 피해 범위(blast radius)를 알지 못하며, 무료 서버는 당신의 프로덕션 신뢰도를 상속받지 않습니다.
편안함에 앞선 제약 조건들
당신은 움직일 수 없는 박스부터 시작합니다. 당신의 저장소(repo)에는 비밀 정보, 라이선스, 사용자 데이터가 담겨 있습니다. 이 중 어느 것도 프롬프트 안에 실려서는 안 됩니다.
무료 모델 경로는 텍스트를 작성할 뿐 코드를 병합하지 않습니다. 하나의 질문에 답변할 수 있는 최소한의 컨텍스트만 보내야 합니다. 당신이 제어하는 호스트에서 적용 권한(apply rights)을 유지해야 합니다.
무료 서버는 공장 바닥이 아니라 임대한 작업대입니다. 그 이웃, 수명 주기, 또는 떠난 후의 디스크 상태를 알지 못합니다. 거기에 있는 모든 파일을 공개적인 스크래치페이퍼처럼 다루어야 합니다.
계획을 세우기 전에 제품 페이지에서 현재 제한 사항을 확인하십시오. 할당량(Quotas), 하드웨어, 지속 기간은 이 메모의 사실이 아닙니다. 페이지 내용이 당신의 기억과 다르다면, 페이지가 우선합니다.
본 검토는 당신이 diff를 읽고 거부할 수 있다는 것을 전제로 합니다. 또한 당신이 관리하는 기계에서 테스트를 실행할 수 있다는 것을 가정합니다. 만약 이 두 가지 가정이 실패한다면, 여기서 멈춰야 합니다.
데이터 흐름을 따라가라
붐비는 도시를 가로질러야 하는 패키지를 상상해 보십시오. 라벨은 집에서 작성한 계약서입니다. 트럭은 모델 호출이며, 도크는 서버입니다.
당신은 먼저 자신의 기계에서 계약서를 작성합니다. 여기에는 질문, 허용되는 파일 목록, 그리고 금지된 경로가 나열되어 있습니다. 또한 당신이 유지할 다음 변경 사항도 명시됩니다.
계약서(contract)는 사용자의 기기에 일반 텍스트로 남겨둡니다. 공급업체가 관대하더라도 이 종료 과정은 여전히 발생합니다. 텍스트가 이동하기 전에 토큰, 키, 고객 행을 제거해야 합니다.
모델은 판결이 아닌 초안을 반환합니다. 그 초안을 계약서와 함께 디스크에 저장합니다. 마치 신중한 낯선 사람에게 온 우편물처럼 이를 비교(diff)합니다.
제한된 검사(bounded check)만이 외부 서버로 전송될 수 있습니다. 이 검사는 타임아웃과 고정값(fixture)을 가진 명령이어야 합니다. 마이그레이션(migrations)을 적용하거나 프로덕션 경로를 열어서는 안 됩니다.
결과는 로그와 종료 코드로 되돌아옵니다. 이미 신뢰하는 호스트에서 이를 읽습니다. 임대한 서버는 투표권을 갖지 못합니다.
함께 깨지는 도메인 이름 짓기
실패 도메인(failure domain)은 함께 고장 나는 것들의 집합입니다. 무료 가격 정책이 이 집합을 자동으로 그려주지 않습니다. 실행 전에 사용자가 직접 그 집합을 그려야 합니다.
첫 번째 도메인은 전송하는 프롬프트입니다. 잘못된 프롬프트는 키나 개인 경로를 유출할 수 있습니다. 폭발 반경(blast radius)은 해당 키가 접근할 수 있는 모든 시스템입니다.
두 번째 도메인은 승인할 수도 있는 초안입니다. 자신감 넘치는 패치(patch)는 검사를 뒤집거나 가드(guard)를 제거할 수 있습니다. 폭발 반경은 검토를 건너뛸 경우의 다음 병합(merge)까지입니다.
세 번째 도메인은 빌린 외부 서버입니다. 공유된 작업대는 파일, 로그 또는 미완성 환경 변수(.env)를 보관할 수 있습니다. 폭발 반경은 그 디스크에 복사한 모든 것입니다.
네 번째 도메인은 여전히 소유하고 있는 적용 호스트(apply host)입니다. 이 호스트는 허용하면 실제 사용자들을 변경할 수 있습니다. 따라서 의도적으로 무료 루프 밖에 유지합니다.
만약 두 도메인이 크리덴셜을 공유한다면, 그것은 하나의 도메인입니다. 녹색 로그가 찍혔다고 축하하기 전에 분리해야 합니다. 스크래치(scratch)에서의 녹색 로그는 릴리스가 아닙니다.
셸이 거부할 수 있는 계약서
아래 스크립트는 라이브 클라이언트가 아니라 레이블링된 제안입니다. 이 메모에는 실제 공급업체 실행은 포함되지 않습니다. 사용자가 로컬에서 실행한 다음, 티켓을 판단합니다.
이것은 디스크에서 작은 계약서를 읽습니다. 비밀 형태의 문자열과 누락된 다음 변경 사항을 거부합니다. 검토 필드가 존재할 때만 실행 티켓을 작성합니다.
⚠️ [IMG:N] 형식 토큰은 이미지 placeholder 입니다. 번역하지 말고 원래 위치에 그대로 유지하세요.
#!/usr/bin/env python3
"""경계 검사를 위한 경로 검토. 제안일 뿐, 벤더 클라이언트는 아님."""
import json, re, sys
...
옆에 좁은 계약서(contract)를 저장합니다. 한 번 테스트할 수 있을 만큼 질문을 작게 유지합니다. 검사 명령어는 지루하고 경계가 있어야 합니다.
{
"question": "재시도 헬퍼가 세 번의 시도 후에 멈추나요?",
"allowed_files": ["src/retry.py", "tests/test_retry.py"],
...
관리하는 머신에서 검토를 실행합니다. 차단된 티켓은 파일 복사 준비가 안 되었음을 의미합니다. 깨끗한(clean) 티켓은 배포(deploy)가 아닌, 목업 환경(fixtures)을 허용할 뿐입니다.
python3 review_path.py contract.json
스크립트가 코드 2로 종료되면 계약서를 수정합니다. 사이드 채널에서 블로커를 거래하지 마십시오. 사이드 채널은 당신의 아키텍처 기록이 아닙니다.
허용된 파일만 자유 서버(free server)로 복사합니다. 티켓에 인쇄된 검사 명령어만 실행합니다. 로그를 가져온 후, 임시 작업 공간(scratch tree)을 삭제합니다.
scp -r src tests user@free-server:~/scratch/retry-check/
ssh user@free-server 'cd ~/scratch/retry-check && python -m pytest tests/test_retry.py -q --timeout=30'
ssh user@free-server 'rm -rf ~/scratch/retry-check'
이 셸 라인들은 약속이 아니라 스케치입니다. 호스트를 계획에서 제공하는 이름으로 대체합니다. 만약 계획에 셸이 없다면, 임의로 만들지 않습니다.
다음 변경 사항은 무엇인가요
다음 변경 사항은 계약서 속 문장입니다. 샘플에서는 그 문장이 네 번째 시도 테스트입니다. 모델이 말하도록 허용되기 전에 당신이 그것을 작성합니다.
로그가 반환된 후, 그 문장을 편집하거나 유지합니다. 모델이 침묵 속에서 그것을 대체하게 두지 마십시오. 당신의 변경 노트는 아키텍처의 기억입니다.
다음으로 파일들을 해싱(hashing)하여 스크립트를 수정할 것입니다. 티켓은 보내고자 했던 바이트를 명시해야 합니다. 나중 실행에서는 그 바이트가 이동했다면 실패해야 합니다.
또한 티켓에 종료 시간을 찍을 것입니다. 자유 서버 세션은 그 타임스탬프에서 만료되어야 합니다. 끝을 명시할 수 없다면, 임시 작업 공간(scratch)이 집이 되어버린 것입니다.
이 티켓에 자동 적용 단계를 추가해서는 안 됩니다. 이 티켓이 병합될 수 있는 순간, 네 가지 도메인이 붕괴합니다. 그 붕괴가 바로 이 검토(review)가 막고자 하는 버그입니다.
누가 이 경로를 사용해야 하는가
이 스크립트는 저자의 의도가 아니라 모양을 포착합니다. 키워드 없이 붙여넣은 비밀 정보도 유출될 수 있습니다. 해로운 검사(check)는 지루해 보일지라도 여전히 틀릴 수 있습니다.
이는 사용자가 임대할 수 있는 자유 옵션을 측정하지 않습니다. 격리, 가동 시간(uptime), 또는 데이터 삭제를 증명하지 못합니다. 반드시 현재 공급업체 약관을 직접 읽어야 합니다.
이 경로는 프로덕션 적용에 사용해서는 안 됩니다. 라이브 비밀 정보가 포함된 저장소에는 사용해서는 안 됩니다. 유창한 패치(fluent patch)를 거부할 수 없다면 사용해서는 안 됩니다.
검사가 개인 고객 데이터를 필요로 할 때는 이 경로를 건너뛰십시오. 실패 도메인에 안전 하드웨어가 포함되는 경우에도 건너뛰십시오. 무료 벤치는 그 무게를 지탱하기에는 잘못된 공간입니다.
팀이 통제할 수 없는 감사 기록(audited record)을 필요로 할 때는 건너뛰십시오. 이 메모는 검토자에게 보여줄 수 있는 로컬 습관일 뿐입니다. 규정 준수 제품(compliance product)이 아니므로 그렇게 가장해서는 안 됩니다.
검토를 종료하기
먼저 자신의 기계에서 변경 메모 파일을 작성하십시오. 티켓이 깨끗해질 때까지 로컬 검토를 실행하십시오. 그런 다음 이미 작성한 질문에 무료 모델 호출을 사용하십시오.
만약 무료 서버가 여전히 적절한 벤치라면, 오직 티켓만을 사용하십시오. 파일을 복사하기 전에 현재 MonkeyCode 플랜을 한 번 읽으십시오. 슬로건이 아니라 제약을 염두에 두고 결정하십시오.