22주차 미리보기
W22 미리보기 · 웹소설 본편

STARRY PASS 18 — 구름 출입증과 세 개의 복구 숫자

초록 불 하나보다 주소·해시·정리 기록이 더 많은 말을 했다

범위개요 + D1–D6 · 월–토p720 W22 제목–p744 — W22 개요 + D1–D6
정본 상태SOURCE AUDIT PASSPDF·package·display byte 폐쇄
실행 상태W22 D1–D6 RUNTIME NOT_RUNruntimeRunsByPreview=0

이 이야기는 p720 W22 제목–p744 — W22 개요 + D1–D6만 다룹니다. strict D1–D6 초회 예상시간은 8시간 5분–15시간 20분입니다. 공통 코어 · 트랙 선택 시 증권 기본이지만 W22는 트랙 분기 없는 공통 코어입니다. 현재 W22 D1–D6 RUNTIME NOT_RUN·runtimeRunsByPreview=0이며 source audit PASS는 GitHub·AWS·Docker·PostgreSQL을 실행했다는 뜻이 아닙니다. modern aggregate는 10/307/292/0/292/292/35/0이고 Q35·Q36은 비정본 예시입니다.

월요일, STARRY는 새 공연을 구름 위 지점에 올리려 했다. 하지만 니지카는 초록색 스티커 대신 주소가 적힌 영수증을 요구했다. 깨끗한 runner가 같은 JDK21과 Wrapper로 clean test를 했는지, 실패한 공연에서도 report artifact가 남았는지, 공식 run URL과 commit SHA가 같은 source를 가리키는지 확인해야 했다. 로컬 파일의 64자리 hash는 외부 무대에 다녀왔다는 증명이 아니었다.

니지카가 화면을 확인하는 공식 장면컷 — 학습 서사는 비공식 구성
공식 장면컷은 분위기용이며, STARRY의 학습 사건·대사·기술 수치는 원문 감사에 따른 비공식 구성입니다.
외부 초록 불은 공식 좌표를 가져야 한다 — D1 · clean runner와 실패 artifact, official URL·commit binding
그림 한눈에: clean test와 failure artifact를 official run URL·commit·hash에 묶고 로컬 Green은 닫습니다.

료는 ci-run.md에 FUTURE_TRIGGER와 NOT_RUN_EXTERNAL을 그대로 남겼다. “빈칸을 초록색으로 칠하는 것보다, 아직 실행하지 않았다고 쓰는 편이 더 정확해.” required check가 merge를 막는지, tests가 0이 아닌지, 고의 실패에도 report가 남는지는 승인된 repository의 실제 run에서 사람이 대조해야 했다.

화요일에는 구름 지점의 동선을 그렸다. 손님은 public ALB의 443 문으로만 들어오고, app 8080과 RDS 5432는 private 구역에 있었다. app 문은 ALB security group만, DB 문은 app security group만 열 수 있었다. 관리자는 SSH 22 창문을 뚫지 않고 SSM Session Manager로 들어갔다.

인터넷 입구는 443 한 곳만 연다 — D2 · public ALB 뒤 private app·RDS와 SG-to-SG 경계
그림 한눈에: public 443 entry 뒤에 private app·RDS를 두고 SG-to-SG source로 문을 제한합니다.
카운터에 멤버들이 모인 공식 장면컷 — 학습 서사는 비공식 구성
공식 장면컷은 분위기용이며, STARRY의 학습 사건·대사·기술 수치는 원문 감사에 따른 비공식 구성입니다.

수요일, 히토리는 GitHub 금고에 오래 쓰는 AWS 열쇠를 넣으려 했다. 키타가 손을 막고 짧은 출입증 절차를 펼쳤다. workflow는 id-token write와 contents read만 요청하고, 정확한 repo와 branch/environment를 신뢰 조건에 묶어 deploy role을 assume했다. 첫 확인은 배포가 아니라 sts caller identity였다.

