Skip to content

merge: develop into release - #323

Merged
xodn09 merged 39 commits into
releasefrom
develop
Oct 20, 2026
Merged

xodn09 merged 39 commits into
releasefrom
develop

Conversation

@xodn09

@xodn09 xodn09 commented Oct 20, 2026 •

Copy link
Copy Markdown
Member

변경 요약

  • 병합 방향: develop → release.
  • 비교 기준: release 16022ff601f7ce81b78412701e1e3a3b3d197644 → develop 66e692117eed692406c6c6268b9d14fa5f042491.
  • 이전 릴리스 PR merge: develop into release #311 이후 develop에 병합된 feat: 상점주 예약 관리 및 메뉴 드래그 정렬 개선 #322와 이 PR의 충돌 해결·리뷰 후속 수정을 반영합니다. 현재 release 대비 develop 고유 커밋은 병합 커밋을 포함해 39개입니다.
  • GitHub 3-dot 비교와 두 브랜치 최종 파일 직접 비교 모두 **152개 파일(+4,883 / -1,983)**입니다. 기존 release 이력을 develop에 병합했으며 기존 배포·병합 이력을 삭제하거나 재작성하지 않았습니다.
  • docs/ec2-deployment.md 충돌은 9b6f62e에서 해결했습니다. 기존 배포 지침과 [CHORE] 관리자 Docker 자동 배포 인증 실패 조치 및 develop 동기화·실배포 확인 #321 확인 기록을 모두 보존했으며 GitHub 기준 충돌 없이 병합 가능한 상태입니다. 사용자가 이 PR을 release에 병합했으며 아래와 같이 자동 배포 성공까지 확인했습니다.

