[Refactor] 소프트웨어 자산 데이터 스키마 통합 및 백엔드/프론트엔드 최적화 완료 #15

Open
opened 2026-04-30 09:37:19 +09:00 by Taehoon · 1 comment
Owner

[Refactor] 소프트웨어 자산 데이터 스키마 통합 및 백엔드/프론트엔드 최적화 완료

1. 개요 (Overview)

기존 시스템에 분산되어 있던 구독/영구 소프트웨어 자산 테이블 구조를 최신 통합 스키마(asset_software_subscription, asset_software_perpetual)로 이관하고, 관련 API 엔드포인트 및 프론트엔드 데이터 처리 로직을 전면 개편하였습니다. 이를 통해 데이터 정합성과 시스템의 전반적인 안정성을 확보했습니다.

2. 상세 작업 내역 (Changes)

A. 데이터베이스 & 백엔드 (Backend)

  • SW 스키마 통합:
    • subscription_sw, permanent_sw 형태의 기존 테이블을 신규 asset_software_* 구조로 변경.
    • 이관 시 계정 정보(account_name) 추가 및 구매/시작/만료일 등 세부 속성 맵핑 강화.
  • API 안정화 (server.js):
    • 하드웨어(PC/서버 등) 조회 시 발생하던 필드 매핑 참조 오류(HW_SELECT_FIELDS) 해결.
    • 전역 에러 핸들링 도입: 빈 응답([]) 반환 처리로 프론트엔드 크래시 방지.
    • 요청 디버깅을 위한 Request Logger([ISO-Date] METHOD URL) 도입.

B. 프론트엔드 (Frontend)

  • API 엔드포인트 동기화 (src/core/state.ts):
    • 모든 자산 로딩 및 일괄 저장(Batch Save) 로직을 최신 통합 API 경로로 맵핑(api/asset/.../batch).
    • 데이터 로드 시 빈 객체/배열 검증 로직 추가.
  • 날짜 정규화 고도화 (src/core/utils.ts):
    • YYYY.MM.DD 포맷 외에 YYYYMM(6자리) 포맷 데이터도 정상 파싱하도록 로직(normalizeDate) 보완.
  • 할당 수량 로직 최적화 (SwDashboard.ts, SwListView.ts):
    • 통합된 사용자 할당 구조(asset_software_assignment)를 기반으로 현재 할당된 총 수량 및 잔여(가용) 라이선스 수량 계산 로직 전면 수정.

C. 환경 정리 (Cleanup)

  • 사용이 완료된 임시 진단/이관 스크립트 전량 삭제 (check_db.js, diagnose_*.js, migrate_sw_data.js 등).
  • 관련 임시 이슈 문서(docs/issues/...) 제거 완료.

3. 검증 (Verification)

  • 서버(Vite, Express) 정상 구동 및 로컬/네트워크(Host) 접속 확인.
  • 프론트엔드 대시보드 및 리스트 페이지(PC, 서버, SW, 클라우드 등) 에러 없는 정상 렌더링 확인.
  • 진단 스크립트 및 더미 파일이 최종 브랜치 커밋에서 제외되었음을 확인.
### [Refactor] 소프트웨어 자산 데이터 스키마 통합 및 백엔드/프론트엔드 최적화 완료 #### 1. 개요 (Overview) 기존 시스템에 분산되어 있던 구독/영구 소프트웨어 자산 테이블 구조를 최신 통합 스키마(`asset_software_subscription`, `asset_software_perpetual`)로 이관하고, 관련 API 엔드포인트 및 프론트엔드 데이터 처리 로직을 전면 개편하였습니다. 이를 통해 데이터 정합성과 시스템의 전반적인 안정성을 확보했습니다. #### 2. 상세 작업 내역 (Changes) **A. 데이터베이스 & 백엔드 (Backend)** - **SW 스키마 통합**: - `subscription_sw`, `permanent_sw` 형태의 기존 테이블을 신규 `asset_software_*` 구조로 변경. - 이관 시 계정 정보(`account_name`) 추가 및 구매/시작/만료일 등 세부 속성 맵핑 강화. - **API 안정화 (`server.js`)**: - 하드웨어(PC/서버 등) 조회 시 발생하던 필드 매핑 참조 오류(`HW_SELECT_FIELDS`) 해결. - 전역 에러 핸들링 도입: 빈 응답(`[]`) 반환 처리로 프론트엔드 크래시 방지. - 요청 디버깅을 위한 Request Logger(`[ISO-Date] METHOD URL`) 도입. **B. 프론트엔드 (Frontend)** - **API 엔드포인트 동기화 (`src/core/state.ts`)**: - 모든 자산 로딩 및 일괄 저장(Batch Save) 로직을 최신 통합 API 경로로 맵핑(`api/asset/.../batch`). - 데이터 로드 시 빈 객체/배열 검증 로직 추가. - **날짜 정규화 고도화 (`src/core/utils.ts`)**: - `YYYY.MM.DD` 포맷 외에 `YYYYMM`(6자리) 포맷 데이터도 정상 파싱하도록 로직(`normalizeDate`) 보완. - **할당 수량 로직 최적화 (`SwDashboard.ts`, `SwListView.ts`)**: - 통합된 사용자 할당 구조(`asset_software_assignment`)를 기반으로 현재 할당된 총 수량 및 잔여(가용) 라이선스 수량 계산 로직 전면 수정. **C. 환경 정리 (Cleanup)** - 사용이 완료된 임시 진단/이관 스크립트 전량 삭제 (`check_db.js`, `diagnose_*.js`, `migrate_sw_data.js` 등). - 관련 임시 이슈 문서(`docs/issues/...`) 제거 완료. #### 3. 검증 (Verification) - [x] 서버(Vite, Express) 정상 구동 및 로컬/네트워크(Host) 접속 확인. - [x] 프론트엔드 대시보드 및 리스트 페이지(PC, 서버, SW, 클라우드 등) 에러 없는 정상 렌더링 확인. - [x] 진단 스크립트 및 더미 파일이 최종 브랜치 커밋에서 제외되었음을 확인.
Author
Owner

🚀 DB V3 정규화 및 UI 동적 렌더링 고도화 완료 보고

1. DB 스키마 정규화 (V3 구조 적용)

  • 기존 파편화된 테이블(asset_pc, asset_server 등)을 데이터 성격에 따라 5개의 통합 테이블로 완전 분리했습니다.
    • asset_core: 공통 자산 식별 정보 및 현 용도(current_role) 관리
    • asset_spec: 하드웨어 물리적 제원(CPU, RAM, GPU 등) 관리
    • asset_volume: 스토리지 정보를 1:N 구조로 분리 (문자열에서 숫자형 용량+단위로 정규화, 602건 마이그레이션)
    • asset_location: 위치 변동 이력 보존 (is_active 플래그 사용)
    • asset_network: IP 및 원격 접속 정보 분리 및 이력 보존 (is_active 플래그 사용)
  • 약 314건의 기존 데이터를 신규 스키마로 데이터 유실 없이 성공적으로 마이그레이션했습니다.

2. 백엔드(API) 최적화

  • 구형 분산 조회 API들을 /api/assets/master 단일 엔드포인트로 통합하여 로딩 성능을 극대화했습니다.
  • ONLY_FULL_GROUP_BY SQL 제약조건 충돌 에러를 상관 서브쿼리(Correlated Subquery)로 해결하여 서버 안정성을 확보했습니다.
  • 자산 저장(save) 및 삭제(delete) 시 정규화된 테이블 전반에 걸쳐 데이터가 안전하게 트랜잭션/Cascade 처리되도록 수정했습니다.

3. 프론트엔드 UI 동적 렌더링 적용 (HWModal)

  • '현 용도(Current Role)' 상태 필드를 도입했습니다. (개인용 / 서버용 / 일반)
  • 선택된 용도에 따라 불필요한 입력 폼(예: 개인 PC의 네트워크/원격 접속 정보)을 자동으로 숨기거나 표시하는 동적 가시성 제어 로직을 구현했습니다.
  • 화면에서는 숨겨지더라도 과거 사용 이력(IP, 원격 비번 등)은 DB 상에 is_active=0 상태로 영구 보존되어 언제든 추적이 가능합니다.

4. 레거시 데이터 정리

  • V3 고도화 및 시스템 안정성 확인 후, 더 이상 사용되지 않는 구형 테이블 및 임시 백업 테이블 16개를 안전하게 완전 삭제(DROP)하여 DB 용량 및 구조를 최적화했습니다.
### 🚀 DB V3 정규화 및 UI 동적 렌더링 고도화 완료 보고 **1. DB 스키마 정규화 (V3 구조 적용)** - 기존 파편화된 테이블(`asset_pc`, `asset_server` 등)을 데이터 성격에 따라 5개의 통합 테이블로 완전 분리했습니다. - `asset_core`: 공통 자산 식별 정보 및 현 용도(`current_role`) 관리 - `asset_spec`: 하드웨어 물리적 제원(CPU, RAM, GPU 등) 관리 - `asset_volume`: 스토리지 정보를 1:N 구조로 분리 (문자열에서 숫자형 용량+단위로 정규화, 602건 마이그레이션) - `asset_location`: 위치 변동 이력 보존 (`is_active` 플래그 사용) - `asset_network`: IP 및 원격 접속 정보 분리 및 이력 보존 (`is_active` 플래그 사용) - 약 314건의 기존 데이터를 신규 스키마로 데이터 유실 없이 성공적으로 마이그레이션했습니다. **2. 백엔드(API) 최적화** - 구형 분산 조회 API들을 `/api/assets/master` 단일 엔드포인트로 통합하여 로딩 성능을 극대화했습니다. - `ONLY_FULL_GROUP_BY` SQL 제약조건 충돌 에러를 상관 서브쿼리(Correlated Subquery)로 해결하여 서버 안정성을 확보했습니다. - 자산 저장(`save`) 및 삭제(`delete`) 시 정규화된 테이블 전반에 걸쳐 데이터가 안전하게 트랜잭션/Cascade 처리되도록 수정했습니다. **3. 프론트엔드 UI 동적 렌더링 적용 (`HWModal`)** - **'현 용도(Current Role)'** 상태 필드를 도입했습니다. (개인용 / 서버용 / 일반) - 선택된 용도에 따라 불필요한 입력 폼(예: 개인 PC의 네트워크/원격 접속 정보)을 자동으로 숨기거나 표시하는 동적 가시성 제어 로직을 구현했습니다. - 화면에서는 숨겨지더라도 과거 사용 이력(IP, 원격 비번 등)은 DB 상에 `is_active=0` 상태로 영구 보존되어 언제든 추적이 가능합니다. **4. 레거시 데이터 정리** - V3 고도화 및 시스템 안정성 확인 후, 더 이상 사용되지 않는 구형 테이블 및 임시 백업 테이블 16개를 안전하게 완전 삭제(DROP)하여 DB 용량 및 구조를 최적화했습니다.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Taehoon/ITAM#15