장기 열쇠 대신 짧은 출입증을 받는다 — D3 · GitHub OIDC trust와 최소 IAM session
그림 한눈에: GitHub identity token을 제한된 trust에 제시해 짧은 AWS session만 발급받습니다.

대기 중에는 Q35를 풀었다. 21개 거래를 business_date별 9행으로 먼저 모은 뒤 최근 7개 행이 아니라 달력 7일을 보도록 RANGE 6 days frame을 썼다. 긴 공백 뒤 12월 28일 moving 값은 303으로 다시 시작했고, 마지막 1월 2일은 daily 4,200과 moving 1,205,002였다. 누락일을 만들어 냈다고 주장하지 않았다.

Q35 · 행 수가 아니라 달력 7일을 본다 — 비정본 예시 · 일별 선집계 뒤 RANGE 6 days preceding
그림 한눈에: 일별 grain을 만든 뒤 calendar RANGE를 적용해 날짜 gap에서 ROWS와 다른 결과를 냅니다.

목요일, 새 image 상자에 latest라는 종이가 붙어 있었다. 료는 종이를 떼고 40자 commit SHA와 registry/repository@sha256 digest를 적었다. 이어 learner DB의 flyway_schema_history에서 실제 version·script·checksum 목록을 꺼내 inventory hash로 묶었다. V001과 V019는 참고 예상값일 뿐 실제 history보다 앞설 수 없었다.

배포 영수증은 움직이지 않는 값으로 묶는다 — D4 · commit·image digest·actual migration inventory
그림 한눈에: source commit·immutable image digest·actual migration inventory를 한 manifest에 연결합니다.

금요일, RDS 문이 열리지 않자 네 사람은 password부터 바꾸지 않았다. caller identity와 permission, route·SG·DNS와 pg_isready, secret ARN, Flyway inventory, readiness 순서로 문을 하나씩 확인했다. decrypted Value는 log나 evidence에 남기지 않았고 migration이 끝나기 전에는 traffic을 열지 않았다.

연결 실패를 다섯 문으로 나눈다 — D5 · identity/permission→network→secret→migration→readiness
그림 한눈에: identity부터 readiness까지 다섯 경계를 순서대로 좁혀 timeout과 auth·schema 실패를 분리합니다.

Q36 영수증은 비어 있었다. ledger_entry에서 시작해 NOT EXISTS를 썼지만 정상 fixture의 tx_id는 NOT NULL immediate FK라 고아 원장은 0행이었다. 히토리는 0행을 실패로 지우지 않고, 반례가 필요하면 production FK를 없애지 말고 격리된 broken-import 복사본에서만 만들겠다고 적었다.

Q36 · 고아가 없는 이유까지 답한다 — 비정본 예시 · ledger_entry grain의 NOT EXISTS anti-join
그림 한눈에: ledger grain에서 anti-join하되 정상 FK가 oracle 0행을 만드는 이유까지 설명합니다.
멤버들이 함께 의논하는 공식 장면컷 — 학습 서사는 비공식 구성
공식 장면컷은 분위기용이며, STARRY의 학습 사건·대사·기술 수치는 원문 감사에 따른 비공식 구성입니다.

토요일에는 비로소 로컬 복구 리허설을 했다. allowlist source financial_core_restore_source의 세 행 100, -40, 60을 custom dump로 만들고 별도 target financial_core_restore에 복구했다. Compose mode는 unique project를 시작 전부터 소유해 부분 실패도 finally cleanup으로 보냈고, caller가 준 Container mode 자원은 삭제하지 않았다.

소유한 자원만 마지막에 치운다 — D6 · Compose mode와 caller-owned Container mode
그림 한눈에: runner가 소유한 Compose project만 down -v로 정리하고 caller-owned container는 보존합니다.

W22 runner는 W42 도구의 PASS 한 줄만 믿지 않았다. transcript의 3·120·0과 source/target dropped를 확인하고 inner JSON의 같은 수치, dump_bytes, timestamp를 다시 읽었다. cleanup이 끝난 뒤에만 temporary JSON을 canonical restore-result.json으로 옮겼다.

