프로토타입을 VPN 뒤에 두면 사적인 것처럼 느껴지므로, 남은 유일한 질문은 누가 프로필을 받는지인 것처럼 보입니다. 그 가정은 특정한 방식으로 무너집니다: 터널이 제어하는 것은 누가 호스트에 도달할 수 있는지이며, 도달한 뒤 호스트가 무엇을 노출하는지가 아닙니다. 미리보기는 여전히 런타임을 실행하고, 데이터를 보유하며, 실제 이메일을 보내거나 실제 데이터베이스에 쓸 수 있는 통합을 호출합니다. VPN을 정문으로 보고 그 뒤의 방을 설계하세요.

경로는 대상이 아닙니다

테스터를 VPN에 등록하는 것은 정확히 한 가지 질문에 답합니다: 이 기기가 그 주소에 도달할 수 있는가. 그 기기가 어떤 페이지, API, 콘솔을 쓸 수 있는지에 대해서는 아무것도 말하지 않습니다. 그것들은 별개의 권한이며, 주소만 아는 게이트웨이는 이를 강제할 수 없습니다.

미리보기 계약을 짧은 목록으로 쓰세요: 호스트 이름, 리스너, 허용된 작업, 각 역할을 누가 맡는지입니다. 그다음 목록이 실제로 노출된 것과 일치하는지 확인하세요.

프로토타입을 열 수 있는 테스터에게 배포 콘솔, 데이터베이스 관리 페이지, 개발자의 홈 디렉터리는 필요하지 않습니다. 게이트웨이가 서브넷 경로를 주면 그 모두가 기본으로 도달 가능합니다. 대상별 경로를 선호하거나, 추가 서비스를 자체 인증 뒤에 두세요. 어느 선택이든 탈취된 프로필이 할 수 있는 일을 좁힙니다.

공유하는 런타임은 계약의 일부입니다

디버거와 자동 새로고침이 있는 개발 서버는 한 대의 기기에서 한 사람을 위한 도구입니다. 프레임워크 문서는 이 점에서 분명합니다: Flask의 배포 안내서는 개발 서버와 디버거가 프로덕션용이 아니라고 말하며, 사설 또는 단일 사용자 서비스도 프로덕션으로 간주합니다. 같은 논리가 리로더와 대화형 오류 페이지가 있는 모든 프레임워크에 적용됩니다. 편의 기능은 파일을 저장하고 변경을 보는 사이의 고리를 줄이도록 설계되었으며, 통제할 수 없는 테스터를 마주하기 위한 것이 아닙니다.

대화형 트레이스백은 정보 유출이며 일부 디버거에서는 코드 실행 표면입니다. 미리보기에서 빼거나, 활성화할 수 없는 빌드로 미리보기를 제한하세요. 테스터에게 진단이 필요하면 콘솔 대신 로그를 주세요.

와일드카드 리스너는 이 실수의 나머지 절반입니다. 모든 인터페이스에 바인딩하면 의도하지 않은 네트워크, 카페의 Wi-Fi에서도 서비스가 노출됩니다.

일회용 계정과 실제 부작용이 없는 데이터를 쓰세요

테스트용으로 만든 계정과 누구도 곤란하게 만들 수 없는 데이터를 쓰세요. 위험한 부분은 좀처럼 데이터베이스 행이 아니라 버튼 뒤의 통합입니다. 이메일, 결제, SMS, 웹훅, 파일 내보내기는 모두 미리보기 밖으로 나갑니다.

프로토타입이 일으킬 수 있는 모든 외부 효과를 나열한 뒤, 각각을 샌드박스로 보내거나 비활성화하세요. 사설 경로가 살아 있는 결제 엔드포인트를 무해하게 만들지는 않습니다.

프로덕션 자격 증명은 다른 모양의 같은 문제입니다. 설정 시간을 아끼려고 프로덕션 API 키를 물려받는 미리보기는 디버그 UI가 있는 프로덕션 시스템입니다. 가장 작은 유용한 권한으로 범위가 제한된 자격 증명을 만드세요. 살아 있는 키를 가진 폐기된 미리보기는 여전히 살아 있으므로 미리보기가 끝나면 교체하세요.

페이지, 자산, 소켓을 확인하세요

렌더링되는 페이지는 작동하는 미리보기가 아닙니다. 자산 호스트, API, WebSocket이 아직 테스터가 도달할 수 없는 URL을 가리키는 동안 HTML은 로드될 수 있습니다. 그 각각은 계약의 별도 항목입니다.

승인된 기기에서 페이지와 가장 큰 자산을 따로 요청하세요:

curl -sS -o /dev/null -w "%{http_code}" https://preview.staging.example/
curl -sS -o /dev/null -w "%{http_code}" https://preview.staging.example/assets/app.js

그다음 실제 상호작용 중에 브라우저 콘솔을 관찰하고 라이브 새로고침 소켓이 연결되는지 확인하세요. 연결되지 않으면 해결책은 그 엔드포인트를 위한 의도적인 경로이지, 페이지가 완전해 보일 때까지 넓어지는 규칙이 아닙니다.

미리보기는 기억이 아니라 날짜로 종료하세요

미리보기를 만드는 순간 소유자와 종료일을 정하세요. 그 날짜가 오면 항목, 테스터 신원, 임시 자격 증명을 그것을 소유한 구성에서 제거하세요. 잊힌 미리보기가 사설 프로토타입을 영구 공개물로 만드는 길입니다.

호스트 이름이 더는 해석되지 않거나 승인되지 않은 클라이언트에 응답하지 않아야 하므로, 종료는 외부에서 확인하세요.

소스와 복구 노트는 남기되 대체 경로는 남기지 마세요. 좋은 미리보기 경계의 시험은 지루합니다: 승인된 기기는 필요한 작업을 할 수 있고, 승인되지 않은 신원은 할 수 없습니다. 터널을 끈 뒤에도 같아야 합니다. 그 결과는 모든 개발 기능을 켠 채 도는 프로토타입 옆의 VPN 아이콘보다 값집니다.

관련 글