Files
egbim_qa_platform/FEEDBACK_ONLY_TASKS.md
T
root aaddfc7bfc
Deploy feedback demo / deploy (push) Failing after 4m26s
API 적용 최초 배포
2026-09-01 17:12:46 +09:00

9.7 KiB

피드백 작성 전용 웹 전환 작업

목표

이 저장소는 프로젝트별 피드백 작성 데모 페이지와 독립적인 BARON-SSO 로그인을 제공한다. 피드백 데이터만 운영 중인 관리자 콘솔의 API로 전송한다.

  • 관리자 콘솔: https://feedback.hmac.kr/
  • 현재 작업 저장소: https://gitea.hmac.kr/b24014/egbim_qa_platform.git
  • 현재 작업 대상: 프로젝트별 피드백 작성 데모 화면 및 데이터 API 연동
  • 연동 구조: 작성 데모 웹/자체 인증 → 피드백 데이터 API → 관리자 콘솔 데이터
  • 기존 is-div/qa_platform Pull Request: 병합하지 않음

이번 단계는 각 당사자에게 화면과 연동 방식을 설명하기 위한 데모 단계다. 관리자 콘솔의 화면이나 관리 기능을 이 저장소에 복제하지 않는다.

범위

유지할 기능

  • BARON-SSO 로그인 및 callback
  • 피드백 작성 화면
  • 제목 및 내용 입력
  • 사용자 IP 주소 입력
  • MAC 주소 입력
  • 모든 파일 형식의 첨부파일 업로드
  • 첨부파일 용량 및 개수 제한
  • 작성 완료 및 오류 메시지
  • 피드백 댓글 작성·수정·삭제는 기존 관리자 콘솔에서 유지
  • 피드백 등록 시 프로젝트 관리자 대상 Naver Works 알림은 기존 콘솔 API에서 유지
  • 기존 스테이징 API 호출

제외할 기능

  • 피드백 목록 및 상세 관리
  • 대시보드
  • 프로젝트·채널·테넌트 생성
  • 관리자 권한 설정
  • 이슈 관리
  • AI 설정
  • 로컬 ABC API
  • 로컬 Secretary API
  • 로컬 MySQL 및 migration 실행

작업 목록

1. 프로젝트별 데모 연동 설계

  • 데모에서 workspace code를 경로로 전달하는 구조 확정
  • 프로젝트 코드, 프로젝트 ID, 채널 ID는 관리자 콘솔에서 매핑
  • 프로젝트별 피드백 양식 조회 방식 확인
  • 프로젝트별 피드백 등록 API 계약 확인
  • 프로젝트별 첨부파일 저장은 관리자 콘솔/Secretary가 담당
  • 당사자 설명용 데모 URL과 예시 프로젝트 확정

2. 외부 API 계약 확정

  • 기존 관리자 콘솔 코드에서 공개 API base URL 확인
  • 로그인 상태 확인 API 확인
  • 피드백 양식/필드 조회 API 확인
  • 피드백 생성 API 확인
  • 첨부파일 업로드 API 확인
  • API 인증 방식 확인
  • 기본 writer workspace를 EGBIM_DEMO로 고정해 미지정 SSO 사용자를 END_USER로 허용
  • CORS 회피를 위한 서버사이드 proxy 적용
  • workspace code, project ID, channel ID 확정
  • 기존 API가 사용하는 API Key 권한 확인

관리 콘솔이 공개하는 same-origin endpoint:

GET  /api/support/access
GET  /api/support/workspaces/{workspaceCode}/form-template
POST /api/support/workspaces/{workspaceCode}/tickets

작성 데모는 위 endpoint를 서버사이드 proxy로 호출한다. 데모 웹의 내부 호출은 다음과 같이 분리한다.

GET  /api/support/access
GET  /api/support/workspaces/{workspaceCode}/form-template
POST /api/support/workspaces/{workspaceCode}/submit

관리 콘솔 내부에서는 위 요청을 Secretary API와 프로젝트별 ABC API로 전달한다. 작성 데모는 ABC API를 직접 호출하지 않는다.

데모 웹 환경변수:

# Empty: browser calls stay same-origin and Next proxies admin API requests.
NEXT_PUBLIC_API_BASE_URL=
NEXT_PUBLIC_FEEDBACK_ONLY=true
SUPPORT_CONSOLE_API_BASE_URL=https://feedback.hmac.kr/api/support
SSO_ISSUER=https://sso.hmac.kr/oidc
SSO_AUTHORIZATION_ENDPOINT=https://sso.hmac.kr/oidc/oauth2/auth
SSO_TOKEN_ENDPOINT=https://sso.hmac.kr/oidc/oauth2/token
SSO_USERINFO_ENDPOINT=https://sso.hmac.kr/oidc/userinfo
SSO_SCOPE=openid profile email
SSO_CLIENT_ID=<local RP client id>
SSO_CLIENT_SECRET=<local RP client secret>
JWT_SECRET=<the same HS256 secret used by the support API>
SUPPORT_TENANT_ID=<optional; use this when userinfo does not include tenant_id>

The feedback-only Docker app leaves NEXT_PUBLIC_API_BASE_URL empty so browser calls stay same-origin. BARON-SSO login is handled by this application's own server-side auth flow and its own RP credentials. The management console is not used for login.

로컬 작성 앱의 인증 서버 환경에는 다음 값을 사용한다.

SSO_ISSUER=https://sso.hmac.kr/oidc
SSO_CLIENT_ID=<local RP client id>
SSO_CLIENT_SECRET=<local RP client secret>
# Leave blank to derive the callback from the browser host. This supports
# both localhost:8864 and 10.13.10.4:8864.
SSO_REDIRECT_URI=

NEXT_PUBLIC_API_BASE_URL은 피드백 전용 Docker에서 비워 둔다. 관리 콘솔 주소는 데이터 연동용 SUPPORT_CONSOLE_API_BASE_URL에만 설정한다. Client Secret은 브라우저 번들 또는 저장소에 포함하지 않는다.

3. 피드백 작성 데모 화면 정리

  • 피드백 작성 페이지를 기본 진입 화면으로 설정
  • 불필요한 목록·상세·관리 화면 링크 및 직접 접근 차단
  • 콘솔과 동일한 프로젝트명 EGBIM_DEMO 생성
  • EGBIM_DEMO를 첫 번째 예시 프로젝트로 사용
  • 현재 콘솔 매핑 확인: projectId=8, channelId=9
  • 프로젝트 식별자만 바꾸면 다른 프로젝트에도 연결되도록 구성
  • 작성 페이지에 필요한 필드만 표시
  • 모든 파일 형식 첨부 허용
  • 파일 크기 30MB 제한 유지
  • 첨부파일 업로드 성공 여부 표시
  • 작성 완료 후 작성 화면에서 등록 완료 상태 표시
  • API 오류를 사용자가 이해할 수 있는 메시지로 표시

4. 인증 및 보안

  • BARON-SSO 로그인 흐름 확인
  • 새 웹 주소의 callback URI 등록
  • 자체 BARON-SSO RP의 로그인 URL 생성·callback·토큰 교환 구현
  • 자체 RP의 SSO_CLIENT_ID·SSO_CLIENT_SECRET을 서버 runtime에 주입
  • 콘솔 API 인증과 작성 앱 인증을 분리하고 피드백 데이터 API만 연동
  • access token을 브라우저에 불필요하게 노출하지 않도록 처리
  • API Key를 클라이언트 번들에 포함하지 않도록 처리
  • 서버사이드 proxy 사용 시 authorization header 전달 확인
  • Secret 및 개인키가 저장소에 포함되지 않았는지 확인

5. 불필요한 코드 제거