복구 가능성은 세 숫자와 정리로 증명한다 — D6 · transcript와 inner JSON을 함께 검증
그림 한눈에: row_count 3·ledger_sum 120·mismatch 0과 cleanup·native exit를 한 복구 영수증에 묶습니다.

마지막 표에는 외부와 로컬 두 문지기가 그려졌다. D1–D5의 generic validator는 모양과 hash만 지킬 뿐 GitHub·AWS 의미를 닫지 못했다. D6만 packaged local owner를 가졌지만 이 미리보기는 그것도 실행하지 않았다. p745부터의 비용 budget·teardown과 predecessor index는 D7의 일이라 다음 장에 남겨 두었다.

외부 증거와 로컬 증거의 문지기가 다르다 — D1 external marker · D2–D5 manual boundary · D6 local owner
그림 한눈에: 외부 manual evidence와 D6 local automated owner, 제외된 D7 ownership을 분리합니다.

히토리는 마지막에 W22 D1–D6 RUNTIME NOT_RUN이라고 썼다. measured rto_seconds는 고정 세 행의 로컬 시간일 뿐 production RPO/RTO가 아니었다. 초록 불의 색보다 누가 실행했고, 어떤 주소와 hash에 묶였고, 무엇을 끝까지 치웠는지가 더 많은 말을 했다.

W22 미리보기 · 히토리 질문 노트

히토리의 질문 노트 — STARRY PASS 18

본편의 구름 지점·출입증·복구 영수증 비유를 W22 clean CI·private AWS boundary·OIDC·immutable digest·RDS 진단·disposable restore의 정확한 owner와 증거 경계로 다시 연결합니다. 모든 답은 p720 W22 제목–p744 — W22 개요 + D1–D6에 한정합니다. 현재 W22 D1–D6 RUNTIME NOT_RUN·runtimeRunsByPreview=0이며 외부 marker와 로컬 restore oracle을 실행한 Green으로 바꾸어 읽지 않습니다.

1. 이번 미리보기의 strict PDF 범위는 어디인가요?

답: p720 중간의 W22 제목부터 p744 D6 최종 Mastery Gate까지입니다.

근거: 정확한 표기는 p720 W22 제목–p744 — W22 개요 + D1–D6입니다. p720 제목 위 W21 꼬리는 제외하고 p745 D7, p749–750 주간 통합, p751 W23도 포함하지 않습니다.

오답 함정: p720–750 전체를 W22라는 이유만으로 strict D1–D6 미리보기에 넣으면 안 됩니다.

범위 한계: 혼합 시작 페이지이므로 물리 페이지 번호와 W22 heading이라는 의미 경계를 함께 확인합니다.

실제 기술 이름mixed-page semantic PDF boundary for W22 overview and D1-D6

2. D1–D6 예상시간 합계와 기본 트랙 표지는 무엇인가요?

답: 합계는 8시간 5분–15시간 20분, 즉 485–920분이며 공통 코어 · 트랙 선택 시 증권 기본입니다.

근거: D1 55–105분, D2 65–125분, D3 100–190분, D4 65–130분, D5 90–170분, D6 110–200분을 더합니다.

오답 함정: W22 전체 9시간 5분–17시간 20분은 D7까지 포함하므로 strict 합계가 아닙니다.

범위 한계: 원문에는 트랙 분기가 없습니다. 증권은 UI 기본값일 뿐 내용을 증권 전용으로 바꾸지 않습니다.

실제 기술 이름bounded D1-D6 active-time total with source-neutral default-track metadata

3. SOURCE AUDIT PASS는 CI·AWS·restore 실행 Green인가요?

답: 아닙니다. 현재 상태는 W22 D1–D6 RUNTIME NOT_RUN이고 runtimeRunsByPreview=0입니다.