1. 상점주 예약 조회·승인·반려 (#315, #316)

  • 상태·소유 매장·예약 시작 기간·페이지를 서버 필터에 연결하고 입력 중 조건과 적용 조건을 구분합니다. 한국 시각을 UTC 경계로 변환하며 시작 이상·종료 미만 계약을 유지합니다.
  • 예약 장소·시간·인원·예약자·요청사항과 처리 이력을 조회합니다. 미제공 처리자 이름·역할은 추정하지 않습니다.
  • 정상 조회한 승인 대기 예약만 승인·반려할 수 있고 확인창에서 장소·시간·인원·예약 번호를 확인합니다.
  • 승인 사유는 선택이며 공백이면 본문을 생략합니다. 반려 사유는 공백이 아닌 값과 최대 500자를 검증합니다.
  • 중복 제출, 처리 중 닫기·대상 전환 및 이전 계정·매장·조회 요청의 늦은 응답을 방어합니다. 처리 후 목록·상세·이력을 재조회하며 쓰기 실패와 쓰기 성공 후 조회 실패를 구분합니다.
  • 과거 취소 조건 미제공 상태, 서버의 최종 취소 판단, 기존 결제·환불 선행 보호를 유지합니다. 취소 조건 모달 배치와 상세 처리 버튼 위치도 개선합니다.

2. 관리자 예약을 기록 조회 전용으로 전환 (#317)

  • 폐기된 관리자 confirm/reject API·요청 타입·버튼·사유 확인창을 제거하고 목록·상세 GET은 유지합니다.
  • 메뉴·제목·대시보드 바로가기를 '예약 관리 이력'으로 통일하고 승인·반려는 해당 장소의 상점주가 처리함을 안내합니다.
  • 현재 상점주와 당시 처리자·시각·상태 이력을 구분하고 과거 관리자 기록은 보존합니다.
  • 관리자 직접 처리 대기 집계에서 예약을 제외합니다. 기존 딥링크·필터·페이지·인증 복귀는 유지합니다.

3. 메뉴 드래그 정렬 및 다중 브랜드 UX (#319, #320)

  • 기존 메뉴 목록 UI를 유지하면서 드래그 손잡이·이동 미리보기·터치·자동 스크롤과 키보드 집기/이동/놓기/취소를 지원합니다.
  • 놓을 때만 목표 인덱스로 PATCH 한 번을 전송하고 서버의 전체 순서를 재조회합니다. 저장 중 중복 조작, 계정·매장 전환, 실패·타임아웃 및 미저장 메뉴 입력을 보호합니다.
  • 브랜드가 이벤트에 표시할 가게·업체의 이름·소개·로고이며 사업자명·개인 이름·운영 장소와 다름을 안내합니다.
  • 브랜드 0개·1개·복수·조회 실패를 구분하고 1개일 때만 자동 선택합니다. 기존 이벤트·새 브랜드의 명시 선택·작성 초안을 보존하며 로고 누락·로드 실패를 처리합니다.

4. 관리자·상점주 공통 UX와 운영 안내

  • 매장 선택 버튼·옵션은 '장소명 · #ID', 주소는 보조 정보로 통일합니다. 상점주 선택·날짜·시간 컨트롤은 흰 배경·테두리와 hover/focus/disabled 및 포털 표시를 유지합니다.
  • 로고 클릭 시 관리자 대시보드·상점주 내 가게로 이동하며 미저장 입력 보호와 basename을 유지합니다. 새 로그인·계정 전환 시 사이드바를 맨 위로 초기화합니다.
  • 고객센터는 지정 수신자의 Gmail 작성 창을 안전한 새 탭으로 엽니다. 명시적인 404 PLACE_INFORMATION_NOT_FOUND만 정상 미등록으로 처리하고 다른 조회·인증 오류는 숨기지 않습니다.
  • 장소 상태 모달·신청 증빙 파일 정렬, 장소 검증 검색 영역, 밴 필터·목록 호버·해제 버튼 정렬, 역할 검색·예약 필터 배치와 운영 이력 드롭다운 잘림을 개선합니다.
  • 친숙한 '밴'·'증빙'은 유지하면서 개발자 중심 오류·추천·신뢰 점수·데이터 품질 문구를 정리합니다. 원본 코드·상세 오류는 기술 정보에 보존합니다.
  • 리뷰 후속으로 알림 재처리 확인창에 작업 대상 정보를 표시하고, 감사 이력의 중복 '신뢰 점수' 명칭을 정리했습니다.

5. API 계약·배포 설정 동기화 및 CI 안정화 (#318, #321)

  • 최신 공개 OpenAPI 원본·출처·시각·해시와 계약표를 갱신하고 폐기 관리자 호출 및 상점주 상세·필터·승인 선택 본문·반려 필수 사유 계약을 검사합니다.
  • 기존 release의 Docker 배포 workflow·Compose·SSH 호스트 식별·배포/복구 스크립트와 mock 검사를 develop에도 동기화했습니다. 최종 두 브랜치의 배포 실행 설정은 동일하며 별도 개발 서버나 프록시 경로를 신설하지 않습니다.
  • 버튼 색상 검사가 CSS 전환 중간값을 읽던 실패를 수정했습니다. 실제 전환 종료를 제한 시간 안에서 기다린 뒤 정확한 최종 색상을 비교하며 검사 기준은 완화하지 않습니다.
  • 브라우저 묶음 실패 시 실제 assertion·stack이 Actions 로그에 남도록 보강합니다. 실패를 재실행으로 숨기거나 미실행 검사를 통과로 처리하지 않습니다.

6. PR 리뷰 후속 수정

  • R1 — f387781: 메뉴 정렬 회귀 검사에서 손잡이의 실제 조작 가능 상태·드래그 활성화·정확한 미리보기 순서를 기다리도록 보강했습니다. 드래그 중 요청 로그 확인은 포커스나 스크롤을 바꾸지 않으며, 놓기 전 쓰기 요청 없음·놓은 뒤 단일 저장과 영구적으로 잘못된 순서의 실패 감지도 검증합니다.
  • R2 — 66e6921: 신뢰 점수 규칙 조회 실패 시 '신뢰 점수'가 중복되던 안내를 수정했습니다. 실제 페이지 단위 검사와 1920/1366/390px 브라우저 회귀 검사를 추가했습니다.

검증

  • 변경 범위에 맞는 lint, type check, build 또는 직접 검증을 수행했습니다.
  • 수행하지 않은 검증과 이유를 적었습니다.

확인한 결과

  • 현재 HEAD 66e6921과 동일한 작업 트리로 npm test 1,123개 통과, 실패·skip 없음.
  • 같은 소스의 npm run lint, TypeScript 포함 npm run build, git diff --check 통과.
  • 같은 소스의 npm run test:release-browser 23개 스위트 모두 통과. 데이터 품질 검사도 로컬 전체 실행에서는 통과했습니다.
  • 메뉴 정렬 회귀 검사 일반 실행 3회·CPU 6배 지연 실행과 1920×1080·1366×768·390×844 검증 통과. 잘못된 순서가 계속 유지되면 제한 시간 안에 실패하는지도 확인했습니다.
  • 격리된 Linux/Chromium 환경에서 메뉴 정렬 및 신뢰 점수 이력·규칙 조회 오류 검사를 세 화면 크기로 통과했습니다. 합성 API를 사용했으며 실서버 쓰기를 실행하지 않았습니다.
  • 사용자 QA 완료 — 2026-10-21 사용자가 직접 모두 완료했다고 전달했습니다. 사용자 환경·세부 시나리오·운영 배포 버전은 임의로 추정하지 않습니다.
  • feat: 상점주 예약 관리 및 메뉴 드래그 정렬 개선 #322 최종 구현 소스 9056832의 Release verification은 verify / ec2-image 모두 성공했습니다. 당시 1,122개 단위·컴포넌트 및 23개 브라우저 스위트 결과이며 현재 HEAD의 원격 성공으로 대체하지 않습니다.
  • 위 로컬 검사는 리뷰 수정 후 커밋 전에 수행한 결과입니다. 커밋·푸시 및 본문 갱신 때 전체를 다시 실행한 것으로 표시하지 않습니다.

병합·배포 확인 및 검증 경계

  • docs/ec2-deployment.md 충돌 해결 — 9b6f62e에서 배포 지침과 [CHORE] 관리자 Docker 자동 배포 인증 실패 조치 및 develop 동기화·실배포 확인 #321 기록을 모두 보존했습니다. release는 현재 HEAD의 조상이며 GitHub도 MERGEABLE로 확인했습니다.
  • 이전 develop 5761932의 검사 결과 확인 — 최종 상태는 cancelled이며 성공으로 표시하지 않습니다. 이후 HEAD 검사와 구분합니다.
  • 현재 HEAD 66e6921의 원격 ec2-image 검사 — PR·develop push 실행 모두 성공했습니다. 합성 프록시·게이트웨이를 통한 이미지 검증이며 운영 배포 성공을 뜻하지 않습니다.
  • develop 최종 HEAD 66e6921의 원격 CI 최종 성공 확인 — PR 검사, develop push 검사 모두 성공했습니다.
  • 이전 9b6f62e의 PR 검사는 성공했으나 push 검사는 데이터 품질 브라우저 검사의 인증 만료 후 계정 전환 시나리오에서 실패했습니다. 메뉴 정렬 검사와 별개이며 이 간헐 실패의 원인·해결 완료는 단정하지 않습니다.
  • release 병합 및 해당 SHA의 검증·실제 자동 배포·공개 HTTP 검사 성공. 아래 실행 및 버전 근거를 확인했습니다.
  • 새 배포본의 인증된 예약 목록·상세 읽기 확인 — 2026-10-21 03:17 KST, 사용자가 인증을 완료한 상점주 세션으로 /console/merchant/reservations에서 예약 목록 5건과 선택한 예약의 상세·상태 변경 이력을 정상 조회했습니다. 페이지의 실제 script가 /console/assets/index-BYgR28Ml.js임을 DOM에서 확인해 웹 release 93a40f65268c9a19822407c0a0e4701d13f38154의 배포 결과와 연결했습니다. 에이전트는 로그인 자격증명을 읽거나 CAPTCHA를 풀지 않았고 승인·반려·취소·결제·환불·메뉴 변경도 실행하지 않았습니다. 개인정보 값은 이슈에 기록하지 않습니다. 관리자 계정의 새 배포본 재조회까지 수행했다는 의미는 아닙니다.
  • 웹 release: 93a40f65268c9a19822407c0a0e4701d13f38154 (PR #323, 2026-10-21 03:00 KST 병합).
  • Release verification: verify·ec2-image 모두 성공.
  • 자동 배포: 동일 SHA 이미지 build/push·digest 기준 EC2 교체 및 HTTP 검사 성공. 완료 시각 2026-10-21 03:07:44 KST. 로그에서 Container pingdom-admin-web-1 Healthy, Deployment and HTTP checks passed를 확인했습니다.
  • 공개 GET 확인(2026-10-21 03:15 KST): /console/login HTML 200, 새 /console/assets/index-BYgR28Ml.js JavaScript 200, /consulting/ HTML 200, 비로그인 /api/users/me JSON 401. 이전 자산 index-qeZI8awm.js와 구분합니다.
  • 서버 release: fada91615237a7d6093afd30b68c5cbe643b6bac 및 해당 SHA의 서버 배포 workflow 성공 확인. 서버 workflow는 해당 SHA 이미지 태그로 교체하고 상태 검사·이미지 일치를 확인합니다. 직접 SSH/JVM 런타임 조회는 수행하지 않았습니다.
  • Swagger 버전 문자열만으로 서버 운영 배포 커밋을 단정하지 않습니다. 위 서버 배포 workflow의 SHA·이미지 교체 근거와 공개 경로 결과를 구분해 기록합니다.
  • 에이전트는 실계정 로그인·핑차 경유 QA·운영 예약 승인/반려/취소·메뉴 변경·결제/환불·삭제·Secret 조회/변경·운영 배포를 실행하지 않았습니다. 사용자 QA 완료와 자동 검증의 경계는 구분합니다.
  • 합성 Chromium 검증은 Safari/Firefox·실기기·모든 스크린리더·외부 폰트 픽셀 검증을 대체하지 않습니다. 기존 메인 핑크 작은 글자의 AA 대비 제약도 해소했다고 표시하지 않습니다.

Web API 계약

  • 서버 endpoint/schema 추가·변경 없음 — 웹 호출·연동 영향 operation은 아래에 별도로 기록했습니다.
  • 영향 operation을 아래에 METHOD /path 형식으로 기록했습니다.
  • 계약 변경을 docs/web-api-contract-matrix.csv와 OpenAPI 원본·메타데이터에 반영했습니다.
  • 제거·legacy API를 구현 완료로 표시하지 않았습니다.
  • 파괴적 mutation의 경고·사유 입력·대상 확인과 중복 제출 방지를 검토했습니다.

웹의 기존 호출·연동 변경이며 서버 endpoint/schema/정책을 이 PR에서 추가하거나 수정하지 않습니다. 기존 문서 누락·미구현·대체 경로를 일괄 완료로 변경하지 않습니다.

영향 operation (웹 /api 접두사 제외):

관리자 예약 조회 및 폐기 호출:

  • GET /admin/reservations
  • GET /admin/reservations/{reservationId}
  • POST /admin/reservations/{reservationId}/confirm — 폐기, 호출 제거
  • POST /admin/reservations/{reservationId}/reject — 폐기, 호출 제거

상점주 예약 및 장소:

  • GET /merchant-owner/reservations
  • GET /merchant-owner/reservations/{reservationId}
  • POST /merchant-owner/reservations/{reservationId}/confirm
  • POST /merchant-owner/reservations/{reservationId}/reject
  • POST /merchant-owner/reservations/{reservationId}/cancel — 기존 취소·환불 보호 유지
  • GET /merchant-owner/me
  • GET /merchant-owner/availabilities
  • PUT /merchant-owner/availabilities/{availabilityId}/reservation-terms — 기존 설정·저장 유지
  • GET /merchant-owner/places/{placeId}
  • GET /merchant-owner/places/{placeId}/menus
  • PATCH /merchant-owner/places/{placeId}/menus/{menuId}/order
  • GET /merchant-owner/places/{placeId}/information
  • PUT /merchant-owner/places/{placeId}/information — 기존 명시적 저장 유지

브랜드·이벤트 및 내 가게 관련 조회:

  • GET /merchant-owner/campaigns/brands
  • POST /merchant-owner/campaigns/brands
  • PATCH /merchant-owner/campaigns/brands/{brandId}
  • GET /merchant-owner/campaigns
  • POST /merchant-owner/campaigns
  • PATCH /merchant-owner/campaigns/{campaignId}
  • GET /merchant-owner/offers
  • GET /merchant-owner/places/{placeId}/operating-notices

UI 문구·배치 변경은 기존 원본 코드·서버 필터·감사 로그·권한 판정을 보존합니다.

관련 이슈

xodn09 added 30 commits October 20, 2026 16:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant