HM3 — "얼마에요"(iQUEST) 회계 DB 복제·미러링·devplan 대시보드
목표(페페 2026-08-11) = QC1(사무실 회계직원 PC)의 회계프로그램 "얼마에요" DB
HM3_ERP를 ①복사해 미니PC로 가져오고 ②QC1 작업내용이 자동 동기화되게 미러링, ③devplan에 회계프로그램 형태 대시보드로 정리해 항목별 열람. 용도 = 벤치마킹 + 자료 그대로 활용. 미러본이 새 프로젝트의 원본(추후 재복사 없음). 자료 = 포인 자사 회계데이터(자사 PC) = 소유·활용 문제 없음.
▶ NOW — v1 전 구간 완료·가동 중 · 페페 검토 + 회계뷰 구체화 대기
✅ 2026-08-11 구축 완료 (전 파이프라인 가동)
- 원본 = QC1
MSSQL$IQUESTERP(SQL Server 2005 Express), DBHM3_ERP, SIMPLE recovery, 데이터 1.3GB·268 테이블·~190만행. 파일C:\얼마에요3E\Database\*.iquest(확장자만 다른 표준 SQL 파일).main=sysadmin(Windows인증). - 복사(1회) = 온라인
BACKUP ... COPY_ONLY, CHECKSUM(직원 무중단·백업체인 무간섭) → scp 회수 →C:\dev\hm3\db\HM3_ERP_baseline.bak(740MB). 🔑740MB가 정상 = 실사용 데이터페이지만 담김(데이터파일 1339MB 중 실사용 738MB, 로그 3398MB는 SIMPLE이라 빔·백업 제외). 페페가 "3GB 나와야" 한 건 파일 총할당 기준. - 복원 엔진 = 미니PC(Win11 25H2)에 SQL Server 2012 LocalDB(
SqlLocalDB.msimsiexec 직접설치). 🔴SQL2014 풀엔진 불가 — Win11 25H2는 PowerShell 2.0 기능이 OS에서 제거돼 2014 setup.exe가 하드의존성으로 실패(.NET3.5·OS버전은 무관, OS는 "Windows 8"로 통과). LocalDB는 setup 체인을 안 타서 우회 성공. 2012도 compat 90(2005) 복원 지원. - 복원본 =
(localdb)\HM3DBHM3_ERP(compat 90, ONLINE, mdf 1.34GB). 데이터파일C:\dev\hm3\db\data\. 논리명Default_2005/Default_2005_log(고정). - ✅최종 동일성 증명 = IDENTICAL — 라이브(QC1) vs 복원본(미니PC) 268/268 테이블 · 1,897,325행 완전 일치(한쪽만 있는 테이블 0·행수 불일치 0). 스냅샷
db/live_rowcounts_QC1.tsvvsdb/restored_rowcounts_minipc.tsv, 대조diff_rc.py. - 미러(자동 동기화) = 미니PC 주도
hm3_sync.ps1— QC1 도달확인→hm3_backup_qc1.ps1push·실행(COPY_ONLY 백업)→scp 회수→RESTORE ... REPLACE, RECOVERY→QC1 임시파일 삭제. 미도달(퇴근 종료)이면 조용히 스킵(exit 0). 스케줄HM3-Sync(작업스케줄러, 30분 주기, 숨김 vbs). 실측 1사이클 = 740MB·~187s, 행수 +1 잡힘(라이브 변경 캡처 확인). 로그C:\dev\hm3\sync.log(OK/SKIP/ERROR). - 페페 지시 = "야간 1회 불가(퇴근시 PC 종료). 오늘 안정화까지 주기 감시하며 시간 늘려가라." → 현재 30분, 안정 확인 후 1~2h로 늘릴 것.
- 대시보드 =
C:\dev\hm3\hm3_server.py(Flask+pyodbc,(localdb)\HM3), 상주HM3-Server(pythonw 숨김 vbs, ONLOGON, 0.0.0.0:8794). 카테고리(IQB 기초정보·IQF 회계장부전표·IQO 매입매출·IQI 재고·IQS 시스템·IQP/IQW/IQM 기타·HM3 앱)별 268테이블 트리 + 페이징 + 표내 검색. devplan 허브카드 HM3(http://100.108.234.45:8794/) 등록·재빌드 완료(최근 최상단). IQB_ACCOUNTS=계정과목 확인('10100'=현금).
✅ 2026-08-11 프로그램 기능·구조 파악 (QC1 무접촉)
- 🔑프로그램 구조는 미러 DB에서 완전 추출 —
Menu테이블(230행) = 앱이 정의한 전체 기능맵,Permission(사용자별 메뉴별 CRUD+출력),Code/CodeCategory. QC1 실행·라이선스 무관·완전 백그라운드. - 얼마에요 = 완전 ERP · 230기능 · 11모듈 = A자금관리(23·현금예금출납장·어음·자금일월계표) B기초정보(15) C결산·재무제표(7·재무상태표·손익계산서·원가명세서) F회계·전표(29·매입매출전표·일반전표·총계정원장·거래처원장) I재고·물류(25·입출고·견적·주문·발주·거래명세·수불장·BOM재고) M생산관리(15·BOM·작업지시·자재소요·공정·검수) O영업·CRM(18·수주계약·고객·캠페인) P인사·급여(43·급여·4대보험·원천세) S설정·연동(11·세무사랑·얼마싸인·이체) T세무·원천세(10·부가세·원천징수·지급명세) W공통·현장(28).
- 설치 아키텍처(QC1
C:\얼마에요3E\읽기전용 목록) = .NET(DLL 215) · 리포트서식 RTF 475·ALD 75 · 설정 JSON 174 · 엑셀양식 81. 폴더 Components/Config/Data/Database/Print/System/Update 등. - 대시보드에 「프로그램 구조」 탭 추가(
/api/menu) — 모듈 카드 + 기능목록(I입력/M수정/D삭제/P출력 플래그) + 설치 아키텍처. 데이터 탭과 나란히. 허브 카드 desc 갱신·재빌드. - 🔴QC1에서 실제 GUI는 실행 안 함(안전) — 페페 로그인 절차 1번 "인터넷 끊기"가 ①직원 업무중단 ②코디 원격접속(네트워크 경유) 동반차단, GUI를 직원 화면에 띄우면 하드룰 위반. 라이브 UI 스크린샷이 꼭 필요하면 직원 부재/퇴근 후 + 오프스크린 PrintWindow(메모리
cody-acad-capture-noninvasive기법)로 별도 진행.
✅ 2026-08-11 실사용 분석 + 출력양식 표시 (구조 탭 강화)
- 사용 판정 = 2026 DB 이력 — 268테이블 활동 스캔(
DT_INSERT생성시각 +YMD_INPUT업무일자,db/activity.json). 115/268 데이터 보유, 25개 2026 활동. - 실사용 도메인(어제 08-10까지 활발) = 회계·전표(IQF: SNP전표·일반분개장·총계정원장, 11,653건) · 재고(IQI_STOCK_NOW 등 2,113건) · 거래명세/매입매출(IQO_TRAN_RECEIPT 1,349건) · 거래처/품목(IQB) · 결산(IQC) · 세금계산서. 로그인 오늘 기록.
- 미사용 확정 = M 생산관리(IQM 6행) · P 인사·급여(IQP 23테이블이나 2026 0건) · O 영업·CRM(거래명세 제외) · W 공통·현장(코드만). → 자체 구축 시 우선순위 판단 근거.
- 모듈 사용요약 = 12모듈 중 6 사용(A자금·B기초·C결산·F회계·I재고·S설정) · T세무 부분 · 4 미사용(M·O·P·W).
- 출력·추출 양식 =
Menu.IsExistPrint플래그(앱이 선언한 출력기능) +Print\RTF 460개(거래명세표·견적서·세금계산서·시산표…) → 171개 기능이 양식 보유 = PDF/인쇄 추출 가능(그리드는 엑셀 내보내기). 구조 탭에 「양식」 배지. - 구조 탭 = 각 기능에 초록 「올해 사용」 / 파랑 「양식」 배지 + 모듈 사용/미사용 칩 + 마지막활동일. 상단 요약카드(사용모듈·올해사용·양식보유·미사용). 헤드리스 렌더 확인 완료. ⚠활동 스냅샷은 정적(2026-08-11) — 최신화하려면
activity.json재생성(일배치 후보). - 🔑기능↔테이블 = 핵심 30여개만 정밀매핑(
CURATED), 나머지는 모듈 기준(조회/보고서는 같은 테이블 읽음). 접두어(IQ*)≠메뉴모듈(A·F·I…) — 예: IQO_TRAN_RECEIPT(거래명세)는 I재고·F회계에서 씀.
🔴 2026-08-11 미러 동기화 버그 수정 (작업본 파괴 사고)
- 사고 = 09:54 자동 동기화가 scp 전송 손상본을 검증 없이 파괴적
RESTORE REPLACE→ 실패("backup set damaged") → HM3_ERP가 RESTORING 갇힘 + 작업 복제본·baseline .bak 동시 손상. 대시보드 접속 불가. - 근본원인 2 = ①WG 링크가 scp 전송 중 드롭(740MB 중 10MB만 받는 truncation, 또는 풀사이즈인데 비트손상) ②구 스크립트가 전송본을 baseline에 직접 덮고 RESTORE 전 무검증 → 손상 1회에 작업본+원본 동시 소실.
- 수정(
hm3_sync.ps1) = ①전송은 staging(_incoming.bak) 로, baseline 안 건드림 ②크기 게이트(QC1 VERIFY_OK가 준 바이트수와 대조) + 재시도 5회(드롭 대비) ③RESTORE VERIFYONLY WITH CHECKSUM을 파괴적 복원 전에 — 실패면 작업본 ONLINE 유지하고 중단 ④성공해야 staging→baseline 승격 ⑤RESTORING 갇힘도 REPLACE로 자가복구 + 끝에 MULTI_USER 복귀. 실측 복구 = retry로 완주OK 740MB rows=1,897,326 244s. - 🔑교훈 = 불안정 링크로 받은 백업은 RESTORE 전 반드시 검증, 검증 전엔 작업본을 절대 안 건드린다. 좋은 원본을 새 전송본으로 덮지 않는다(성공 후 승격).
🔴 2026-08-11 작업1 1차 오조사 → 재작업 완료 (계정 착오)
- 🔴1차가 틀렸다(페페 지적) — 읽은 캐시는 미니PC 로컬 =
delix0731@gmail.com(페페 개인 MS 계정)인데 보고서엔poin912@naver.com이라 적어만 뒀다(코드도"account": "poin912@naver.com"하드코딩). 실측 =HKCU\SOFTWARE\Microsoft\IdentityCRL\UserExtendedProperties=delix0731@gmail.com(cid 53f206c97e91e8d4), 미니PCAccountsRoot엔 계정 폴더 1개뿐. 1차 서술(28목록·523할일·현장 프로젝트별·업무일지·개발관리)은 페페 개인 보드 내용이라 HM3(회계) 맥락에 무관 — 폐기. - ✅진짜 보드는 QC1에 있었다 · 로그인 여전히 불필요 — QC1(회계직원 PC)의 To Do 앱이
poin912@naver.com으로 로그인(캐시AccountsRoot\770a2bf0…\todosqlite.db4.6MB). 읽기전용·백그라운드·비가시 그대로. - 수집 =
qc1_todo_pull.ps1(신설) — 앱이 파일을 열고 있어Copy-Item이 막힐 수 있으므로[IO.File]::Open(..., FileShare::ReadWrite)스트림 복사(+-wal/-shm동반), 계정 이메일을 QC1 레지스트리에서 읽어account.json으로 같이 반환(계정 추측 금지 = 이번 사고의 근본원인 봉합).hm3_sync.ps11b 단계로 편입 = 30분 주기 스냅샷db/todo_qc1.db+db/todo_qc1.json, DB 미러 성공·실패와 무관하게 독립 실행, QC1 임시파일 삭제. - 파악(실데이터) =
poin912@naver.com= 회계직원 주기업무 체크보드(전사 업무보드 아님). 7목록·3,559할일·활성 24, 2024-07~2026-08(2024 744·2025 1,717·2026 1,098건). 1차 판정과 정반대로 반복 플래그를 적극 사용 — 완료하면 다음 회차가 자동 생성돼 누적 이력이 곧 수행 근거(Daily 2,962·Monthly 245·Weekly 207·Yearly 9·Custom 6). - 일간(2,962) 아침 결제(운행일지·세금계산서) · 택배발송물 확인 13시 · 퇴근 전 업무일지(인베스트 출고 시 발주서 첨부) · 사장님실 정리
- 주간(208) 금요일 청소 · 퇴근 전 운행일지 / 월간(247) 매출·매입 마감(계산서 발행, SK텔레콤·한전 확인) · 인베스트 매출마감 · 급여/상여/일용/사업소득 대장 → 다솔 세무사무실 전달 · 기업은행 거래내역서 → 다솔·신차장 · 금호환경 대장 · 도장(월드) 시공비(연목·지엠) 엑셀 · 현장별매입매출(가구) 엑셀 · 화물차주 산재보험 신고
- 주기/연간(18) 전원 급여내역 선정리(외국인 소득세) · 비품 체크(2개월) · 코스콤 인증서 갱신 · 대표자 보수총액 신고(6월말) · 화물차주 산재요율 / 분기별 올바로 실적보고(연1회 2월말) / 비주기(119) 인베스트 택배·출고 건, 일용직 신고, 폐기물 교육 등 단발
- 🔑PFS·pfs 연동 후보 = 매출/매입 마감·거래명세·인베스트 출고·화물차주 산재·업무일지 = HM3 회계뷰와 같은 도메인(IQF/IQO 테이블과 1:1로 붙는다).
- devplan 반영 = 「업무(To Do)」 탭 재작성(
/api/todo) — 계정·스냅샷시각 표기(사이드카에서 읽음, 하드코딩 제거), 연도별 누적 카드, 목록별 주기 배지·활성/완료·기간, 활성 항목에 마감일(지난 건 빨강)·반복종류. 검증 = 4탭 200 + 실브라우저 렌더 육안(콘솔 = favicon 404뿐) +db/todo_data.json재생성 +sync.log에todo snapshot OK … poin912@naver.com. 허브 카드 desc 갱신·재빌드.
✅ 2026-08-11 작업2 완료 — QC1 파일 전수조사 + 대시보드 「파일·업무(QC1)」 탭
- 수집 =
qc1_scan.ps1(scp →-File실행, 읽기전용·Session0 비가시) → 28,339 파일 28.2GB의 경로·크기·수정일만 TSV로. 파일 내용은 안 열었다. 범위 =C:\qc1(공유) +C:\Users\main프로필 +C:\최상위 업무폴더(Down·Douzone·3DP·temp 등), Windows·Program Files·AppData 제외. QC1 임시파일 4개 삭제 완료. 산출db/qc1_files.tsv. - 🔑진짜 업무 폴더는 프로필이 아니라
C:\qc1공유 폴더(SMB 공유qc1) — 경리업무(비공유) 3,948 · 회사관련(구)자료 10,461 · 포인공용파일 1,198 · 사장님(개인) 152. 프로필 11,867 중 9,836이 Downloads(AutoCAD 설치본·드라이버 = 업무 아님). - 분류 =
qc1_files_build.py(폴더/파일명 문맥 규칙 + mtime) →db/qc1_files.json. 업무영역 18개 · 현행(2025~) 1,992개 · 미분류 잔여 9건(전수조사 검산용으로 화면에 남겨둠 — 조용한 절단 없음). - 현행 업무영역(현행 건수) = 카톡·팩스 수신문서 370 · 세무사사무실/신고 287 · 인베스트·쿠도스 전용거래 269 · 매출마감·거래명세서 203 · 급여/인사/노무 169 · 자재입고·사용량 157 · 거래처정보 등록 128 · 교육/검사 93 · 외주 시공·도장 마감 74 · 비품발주 29 · 인쇄서식·라벨 20 · 차량 18 · 업무일지/바탕화면 18 · 매입매출현황·결재 13 · 화물차주 산재보험 12 · 현금출납 3. 보관성 = 구자료 아카이브(10,959, 2025~ 17) · 사장님(개인)(152, 2025~ 5).
- 🔑작업1(To Do)에서 안 보이던 업무가 여기서 나온다 — To Do엔 월마감·자재확인 정도만 있었는데 파일로는 ①거래처별 매출마감 세트(마감내역서 xlsx + 거래명세서 pdf)를 매월 7~8개사 수작업 ②인베스트/쿠도스 전용 프로세스(작업지시서·출고요청서·인수증·건별 거래명세서 일련번호) ③외주 시공·도장 월마감 → 「매입매출전표 엑셀 불러오기 양식」으로 ERP 적재 ④화물차주 산재보험 월 신고 ⑤외국인근로 비자연장·육아휴직 등 노무 ⑥신규 거래처 사업자·통장 스캔 축적이 상시로 돈다. 12개 영역이 ERP에도 PFS에도 없는 엑셀 수작업(= 화면 「연동후보」 배지).
- 🔴중복 발견 = 자재 입고(현행 157건, 전부 2025~) —
8. 자재소요량, 엣지 및 기타\엣지입고에 「현장_업체_날짜.jpg」 명세서 사진을,자재사용량에 일자별 사진을 회계직원이 따로 쌓고 있다. PFS orderpaper·intake-check가 같은 카톡 사진을 이미 자동 수집하는 것과 같은 데이터 = 1순위 연동 후보. 상류도 확인됨 —Documents\카카오톡 받은 파일(현행 370)이 거래명세표·견적서의 실제 유입 경로. - devplan 반영 = HM3 대시보드 「파일·업무(QC1)」 탭 신설(
/api/files, 정적 JSON). 요약카드(업무영역·현행·연동후보·업무외) + 연도별 파일수 + 영역 카드(주기·담당 시스템·2026 건수·최근 갱신·주요 폴더·최근 파일 6개). 허브 카드 desc 3탭→4탭 갱신·build_hub.py재빌드 확인. - 검증 = 신설
_files_tab_check.py(헤드리스 실브라우저 1512×950) 17항목 ALL PASS — API 총계/현행/영역수, 영역마다 라벨·주기·설명, 미분류 9건, 카드 20 = 영역 20, 연동후보 배지 12, 경로 이스케이프 정상, 가로스크롤 0, 13px 미만 0곳, 콘솔 오류 0. - ⏳페페 = ①탭 육안 ②지목 — 어느 영역부터 PFS/자동화로 끌어올릴지(코디 추천 = 자재입고 중복 제거 → 매출마감 세트 생성 → 화물차주 산재 집계).
⏳ 페페 / 다음
- 페페 = ①대시보드 육안 검토(
http://100.108.234.45:8794/또는 devplan 허브 HM3 카드) ②미러 신선도 = 30분→늘릴 시점 지시. - 다음(코디) = 항목별 검토 후 회계뷰 구체화 — 전표(IQF_SNP_JOURNALS·IQF_GENERAL_JOURNALS)·총계정원장(IQF_GENERAL_BOOK)·거래처원장·재무제표·세금계산서(IQF_TAX_BOOK)를 회계프로그램형 화면으로. IQP/IQW/IQM 그룹 실제 도메인 규명(현재 "기타").
함정·규칙 (실측)
- 🔴🆕「어느 계정 데이터인가」는 추측 금지 — 레지스트리로 실측하고 산출물에 같이 담는다(2026-08-11 오조사). MS To Do 앱 캐시
AccountsRoot\<guid>\todosqlite.db엔 계정 이메일이 없다(members는 공유 상대일 뿐). 로그인 계정 =HKCU\SOFTWARE\Microsoft\IdentityCRL\UserExtendedProperties의 키 이름. 미니PC=delix0731@gmail.com(페페 개인) / QC1=poin912@naver.com(회사 업무). "PC에 앱이 깔려 있으니 그 계정이겠지"가 사고의 씨앗 — 캐시 폴더가 1개면 계정이 하나라는 뜻이지 원하는 그 계정이라는 뜻이 아니다. 코드에 계정명 하드코딩 금지, 수집 스크립트가account.json으로 같이 내려보낸다. - ⚠🆕
hm3_sync.ps1을 손으로 돌릴 땐 30분 예약작업과 겹치는지 본다 — 2026-08-11 14:20 수동 실행이 예약분과 겹쳐 740MB 두 개가 같은 WG 링크를 물고 5회 재시도 전부 150MB에서 끊김 →FAIL: transfer incomplete (replica untouched)(안전 게이트는 정상 동작, 복제본 무손상·다음 주기 자동 복구). To Do 스냅샷 단계(1b)는 4.6MB라 영향 없이 성공했다. 경량 확인만 필요하면qc1_todo_pull.ps1만 따로 돌린다. - 🆕앱이 열고 있는 SQLite 캐시 복사 =
[IO.File]::Open($p,'Open','Read','ReadWrite')스트림 복사(Copy-Item은 잠금에 막힐 수 있다).-wal/-shm도 같이 옮기고, 교체할 땐 옛-wal/-shm을 먼저 지운다(새 db에 옛 wal이 남으면 엉뚱한 내용을 읽는다). - 🆕HM3 대시보드도 devplan 화면 규칙을 따른다 — 글자 13px 미만 금지(신규 「파일·업무」 탭 최초 검사에서 206곳 FAIL → 인라인 12/11/10px 전부 13px +
#pane-files .badge,.fl{13px}). 새 탭 추가 시 헤드리스로 computed font-size부터 본다. - 🆕QC1 전수 스캔 = 경로·크기·mtime만(파일 내용 미열람).
Get-ChildItem -Recurse -File -Force+ StreamWriter UTF8(BOM 없음)로 28,339행 TSV, 로컬은utf-8로 읽는다(Out-File -Encoding UTF8은 BOM이 붙어utf-8-sig필요 — 큰 목록은 StreamWriter 쪽이 안전). - ⚠같은 시각 다른 세션이
hm3_server.py를 동시 편집(To Do 소스를 delix 로컬 캐시 → QC1 스냅샷db/todo_qc1.db로 교체 중) — 편집 구역이 안 겹쳐 내 추가분은 무사했으나, 서버 재시작 시 남의 중간 상태가 같이 뜬다(재시작 직후/api/todo500 관측 → 상대 세션이 마치자 200 복구, 내 변경과 무관). 공용 상주 서버를 고칠 땐 재시작 전에 다른 세션 편집 여부를 본다. - 🔴QC1 = 직원 실사용 PC → 모든 원격작업 백그라운드·비가시·무방해(하드룰, 메모리
qc1-remote-work-invisible·rules/remote.md). SSH=Session0라 안 보임. GUI/schtasks /IT 금지, 미러는 미니PC 주도, QC1 임시파일 삭제. - QC1 절전 = SSH·ICMP 동반 다운(WG 경로·타 사무실PC는 정상인데 .25만 죽으면 QC1 절전/종료).
powercfg standby/hibernate 0적용했으나 재부팅·수동절전 여지 있음. - SSH stdin heredoc(
powershell -Command -)은 이 링크에서 잘림 → 스크립트 scp 후-File실행. 출력 필터는 로컬 bash(원격^|파이프 깨짐), 판정은 ASCII 토큰. - SQL setup 인자에 공백 계정(
NT AUTHORITY\SYSTEM)은 파싱 깨짐 → ConfigurationFile.ini. pythonw엔 stdout 없음 →sys.stdout.reconfigure가드 필수. - 접속 =
ssh qc1(main@192.168.0.25, 키C:\dev\.secrets\qc1_ed25519). 스크립트 =C:\dev\hm3\(sync/server/backup_qc1 + hidden vbs 2개 + hm3_sql.ini). SQL설치본 =C:\dev\hm3\SQLEXPR_x64_ENU.exe·SqlLocalDB.msi·sqlexpr\(정리 가능).