근거: audit PASS는 PDF·package·display byte 폐쇄와 fixture oracle을 뜻합니다. D1=FUTURE_TRIGGER/NOT_RUN_EXTERNAL, D2–D5=preview 미실행·MANUAL_REVIEW_REQUIRED이며 D6 restore도 이 미리보기가 실행하지 않았습니다.

오답 함정: HTML에 Green marker가 보인다는 이유로 공식 GitHub run이나 AWS role, Docker restore를 통과했다고 말하면 안 됩니다.

범위 한계: 실제 상태 변경에는 learner 환경의 실행·공식 URL·hash·cleanup과 각 owner의 검토가 필요합니다.

실제 기술 이름static source closure versus external and local runtime execution evidence

4. D1 외부 CI 계약의 최소 묶음은 무엇인가요?

답: clean runner의 JDK21·검증된 Wrapper·clean test와 실패 때도 남는 report artifact입니다.

근거: 공식 run URL과 대상 commit SHA, tests>0 summary, artifact URL/hash를 ci-run.md에서 서로 묶어야 합니다.

오답 함정: 로컬 test나 문자열 validator, 성공 화면 캡처 하나를 외부 CI Green으로 쓰면 안 됩니다.

범위 한계: D1 card의 local_green_owner는 none이며 실행 상태는 FUTURE_TRIGGER/NOT_RUN_EXTERNAL입니다.

실제 기술 이름GitHub Actions clean-runner required-check and artifact-on-failure contract

외부 초록 불은 공식 좌표를 가져야 한다 — D1 · clean runner와 실패 artifact, official URL·commit binding
그림 한눈에: D1 · clean runner와 실패 artifact, official URL·commit binding.

5. ci-run.md shape/hash validator가 확인하지 못하는 것은 무엇인가요?

답: 공식 run의 의미, commit 일치, test 결과와 artifact가 실제 외부 서비스에서 나온 사실입니다.

근거: validator는 파일 존재·40 byte·3개 비공백 줄·placeholder·SHA-256만 검사하고 MANUAL_REVIEW_REQUIRED를 반환합니다.

오답 함정: process exit 0이나 64-hex hash를 semantic Green으로 올리면 안 됩니다.

범위 한계: 승인된 repository의 공식 URL과 사람이 보는 required-check 상태가 별도로 필요합니다.

실제 기술 이름structural artifact integrity guard versus semantic external verification

6. D2 안전한 network path는 어떻게 이어지나요?

답: Internet→public ALB 443→private app 8080→private RDS 5432 순서입니다.

근거: app inbound source는 ALB SG, RDS inbound source는 app SG로 제한하고 RDS public accessibility는 false입니다.

오답 함정: EC2 8080이나 DB 5432를 0.0.0.0/0에 열어 화면이 보인다는 것을 배포 proof로 삼으면 안 됩니다.

범위 한계: 이것은 최소 학습 경계이며 production HA·WAF·DR 전체 구현을 뜻하지 않습니다.

실제 기술 이름public TLS entry with private app-RDS SG-to-SG segmentation

인터넷 입구는 443 한 곳만 연다 — D2 · public ALB 뒤 private app·RDS와 SG-to-SG 경계
그림 한눈에: D2 · public ALB 뒤 private app·RDS와 SG-to-SG 경계.

7. 관리 접속과 secret 경계는 어떻게 표현하나요?

답: inbound SSH 22 대신 SSM Session Manager를 쓰고 secret은 SSM Parameter Store 또는 Secrets Manager에서 가져옵니다.

근거: architecture template은 public inbound를 ALB443 하나로 두고 admin과 secret 경로를 별도 선으로 표시합니다.

오답 함정: 내 IP 하나에 SSH나 RDS를 열었다고 private architecture라고 부르면 안 됩니다.

범위 한계: diagram과 pdf file/hash는 사람이 network rule 의미를 검토하기 전 MANUAL_REVIEW_REQUIRED입니다.

