[P1] [인프라] 작업용 DB 동기화 절차 안정화 및 자동화 #13

Closed
opened 2026-03-27 18:07:57 +09:00 by hyunho · 1 comment
Owner

문제

작업용 8081 DB를 공개용 8080 기준으로 맞추는 절차가 현재 안정적이지 않습니다.

실제 확인된 문제:

  • 동기화 중 seat_positions 스키마 차이로 중간 실패 가능
  • 일부 테이블만 복원되고 나머지는 비정상 상태로 남을 수 있음
  • members.seat_label 과 실제 seat_positions 가 어긋난 상태가 발생 가능
  • 이 상태에서 조직현황/자리배치도 검증 결과가 왜곡됨

배경

현재 운영 방식은

  • 공개용 8080: 운영 기준 데이터
  • 작업용 8081: 기능 검증용
    이므로, 작업용 DB는 반복 가능하고 신뢰 가능한 방식으로 공개용 기준에 맞춰져야 합니다.

해야 할 일

  • 공개용 -> 작업용 DB 동기화 스크립트 정비
  • 실패 시 중간 상태를 남기지 않도록 절차 보강
  • members.seat_label 같은 파생 필드는 원본 기준으로 재생성
  • 최소 동기화 범위와 전체 동기화 범위를 명확히 구분
  • 실행 후 검증 항목(row count / seat 관련 테이블 / auth 관련 영향)을 자동 출력

완료 조건

  • 작업용 DB를 공개용 기준으로 반복 실행 가능하게 동기화할 수 있을 것
  • 동기화 후 주요 테이블 수량과 seat 관련 상태를 신뢰할 수 있을 것
  • 조직현황/자리배치도 검증 전에 이 절차를 표준으로 사용할 수 있을 것
## 문제 작업용 `8081` DB를 공개용 `8080` 기준으로 맞추는 절차가 현재 안정적이지 않습니다. 실제 확인된 문제: - 동기화 중 `seat_positions` 스키마 차이로 중간 실패 가능 - 일부 테이블만 복원되고 나머지는 비정상 상태로 남을 수 있음 - `members.seat_label` 과 실제 `seat_positions` 가 어긋난 상태가 발생 가능 - 이 상태에서 조직현황/자리배치도 검증 결과가 왜곡됨 ## 배경 현재 운영 방식은 - 공개용 `8080`: 운영 기준 데이터 - 작업용 `8081`: 기능 검증용 이므로, 작업용 DB는 반복 가능하고 신뢰 가능한 방식으로 공개용 기준에 맞춰져야 합니다. ## 해야 할 일 - 공개용 -> 작업용 DB 동기화 스크립트 정비 - 실패 시 중간 상태를 남기지 않도록 절차 보강 - `members.seat_label` 같은 파생 필드는 원본 기준으로 재생성 - 최소 동기화 범위와 전체 동기화 범위를 명확히 구분 - 실행 후 검증 항목(row count / seat 관련 테이블 / auth 관련 영향)을 자동 출력 ## 완료 조건 - 작업용 DB를 공개용 기준으로 반복 실행 가능하게 동기화할 수 있을 것 - 동기화 후 주요 테이블 수량과 seat 관련 상태를 신뢰할 수 있을 것 - 조직현황/자리배치도 검증 전에 이 절차를 표준으로 사용할 수 있을 것
Author
Owner

2026-03-30 정리

작업용 DB 동기화 절차를 현재 8081 운영 방식 기준으로 다시 고정했습니다.

반영 내용:

  • 저장소에 docker-compose.8081.yml 추가
    • 8081 작업용 stack을 repo 안에서 바로 올릴 수 있게 정리
    • 기본 project name: mh-dashboard-organization-dev
  • scripts/sync_prod_db_to_dev.sh 보강
    • 기본 대상 stack을 docker-compose.8081.yml 기준으로 사용
    • sync 전에 8081proxy/frontend/backend 를 잠시 멈춰 deadlock / partial read 방지
    • seat_positions portable restore 유지
    • 복원 후 members.seat_label, auth.users, history backfill 재정렬
    • 실행 후 주요 테이블/seat 정합성 수치 자동 출력
  • 실제 검증
    • ./scripts/sync_prod_db_to_dev.sh minimal 실행 완료
    • 출력 결과
      • members=227
      • member_retirements=9
      • seat_maps=21
      • seat_slots=57308
      • seat_positions=0
      • seat_positions_without_slot=0
      • members_with_seat_label=0
      • seat_label_mismatch=0
      • auth_users=228

현재 판단:

  • 이 절차는 이제 8081 검증 전 표준 절차로 사용할 수 있는 상태다.
  • 이후 analysis, full 범위는 같은 구조로 확장해서 사용하면 된다.
2026-03-30 정리 작업용 DB 동기화 절차를 현재 8081 운영 방식 기준으로 다시 고정했습니다. 반영 내용: - 저장소에 `docker-compose.8081.yml` 추가 - `8081` 작업용 stack을 repo 안에서 바로 올릴 수 있게 정리 - 기본 project name: `mh-dashboard-organization-dev` - `scripts/sync_prod_db_to_dev.sh` 보강 - 기본 대상 stack을 `docker-compose.8081.yml` 기준으로 사용 - sync 전에 `8081`의 `proxy/frontend/backend` 를 잠시 멈춰 deadlock / partial read 방지 - `seat_positions` portable restore 유지 - 복원 후 `members.seat_label`, `auth.users`, history backfill 재정렬 - 실행 후 주요 테이블/seat 정합성 수치 자동 출력 - 실제 검증 - `./scripts/sync_prod_db_to_dev.sh minimal` 실행 완료 - 출력 결과 - `members=227` - `member_retirements=9` - `seat_maps=21` - `seat_slots=57308` - `seat_positions=0` - `seat_positions_without_slot=0` - `members_with_seat_label=0` - `seat_label_mismatch=0` - `auth_users=228` 현재 판단: - 이 절차는 이제 8081 검증 전 표준 절차로 사용할 수 있는 상태다. - 이후 `analysis`, `full` 범위는 같은 구조로 확장해서 사용하면 된다.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: hyunho/MH-DashBoard-organization#13