API 계약과 화면 의존성 확인 후 아래 항목을 제거한다.

  • apps/api 제거 또는 별도 저장소로 분리
  • apps/secretary-api 제거 또는 별도 저장소로 분리
  • 로컬 DB compose 및 DB migration 제거
  • 관리자·대시보드·이슈·AI 관련 페이지는 데모 화면에서 노출하지 않음
  • 프로젝트·채널·테넌트 설정 화면은 데모 화면에서 노출하지 않음
  • 피드백 목록·상세·댓글 관리 화면은 이 데모 웹에서 노출하지 않되, 기존 관리자 콘솔과 콘솔 API에서는 유지
  • Naver Works 알림 처리와 프로젝트 관리자 라우팅은 기존 콘솔 API에서 유지
  • E2E 및 로컬 통합 테스트 제거 또는 별도 보관
  • CLI 및 개발용 실행 스크립트 정리
  • 기존 데이터 migration SQL은 필요 여부 확인 후 보관 또는 제거
  • 추적 중인 .venv-migrate 등 가상환경 파일 제거

삭제 전에 작성 페이지의 import와 Docker build가 통과하는지 확인한다.

6. 웹 전용 Docker 구성

  • web 서비스만 포함한 docker/docker-compose.prod.yml 구성 작성
  • 배포 workflow를 피드백 전용 compose와 8864 health check로 변경
  • API·Secretary·MySQL 서비스 의존성 제거
  • 웹 서비스 포트 환경변수화
  • 외부 API base URL 환경변수화
  • production build에서 브라우저 API base URL을 비우고 외부 API 주소를 서버 proxy에만 사용
  • 업로드 파일 저장은 외부 관리 콘솔/Secretary가 담당하도록 구성
  • Docker image build 확인

7. 검증

  • 로그인하지 않은 사용자의 접근 처리 확인
  • SSO 로그인 및 callback 확인 (새 RP/JWT_SECRET 주입 후 브라우저에서 확인)
  • 작성 양식 표시 확인
  • 제목·내용만 작성하여 등록 확인
  • IP·MAC 값 포함 등록 확인
  • 이미지 첨부 등록 확인
  • PDF·문서 등 비이미지 파일 첨부 확인
  • 30MB 초과 파일 차단 확인
  • API 등록 결과가 기존 관리 콘솔에 표시되는지 확인
  • 오류·재시도 처리 확인
  • production Docker build 및 health check 확인

8. 저장소 반영 및 배포

  • 변경 파일에 Secret·개인키·실제 환경파일이 없는지 확인
  • git status --short 확인
  • git diff --stat 확인
  • 기능 단위 commit 생성
  • b24014/egbim_qa_platform의 main에 push
  • 내부 서버 배포
  • 배포된 API에서 실제 API 등록 테스트

완료 조건

  • 사용자는 피드백 작성 화면만 접근할 수 있다.
  • 로그인은 BARON-SSO를 통해 동작한다.
  • 관리 콘솔의 로그인·테넌트 설정을 변경하지 않고 자체 RP로 로그인된다.
  • 피드백은 https://feedback.hmac.kr/ 관리자 콘솔에서 확인된다.
  • 첨부파일은 이미지와 일반 파일 모두 등록된다.
  • 프로젝트 식별자를 바꾸어도 같은 작성 화면 구조로 API 연동이 가능하다.
  • 로컬 ABC API, Secretary API, MySQL 없이 웹 컨테이너만 실행된다.
  • 저장소에 Secret이나 개인키가 포함되지 않는다.
  • 내부 서버에서 Docker build와 health check가 성공한다.

현재 보류 사항

API base URL만으로는 실제 endpoint와 인증 방식을 확정할 수 없다. 기존 관리 콘솔 주소와 API 서버 주소가 같지 않을 수 있으므로, API 계약 확인 전에는 apps/api, apps/secretary-api, 관련 server route를 삭제하지 않는다.