구성 드리프트 미리 보기

CloudflareBeginner
지금 연습하기

소개

지원 팀의 미리 보기 API 가 실시간 구성을 반환하고 있으며, 유지 관리 드라이 런이 미리 보기 자격 증명을 거부하고 있습니다. 실시간 환경은 여전히 작동합니다. 실시간 동작을 변경하거나 유지 관리 인증을 약화하지 않고 미리 보기 경계를 복구해야 합니다.

이 독립형 과제는 새 VM 에 소형 Worker, 이름이 지정된 두 개의 로컬 환경, 테스트용 가상 자격 증명을 제공합니다. 안내 실습에서 배운 구성, 시크릿 로딩, 런타임 테스트 방법을 적용합니다. 아래 계약을 두 로컬 환경이 모두 충족한 다음 임시 서버와 시크릿 파일을 제거하면 성공입니다. 여기서 preview 와 live 는 로컬 테스트 환경을 나타내는 이름이며, 이 과제에는 Cloudflare 로그인이나 배포가 필요하지 않습니다.

미리 보기 격리 복구

현재 상황

준비된 프로젝트는 /home/labex/project/preview-drift입니다. Node 22.22.0, 프로젝트 로컬 Wrangler 4.131.1, 독립 테스트 런타임이 설치되어 있습니다. 개발 서버는 아직 실행 중이 아닙니다. 제공된 핸들러는 공개 상태 확인과 테스트용 유지 관리 드라이 런을 구현하며, 문제는 미리 보기 환경의 공개 구성과 자격 증명 로딩에 있습니다.

범위

wrangler.jsonc, src/index.js, .dev.vars.preview, .dev.vars.live, .gitignore를 확인합니다. 핸들러와 구성을 검사하여 바인딩 계약을 찾습니다. 두 dotenv 파일에는 서로 다른 무작위 테스트 전용 자격 증명이 들어 있습니다. 값을 표시하지 않고 키 이름만 확인할 수 있습니다. 자격 증명은 이 VM 안에서만 비공개로 유지하고 Git 에서 제외합니다.

preview Wrangler 환경은 루프백 포트 8080 에서, live는 8081 에서 실행합니다. 동시에 실행되는 런타임에는 서로 다른 inspector 포트를 지정합니다. 일반적인 프로젝트 로컬 Wrangler 개발 명령을 사용합니다. 이 과제는 원격 리소스를 생성하지 않습니다. QUEUE_LABEL은 표시 문자열이며 큐 서비스가 아닙니다.

목표

두 로컬 환경은 각각 의도한 공개 식별 정보를 반환하고, 해당 환경에 구성된 자체 자격 증명으로만 유지 관리 작업을 허용해야 합니다. 미리 보기 환경은 live 환경과 격리되어야 하며, 기존의 공개 상태 확인과 안전한 오류 처리 동작도 계속 사용할 수 있어야 합니다.

완료 기준

  • GET /healthstatusok인 JSON 을 반환합니다. Preview 는 환경을 preview, 큐를 sandbox로 식별하고, live 는 환경을 live, 큐를 primary로 식별합니다.
  • 각 환경은 핸들러의 MAINTENANCE_TOKEN 바인딩을 통해 자체 테스트용 자격 증명을 로드합니다. 두 자격 증명 값은 서로 달라야 하며 소스 코드와 공개 Wrangler 변수에 포함되지 않아야 합니다. 로컬 dotenv 파일은 VM 사용자만 읽을 수 있고 Git 에서 제외된 상태로 유지합니다.
  • POST /maintenance는 해당 환경에 유효한 bearer 자격 증명을 사용할 때만 operation: dry-run과 환경 이름을 포함한 200 응답을 반환합니다. 자격 증명이 없거나 유효하지 않거나 다른 환경의 자격 증명인 경우 error: unauthorized를 포함한 401 응답을 반환합니다.
  • 구성된 시크릿이 없으면 error: maintenance_unconfigured를 포함한 503 응답으로 안전하게 실패합니다. GET /maintenance는 계속 error: method_not_allowed를 포함한 405 응답을 반환하고, 알 수 없는 경로는 계속 error: not_found를 포함한 404 응답을 반환합니다.
  • 응답과 애플리케이션 로그에 자격 증명 값이 포함되지 않습니다. 이 단계의 두 가지 확인을 수행하는 동안 두 로컬 서버가 계속 실행되어 있어야 합니다. Cloudflare 인증, 배포, 보고서 또는 복사한 성공 마커는 필요하지 않습니다.

힌트

각 공개 값의 출처 비교

핸들러가 환경 값을 조회하는 부분을 읽은 다음, wrangler.jsonc 의 이름이 지정된 환경 객체와 비교합니다. Wrangler 환경 변수는 자동으로 상속되지 않습니다. 런타임이 선택한 환경과 해당 환경 안에 들어 있는 값은 서로 별개의 항목입니다.

maintenance-unconfigured 응답 조사

구성된 바인딩이 없는 경우와 들어온 자격 증명이 거부된 경우를 구분합니다. 핸들러의 바인딩 이름을 환경별 dotenv 파일의 키 이름과 비교합니다. 로컬 파일이 존재한다고 해서 핸들러가 읽는 바인딩이 정의되어 있다는 뜻은 아닙니다. 구성을 변경한 후 런타임이 준비되었는지 다시 확인합니다.

live 동작과 보안 경계 유지

두 방향으로 상태 확인과 유지 관리를 테스트합니다. 한 환경에서 유효한 토큰은 다른 환경에서는 유효하지 않아야 합니다. 제공된 유지 관리 작업은 드라이 런이므로 올바르게 인증된 요청을 테스트해도 애플리케이션 데이터가 변경되지 않습니다.

깨끗한 작업 공간 남기기

현재 상황

복구된 로컬 환경이 기능 검사를 통과했습니다. 개발 프로세스와 테스트용 자격 증명 파일은 아직 이 VM 에 남아 있습니다.

범위

이 과제의 8080 및 8081 포트 개발 작업, .dev.vars.preview.dev.vars.live 파일, 해당 값을 보관하는 셸 변수만 임시 항목입니다. 복구한 소스, 구성, 종속성, LabEx 서비스는 유지합니다.

목표

복구된 프로젝트는 계속 사용할 수 있어야 하며, 실행 중인 과제 서버나 로컬 시크릿 파일이 남아 있지 않아야 합니다.

완료 기준

  • 8080 과 8081 포트 어느 쪽에도 수신 대기 중인 개발 서버가 없어야 합니다.
  • 과제 프로젝트에 .dev.vars* 또는 .env* 시크릿 파일이 남아 있지 않아야 합니다.
  • 테스트용 자격 증명에 사용한 셸 변수를 삭제합니다. 이는 학습자가 수행하는 정리 작업이며, 백엔드는 대화형 셸의 상태를 검사할 수 없습니다.
  • 관련 없는 프로세스와 파일은 유지합니다. 이 로컬 전용 과제에는 제거할 클라우드 리소스나 Cloudflare 자격 증명이 없습니다.

힌트

시작한 작업을 대상으로 지정

셸의 작업 목록을 사용하여 두 Wrangler 개발 프로세스를 확인합니다. 서버를 다시 시작하면 작업 번호가 달라질 수 있습니다. 기능 검증을 먼저 수행한 후 정리해야 합니다. 시크릿을 먼저 제거하면 앞선 검증 결과를 확정할 수 없습니다.

요약

이름이 지정된 환경 값에서 Preview 식별 정보 불일치의 원인을 추적하고, 자격 증명 바인딩 이름에서 유지 관리 실패의 원인을 찾았습니다. 복구를 통해 live 동작, 공개 상태 확인, 서버 측 인증을 유지하면서 Preview 격리를 되돌렸습니다.

자격 증명이 없는 경우, 잘못된 경우, 다른 환경의 경우, 유효한 경우를 모두 테스트하여 단일 성공 응답보다 경계를 더 철저하게 검증했습니다. 마지막 정리에서는 복구한 프로젝트를 보존하면서 로컬 프로세스와 테스트용 시크릿을 제거했습니다.

✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습