# Q&A 운영 배포 체크리스트 대상 도메인: `https://qa.baroncs.co.kr` 정리일: 2026-10-28 ## 현재 저장소에서 확인한 상태 - 스테이징은 `baron-qa-gateway-test`, `qa-test.baroncs.co.kr`, `baron-qa-pages`를 사용한다. - 운영 Worker `baron-qa-gateway-prod`, custom domain `qa.baroncs.co.kr`, R2 버킷 `baron-qa-write` 생성과 연결을 사용자가 완료했다. - 운영 전용 `wrangler.production.toml`과 수동 배포 workflow `Deploy EG-BIM QA Production`을 추가했다. - 운영 등록값과 실행 방법은 [production 파이프라인 안내](qa-production-pipeline.md)를 따른다. 실제 운영 배포는 아직 수행하지 않았다. ## 내가 준비·확정할 항목 ### 1. DNS와 Cloudflare - [x] `baroncs.co.kr` zone이 운영 Cloudflare 계정에 있는지 확인했다. - [x] `qa.baroncs.co.kr`을 운영 Worker custom domain으로 연결했다. - [x] 스테이징과 같은 Cloudflare 계정에 운영 Worker와 버킷을 생성했다. - [x] 운영 정적 파일용 R2 버킷을 생성했다: `baron-qa-write`. 스테이징 `baron-qa-pages`와 분리해 사용한다. - [x] 배포용 Cloudflare API token에 계정 범위의 Workers Scripts Read/Write, Workers R2 Storage Read/Write, Account Settings Read 권한을 부여하고 `PROD_CLOUDFLARE_API_TOKEN` Secret에 등록했다. 사용자 등록 완료 보고 기준이며 실제 token 인증은 배포 실행 시 검증한다. 도메인 연결은 대시보드에서 완료했다. [권한 상세](qa-production-pipeline.md) ### 2. SSO 운영 등록 - [x] 운영 callback URI를 SSO에 등록했다: `https://qa.baroncs.co.kr/auth/callback`. 사용자 완료 보고 기준이다. - [x] 초기 SSO 등록의 로그아웃 후 URI는 `https://qa.baroncs.co.kr/`로 등록했다. 사용자 완료 보고 기준이다. 현재 계정 메뉴의 Q&A 로그아웃은 Worker에서 세션을 삭제하고 별도 설정된 홈페이지 문의 주소로 직접 이동한다. - [x] 운영 SSO 설정에 맞는 `PROD_AUTH_CLIENT_ID` 등 관련 변수 등록을 완료했다. 실제 로그인 동작 확인은 운영 배포 후 수행한다. - [ ] 운영 도메인에서 실제 사내 사용자로 로그인·로그아웃할 수 있는지 확인한다. ### 3. ABC UserFeedback 운영 대상 - [ ] **보류 — 관리페이지 서버 확정 후 진행:** 운영 API 주소를 확정하고 `PROD_ABC_API_BASE_URL`에 등록한다. - [ ] **보류 — 관리페이지 서버 확정 후 진행:** 운영 project ID와 channel ID를 확정하고 `PROD_ABC_PROJECT_ID`, `PROD_ABC_CHANNEL_ID`에 등록한다. 현재 저장소의 ID를 운영에서 재사용해도 되는지 확인한다. - [ ] **보류 — 관리페이지 서버 확정 후 진행:** 운영 project/channel에 문의 생성, 첨부, 댓글 조회·등록·수정·삭제 권한이 있는 API key를 준비하고 Gitea Secret `PROD_ABC_API_KEY`에 등록한다. 이 키가 등록될 때까지 첫 운영 배포는 진행하지 않는다. - [ ] `requester_affiliation`, `requester_department` 필드가 운영 channel에서 허용되는지 확인한다. - [ ] 운영 문의를 스테이징 데이터와 분리할지 결정한다. 기존 데이터 이전이 필요하면 별도 이관 범위와 실행 계획을 정한다. - [ ] 운영 source namespace와 idempotency consumer를 스테이징과 구분할 값을 정한다. ### 4. 조직 컨텍스트 API - [ ] 운영에서 조회할 기준 tenant UUID를 확정한다. 여러 개면 JSON 배열로 제공한다. - [ ] 운영용 `ORG_CONTEXT_KEY_ID`와 `ORG_CONTEXT_KEY_SECRET`을 준비한다. 스테이징 키 재사용이 허용되는지 API 소유자에게 확인한다. - [ ] 운영 키가 해당 기준 tenant에 대해 `SCOPED` / `identifiers` 조회 권한을 갖는지 확인한다. - [ ] 운영 설정으로 org API 사전 검증을 통과시킨다. 키와 조직 원문이 빌드 로그에 출력되지 않는지 확인한다. ### 5. 운영 배포 값 등록 스테이징에 등록한 `STAGING_*` 값은 운영 배포에 자동 적용되지 않는다. [production 파이프라인 안내의 확정된 `PROD_*` 등록 목록](qa-production-pipeline.md)을 사용해 Gitea **Actions Variables / Secrets**에 등록한다. 아래는 운영 대상 값의 요약이다. - [x] 사용자 보고 기준, 관리페이지 연동 `PROD_ABC_*` 4개를 제외한 운영 Secrets와 Variables 등록을 완료했다. 실제 연결·권한은 배포 전에 검증한다. **운영 설정** | 설정 | 운영 값 | |---|---| | Worker 이름 | `baron-qa-gateway-prod` | | Worker custom domain | `qa.baroncs.co.kr` | | AUTH redirect URI | `https://qa.baroncs.co.kr/auth/callback` | | Q&A 로그아웃 후 이동 URI | `https://test.baroncs.co.kr/ko/sw-inquiry.html` (`AUTH_POST_LOGOUT_REDIRECT_URI`) | | AUTH client ID | 운영 SSO client ID | | ABC API base URL | `https://feedback.hmac.kr` 또는 운영 API 주소 | | ABC project ID / channel ID | 운영 대상 ID | | ABC source namespace / idempotency consumer | 스테이징과 구별되는 운영 값 | | R2 bucket | `baron-qa-write` | | ORG_CONTEXT_ENABLED | `true` | | ORG_CONTEXT_API_URL | `https://sadmin.hmac.kr/api/v1/integrations/org-context` | | ORG_CONTEXT_SCOPE_MODE / EXPOSURE | `SCOPED` / `identifiers` | | ORG_CONTEXT_TENANT_IDS | 운영 기준 tenant UUID JSON 배열 | | ORG_CONTEXT_CACHE_TTL_SECONDS | `300` 권장 | **운영 Secrets 용도** | Secret | 용도 | |---|---| | Cloudflare API token | 운영 Worker와 정적 파일 배포 | | `SESSION_SECRET` | 운영 세션 서명용. 스테이징과 별도 값 | | `ABC_API_KEY` | 운영 ABC project/channel API 접근 | | `ORG_CONTEXT_KEY_ID` | 조직 컨텍스트 연동 Key ID | | `ORG_CONTEXT_KEY_SECRET` | 조직 컨텍스트 연동 Key Secret | Secret 원문은 소스, Markdown, 채팅, workflow 로그에 넣지 않는다. ## 개발 측에서 필요한 변경 - [x] 스테이징 설정을 보존하면서 production 전용 Wrangler 설정을 추가했다. - [x] Worker 이름, domain, OAuth URL, R2 bucket, ABC 대상, 조직 API 값을 환경별로 분리했다. - [x] 별도 운영 배포 스크립트를 추가하고, 운영 배포 전에 `npm run org:verify`를 수행하도록 연결했다. - [x] production 수동 배포 workflow에 `PROD_*` 매핑과 필수값 검증을 추가했다. - [x] 운영 정적 파일을 운영 버킷의 커밋별 release 경로에 업로드하도록 연결했다. - [ ] 배포 실행 전에 변경 범위와 대상 도메인을 검토하고, staging 배포와 product 배포가 섞이지 않도록 확인한다. ## 운영 배포 후 확인 - [ ] `https://qa.baroncs.co.kr`의 TLS 인증서와 정적 페이지 응답을 확인한다. - [ ] SSO 로그인·로그아웃 및 세션 쿠키 동작을 확인한다. - [ ] 회사·부서가 조직 API 기준 정보와 일치하는지 확인한다. - [ ] 텍스트 문의와 이미지 첨부 문의를 각각 1건 등록하고, 운영 ABC 화면의 requester 정보·회사·부서 값을 확인한다. - [ ] 목록, 상세, 댓글 조회·등록을 확인하고 댓글 수정·삭제 권한을 작성자 기준으로 확인한다. - [ ] 브라우저 Network 탭과 Cloudflare Worker logs에 API key, 연동 secret, 사용자 전화번호 원문이 노출되지 않는지 확인한다. - [ ] 오류 시 이전 Worker 버전으로 되돌리는 방법과 담당자를 기록한다. ## 진행 순서 1. 사용자가 DNS/SSO/ABC/Cloudflare 운영 값과 데이터 분리 방침을 확정한다. 2. 개발 측에서 production 설정·workflow를 분리하고, 운영 변수·secret 이름을 확정해 공유한다. 3. 사용자가 운영용 Gitea Variables/Secrets를 등록한다. 4. production 조직 API 사전 검증과 배포 전 점검을 통과시킨다. 5. production 배포 승인 후 `qa.baroncs.co.kr`에서 위 운영 확인 항목을 완료한다.