Files
baron_qa_write/docs/qa-feedback-api-integration-task.md
T
root 3c10478482
Deploy EG-BIM QA Gateway / deploy (push) Successful in 2m4s
관리페이지 데이터 전송 구현
2026-09-21 14:46:36 +09:00

4.5 KiB

EG-BIM Q&A 피드백 저장 API 연동 Task

기준일: 2026-09-21
대상: qa-test.baroncs.co.kr / Cloudflare Worker baron-qa-gateway-test

목표

작성페이지의 문의를 Cloudflare Worker를 통해 ABC UserFeedback API에 저장한다.

작성페이지
  → Worker POST
  → Q&A SSO 세션 확인
  → Worker가 requester 정보와 API Key 추가
  → ABC UserFeedback API
  → feedbacks 저장
  → { id } 반환
  → 상세 페이지 이동

확정 설정

항목
Worker baron-qa-gateway-test
작성페이지 https://qa-test.baroncs.co.kr
ABC API https://feedback.hmac.kr
projectId 01a0ae3f-fcf6-74b5-bdc4-70d942d6ad72
channelId 01a0ae40-51c2-7647-a93c-0249b3759777
source namespace EGBIM_QA
API Key Secret ABC_API_KEY

1차 범위: 텍스트 문의 저장

  • 프로젝트·채널 UUID 확인
  • 채널 필드 확인: title, contents, Category, images
  • SSO 세션 저장 및 /auth/session 확인
  • Worker에 POST /api/feedbacks 라우트 추가
  • Worker에서 baron_qa_session 검증
  • Worker에서 requester 정보 추출
  • requester_id 매핑: SSO sub
  • requester_tenant_id 매핑: SSO tenant_id
  • requester_name 매핑: SSO profile/name
  • requester_email 매핑: SSO profile/email
  • requester_department 매핑: SSO tenant/profile department
  • requester_phone_number 매핑: SSO profile.phones[0] 또는 phone claim
  • 브라우저 요청의 requester 값을 신뢰하지 않도록 처리
  • Worker Secret ABC_API_KEYx-api-key 추가
  • projectIdchannelId를 Worker 설정에 등록
  • POST /api/projects/{projectId}/channels/{channelId}/feedbacks 호출
  • x-source-namespace 추가
  • x-source-record-id 추가
  • x-idempotency-consumer 추가
  • Idempotency-Keyidempotency-key 호환 처리
  • 응답에서 feedback ID를 추출해 { id } 형식으로 반환
  • API 실패 시 ABC 오류를 노출하지 않고 안전한 오류 응답 반환
  • 성공 시 작성페이지에서 detail.html?id={id}로 이동

2차 범위: 첨부파일

  • R2 업로드 결과의 storageKey를 ABC images 필드에 연결
  • ABC API가 허용하는 이미지 메타데이터 형식 확인
  • presigned URL 및 첨부파일 오류 처리
  • 이미지 포함 저장 테스트

보안 요구사항

  • API Key를 정적 JavaScript, HTML, assets/config.js에 넣지 않음
  • API Key는 Cloudflare Worker Secret에만 저장
  • requester 정보는 브라우저 입력값이 아닌 검증된 SSO 세션에서 생성
  • 전화번호는 화면 입력값을 받지 않고 SSO 프로필에서만 읽음
  • Worker 로그에 API Key, SSO token, 전화번호 원문을 기록하지 않음
  • CORS는 동일 Worker 도메인 요청을 기준으로 제한

검증 시나리오

  • 로그인하지 않은 사용자는 401 응답을 받음
  • 로그인한 사용자가 제목·내용·카테고리를 입력하면 ABC에 1건 저장됨
  • 저장된 데이터에 제목·내용·Category가 정확히 들어감
  • 저장된 데이터에 requester ID·tenant·이름·이메일·부서·전화번호가 들어감
  • 동일한 Idempotency-Key 재요청 시 중복 저장되지 않음
  • ABC 응답의 id로 상세 페이지 이동
  • API Key가 브라우저 Network 탭에 노출되지 않음
  • 잘못된 카테고리 또는 필드 입력은 ABC에 전달되기 전에 차단됨

배포 전 작업

  • 실제 프로젝트 전용 ABC API Key 발급
  • Cloudflare Worker Secret 등록
npx wrangler secret put ABC_API_KEY --name baron-qa-gateway-test
  • qa-test.baroncs.co.kr에서 로그인 후 텍스트 문의 1건 등록
  • Worker Logs에서 API Key·전화번호가 노출되지 않는지 확인
  • ABC 관리페이지에서 requester 전화번호를 포함한 저장 결과 확인

구현 메모

  • ABC 문서에는 현재 /api/projects/... 경로가 실제 시나리오로 기재되어 있다.
  • /api/v1/...는 패키징 권장 경로로 문서화되어 있으므로 1차 구현은 현재 운영 시나리오인 /api/...를 사용한다.
  • UUID v7 정책에 맞춰 현재 브라우저의 UUID v4 생성 로직을 교체한다.
  • requester_phone_number는 관리페이지 문서의 SSO 매핑 및 알림 정책에서 필수 requester 메타데이터로 정의되어 있다. ABC 채널의 동적 필드로 직접 저장 가능한지 여부는 API 응답에 맞춰 Worker에서 검증한다.