무료 용량(Free Capacity) 이전에 세 가지 선을 그리라
요약
무료 용량이나 무료 모델 사용 시 신뢰 경계를 유지하는 것이 중요하며, 비용 절감만으로는 보안을 보장할 수 없습니다. 코딩 작업을 수행할 때 의도(intent), 패키지(pack), 제안서(proposal) 세 가지 바통으로 과정을 분리하여 데이터의 소유권과 통제권을 로컬 환경에 두어야 합니다.
핵심 포인트
- 무료 용량은 신뢰 경계를 바꾸지 않으므로 보안 검토가 필수입니다.
- 코딩 작업 시 의도, 패키지, 제안서 세 단계를 분리하여 데이터 통제권을 유지해야 합니다.
- 자격 증명과 전체 히스토리 등 민감 정보는 반드시 로컬 장치에 보관해야 합니다.
무료 서버가 여러분의 레포지토리에서 신뢰를 얻어주지는 않습니다. 무료 모델 역시 여러분의 비밀 정보를 지켜주지는 못합니다. 어느 쪽이 실행되든, 여전히 그 과정을 검토해야 합니다.
무료 용량은 청구서만 바꿀 뿐, 신뢰 경계(trust boundary)를 바꾸지 않습니다. 비용을 덜 쓴다고 해서 동일한 파일을 유출할 수 있습니다. 이것이 여러분이 어떤 원격 호출(remote call)을 하기 전에 업무에 대해 져야 할 검토입니다.
집에서 두 블록 떨어진 빌린 작업실을 상상해 보세요. 불이 켜진 동안 작업대(bench)를 사용할 수는 있습니다. 하지만 그 작업대에 집 열쇠를 못 박지는 않습니다.
MonkeyCode는 무료 모델 접근과 무료 서버 옵션을 제공합니다. 고지: 이 글은 MonkeyCode의 제품 홍보의 일환으로 작성되었습니다. 두 가지 제안 모두 신뢰 업그레이드가 아닌 용량(capacity)으로 취급하십시오.
먼저 제약 조건(constraints)을 작성하라
프롬프트(prompt)를 작성하기 전에 제약 조건을 작성하세요. 여러분의 레포지토리는 여러분이 통제하는 기계에 남아 있어야 합니다. 무료 서버는 빌드를 실행할 수는 있지만, 여러분의 비밀 정보를 보관하지는 못합니다.
무료 모델은 패치를 적용하는 것이 아니라 텍스트를 초안 작성할 수 있습니다. 전송하는 컨텍스트(Context)는 작동하는 최소한의 패키지여야 합니다. 여러분은 할당량(quota), 재설정 시점(reset), 또는 선점 기간(preemption window)을 알지 못합니다.
또한 무료 서버 옵션이 얼마나 오래 지속될지도 모릅니다. 따라서 여러분의 설계는 갑작스러운 중단에도 살아남아야 합니다. 사라진 작업대는 여러분의 집을 온전하게 남겨두어야 합니다.
diff 할 수 있는 파일에 세 가지 선을 명명하세요. 첫 번째 선은 레포지토리의 관리(custody)입니다. 두 번째 선은 프롬프트 패키지의 관리입니다.
세 번째 선은 여러분이 받아들이는 결과물의 관리입니다. 만약 어떤 선이 모호하다면, 아직 그 선을 넘어서는 안 됩니다. 모호한 관리는 편리함의 영역을 신뢰의 영역으로 바꿉니다.
여러 과정을 거쳐 하나의 작업을 수행하라
의도(intent)에서 로컬 결과물까지 하나의 코딩 작업을 추적하세요. 여러분은 자신의 기계에 파일 형태로 작업을 작성합니다. 작업이 지정하는 파일만 패키징합니다.
그 패키지는 네트워크를 가로질러 무료 모델로 전달됩니다. 모델은 병합된 커밋(merged commit)이 아니라 제안을 반환합니다. 어떤 것이 적용되기도 전에 호스트에서 그 제안을 읽습니다.
나중에 빌드가 무료 서버에서 실행될 수 있습니다. 빌드 로그는 권위가 아닌 증거로 돌아옵니다. 여러분은 호스트에서 그 증거가 충분한지 결정합니다.
흐름을 세 개의 바통이 이어지는 계주로 생각해보세요. 첫 번째 바통은 의도(intent)이며, 절대 집을 떠나지 않습니다. 두 번째 바통은 패키지(pack)이며, 유일한 원격 복사본입니다.
세 번째 바통은 버려도 되는 제안서(proposal)입니다. 무료 서버에서 빌드하는 것은 새로운 소유자가 아니라 네 번째 주자일 뿐입니다. 소유권은 git 디렉토리를 보유한 장치에 머뭅니다.
무료 서버에 절대 속해서는 안 되는 것을 주목하세요. 당신의 자격 증명(credentials), 전체 히스토리, 그리고 개인 노트는 집에 있어야 합니다. 서버는 당신이 이미 공유하기로 결정한 빌드 입력만을 봅니다.
모델 호출에 절대 포함되어서는 안 되는 것도 주목하세요. 전체 트리를 덤프하는 것은 컨텍스트 패키지(context pack)가 아닙니다. 패키지는 각 경로마다 이유가 명시된 이름 있는 목록입니다.
실패 도메인을 병합하지 마세요
모델에서 발생하는 시간 초과(timeout)는 당신의 레포지토리(repo) 실패가 아닙니다. 선점된 무료 서버는 당신의 테스트 실패가 아닙니다. 잘못된 제안서는 당신의 git 히스토리 실패가 아닙니다.
이들은 세 개의 도메인이므로, 이를 병합해서는 안 됩니다. 만약 병합한다면, 한 곳에서 멈춘 것이 깨진 트리처럼 보입니다. 그러면 전체 작업을 다시 시도하고 컨텍스트를 다시 보내게 됩니다.
그 재시도는 더 많은 무료 용량을 소모하고 이그레스(egress)를 넓힙니다. 도메인을 분리하면 저렴한 부분만 다시 시도할 수 있습니다. 습관적으로 둘 다 하는 것이 아니라, 패키지를 다시 보내거나 빌드를 다시 실행하는 것입니다.
각 도메인에 다른 것이 덮어쓸 수 없는 로컬 상태를 부여하세요. 모델 상태는 제안서 해시 옆에 존재합니다. 서버 상태는 빌드 로그 해시 옆에 존재합니다.
레포지토리 상태는 git 안에 존재하며, 오직 당신만이 그것을 이동시킵니다. 원격 로그가 스스로 그 상태를 뒤집어서는 안 됩니다. 이 규칙이 검토의 핵심입니다.
호출 전에 게이트(gate)를 실행하세요
다음 변경 사항은 모든 무료 호출 전에 실행되는 게이트입니다. 이 게이트는 레포지토리 옆에 보관하는 작은 작업 파일(job file)을 읽습니다. 한 줄이 넘어가면 호출을 거부합니다.
이 스크립트는 복사하여 로컬에서 실행할 수 있는 예시입니다. 벤치마크도 아니고, 제품 기능도 아닙니다. 오직 당신이 손으로 작성한 매니페스트(manifest)만을 확인합니다.
#!/usr/bin/env python3
# Local architecture gate for a free-capacity coding job.
# Example only. It does not call a model or a server.
...
스크립트를 git에서 검토할 수 있는 매니페스트와 짝지으세요. 아래 샘플은 의도적으로 지루하고 작습니다. 원격 호출 전에 원하는 것은 바로 이런 '지루함'입니다.
{
"task_id": "job-184",
"repo_custody": "host",
...
게이트를 실행한 다음, 용량을 소모하기 전에 판결을 읽으세요. 통과(pass)가 모델이 옳다는 것을 의미하지 않습니다. 통과는 여러분의 '선'이 여전히 그려져 있다는 것을 의미합니다.
python3 review_free_path.py job.json
python3 review_free_path.py job-bad.json
깨끗한 매니페스트는 PASS와 태스크 ID를 출력해야 합니다. 잘못된 매니페스트는 BLOCK과 넘어진 선을 출력해야 합니다. 훈련이 반복 가능하도록 두 파일 모두 보관하세요.
샘플에 의도적으로 결함을 넣어 게이트가 신뢰할 수 있도록 하세요. apply_site를 서버로 지정하고 블록(block)되는 것을 예상하세요. 비밀(secret) 같은 경로를 추가하고 두 번째 블록을 예상하세요.
이 훈련 자체가 품질 시연이 아니라 아키텍처 검토입니다. 여러분은 모델이 아닌, 여러분의 '선'을 테스트하는 것입니다. 무료 서버는 게이트가 PASS를 출력할 때까지 유휴 상태로 유지됩니다.
다음으로 변경해야 할 사항들
게이트가 지루해지면, 도메인별로 상태를 분리하세요. 모델 상태(model state), 서버 상태(server state), 그리고 리포지토리 상태(repo state)를 세 개의 필드에 작성하세요. 하나의 필드가 다른 것들을 대신하게 두지 마세요.
다음으로, 명시적인 파일 목록으로 패키지를 제한하세요. 태스크가 네 번째 파일을 필요로 한다면, 여러분이 그 목록을 수정해야 합니다. 도구가 조용히 목록을 확장하도록 내버려 두지 마세요.
다음으로, 제안(proposal) 해시를 태스크 ID 옆에 저장하세요. 태스크를 삭제하지 않고도 제안만 버릴 수 있습니다. 무료 호출이 실패하더라도 태스크는 여러분의 것이 됩니다.
다음으로, 무료 서버 빌드를 선택적 증거로 취급하세요. 서버가 사라지더라도 로컬 테스트는 여전히 실행됩니다. 누락된 로그는 리포지토리 실패가 아니라 서버 도메인의 실패입니다.
모든 도메인을 한 번에 재시도하는 스케줄러를 추가하지 마세요. 결합된 재시도는 실제로 어떤 선이 깨졌는지 숨깁니다. 여러분은 자신의 도메인 이름을 명시하는 작은 재시도를 원합니다.
이 경로는 건드리지 않아야 할 사람들
리포지토리가 규제되는 데이터를 보유하고 있다면 이 경로를 건너뛰세요. 보낼 수 있는 모든 파일을 읽을 수 없다면 건너뛰세요. 실패한 빌드가 밤에 누군가에게 페이지(page)해야 한다면 건너뛰세요.
무료 서버는 온콜(on-call) 근무를 하기에 적합하지 않습니다. 검증된 할당량, 기간 또는 하드웨어 사양이 필요할 때는 건너뛰세요. 이러한 사실들은 직접 확인한 후에만 기록하세요.
본 리뷰가 무료 제공이 계속될 것이라는 것을 증명하는 것은 아닙니다. 또한 속도, 품질 또는 가동 시간(uptime)을 측정하지 않습니다. 단지 여러분의 경로가 그 선들을 존중하는지만 확인할 뿐입니다.
임시 저장소(throwaway repo)에서 무료 모델 경로를 시도해 볼 수 있습니다. 무료 서버 옵션을 건드리기 전에 게이트(gate)를 통과하세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기