실제 기술 이름SSM-based administration and managed-secret boundary without inbound SSH

8. D3 OIDC workflow의 네 핵심은 무엇인가요?

답: id-token write, contents read, configure-aws-credentials@v4, sts get-caller-identity입니다.

근거: workflow는 ap-northeast-2에서 deploy role을 assume하고 첫 probe로 caller identity를 확인합니다.

오답 함정: AWS_ACCESS_KEY_ID 같은 장기 key를 GitHub secret에 넣는 방식으로 OIDC를 흉내 내면 안 됩니다.

범위 한계: 표시된 YAML은 TEMPLATE이며 실제 GitHub environment 실행 전에는 외부 Green이 아닙니다.

실제 기술 이름GitHub OIDC federation with short-lived AWS session credentials

장기 열쇠 대신 짧은 출입증을 받는다 — D3 · GitHub OIDC trust와 최소 IAM session
그림 한눈에: D3 · GitHub OIDC trust와 최소 IAM session.

9. OIDC trust policy는 무엇에 묶어야 하나요?

답: 정확한 repository와 branch 또는 environment, audience와 subject condition에 묶어야 합니다.

근거: 모든 repository를 허용하는 trust나 AdministratorAccess 대신 실제 deploy API action과 resource를 좁힙니다.

오답 함정: role assume 성공 하나로 최소권한까지 증명됐다고 말하면 안 됩니다.

범위 한계: trust condition과 deploy policy는 서로 다른 경계라 둘 다 검토해야 합니다.

실제 기술 이름OIDC audience-subject trust restriction and least-privilege deploy policy

10. OIDC proof에서 절대로 남기지 말아야 할 것은 무엇인가요?

답: 장기 AWS access key와 session secret 원문입니다.

근거: 증거에는 role/session identity와 공식 run 좌표를 남기되 credential Value는 저장하지 않습니다.

오답 함정: secret을 가린 화면이 있다는 이유로 workflow·trust·commit binding을 생략하면 안 됩니다.

범위 한계: OIDC가 secret 0을 뜻하는 것은 아니며 다른 application secret은 managed boundary가 필요합니다.

실제 기술 이름credential non-disclosure with identity-only deployment evidence

11. D4에서 latest tag 대신 무엇을 기록하나요?

답: 40자 git commit SHA와 registry가 반환한 immutable repository@sha256 digest입니다.

근거: deployment manifest는 source commit, image digest, Java21, actual migration inventory path/hash를 한 영수증으로 연결합니다.

오답 함정: latest나 0으로 채운 digest, example repository 주소를 실제 배포 증거로 쓰면 안 됩니다.

범위 한계: 파일/hash validator는 값의 의미를 판단하지 못하므로 verificationStatus는 사람 대조 전 MANUAL_REVIEW_REQUIRED입니다.

실제 기술 이름immutable container digest and source-to-deployment provenance binding

배포 영수증은 움직이지 않는 값으로 묶는다 — D4 · commit·image digest·actual migration inventory
그림 한눈에: D4 · commit·image digest·actual migration inventory.

12. migration inventory는 왜 실제 DB에서 읽어야 하나요?

답: 적용된 version·script·checksum 목록이 환경의 실제 schema 상태이기 때문입니다.

근거: V001과 V019는 packaged reference의 예상 예시일 뿐이며 learner DB의 flyway_schema_history 결과와 inventory SHA-256이 최종값입니다.

오답 함정: 오래된 V5나 예시 V001/V019를 복사해 actual history라고 부르면 안 됩니다.

범위 한계: generic manifest existence 검사는 checksum 의미나 누락 migration을 증명하지 않습니다.

실제 기술 이름actual Flyway schema-history inventory with version-script-checksum hash

13. D5 RDS 진단은 어떤 순서로 좁히나요?

답: identity/permission→network/pg_isready→secret ARN→migration→readiness 순서입니다.

근거: timeout과 auth failure를 구분하고 Flyway 적용 뒤 schema version·health·간단 query를 확인합니다.

오답 함정: 연결 실패를 무조건 password 문제로 보거나 migration 전 traffic을 열면 안 됩니다.

범위 한계: runbook 파일/hash만으로 실제 RDS connectivity Green이 되지는 않습니다.

실제 기술 이름layered RDS identity-permission-network-secret-migration-readiness diagnosis

연결 실패를 다섯 문으로 나눈다 — D5 · identity/permission→network→secret→migration→readiness
그림 한눈에: D5 · identity/permission→network→secret→migration→readiness.

14. secret을 검증할 때 evidence에 남길 값은 무엇인가요?

답: 허용된 parameter/secret의 ARN과 access 결과 경계이며 decrypted Value는 남기지 않습니다.

근거: app role에는 필요한 parameter read만 주고 endpoint·DB name·username은 config, password는 managed secret으로 분리합니다.

오답 함정: debug를 위해 CLI 출력·log·runbook에 비밀번호 원문을 넣으면 안 됩니다.

범위 한계: secret rotation과 revoke는 별도 운영 절차이며 이 preview가 수행하지 않습니다.

실제 기술 이름managed-secret reference verification without decrypted-value disclosure

15. migration과 readiness의 순서는 왜 중요한가요?

답: schema 적용과 검증이 끝난 뒤에만 application traffic을 받아야 하기 때문입니다.

근거: D5 순서는 Flyway info, migration, schema version, health, query로 이어지며 실패 시 readiness를 열지 않습니다.

오답 함정: port나 process가 살아 있다는 이유로 migration 실패 상태에서 traffic을 열면 안 됩니다.

범위 한계: 이 순서가 application rollback과 DB rollback을 같은 작업으로 만들지는 않습니다.

실제 기술 이름migration-before-readiness deployment safety sequencing

16. D6 restore의 source와 target은 무엇인가요?

답: source는 financial_core_restore_source, allowlist target은 financial_core_restore입니다.

근거: source의 restore_probe 3행 100,-40,60을 custom dump로 만들고 별도 target에 복구합니다.

오답 함정: production DB나 allowlist 밖 이름을 target으로 허용하면 안 됩니다.

범위 한계: fixture_schema는 restore_probe_v1이며 실제 업무 전체 DB 복구 증명이 아닙니다.

실제 기술 이름allowlisted disposable source-target logical restore drill

17. Compose mode와 Container mode의 ownership 차이는 무엇인가요?

답: Compose는 고유 project를 소유해 마지막에 지우고, Container는 caller-owned container를 삭제하지 않습니다.

근거: Compose는 up 이전 owned flag를 세워 부분 실패도 finally의 down -v --remove-orphans로 들어갑니다. Container mode는 ContainerName이 필수입니다.

오답 함정: 전달받은 container를 runner가 임의로 삭제하거나 Compose up 실패 자원을 방치하면 안 됩니다.

범위 한계: Container mode의 compose_cleanup은 not-owned이며 이것이 cleanup 실패를 뜻하지 않습니다.

실제 기술 이름resource ownership-aware Compose and caller-container cleanup semantics

소유한 자원만 마지막에 치운다 — D6 · Compose mode와 caller-owned Container mode
그림 한눈에: D6 · Compose mode와 caller-owned Container mode.

18. W22 restore runner의 transitive dependency는 무엇인가요?

답: packaged scripts/run-w42-restore-drill.ps1과 compose.yaml, Docker/PostgreSQL입니다.

근거: W22 owner는 W42 transcript와 inner JSON을 다시 읽어 W22 canonical result를 만듭니다.

오답 함정: W22 wrapper 파일 하나만 복사해 독립 실행 가능하다고 말하면 안 됩니다.

범위 한계: tool/source hash와 dependency 존재를 포함해야 재현 가능한 packaged contract입니다.

실제 기술 이름transitive packaged restore-tool dependency and wrapper ownership

19. 왜 transcript와 inner JSON을 둘 다 검증하나요?

