9.7 KiB
피드백 작성 전용 웹 전환 작업
목표
이 저장소는 프로젝트별 피드백 작성 데모 페이지와 독립적인 BARON-SSO 로그인을 제공한다. 피드백 데이터만 운영 중인 관리자 콘솔의 API로 전송한다.
- 관리자 콘솔:
https://feedback.hmac.kr/ - 현재 작업 저장소:
https://gitea.hmac.kr/b24014/egbim_qa_platform.git - 현재 작업 대상: 프로젝트별 피드백 작성 데모 화면 및 데이터 API 연동
- 연동 구조: 작성 데모 웹/자체 인증 → 피드백 데이터 API → 관리자 콘솔 데이터
- 기존
is-div/qa_platformPull 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를 삭제하지 않는다.