답: 표시된 PASS 문자열과 구조화된 실제 수치·시간·dump 정보를 서로 대조하기 위해서입니다.

근거: transcript는 3·120·0과 source/target dropped를 요구하고 inner JSON은 같은 수치, dump_bytes>0, 정상 timestamp를 확인합니다.

오답 함정: 마지막 stdout marker 하나만 grep해 canonical result를 쓰면 안 됩니다.

범위 한계: 두 검증이 통과해도 owned cleanup 성공 전에는 result를 publish하지 않습니다.

실제 기술 이름dual transcript-JSON oracle verification before canonical publication

20. D6 exact Green oracle은 무엇인가요?

답: row_count=3, ledger_sum=120, mismatch=0, cleanup=1, native_exit=0입니다.

근거: 추가로 dump_bytes>0, source_dropped=1, target_dropped=1, 정상 started/completed timestamp와 inner result hash가 필요합니다.

오답 함정: 3행이 있다는 것만 보고 합계·대사·정리·native exit를 생략하면 안 됩니다.

범위 한계: 이 값은 learner가 실제 runner를 실행했을 때만 Green이며 preview의 현재 runtime은 NOT_RUN입니다.

실제 기술 이름exact disposable restore invariant and cleanup oracle

복구 가능성은 세 숫자와 정리로 증명한다 — D6 · transcript와 inner JSON을 함께 검증
그림 한눈에: D6 · transcript와 inner JSON을 함께 검증.

21. rto_seconds를 production RPO/RTO라고 말할 수 있나요?

답: 아닙니다. 고정 3행 disposable fixture의 measured restore time일 뿐입니다.

근거: 원문은 production RPO/RTO 보장으로 과장하지 않았는지를 D6 최종 Gate에서 직접 확인합니다.

오답 함정: 로컬 Docker의 몇 초 측정치를 금융 production 복구 목표로 홍보하면 안 됩니다.

범위 한계: 실서비스 RPO/RTO에는 데이터 규모·snapshot·network·승인·failover 등 별도 검증이 필요합니다.

실제 기술 이름measured disposable restore duration versus production recovery objectives

22. canonical restore-result.json은 언제 publish되나요?

답: oracle 검증과 owned Compose cleanup이 성공한 뒤 temporary 파일을 atomic move할 때입니다.

근거: 실패 객체가 있거나 compose cleanup이 false면 canonical body를 쓰지 않고 Red로 끝냅니다.

오답 함정: cleanup 전에 Green JSON을 먼저 남겨 실패 뒤 stale artifact가 살아 있게 하면 안 됩니다.

범위 한계: atomic move는 부분 파일 방지이며 값의 실행 의미는 upstream 검증이 담당합니다.

실제 기술 이름cleanup-before-atomic canonical evidence publication

23. Q35에서 ROWS 6 PRECEDING 대신 무엇을 쓰나요?

답: business_date별 선집계 뒤 RANGE BETWEEN INTERVAL '6 days' PRECEDING을 씁니다.

근거: 요구는 최근 7개 행이 아니라 calendar 7일이며 누락일을 자동으로 0행으로 만들지 않습니다.

오답 함정: 날짜 gap이 있어도 ROWS 6으로 과거 6개 date row를 모두 끌어오면 안 됩니다.

범위 한계: 이 query와 oracle은 audit-authored illustrative/noncanonical이며 prompt 자체에 status filter는 없습니다.

실제 기술 이름daily preaggregation with calendar RANGE window frame

Q35 · 행 수가 아니라 달력 7일을 본다 — 비정본 예시 · 일별 선집계 뒤 RANGE 6 days preceding
그림 한눈에: 비정본 예시 · 일별 선집계 뒤 RANGE 6 days preceding.

24. Q35 비정본 fixture oracle은 어떻게 읽나요?

답: 21거래를 9날짜 행으로 만들고 마지막 2027-01-02는 daily 4,200, moving 1,205,002입니다.

근거: 2026-06-30 daily 2,129,999, 2026-07-01 moving 2,132,199이며 긴 gap 뒤 2026-12-28 moving은 303으로 다시 시작합니다.

오답 함정: 누락일을 생성했다고 하거나 all statuses 가정을 source 정본 요구로 바꾸면 안 됩니다.

범위 한계: 답은 table grain·status 가정·tie와 gap 반례를 공개한 학습 예시입니다.

실제 기술 이름illustrative nine-date calendar-window fixture oracle

25. Q36은 어느 table grain에서 어떤 anti-join을 쓰나요?

답: ledger_entry 한 행에서 시작해 business_tx가 없는 행을 NOT EXISTS로 찾습니다.

근거: canonical fixture의 ledger_entry.tx_id는 NOT NULL immediate FK이므로 정상 oracle은 0행입니다.

오답 함정: 0행을 query 실패로 여기거나 business_tx에서 시작해 문제 grain을 뒤집으면 안 됩니다.

범위 한계: Q36도 illustrative/noncanonical이며 workbook은 정답 SQL을 제공하지 않습니다.

실제 기술 이름ledger-grain NOT EXISTS anti-join under immediate FK integrity

Q36 · 고아가 없는 이유까지 답한다 — 비정본 예시 · ledger_entry grain의 NOT EXISTS anti-join
그림 한눈에: 비정본 예시 · ledger_entry grain의 NOT EXISTS anti-join.

26. Q36 고아 반례는 어떻게 만들 수 있나요?

답: production FK를 제거하지 않고 격리된 FK-broken import clone 또는 snapshot에서만 만듭니다.

근거: 정상 fixture에서는 orphan insert 자체가 거절되므로 0행이 FK 보장의 관찰값입니다.

오답 함정: 연습 반례를 위해 production constraint를 drop하면 안 됩니다.

범위 한계: 반례 table은 원본과 분리하고 시작 grain·cardinality·제약 차이를 기록합니다.

실제 기술 이름isolated broken-import counterexample without weakening production FK

27. strict D1–D6과 코드 뒤풀이 전체 범위는 어떻게 다르나요?

답: 미리보기는 p720–744 D1–D6이고, 코드 문서의 F07·F08 비용 inventory/primary evidence는 D7 전용이라 제외합니다.

근거: D7은 p745에서 시작해 cost budget·teardown과 predecessor index를 소유합니다. W22 주간 통합은 p749부터입니다.

오답 함정: 코드 inventory에 보인다는 이유로 D7 resource worksheet를 D6 story나 Green claim에 섞으면 안 됩니다.

범위 한계: overview의 주간 목적에 비용 teardown이 보이는 것은 미래 목표 언급이며 strict 실행 범위를 넓히지 않습니다.

실제 기술 이름strict preview boundary versus full-week code inventory ownership

외부 증거와 로컬 증거의 문지기가 다르다 — D1 external marker · D2–D5 manual boundary · D6 local owner
그림 한눈에: D1 external marker · D2–D5 manual boundary · D6 local owner.

28. modern 코드 inventory와 마지막 proof 표찰은 어떻게 읽나요?

답: 10개 teaching unit, canonical 1개와 illustrative 9개, source-local tests 0개입니다.

근거: aggregate vector 10/307/292/0/292/292/35/0는 teaching units / physical lines / nonblank lines / setup lines / mapping rows / translation rows / source chunks / source-local tests입니다.

오답 함정: D7 illustrative item 2개를 strict preview의 실행으로 세거나 유일한 canonical runner를 preview가 실행했다고 말하면 안 됩니다.

범위 한계: 현재는 W22 D1–D6 RUNTIME NOT_RUN; D1=FUTURE_TRIGGER/NOT_RUN_EXTERNAL, D2–D5=preview 미실행·MANUAL_REVIEW_REQUIRED입니다.

실제 기술 이름canonical-illustrative provenance and non-executed proof-boundary accounting