From bb859dddfc8713a90bd2c742e81e9def0965dde3 Mon Sep 17 00:00:00 2001 From: JooWangi Date: Tue, 2 Jun 2026 10:23:18 +0900 Subject: [PATCH 01/16] temp: save local progress before merge --- PC_사양_개선_기획서.html | 379 + PC_사양_적정성_분석_기획서.html | 429 + SampleData_PC.xlsx | Bin 0 -> 97733 bytes SampleData_SVR.xlsx | Bin 0 -> 185065 bytes public/PC_사양_적정성_분석_기획서.html | 429 + scratch/calculate_job_averages.js | 163 + scratch/parse_excel.js | 30 + scratch/parse_svr_excel.js | 27 + scratch/update_dummy_pcs.js | 447 + scratch/update_dummy_servers.js | 442 + src/components/Modal/SharedData.ts | 2 +- src/components/Navigation.ts | 2 +- src/core/dummyData.ts | 10695 +++++++++++++++++++++++ src/core/state.ts | 122 +- src/main.ts | 11 +- src/styles/common.css | 8 +- src/styles/dashboard.css | 190 +- src/styles/guide.css | 16 +- src/styles/modal.css | 30 +- src/styles/table.css | 12 +- src/views/Dashboard/HwDashboard.ts | 33 +- 21 files changed, 13296 insertions(+), 171 deletions(-) create mode 100644 PC_사양_개선_기획서.html create mode 100644 PC_사양_적정성_분석_기획서.html create mode 100644 SampleData_PC.xlsx create mode 100644 SampleData_SVR.xlsx create mode 100644 public/PC_사양_적정성_분석_기획서.html create mode 100644 scratch/calculate_job_averages.js create mode 100644 scratch/parse_excel.js create mode 100644 scratch/parse_svr_excel.js create mode 100644 scratch/update_dummy_pcs.js create mode 100644 scratch/update_dummy_servers.js create mode 100644 src/core/dummyData.ts diff --git a/PC_사양_개선_기획서.html b/PC_사양_개선_기획서.html new file mode 100644 index 0000000..ded45ee --- /dev/null +++ b/PC_사양_개선_기획서.html @@ -0,0 +1,379 @@ + + + + + + PC 사양 대시보드 시각화 개선 기획서 + + + + + + + +
+
+
기획 명세서 / Product Specification
+

PC 사양 대시보드 시각화 개선 기획서

+
+ 기획부서: IT자산관리 태스크포스(TF) + 최종 수정일: 2026. 05. 28 + 문서 버전: v1.1 (실제 엑셀 데이터 반영) +
+
+ + +
+

기획 개요 및 목적

+

본 기획은 법인별/직무별 PC 자산 사양 현황의 시각적 피로도를 낮추고 데이터 전달력을 고도화하기 위한 개선 작업을 목적으로 합니다. 기존 대시보드 레이아웃의 비정형 비율을 재정립하고, 평균 점수와 권장 점수의 비교 방식을 '다중 막대' 형태에서 '혼합형(막대 + 꺾은선) 차트'로 변경하여 대조 직관성을 극대화합니다.

+
+ + +
+

주요 개선 내역

+ +
+

① 가족사별 PC 사양 현황 레이아웃 고도화

+
    +
  • 가로 비율 정밀 제어 (1:2): 평균 점수 리스트와 막대그래프의 가로 폭 비율을 1 : 2로 엄격하게 고정하여 반응형 레이아웃 환경에서도 깨짐 없는 균형미를 제공합니다.
  • +
  • 가독성 개선: 가족사 텍스트 크기를 0.95rem, 평균 사양 점수 텍스트 크기를 1.05rem으로 키우고 세로 행간 여백을 확보해 가시성을 향상시켰습니다.
  • +
+
+ +
+

② 직무별 PC 사양 평균 및 권장 점수 혼합 시각화

+
    +
  • 혼합형 차트(Mixed Chart) 구성: 직무별 PC 사양 평균 점수는 막대(Bar) 그래프로, 권장 PC 사양 점수는 그 위를 관통하는 선(Line) 그래프로 표현합니다.
  • +
  • 레이어 정렬 우선순위 적용: 차트 정의 시 권장 점수선(Line)이 평균 점수막대(Bar) 뒤에 가리지 않고 항상 맨 앞에 위치하도록 렌더링 우선순위(order 속성)를 명확히 지정합니다.
  • +
  • 정렬 원복: 수동 정렬을 지양하고, 직무별 실제 평균 PC 사양 점수가 높은 순으로 자동 내림차순 정렬되도록 하여 가장 자연스러운 시각화를 구축합니다.
  • +
+
+
+ + +
+

직무별 평균 및 권장 사양 점수 스펙

+

실제 PC 자산 데이터(CPU 및 RAM 점수 연산 결과)와 관리자의 권장 기준선이 아래 명시된 대소 조건 관계를 완벽히 만족하도록 더미 데이터 및 초기 권장 스펙 기준을 재정의했습니다.

+ +
+ 대소 관계 정렬 순서 (실제 평균 점수 기준):
+ AI 개발자 ➔ 편집 디자이너 ➔ 3D 디자이너 ➔ UXUI 디자이너 ➔ 3D 개발자 ➔ 프로그램 개발자 ➔ BIM모델러 ➔ 엔지니어 ➔ 웹 개발자 ➔ 기획자 순서로 실제 평균 점수 순위가 자동 정렬되어 시각화됩니다. (감리원은 실제 자산 데이터 부재로 비교군에서 제외) +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
정렬 순위직무명실제 평균 사양 점수 (Bar)기본 권장 사양 점수 (기준)대소 관계 평가
1AI 개발자88.0 점95 점미달 (교체 요망)
2편집 디자이너80.2 점75 점권장 스펙 충족
33D 디자이너78.4 점90 점미달 (교체 요망)
4UXUI 디자이너72.7 점70 점권장 스펙 충족
53D 개발자67.8 점90 점미달 (교체 요망)
6프로그램 개발자67.3 점80 점미달 (교체 요망)
7BIM모델러62.1 점75 점미달 (교체 요망)
8엔지니어42.9 점60 점미달 (교체 요망)
9웹 개발자39.2 점75 점미달 (교체 요망)
10기획자38.6 점50 점미달 (교체 요망)
11감리원-40.0 점데이터 없음
+
+
+ + +
+

기술 구현 세부 사양

+
+

차트 렌더링 옵션 (Chart.js v4.x+)

+

평균 PC 사양 점수를 보여주는 데이터셋과 권장 PC 사양 점수를 보여주는 데이터셋을 하나의 Canvas 엘리먼트에 그리되, 레이어 겹침과 시인성을 확보하기 위해 다음 세부 옵션을 바인딩합니다.

+
    +
  • Average Dataset: type: 'bar', order: 2, backgroundColor: '#6366F1'
  • +
  • Recommended Dataset: type: 'line', order: 1, borderColor: '#10B981', borderWidth: 3, pointRadius: 4, fill: false
  • +
  • 정렬 로직: Object.keys(jobScores).sort((a, b) => jobScores[b].avg - jobScores[a].avg)
  • +
+
+
+ +
+

© 2026 HM ITAM Systems. All rights reserved.

+
+
+ + diff --git a/PC_사양_적정성_분석_기획서.html b/PC_사양_적정성_분석_기획서.html new file mode 100644 index 0000000..60a01be --- /dev/null +++ b/PC_사양_적정성_분석_기획서.html @@ -0,0 +1,429 @@ + + + + + + PC 사양 적정성 분석 기획서 (GPU 반영) + + + + + + +
+ + +
+
기능 명세서 v3.0 — 100점 감점제 반영
+

PC 사양 적정성 분석 기획서
+ + 100점 만점 감점 방식 · 성능 감점 기준 · 실제 업무 효율성 평가 (CPU / RAM / GPU / 연식) + +

+
+
분석 지표CPU + RAM + GPU + 연식 (감점법)
+
최대 점수100점 (만점)
+
적정성 판별 기준직무별 목표 사양 대비 편차
+
최종 수정일2026. 05. 31
+
+
+ + +
+

1개요 — 100점 만점 감점형 성능 점수 체계

+

+ v3.0부터 PC 사양 점수는 100점 만점 기준 감점제로 산출됩니다. + 누적 합산 방식 대신, 최상급 부품 조합을 100점 만점으로 고정하고 사양이 저하되거나 연식이 노후화됨에 따라 + 성능 및 효율성 하락 폭을 감점하는 방식입니다. 이는 실제 업무 환경에서 PC 노후도에 따른 + 체감 생산성 저하를 훨씬 직관적이고 현실적으로 드러냅니다. +

+ +
+
① 기본 100점 만점
+
+
② CPU 등급/세대 감점
+
+
③ RAM 용량 감점
+
+
④ GPU 등급 감점
+
+
⑤ 연식 노후 감점
+
+
⑥ 최종 실질 성능 점수
+
+ +
+// ─── 최종 PC 사양 점수 (100점 만점, 최소 10점 보존) ─── +totalScore = max(10, 100 - (cpuDeduction + genDeduction + ramDeduction + gpuDeduction + ageDeduction)) +
+
+ + +
+

2CPU 사양 감점 기준

+

CPU 감점은 등급 감점(최대 -30점)세대 노후 감점(최대 -15점)의 합산입니다.

+ +
+// [CPU 등급 감점] +i9 / Ryzen 9 → 0점 감점 +i7 / Ryzen 7 → -5점 감점 +i5 / Ryzen 5 → -15점 감점 +i3 / Ryzen 3 → -25점 감점 +기타 → -30점 감점 + +// [CPU 세대 노후 감점] +최신 세대 (Intel 12~14세대, Ryzen 5000~7000시리즈 이상) → 0점 감점 +과도기 세대 (Intel 10~11세대, Ryzen 3000시리즈) → -5점 감점 +구형 세대 (Intel 8~9세대, Ryzen 1000~2000시리즈) → -10점 감점 +노후 세대 (Intel 7세대 이하, 구형 AMD) → -15점 감점 +
+ +

CPU 조합별 감점 예시

+
+ + + + + + + + + + + +
모델세대 구분등급감점세대감점CPU 감점 합계
i9-13900K최신 세대000점 (감점 없음)
i7-14700K최신 세대-50-5점
i7-1360P최신 세대 (노트북)-50-5점
i5-12400최신 세대-150-15점
i7-9700구형 세대-5-10-15점
i5-8500구형 세대-15-10-25점
i7-7700노후 세대-5-15-20점
+
+
+ + +
+

3RAM 용량 감점 기준

+

메모리 용량 부족에 따른 멀티태스킹 제약 및 병목 현상을 반영해 최대 -25점까지 감점합니다.

+
+ + + + + + + + +
RAM 용량감점 점수영향도평가
32GB 이상0점 (감점 없음)대용량 3D 및 개발 작업 원활최적
16GB-10점 감점일반 사무용 및 가벼운 멀티태스킹 적합보통
8GB-20점 감점브라우저 탭 다수 실행 시 물리 메모리 부족주의
8GB 미만-25점 감점기본 OS 구동 외 심각한 메모리 병목부족
+
+
+ + +
+

4GPU 성능 감점 기준

+

+ 3D 렌더링 및 고급 연산 처리 능력을 기준으로 외장 및 내장 GPU를 분류해 최대 -25점까지 감점합니다. + GPU 정보가 감지되지 않거나 없는 경우 기본적으로 내장 그래픽 수준인 -25점을 감점합니다. +

+ +
+ + + + + + + + +
등급제품군 구분대표 모델감점 점수적합 작업
S최상위 외장 GPURTX 4070~4090, RTX A4000~A60000점 (감점 없음)3D 그래픽, AI 연산, VR
A메인스트림 외장 GPURTX 3060~3070, RTX 2060, RTX A2000-5점 감점중급 개발, CAD 설계
B엔트리 외장 GPUGTX 1660, GTX 1060, RX 6600-15점 감점기본 CAD, 그래픽 보조
C내장 그래픽 및 기타Intel Iris Xe, UHD Graphics, Vega, GPU 없음-25점 감점오피스 사무, 문서 작업
+
+
+ + +
+

5감점법 종합 점수 계산 실사례

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
모델명CPU 사양 (감점)RAM 사양 (감점)GPU 사양 (감점)연식 (감점)감점 총합최종 점수
HP ZBook Fury 16Ryzen 9 7900X (0)64GB (0)NVIDIA RTX A2000 (-5)2년차 (-6)-1189점
Dell Precision 5680i9-13900K (0)64GB (0)NVIDIA RTX 4070 (0)2년차 (-6)-694점
LG Gram 17 Proi7-14700K (-5)32GB (0)NVIDIA RTX 4060 (-5)1년차 (-3)-1387점
LG Gram 16i7-1360P (-5)16GB (-10)Intel Iris Xe (-25)3년차 (-9)-4951점
Samsung Galaxy Book 3i5-1340P (-15)16GB (-10)Intel Iris Xe (-25)3년차 (-9)-5941점
HP EliteBook 840Ryzen 5 5600X (-15)16GB (-10)AMD Radeon Vega (-25)4년차 (-12)-6238점
HP ProDesk 400 G5i3-8100 (-35)8GB (-20)Intel UHD 630 (-25)5년 이상 (-15)-9510점(보존)
+
+
+ + +
+

6직무별 평균 및 권장 점수 기준 (100점 만점 감점형)

+

100점 만점 감점형 점수 체계를 실제 PC 데이터에 대입하여 산출된 각 직무별 평균 및 권장 목표 점수 기준선입니다.

+
+ + + + + + + + + + + + + + + + + +
정렬직무실제 데이터 평균 (감점 반영)기본 권장 점수 (목표)규칙
1AI 개발자88.0점95점최고
2편집 디자이너80.2점75점최고
33D 디자이너78.4점90점최고
4UXUI 디자이너72.7점70점고성능
53D 개발자67.8점90점최고
6프로그램 개발자67.3점80점고성능
7BIM모델러62.1점75점최고
8엔지니어42.9점60점고성능
9웹 개발자39.2점75점고성능
10기획자38.6점50점중간
11감리원-40점기본
+
+
+
📌 대소 관계 조건 충족 확인
+ AI 개발자(88.0) > 편집 디자이너(80.2) > 3D 디자이너(78.4) > UXUI 디자이너(72.7) > 3D 개발자(67.8) > 프로그램 개발자(67.3) > BIM모델러(62.1) > 엔지니어(42.9) > 웹 개발자(39.2) > 기획자(38.6) ✅ +
+
+ + +
+

7적정성 판별 기준

+

직무 내 실제 평균 점수를 기준으로 편차율을 산출하여 3단계로 판별합니다.

+
+avgScore = 해당 직무 소속 PC 점수들의 산술 평균 + +IF 개인 실질 점수 < avgScore × 0.80"사양 부족" (직무 평균 20% 이상 미달) +IF 개인 실질 점수 > avgScore × 1.30"오버스펙" (직무 평균 30% 이상 초과) +ELSE → "적정" +
+
+ + + + + + + +
판별 결과조건권장 조치
사양 부족실질 점수 < 직무 평균 × 0.8교체 또는 성능 업그레이드 우선 검토
적정직무 평균 × 0.8 ≤ 실질 점수 ≤ 직무 평균 × 1.3현행 업무 효율 유지
오버스펙실질 점수 > 직무 평균 × 1.3과스펙 장비 회수 또는 필요 부서 재배치
+
+
+ + +
+

8점수 신뢰도 및 한계 분석

+ +

✅ 신뢰 가능한 부분

+
+
    +
  • 3요소 합산으로 실제 성능 근접도 향상: CPU·RAM·GPU를 모두 반영함으로써 단순 CPU 점수 대비 실체감 성능과의 상관관계가 크게 개선되었습니다.
  • +
  • GPU 티어 방향성 일치: RTX 4090 > 4080 > 4070 … 순의 점수 순서는 실제 벤치마크(3DMark, PassMark GPU)와 일치합니다.
  • +
  • 내장/외장 구분 명확: 내장 그래픽(5~15점)과 독립 GPU(18점~)의 점수 구간이 명확히 분리되어 사양 격차를 직관적으로 반영합니다.
  • +
  • 직무별 상대 비교 합리성 유지: GPU 점수 추가 후에도 직무 내 평균 기준 편차율 판별 방식이 그대로 유지됩니다.
  • +
+
+ +

⚠️ 여전히 남아있는 한계점

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
한계 항목내용영향도
노트북 TDP 미반영i7-1360P (노트북 28W)와 i7-13700K (데스크탑 125W)는 같은 세대지만 실제 성능 차이가 큽니다. 현재는 동일 점수가 부여됩니다.중간
SSD 유형 미반영NVMe SSD와 HDD의 체감 속도 차이는 크지만 점수에 포함되지 않습니다.중간
GPU 세부 파생 모델 한계RTX 4060 Laptop과 RTX 4060 Desktop은 성능 차이가 있으나 동일 점수(50점)를 받습니다.중간
GPU 세대 보정 미적용CPU와 달리 GPU는 세대 보정 없이 모델명 매핑 방식만 사용됩니다. 향후 세대별 보정을 검토할 수 있습니다.낮음
실측 벤치마크 미연동3DMark / PassMark GPU 실측값이 아닌 모델명 파싱 추정치입니다.중간
+
+ +
+
💡 종합 신뢰도 평가
+ GPU 점수 반영 후 특히 디자이너·개발자와 같은 그래픽 집약적 직무의 적정성 판별 정확도가 대폭 향상되었습니다. + 다만 노트북 TDP, SSD 유형 등 추가 변수를 향후 보완하면 신뢰도를 더 끌어올릴 수 있습니다. + 현 시점에서 본 점수 체계는 "절대적 성능 수치"가 아닌 "조직 내 직무별 상대 비교 도구"로 활용하는 것이 가장 적합합니다. +
+
+ + +
+

9향후 개선 로드맵

+
+ + + + + + + + + + +
우선순위항목기대 효과난이도
완료GPU 점수 반영 (v2.0)그래픽 직무 신뢰도 대폭 향상
권장SSD 유형별 점수 추가 (NVMe/SATA/HDD)실체감 체감 속도 반영
권장노트북/데스크탑 TDP 보정모바일 CPU 과대평가 방지
선택PassMark / 3DMark 실측 DB 내장 연동추정치 → 실측값 전환
선택직무별 항목 가중치 커스터마이징조직 특성 맞춤 정밀 점수화
선택RMM 에이전트 실시간 자원 점유율 연동실사용 기반 교체 우선순위 추천
+
+
+ +
+

HM ITAM — PC 사양 적정성 분석 기획서 v2.0 (GPU 반영)  ·  2026. 05. 28

+

내부 검토용 문서입니다. 무단 외부 배포를 금합니다.

+
+ +
+ + diff --git a/SampleData_PC.xlsx b/SampleData_PC.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..0c527856c761115f22517a4140c1abb642941858 GIT binary patch literal 97733 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 SgKA|#hRMLZC{qc{1PlOAbAr$S literal 0 HcmV?d00001 diff --git a/SampleData_SVR.xlsx b/SampleData_SVR.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e137431c09a16924fd9b753b6811fe118f6928de GIT binary patch literal 185065 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%0DUQFEfd8f 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 R&OHU=D;UH7jA;k}{1;fhHw^#) literal 0 HcmV?d00001 diff --git a/public/PC_사양_적정성_분석_기획서.html b/public/PC_사양_적정성_분석_기획서.html new file mode 100644 index 0000000..60a01be --- /dev/null +++ b/public/PC_사양_적정성_분석_기획서.html @@ -0,0 +1,429 @@ + + + + + + PC 사양 적정성 분석 기획서 (GPU 반영) + + + + + + +
+ + +
+
기능 명세서 v3.0 — 100점 감점제 반영
+

PC 사양 적정성 분석 기획서
+ + 100점 만점 감점 방식 · 성능 감점 기준 · 실제 업무 효율성 평가 (CPU / RAM / GPU / 연식) + +

+
+
분석 지표CPU + RAM + GPU + 연식 (감점법)
+
최대 점수100점 (만점)
+
적정성 판별 기준직무별 목표 사양 대비 편차
+
최종 수정일2026. 05. 31
+
+
+ + +
+

1개요 — 100점 만점 감점형 성능 점수 체계

+

+ v3.0부터 PC 사양 점수는 100점 만점 기준 감점제로 산출됩니다. + 누적 합산 방식 대신, 최상급 부품 조합을 100점 만점으로 고정하고 사양이 저하되거나 연식이 노후화됨에 따라 + 성능 및 효율성 하락 폭을 감점하는 방식입니다. 이는 실제 업무 환경에서 PC 노후도에 따른 + 체감 생산성 저하를 훨씬 직관적이고 현실적으로 드러냅니다. +

+ +
+
① 기본 100점 만점
+
+
② CPU 등급/세대 감점
+
+
③ RAM 용량 감점
+
+
④ GPU 등급 감점
+
+
⑤ 연식 노후 감점
+
+
⑥ 최종 실질 성능 점수
+
+ +
+// ─── 최종 PC 사양 점수 (100점 만점, 최소 10점 보존) ─── +totalScore = max(10, 100 - (cpuDeduction + genDeduction + ramDeduction + gpuDeduction + ageDeduction)) +
+
+ + +
+

2CPU 사양 감점 기준

+

CPU 감점은 등급 감점(최대 -30점)세대 노후 감점(최대 -15점)의 합산입니다.

+ +
+// [CPU 등급 감점] +i9 / Ryzen 9 → 0점 감점 +i7 / Ryzen 7 → -5점 감점 +i5 / Ryzen 5 → -15점 감점 +i3 / Ryzen 3 → -25점 감점 +기타 → -30점 감점 + +// [CPU 세대 노후 감점] +최신 세대 (Intel 12~14세대, Ryzen 5000~7000시리즈 이상) → 0점 감점 +과도기 세대 (Intel 10~11세대, Ryzen 3000시리즈) → -5점 감점 +구형 세대 (Intel 8~9세대, Ryzen 1000~2000시리즈) → -10점 감점 +노후 세대 (Intel 7세대 이하, 구형 AMD) → -15점 감점 +
+ +

CPU 조합별 감점 예시

+
+ + + + + + + + + + + +
모델세대 구분등급감점세대감점CPU 감점 합계
i9-13900K최신 세대000점 (감점 없음)
i7-14700K최신 세대-50-5점
i7-1360P최신 세대 (노트북)-50-5점
i5-12400최신 세대-150-15점
i7-9700구형 세대-5-10-15점
i5-8500구형 세대-15-10-25점
i7-7700노후 세대-5-15-20점
+
+
+ + +
+

3RAM 용량 감점 기준

+

메모리 용량 부족에 따른 멀티태스킹 제약 및 병목 현상을 반영해 최대 -25점까지 감점합니다.

+
+ + + + + + + + +
RAM 용량감점 점수영향도평가
32GB 이상0점 (감점 없음)대용량 3D 및 개발 작업 원활최적
16GB-10점 감점일반 사무용 및 가벼운 멀티태스킹 적합보통
8GB-20점 감점브라우저 탭 다수 실행 시 물리 메모리 부족주의
8GB 미만-25점 감점기본 OS 구동 외 심각한 메모리 병목부족
+
+
+ + +
+

4GPU 성능 감점 기준

+

+ 3D 렌더링 및 고급 연산 처리 능력을 기준으로 외장 및 내장 GPU를 분류해 최대 -25점까지 감점합니다. + GPU 정보가 감지되지 않거나 없는 경우 기본적으로 내장 그래픽 수준인 -25점을 감점합니다. +

+ +
+ + + + + + + + +
등급제품군 구분대표 모델감점 점수적합 작업
S최상위 외장 GPURTX 4070~4090, RTX A4000~A60000점 (감점 없음)3D 그래픽, AI 연산, VR
A메인스트림 외장 GPURTX 3060~3070, RTX 2060, RTX A2000-5점 감점중급 개발, CAD 설계
B엔트리 외장 GPUGTX 1660, GTX 1060, RX 6600-15점 감점기본 CAD, 그래픽 보조
C내장 그래픽 및 기타Intel Iris Xe, UHD Graphics, Vega, GPU 없음-25점 감점오피스 사무, 문서 작업
+
+
+ + +
+

5감점법 종합 점수 계산 실사례

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
모델명CPU 사양 (감점)RAM 사양 (감점)GPU 사양 (감점)연식 (감점)감점 총합최종 점수
HP ZBook Fury 16Ryzen 9 7900X (0)64GB (0)NVIDIA RTX A2000 (-5)2년차 (-6)-1189점
Dell Precision 5680i9-13900K (0)64GB (0)NVIDIA RTX 4070 (0)2년차 (-6)-694점
LG Gram 17 Proi7-14700K (-5)32GB (0)NVIDIA RTX 4060 (-5)1년차 (-3)-1387점
LG Gram 16i7-1360P (-5)16GB (-10)Intel Iris Xe (-25)3년차 (-9)-4951점
Samsung Galaxy Book 3i5-1340P (-15)16GB (-10)Intel Iris Xe (-25)3년차 (-9)-5941점
HP EliteBook 840Ryzen 5 5600X (-15)16GB (-10)AMD Radeon Vega (-25)4년차 (-12)-6238점
HP ProDesk 400 G5i3-8100 (-35)8GB (-20)Intel UHD 630 (-25)5년 이상 (-15)-9510점(보존)
+
+
+ + +
+

6직무별 평균 및 권장 점수 기준 (100점 만점 감점형)

+

100점 만점 감점형 점수 체계를 실제 PC 데이터에 대입하여 산출된 각 직무별 평균 및 권장 목표 점수 기준선입니다.

+
+ + + + + + + + + + + + + + + + + +
정렬직무실제 데이터 평균 (감점 반영)기본 권장 점수 (목표)규칙
1AI 개발자88.0점95점최고
2편집 디자이너80.2점75점최고
33D 디자이너78.4점90점최고
4UXUI 디자이너72.7점70점고성능
53D 개발자67.8점90점최고
6프로그램 개발자67.3점80점고성능
7BIM모델러62.1점75점최고
8엔지니어42.9점60점고성능
9웹 개발자39.2점75점고성능
10기획자38.6점50점중간
11감리원-40점기본
+
+
+
📌 대소 관계 조건 충족 확인
+ AI 개발자(88.0) > 편집 디자이너(80.2) > 3D 디자이너(78.4) > UXUI 디자이너(72.7) > 3D 개발자(67.8) > 프로그램 개발자(67.3) > BIM모델러(62.1) > 엔지니어(42.9) > 웹 개발자(39.2) > 기획자(38.6) ✅ +
+
+ + +
+

7적정성 판별 기준

+

직무 내 실제 평균 점수를 기준으로 편차율을 산출하여 3단계로 판별합니다.

+
+avgScore = 해당 직무 소속 PC 점수들의 산술 평균 + +IF 개인 실질 점수 < avgScore × 0.80"사양 부족" (직무 평균 20% 이상 미달) +IF 개인 실질 점수 > avgScore × 1.30"오버스펙" (직무 평균 30% 이상 초과) +ELSE → "적정" +
+
+ + + + + + + +
판별 결과조건권장 조치
사양 부족실질 점수 < 직무 평균 × 0.8교체 또는 성능 업그레이드 우선 검토
적정직무 평균 × 0.8 ≤ 실질 점수 ≤ 직무 평균 × 1.3현행 업무 효율 유지
오버스펙실질 점수 > 직무 평균 × 1.3과스펙 장비 회수 또는 필요 부서 재배치
+
+
+ + +
+

8점수 신뢰도 및 한계 분석

+ +

✅ 신뢰 가능한 부분

+
+
    +
  • 3요소 합산으로 실제 성능 근접도 향상: CPU·RAM·GPU를 모두 반영함으로써 단순 CPU 점수 대비 실체감 성능과의 상관관계가 크게 개선되었습니다.
  • +
  • GPU 티어 방향성 일치: RTX 4090 > 4080 > 4070 … 순의 점수 순서는 실제 벤치마크(3DMark, PassMark GPU)와 일치합니다.
  • +
  • 내장/외장 구분 명확: 내장 그래픽(5~15점)과 독립 GPU(18점~)의 점수 구간이 명확히 분리되어 사양 격차를 직관적으로 반영합니다.
  • +
  • 직무별 상대 비교 합리성 유지: GPU 점수 추가 후에도 직무 내 평균 기준 편차율 판별 방식이 그대로 유지됩니다.
  • +
+
+ +

⚠️ 여전히 남아있는 한계점

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
한계 항목내용영향도
노트북 TDP 미반영i7-1360P (노트북 28W)와 i7-13700K (데스크탑 125W)는 같은 세대지만 실제 성능 차이가 큽니다. 현재는 동일 점수가 부여됩니다.중간
SSD 유형 미반영NVMe SSD와 HDD의 체감 속도 차이는 크지만 점수에 포함되지 않습니다.중간
GPU 세부 파생 모델 한계RTX 4060 Laptop과 RTX 4060 Desktop은 성능 차이가 있으나 동일 점수(50점)를 받습니다.중간
GPU 세대 보정 미적용CPU와 달리 GPU는 세대 보정 없이 모델명 매핑 방식만 사용됩니다. 향후 세대별 보정을 검토할 수 있습니다.낮음
실측 벤치마크 미연동3DMark / PassMark GPU 실측값이 아닌 모델명 파싱 추정치입니다.중간
+
+ +
+
💡 종합 신뢰도 평가
+ GPU 점수 반영 후 특히 디자이너·개발자와 같은 그래픽 집약적 직무의 적정성 판별 정확도가 대폭 향상되었습니다. + 다만 노트북 TDP, SSD 유형 등 추가 변수를 향후 보완하면 신뢰도를 더 끌어올릴 수 있습니다. + 현 시점에서 본 점수 체계는 "절대적 성능 수치"가 아닌 "조직 내 직무별 상대 비교 도구"로 활용하는 것이 가장 적합합니다. +
+
+ + +
+

9향후 개선 로드맵

+
+ + + + + + + + + + +
우선순위항목기대 효과난이도
완료GPU 점수 반영 (v2.0)그래픽 직무 신뢰도 대폭 향상
권장SSD 유형별 점수 추가 (NVMe/SATA/HDD)실체감 체감 속도 반영
권장노트북/데스크탑 TDP 보정모바일 CPU 과대평가 방지
선택PassMark / 3DMark 실측 DB 내장 연동추정치 → 실측값 전환
선택직무별 항목 가중치 커스터마이징조직 특성 맞춤 정밀 점수화
선택RMM 에이전트 실시간 자원 점유율 연동실사용 기반 교체 우선순위 추천
+
+
+ +
+

HM ITAM — PC 사양 적정성 분석 기획서 v2.0 (GPU 반영)  ·  2026. 05. 28

+

내부 검토용 문서입니다. 무단 외부 배포를 금합니다.

+
+ +
+ + diff --git a/scratch/calculate_job_averages.js b/scratch/calculate_job_averages.js new file mode 100644 index 0000000..7b10e41 --- /dev/null +++ b/scratch/calculate_job_averages.js @@ -0,0 +1,163 @@ +import * as fs from 'fs'; + +// dummyData.ts를 읽어와서 dummyPCs 파싱 +const content = fs.readFileSync('c:/Project/HM ITAM/src/core/dummyData.ts', 'utf-8'); + +// export const dummyPCs: any[] = [ ... ]; 패턴 추출 +const match = content.match(/export const dummyPCs: any\[\] = (\[[\s\S]*?\]);/); +if (!match) { + console.error('Failed to parse dummyPCs from dummyData.ts'); + process.exit(1); +} + +const dummyPCs = JSON.parse(match[1]); + +function calculatePcScoreDeductive(cpu, ram, gpu, purchaseDate) { + let score = 100; + + // 1. CPU 등급 감점 + const cpuUpper = (cpu || '').toUpperCase(); + let cpuDeduction = 0; + if (cpuUpper.includes('I9') || cpuUpper.includes('RYZEN 9') || cpuUpper.includes('RYZEN9')) { + cpuDeduction = 0; + } else if (cpuUpper.includes('I7') || cpuUpper.includes('RYZEN 7') || cpuUpper.includes('RYZEN7')) { + cpuDeduction = 5; + } else if (cpuUpper.includes('I5') || cpuUpper.includes('RYZEN 5') || cpuUpper.includes('RYZEN5')) { + cpuDeduction = 15; + } else if (cpuUpper.includes('I3') || cpuUpper.includes('RYZEN 3') || cpuUpper.includes('RYZEN3')) { + cpuDeduction = 25; + } else { + cpuDeduction = 30; + } + score -= cpuDeduction; + + // 2. CPU 세대 감점 + let genDeduction = 0; + let intelMatch = cpuUpper.match(/I\d-?(\d+)/); + let gen = 0; + if (intelMatch && intelMatch[1]) { + const numStr = intelMatch[1]; + if (numStr.length === 5) gen = parseInt(numStr.substring(0, 2), 10); + else if (numStr.length === 4) gen = parseInt(numStr.substring(0, 1), 10); + } + + let amdMatch = cpuUpper.match(/RYZEN\s?\d\s?-?(\d+)/); + let amdGen = 0; + if (amdMatch && amdMatch[1] && !intelMatch) { + const numStr = amdMatch[1]; + if (numStr.length === 4) amdGen = parseInt(numStr.substring(0, 1), 10); + } + + if (intelMatch) { + if (gen >= 12) genDeduction = 0; + else if (gen >= 10) genDeduction = 5; + else if (gen >= 8) genDeduction = 10; + else genDeduction = 15; + } else if (amdMatch) { + if (amdGen >= 5) genDeduction = 0; + else if (amdGen >= 3) genDeduction = 5; + else genDeduction = 10; + } else { + genDeduction = 15; + } + score -= genDeduction; + + // 3. RAM 용량 감점 + const ramUpper = (ram || '').toUpperCase(); + const ramMatch = ramUpper.match(/(\d+)\s*GB/); + let ramDeduction = 25; + if (ramMatch && ramMatch[1]) { + const ramVal = parseInt(ramMatch[1], 10); + if (ramVal >= 32) ramDeduction = 0; + else if (ramVal >= 16) ramDeduction = 10; + else if (ramVal >= 8) ramDeduction = 20; + else ramDeduction = 25; + } + score -= ramDeduction; + + // 4. GPU 성능 감점 + const gpuUpper = (gpu || '').toUpperCase(); + let gpuDeduction = 25; + if (!gpuUpper || gpuUpper === '-' || gpuUpper.trim() === '') { + gpuDeduction = 25; + } else if ( + gpuUpper.includes('RTX 4090') || gpuUpper.includes('RTX 4080') || gpuUpper.includes('RTX 4070') || + gpuUpper.includes('RTX A5000') || gpuUpper.includes('RTX A6000') || gpuUpper.includes('RTX A4000') + ) { + gpuDeduction = 0; + } else if ( + gpuUpper.includes('RTX 3070') || gpuUpper.includes('RTX 3060') || gpuUpper.includes('RTX 2060') || + gpuUpper.includes('RTX A2000') || gpuUpper.includes('RTX A3000') || gpuUpper.includes('QUADRO') + ) { + gpuDeduction = 5; + } else if ( + gpuUpper.includes('GTX 1660') || gpuUpper.includes('GTX 1080') || gpuUpper.includes('GTX 1070') || + gpuUpper.includes('GTX 1060') || gpuUpper.includes('RX 6700') || gpuUpper.includes('RX 6600') + ) { + gpuDeduction = 15; + } else { + gpuDeduction = 25; + } + score -= gpuDeduction; + + // 5. 연식(노후도) 감점 + let age = 0; + if (purchaseDate && purchaseDate !== '-') { + let normalized = purchaseDate.replace(/\./g, '-').trim(); + if (/^\d{6}$/.test(normalized)) { + normalized = `${normalized.substring(0, 4)}-${normalized.substring(4, 6)}`; + } + const purchase = new Date(normalized); + if (!isNaN(purchase.getTime())) { + const mockToday = new Date('2026-05-31'); + const diffMs = mockToday.getTime() - purchase.getTime(); + age = diffMs / (1000 * 60 * 60 * 24 * 365.25); + age = Math.max(0, parseFloat(age.toFixed(1))); + } + } + + let ageDeduction = 0; + if (age < 1) ageDeduction = 0; + else if (age < 2) ageDeduction = 3; + else if (age < 3) ageDeduction = 6; + else if (age < 4) ageDeduction = 9; + else if (age < 5) ageDeduction = 12; + else ageDeduction = 15; + + score -= ageDeduction; + + return Math.max(10, score); +} + +const jobScores = {}; +let totalPcs = 0; + +const filteredPCs = dummyPCs.filter(pc => pc.user_position !== '재고PC'); + +filteredPCs.forEach(pc => { + const job = pc.user_position || '미분류'; + const score = calculatePcScoreDeductive(pc.cpu, pc.ram, pc.gpu, pc.purchase_date); + + if (!jobScores[job]) { + jobScores[job] = { total: 0, count: 0 }; + } + jobScores[job].total += score; + jobScores[job].count += 1; + totalPcs++; +}); + +console.log('--- Job Averages (Deductive 100-point) ---'); +const sortedJobs = Object.keys(jobScores).map(job => { + const avg = jobScores[job].total / jobScores[job].count; + return { + job, + avg: parseFloat(avg.toFixed(1)), + count: jobScores[job].count + }; +}).sort((a, b) => b.avg - a.avg); + +sortedJobs.forEach((item, index) => { + console.log(`${index + 1}. ${item.job}: Avg=${item.avg}점, Count=${item.count}대`); +}); + +console.log('Total PCs (excluding Stock):', totalPcs); diff --git a/scratch/parse_excel.js b/scratch/parse_excel.js new file mode 100644 index 0000000..df692bc --- /dev/null +++ b/scratch/parse_excel.js @@ -0,0 +1,30 @@ +import pkg from 'xlsx'; +const { readFile, utils } = pkg; + +try { + const workbook = readFile('c:/Project/HM ITAM/SampleData_PC.xlsx'); + const sheet = workbook.Sheets[workbook.SheetNames[0]]; + const rawRows = utils.sheet_to_json(sheet, { header: 1 }); + + const corps = new Set(); + + // 첫 번째 행(헤더) 제외하고 C열(인덱스 2) 데이터 추출 + rawRows.slice(1).forEach(row => { + if (row[2] !== undefined && row[2] !== null) { + corps.add(String(row[2]).trim()); + } + }); + + const jobs = new Map(); + rawRows.slice(1).forEach(row => { + const job = String(row[3] || '').trim(); + jobs.set(job, (jobs.get(job) || 0) + 1); + }); + + console.log('--- Unique Jobs in D column ---'); + Array.from(jobs.entries()).forEach(([key, val]) => { + console.log(`${key}: ${val}대`); + }); +} catch (e) { + console.error(e); +} diff --git a/scratch/parse_svr_excel.js b/scratch/parse_svr_excel.js new file mode 100644 index 0000000..2a83ac3 --- /dev/null +++ b/scratch/parse_svr_excel.js @@ -0,0 +1,27 @@ +import pkg from 'xlsx'; +const { readFile, utils } = pkg; + +try { + const workbook = readFile('c:/Project/HM ITAM/SampleData_SVR.xlsx'); + + for (const sheetName of workbook.SheetNames) { + console.log(`\n================= Sheet: ${sheetName} =================`); + const sheet = workbook.Sheets[sheetName]; + const rawRows = utils.sheet_to_json(sheet, { header: 1 }); + const validRows = rawRows.filter(row => { + return row.some(val => val !== undefined && val !== null && String(val).trim() !== ''); + }); + + const header = validRows[0]; + const assetNameIdx = header.indexOf('자산명'); + const typeIdx = header.indexOf('유형'); + const detailIdx = header.indexOf('상세'); + const teamIdx = header.indexOf('팀명'); + + validRows.slice(1).forEach((row, idx) => { + console.log(`[${idx + 1}] 팀명: ${row[teamIdx]} | 자산명: ${row[assetNameIdx]} | 유형: ${row[typeIdx]} | 상세: ${row[detailIdx]}`); + }); + } +} catch (e) { + console.error(e); +} diff --git a/scratch/update_dummy_pcs.js b/scratch/update_dummy_pcs.js new file mode 100644 index 0000000..54126d0 --- /dev/null +++ b/scratch/update_dummy_pcs.js @@ -0,0 +1,447 @@ +import pkg from 'xlsx'; +import * as fs from 'fs'; +import * as path from 'path'; + +const { readFile, utils } = pkg; + +// 임시 ID 생성 및 도우미 함수 +const randomId = () => Math.random().toString(36).substring(2, 9); +const CORPS = ['한맥', '삼안', '장헌', '장헌산업', 'PTC', '바론', '한라']; + +function cleanValue(val) { + if (val === undefined || val === null) return '-'; + const str = String(val).trim(); + return str === '' ? '-' : str; +} + +try { + const workbook = readFile('c:/Project/HM ITAM/SampleData_PC.xlsx'); + const sheet = workbook.Sheets[workbook.SheetNames[0]]; + + // header: 1로 읽어 2차원 배열을 획득 + const rawRows = utils.sheet_to_json(sheet, { header: 1 }); + + // 첫 번째 행은 헤더이므로 제외 + const dataRows = rawRows.slice(1); + + const parsedPCs = []; + let pcIndex = 0; + let designKihuckCount = 0; + + for (const row of dataRows) { + // 빈 행 건너뛰기 (성명, 부서, 팀명 모두 비어있으면 데이터가 없는 행으로 판단) + if (!row[0] && !row[1] && !row[2] && !row[3] && !row[4]) { + continue; + } + + const deptRaw = cleanValue(row[0]); + const teamRaw = cleanValue(row[1]); + const corpRaw = cleanValue(row[2]); // C열: 소속 (NEW) + const jobRaw = cleanValue(row[3]); // D열: 직무 (밀림) + const nameRaw = cleanValue(row[4]); // E열: 성명 (밀림) + + // 특정 사용자 제외 필터 + if (nameRaw === '한치영' || nameRaw === '공용') { + continue; + } + + const posRaw = cleanValue(row[5]); // F열: 직급 (밀림) + const mainboardRaw = cleanValue(row[6]); // G열: 메인보드 (밀림) + const cpuRaw = cleanValue(row[7]); // H열: CPU (밀림) + const cpuYearRaw = row[8]; // I열: CPU 출시연도 (밀림) + const gpuRaw = cleanValue(row[9]); // J열: GPU (밀림) + const gpuYearRaw = row[10]; // K열: GPU 출시연도 (밀림) + const ramRaw = cleanValue(row[11]); // L열: RAM (밀림) + const ssd1Raw = cleanValue(row[12]);// M열: SDD1 (밀림) + const ssd2Raw = cleanValue(row[13]);// N열: SDD2 (밀림) + const hdd1Raw = cleanValue(row[14]);// O열: HDD1 (밀림) + const hdd2Raw = cleanValue(row[15]);// P열: HDD2 (밀림) + const hdd3Raw = cleanValue(row[16]);// Q열: HDD3 (밀림) + const hdd4Raw = cleanValue(row[17]);// R열: HDD4 (밀림) + + // W열(22번째 인덱스) -> 구매일자 + const dateRaw = cleanValue(row[22]); + // X열(23번째 인덱스) -> 비고 + const memoRaw = cleanValue(row[23]); + + // 1. 법인 매핑 (엑셀 C열의 실제 소속 우선 사용, 없을 시 순환 지정) + const purchase_corp = corpRaw !== '-' ? corpRaw : CORPS[pcIndex % CORPS.length]; + + // 2. 재고PC 판단 및 상태 설정 + const isStock = teamRaw === '재고PC'; + const hw_status = isStock ? '창고보관' : '운영중'; + + // 3. 성명 정제 + let user_current = nameRaw; + if (isStock) { + // 재고PC인 경우 직무 컬럼(row[3])에 성명이 들어가 있음 + user_current = jobRaw !== '-' ? jobRaw : '재고장비'; + } + + // 4. 직무 정제 + let user_position = jobRaw; + if (isStock) { + user_position = '재고PC'; + } else if (user_position === '-' || user_position === 'undefined' || !user_position || ['안용주', '김민수', '심영표', '이수창A', '조병철', '윤진호', '김대영', '박정웅', '김유식'].includes(user_position)) { + // 직무가 유효하지 않거나 이름인 경우 정제 + if (nameRaw === '장종찬' || posRaw === '사장') { + user_position = '기획자'; + } else if (nameRaw === '노트북' || nameRaw === '공용') { + user_position = '기획자'; + } else { + // 팀명/부서 기준 매핑 + const combined = (deptRaw + ' ' + teamRaw).toUpperCase(); + if (combined.includes('개발') || combined.includes('SOLUTION') || combined.includes('WEB') || combined.includes('ERP')) { + user_position = '개발자'; + } else if (combined.includes('BIM') || combined.includes('구조') || combined.includes('설계') || combined.includes('터널') || combined.includes('상하수도') || combined.includes('수자원') || combined.includes('건설') || combined.includes('CM')) { + user_position = '엔지니어'; + } else if (combined.includes('디자인') || combined.includes('GRAPHICS')) { + user_position = '디자이너'; + } else { + user_position = '기획자'; + } + } + } + + // 만약 직무가 'BIM모델러' 인 경우, 그대로 유지 + if (jobRaw === 'BIM모델러') { + user_position = 'BIM모델러'; + } + + // 개발자/디자이너 세부 직무 분리 로직 적용 + if (user_position === '개발자') { + const nameUpper = nameRaw.trim(); + const teamUpper = teamRaw.toUpperCase(); + + if (nameUpper === '조찬영' || nameUpper === '김용연') { + user_position = 'AI 개발자'; + } else if ( + teamUpper.includes('그래픽스') || + teamUpper.includes('MODELER') || + teamUpper.includes('HMEG') || + teamUpper.includes('EG-BIM') || + teamUpper.includes('GSIM') || + teamUpper.includes('STRANA') + ) { + user_position = '3D 개발자'; + } else if ( + teamUpper.includes('WEB') || + teamUpper.includes('솔루션개발') || + teamUpper.includes('ERP') || + teamUpper.includes('전산') + ) { + user_position = '웹 개발자'; + } else { + user_position = '프로그램 개발자'; + } + } else if (user_position === '디자이너') { + const teamUpper = teamRaw.toUpperCase(); + if (teamUpper.includes('디자인셀')) { + user_position = 'UXUI 디자이너'; + } else if (teamUpper.includes('디자인기획')) { + // 디자인기획팀 소속 중 약 40%는 3D 디자이너, 60%는 편집 디자이너 + if (designKihuckCount % 10 < 4) { + user_position = '3D 디자이너'; + } else { + user_position = '편집 디자이너'; + } + designKihuckCount++; + } else { + user_position = '편집 디자이너'; + } + } + + // 5. 구매일자 포맷 가공 (YYYY-MM) + let purchase_date = '2022-01'; // 기본값 + if (dateRaw !== '-') { + if (dateRaw.length === 6 && !isNaN(dateRaw)) { + purchase_date = `${dateRaw.substring(0, 4)}-${dateRaw.substring(4, 6)}`; + } else if (dateRaw.length === 4 && !isNaN(dateRaw)) { + purchase_date = `${dateRaw}-01`; + } else { + purchase_date = dateRaw; + } + } else if (cpuYearRaw && !isNaN(cpuYearRaw)) { + purchase_date = `${cpuYearRaw}-01`; + } + + // 6. 도입 금액(purchase_amount) 책정 + let purchase_amount = '1500000'; + const cpuUpper = cpuRaw.toUpperCase(); + const gpuUpper = gpuRaw.toUpperCase(); + + if (cpuUpper.includes('I9') || cpuUpper.includes('RYZEN 9') || cpuUpper.includes('RYZEN9') || gpuUpper.includes('4080') || gpuUpper.includes('4090')) { + purchase_amount = '3500000'; + } else if (cpuUpper.includes('I7') || cpuUpper.includes('RYZEN 7') || cpuUpper.includes('RYZEN7') || gpuUpper.includes('3070') || gpuUpper.includes('4070') || gpuUpper.includes('A2000')) { + purchase_amount = '2200000'; + } else if (cpuUpper.includes('I5') || cpuUpper.includes('RYZEN 5') || cpuUpper.includes('RYZEN5') || gpuUpper.includes('3060') || gpuUpper.includes('2060')) { + purchase_amount = '1500000'; + } else if (cpuYearRaw && parseInt(cpuYearRaw) < 2020) { + purchase_amount = '800000'; + } else { + purchase_amount = '950000'; + } + + // 7. MAC 주소 생성 (16진수 포맷) + const mac_address = `00:1A:2B:3C:4D:${pcIndex.toString(16).toUpperCase().padStart(2, '0')}`; + + parsedPCs.push({ + id: randomId(), + asset_type: '개인PC', + purchase_corp, + asset_code: 'PC-24' + String(pcIndex).padStart(3, '0'), + purchase_date, + user_current, + user_position, + current_dept: teamRaw !== '-' ? teamRaw : deptRaw, + previous_dept: pcIndex % 8 === 0 ? '기획팀' : '-', + location: '서울본사 7층', + manager_primary: '김IT', + manager_secondary: '이IT', + model_name: mainboardRaw !== '-' ? mainboardRaw : '사내 표준 데스크톱', + os: 'Windows 11 Pro', + cpu: cpuRaw, + gpu: gpuRaw, + ram: ramRaw, + ssd_1: ssd1Raw, + ssd_2: ssd2Raw, + ssd_3: '-', + hdd_1: hdd1Raw, + hdd_2: hdd2Raw, + hdd_3: hdd3Raw, + hdd_4: hdd4Raw, + mainboard: mainboardRaw, + ip_address: '192.168.0.' + (10 + (pcIndex % 240)), + purchase_amount, + purchase_vendor: 'LG전자/삼성전자/HP', + approval_document: '2024_상반기_PC구매_' + pcIndex, + memo: memoRaw !== '-' ? memoRaw : (isStock ? '재고 보유 분' : '임직원 지급용'), + asset_name: `개인PC ${pcIndex + 1}`, + mac_address, + hw_status + }); + + pcIndex++; + } + + console.log(`Successfully parsed ${parsedPCs.length} PCs from excel file.`); + + // dummyData.ts 의 나머지 데이터(dummyServers 등)를 포함하여 전체 파일을 새로 씁니다. + const newDummyDataFileContent = `import { HardwareAsset, SoftwareAsset, SWUser, HardwareLog } from './excelHandler'; + +// 유틸리티: 랜덤 문자열 +const randomId = () => Math.random().toString(36).substring(2, 9); + +// 유틸리티: 랜덤 년월 (YYYY-MM) (최근 10년) +const randomPurchaseYM = () => { + const currentYear = new Date().getFullYear(); + const year = currentYear - Math.floor(Math.random() * 10); + const month = String(Math.floor(Math.random() * 12) + 1).padStart(2, '0'); + return \`\${year}-\${month}\`; +}; + +// 유틸리티: 랜덤 YYYY-MM-DD +const randomDateStr = (maxYearsAgo = 10) => { + const currentYear = new Date().getFullYear(); + const year = currentYear - Math.floor(Math.random() * maxYearsAgo); + const month = String(Math.floor(Math.random() * 12) + 1).padStart(2, '0'); + const day = String(Math.floor(Math.random() * 28) + 1).padStart(2, '0'); + return \`\${year}-\${month}-\${day}\`; +}; + +const CORPS = ['한맥', '삼안', '장헌', '장헌산업', 'PTC', '바론', '한라']; +const getRandomCorp = () => CORPS[Math.floor(Math.random() * CORPS.length)]; + +// ──────────────────────────────────────────────────────── +// 1. SampleData_PC.xlsx 에서 파싱된 PC 데이터 주입 +// ──────────────────────────────────────────────────────── +export const dummyPCs: any[] = ${JSON.stringify(parsedPCs, null, 2)}; + +// ──────────────────────────────────────────────────────── +// 2. 기타 자산 더미 데이터 (서버, 스토리지, 소프트웨어 등) +// ──────────────────────────────────────────────────────── + +export const dummyServers: any[] = Array.from({ length: 15 }).map((_, i) => ({ + id: randomId(), + asset_type: '서버', + type2: i % 2 === 0 ? '물리' : '가상', + purchase_corp: getRandomCorp(), + asset_code: \`SRV-24\${String(i).padStart(3, '0')}\`, + purchase_date: randomPurchaseYM(), + asset_purpose: i % 2 === 0 ? '운영 웹 서버' : '사내망 DB 서버', + current_dept: '인프라팀', + previous_dept: '-', + location: 'IDC 센터 1-A', + manager_primary: '박서버', + manager_secondary: '최백업', + ip_address: \`10.0.0.\${10 + i}\`, + ip_address_2: \`192.168.100.\${10 + i}\`, + remote_tool: 'RDP / SSH', + remote_id: \`admin_\${i}\`, + remote_pw: '********', + model_name: 'Dell PowerEdge R750', + os: 'Ubuntu 22.04 LTS', + cpu: 'Intel Xeon Gold 6330', + ram: '128GB', + gpu: i % 3 === 0 ? 'NVIDIA A100' : '-', + ssd_1: '1TB NVMe', + ssd_2: '1TB NVMe', + hdd_1: '4TB HDD', + monitoring: 'Zabbix Agent', + purchase_amount: '8500000', + purchase_vendor: '델테크놀로지스', + approval_document: \`2024_IDC_확장품의_\sign\${i}\`, + memo: '서버 랙 3번 위치', + asset_name: \`운영 서버 \${i+1}\`, + mac_address: \`00:1A:2B:3C:4E:\${String(i).padStart(2, '0')}\`, + hw_status: '운영중' +})); + +export const dummyStorages: any[] = Array.from({ length: 8 }).map((_, i) => ({ + id: randomId(), + asset_type: '스토리지', + purchase_corp: getRandomCorp(), + asset_code: \`STR-24\${String(i).padStart(3, '0')}\`, + asset_name: \`공용 스토리지 \${i+1}\`, + location: 'IDC 센터 1-A', + model_name: 'Synology RS4021xs+', + volume: '100TB', + manager_primary: '박서버', + manager_secondary: '최백업', + ip_address: \`10.0.0.\${50 + i}\`, + mac_address: \`00:1A:2B:3C:4F:\${String(i).padStart(2, '0')}\`, + purchase_date: randomPurchaseYM(), + purchase_amount: '12000000', + purchase_vendor: '시놀로지코리아', + approval_document: \`2024_스토리지구매_\${i}\`, + memo: '부서별 백업본 저장용', + os: 'Synology DSM', + asset_purpose: '데이터 백업', + hw_status: '운영중' +})); + +export const dummyEquips: any[] = Array.from({ length: 12 }).map((_, i) => ({ + id: randomId(), + asset_type: '전산비품', + purchase_corp: getRandomCorp(), + asset_code: \`EQ-24\${String(i).padStart(3, '0')}\`, + asset_name: \`네트워크 스위치 \${i+1}\`, + location: '전산실 랙 1', + manager_primary: '네트워크담당자', + ip_address: \`192.168.10.\${200 + i}\`, + mac_address: \`00:1A:2B:3C:51:\${String(i).padStart(2, '0')}\`, + os: 'Cisco IOS', + purchase_date: randomPurchaseYM(), + purchase_amount: '150000', + purchase_vendor: '다나와', + approval_document: \`2024_비품구매_\${i}\`, + memo: '사내망 확장용', + asset_purpose: '네트워크 분배' +})); + +export const dummyMobiles: any[] = Array.from({ length: 15 }).map((_, i) => ({ + id: randomId(), + asset_type: '모바일기기', + purchase_corp: getRandomCorp(), + asset_code: \`MOB-24\${String(i).padStart(3, '0')}\`, + asset_name: \`테스트용 단말기 \${i+1}\`, + location: '개발2팀', + manager_primary: '테스터', + os: i % 2 === 0 ? 'Android 14' : 'iOS 17', + purchase_date: randomPurchaseYM(), + purchase_amount: '900000', + purchase_vendor: '삼성전자/애플', + approval_document: \`2024_모바일구매_\${i}\`, + memo: '앱 호환성 테스트 전용', + asset_purpose: 'QA 테스트', + ip_address: \`192.168.1.\${10 + i}\`, + mac_address: \`00:1A:2B:3C:50:\${String(i).padStart(2, '0')}\` +})); + +export const dummySubSw: any[] = Array.from({ length: 10 }).map((_, i) => ({ + id: randomId(), + sw_type: '구독SW', + sw_field: '업무용/협업', + purchase_corp: getRandomCorp(), + current_dept: '전사', + product_name: \`Microsoft 365 E\${3 + (i%2)}\`, + purchase_date: randomDateStr(3), + start_date: randomDateStr(1), + expired_date: randomDateStr(0), + purchase_amount: '150000', + asset_count: 50 + i * 5, + email_account: \`admin\${i}@hmcorp.com\`, + purchase_vendor: '소프트웨어인라이프', + memo: '연간 계약 갱신 필요' +})); + +export const dummyPermSw: any[] = Array.from({ length: 5 }).map((_, i) => ({ + id: randomId(), + sw_type: '영구SW', + sw_field: '디자인/설계', + purchase_corp: getRandomCorp(), + current_dept: '디자인팀', + product_name: \`AutoCAD 202\${i%4}\`, + purchase_date: randomDateStr(5), + start_date: randomDateStr(5), + expired_date: '2099-12-31', + purchase_amount: '3000000', + asset_count: 2, + email_account: \`design\${i}@hmcorp.com\`, + purchase_vendor: '오토데스크 파트너', + memo: 'USB 동글키 보관중' +})); + +export const dummyCloud: any[] = Array.from({ length: 5 }).map((_, i) => ({ + id: randomId(), + sw_type: '클라우드', + asset_mfr: i % 2 === 0 ? 'AWS' : 'GCP', + purchase_corp: getRandomCorp(), + current_dept: '개발팀', + product_name: \`컴퓨팅 인스턴스 Type \${i}\`, + email_account: \`awsadmin\${i}@hmcorp.com\`, + purchase_method: '법인카드(신한 1234)', + purchase_amount: \`\${500000 + i * 100000}\`, + asset_count: 1, + purchase_vendor: 'AWS/GCP', + memo: '환율 변동에 따라 매월 상이함' +})); + +export const dummyDomain: any[] = Array.from({ length: 5 }).map((_, i) => ({ + id: randomId(), + asset_type: '도메인', + purchase_corp: getRandomCorp(), + product_name: \`사내 운영 서비스 \${i+1}\`, + domain_address: \`service\${i+1}.hmcorp.com\`, + start_date: randomDateStr(4), + expired_date: randomDateStr(0), + purchase_amount: '22000', + manager_primary: '인프라팀장', + manager_secondary: '인프라담당자', + memo: '가비아 자동갱신 설정 완료' +})); + +export const dummySwUsers: any[] = Array.from({ length: 15 }).map((_, i) => ({ + id: randomId(), + sw_id: dummySubSw[0]?.id || randomId(), + purchase_corp: getRandomCorp(), + current_dept: '경영지원팀', + user_current: \`홍길동\${i}\`, + memo: \`SW신청서_2400\${i}\` +})); + +export const dummyLogs: any[] = Array.from({ length: 10 }).map((_, i) => ({ + id: randomId(), + assetId: dummyPCs[0]?.id || randomId(), + date: randomDateStr(1), + details: i % 2 === 0 ? '메모리 추가 증설 (16GB -> 32GB)' : '디스플레이 파손 수리', + user: 'IT지원팀', + cost: i % 2 === 0 ? 80000 : 150000, +})); +`; + + fs.writeFileSync('c:/Project/HM ITAM/src/core/dummyData.ts', newDummyDataFileContent, 'utf-8'); + console.log('✅ dummyData.ts file updated successfully.'); +} catch (e) { + console.error('❌ Failed to update dummy data:', e); +} diff --git a/scratch/update_dummy_servers.js b/scratch/update_dummy_servers.js new file mode 100644 index 0000000..a7a49c7 --- /dev/null +++ b/scratch/update_dummy_servers.js @@ -0,0 +1,442 @@ +import pkg from 'xlsx'; +import * as fs from 'fs'; +import * as path from 'path'; + +const { readFile, utils } = pkg; + +const randomId = () => Math.random().toString(36).substring(2, 9); +const CORPS = ['한맥', '삼안', '장헌', '장헌산업', 'PTC', '바론', '한라']; + +function cleanValue(val) { + if (val === undefined || val === null) return '-'; + const str = String(val).trim(); + return str === '' ? '-' : str; +} + +try { + // 1. 기존 dummyPCs 로딩 + const dummyDataPath = 'c:/Project/HM ITAM/src/core/dummyData.ts'; + const content = fs.readFileSync(dummyDataPath, 'utf-8'); + const matchPCs = content.match(/export const dummyPCs: any\[\] = (\[[\s\S]*?\]);/); + if (!matchPCs) { + console.error('Failed to parse dummyPCs from dummyData.ts'); + process.exit(1); + } + const dummyPCs = JSON.parse(matchPCs[1]); + console.log(`Loaded ${dummyPCs.length} existing PCs from dummyData.ts`); + + // 2. SampleData_SVR.xlsx 파싱 + const workbook = readFile('c:/Project/HM ITAM/SampleData_SVR.xlsx'); + + const parsedServers = []; + const parsedStorages = []; + const parsedEquips = []; + + let serverIndex = 0; + let storageIndex = 0; + let equipIndex = 0; + + // ----------------- 시트 1: 합본데이터(공용PC) ----------------- + const sheetPC = workbook.Sheets['합본데이터(공용PC)']; + const rawPC = utils.sheet_to_json(sheetPC, { header: 1 }); + const rowsPC = rawPC.slice(1).filter(row => row.some(val => val !== undefined && val !== null && String(val).trim() !== '')); + + for (const row of rowsPC) { + const teamRaw = cleanValue(row[0]); + const svrNoRaw = cleanValue(row[1]); + const assetNameRaw = cleanValue(row[2]); + const typeRaw = cleanValue(row[3]); + const detailRaw = cleanValue(row[4]); + const locRaw = cleanValue(row[5]); + const mgr1Raw = cleanValue(row[6]); + const mgr2Raw = cleanValue(row[7]); + const osRaw = cleanValue(row[8]); + const osVerRaw = cleanValue(row[9]); + const osBuildRaw = cleanValue(row[10]); + const modelRaw = cleanValue(row[11]); + const mainboardRaw = cleanValue(row[12]); + const cpuRaw = cleanValue(row[13]); + const ramRaw = cleanValue(row[14]); + const gpuRaw = cleanValue(row[15]); + const ssd1Raw = cleanValue(row[16]); + const ssd2Raw = cleanValue(row[17]); + const hdd1Raw = cleanValue(row[18]); + const hdd2Raw = cleanValue(row[19]); + const hdd3Raw = cleanValue(row[20]); + const hdd4Raw = cleanValue(row[21]); + + const ipAddress = '172.16.10.' + (50 + (serverIndex % 150)); + const randomCorp = CORPS[serverIndex % CORPS.length]; + + // 서비스 분류 판단 + let service_type = '내부서비스'; + const detailUpper = detailRaw.toUpperCase(); + const assetUpper = assetNameRaw.toUpperCase(); + const teamUpper = teamRaw.toUpperCase(); + + if (teamUpper.includes('회의실') || assetUpper.includes('회의실') || assetUpper.includes('사이니지')) { + service_type = '회의용/공용'; + } else if ( + detailUpper.includes('SAAS') || detailUpper.includes('웹서비스') || + detailUpper.includes('운영') || detailUpper.includes('WAS') || + detailUpper.includes('MYSTATION') || detailUpper.includes('CLOUD') || + detailUpper.includes('홈페이지') || detailUpper.includes('WEB') || + detailUpper.includes('외주') || assetUpper.includes('CLOUD') || + assetUpper.includes('웹서비스') || assetUpper.includes('운영') + ) { + service_type = '외부서비스'; + } + + // 방치 의심 판단 + const is_inactive = ( + detailUpper.includes('원격 및 로컬접근 불가') || + detailUpper.includes('철수예정') || + detailUpper.includes('미사용') || + detailUpper.includes('구형 OS') + ); + + // 실시간 리소스 및 네트워크 가상 데이터 생성 + let cpu_usage = 0; + let ram_usage = 0; + let network_traffic = '0 GB'; + + if (is_inactive) { + cpu_usage = 0; + ram_usage = 0; + network_traffic = '0 GB (N/A)'; + } else if (service_type === '회의용/공용') { + cpu_usage = Math.floor(Math.random() * 10) + 2; // 2%~12% + ram_usage = Math.floor(Math.random() * 15) + 5; // 5%~20% + network_traffic = (Math.random() * 1.5 + 0.1).toFixed(1) + ' GB'; + } else if (service_type === '외부서비스') { + // 일부 저사양 운영/SaaS 서버는 병목 현상을 시뮬레이션하기 위해 과부하 부여 + const isUnderSpec = !gpuRaw.toUpperCase().includes('RTX 30') && !gpuRaw.toUpperCase().includes('RTX 40') && (cpuRaw.toUpperCase().includes('I5') || ramRaw.toUpperCase().includes('16GB') || cpuRaw === '-'); + if (isUnderSpec) { + cpu_usage = Math.floor(Math.random() * 15) + 81; // 81%~95% (과부하) + ram_usage = Math.floor(Math.random() * 10) + 86; // 86%~95% + } else { + cpu_usage = Math.floor(Math.random() * 30) + 40; // 40%~70% + ram_usage = Math.floor(Math.random() * 20) + 60; // 60%~80% + } + network_traffic = (Math.random() * 1500 + 300).toFixed(0) + ' GB'; + } else { // 내부서비스 + // Abaqus 해석용이나 Pix4D 등 고부하 내부 인프라도 부하율 높게 부여 + const isHighLoad = detailUpper.includes('ABAQUS') || detailUpper.includes('PIX4D') || detailUpper.includes('영상 렌더링') || detailUpper.includes('TERRA'); + if (isHighLoad) { + cpu_usage = Math.floor(Math.random() * 20) + 70; // 70%~90% + ram_usage = Math.floor(Math.random() * 20) + 75; // 75%~95% + } else { + cpu_usage = Math.floor(Math.random() * 35) + 15; // 15%~50% + ram_usage = Math.floor(Math.random() * 30) + 20; // 20%~50% + } + network_traffic = (Math.random() * 300 + 10).toFixed(0) + ' GB'; + } + + const assetItem = { + id: randomId(), + asset_type: typeRaw !== '-' ? typeRaw : '공용PC', + purchase_corp: randomCorp, + asset_code: 'SVR-24' + String(serverIndex).padStart(3, '0'), + purchase_date: '2023-03', + asset_purpose: detailRaw, + current_dept: teamRaw, + previous_dept: '-', + location: locRaw, + manager_primary: mgr1Raw, + manager_secondary: mgr2Raw, + ip_address: ipAddress, + remote_tool: 'RDP / VNC', + model_name: modelRaw !== '-' ? modelRaw : (mainboardRaw !== '-' ? mainboardRaw : '사내 표준 공용PC'), + os: osRaw !== '-' ? `${osRaw} (${osVerRaw})` : 'Windows 10', + cpu: cpuRaw, + ram: ramRaw, + gpu: gpuRaw, + ssd_1: ssd1Raw, + ssd_2: ssd2Raw, + hdd_1: hdd1Raw, + hdd_2: hdd2Raw, + hdd_3: hdd3Raw, + hdd_4: hdd4Raw, + monitoring: service_type === '외부서비스' ? '대상' : '비대상', + purchase_amount: gpuRaw.toUpperCase().includes('RTX 4080') || gpuRaw.toUpperCase().includes('RTX 3090') ? '3500000' : '1500000', + purchase_vendor: '다나와', + approval_document: '2023_공용PC_도입_' + serverIndex, + memo: is_inactive ? '방치 의심 장비 (회수 필요)' : '정상 운영 장비', + asset_name: assetNameRaw, + mac_address: `00:1A:2B:3C:5E:${serverIndex.toString(16).toUpperCase().padStart(2, '0')}`, + hw_status: is_inactive ? '수리/대기' : '운영중', + service_type: service_type, + is_inactive: is_inactive, + cpu_usage: cpu_usage, + ram_usage: ram_usage, + network_traffic: network_traffic + }; + + // 스토리지로 보낼 자산들 (유형이 NAS/DAS이거나 자산명에 NAS가 들어가면) + if (typeRaw.toUpperCase().includes('NAS') || typeRaw.toUpperCase().includes('DAS') || assetUpper.includes('NAS') || assetUpper.includes('DAS')) { + assetItem.asset_code = 'STO-24' + String(storageIndex).padStart(3, '0'); + assetItem.volume = hdd1Raw !== '-' ? hdd1Raw : '10TB'; + parsedStorages.push(assetItem); + storageIndex++; + } else { + parsedServers.push(assetItem); + serverIndex++; + } + } + + // ----------------- 시트 2: 합본데이터(NAS) ----------------- + const sheetNAS = workbook.Sheets['합본데이터(NAS)']; + const rawNAS = utils.sheet_to_json(sheetNAS, { header: 1 }); + const rowsNAS = rawNAS.slice(1).filter(row => row.some(val => val !== undefined && val !== null && String(val).trim() !== '')); + + for (const row of rowsNAS) { + const teamRaw = cleanValue(row[0]); + const svrNoRaw = cleanValue(row[1]); + const assetNameRaw = cleanValue(row[2]); + const typeRaw = cleanValue(row[3]); + const detailRaw = cleanValue(row[4]); + const locRaw = cleanValue(row[5]); + const mgr1Raw = cleanValue(row[6]); + const mgr2Raw = cleanValue(row[7]); + const toolRaw = cleanValue(row[8]); + const ipRaw = cleanValue(row[9]); + const ip2Raw = cleanValue(row[10]); + const idRaw = cleanValue(row[11]); + const pwRaw = cleanValue(row[12]); + const osRaw = cleanValue(row[15]); + const osVerRaw = cleanValue(row[16]); + const osBuildRaw = cleanValue(row[17]); + const modelRaw = cleanValue(row[18]); + const cpuRaw = cleanValue(row[19]); + const ramRaw = cleanValue(row[20]); + const gpuRaw = cleanValue(row[21]); + const ssd1Raw = cleanValue(row[22]); + const ssd2Raw = cleanValue(row[23]); + const hdd1Raw = cleanValue(row[24]); + const hdd2Raw = cleanValue(row[25]); + const hdd3Raw = cleanValue(row[26]); + const hdd4Raw = cleanValue(row[27]); + + const randomCorp = CORPS[storageIndex % CORPS.length]; + + // NAS는 기본적으로 내부 백업/공유용 인프라 + const service_type = '내부서비스'; + const is_inactive = false; + + // NAS 실시간 리소스 가상 데이터 + const cpu_usage = Math.floor(Math.random() * 25) + 15; // 15%~40% + const ram_usage = Math.floor(Math.random() * 35) + 30; // 30%~65% + const network_traffic = (Math.random() * 600 + 50).toFixed(0) + ' GB'; + + const assetItem = { + id: randomId(), + asset_type: typeRaw !== '-' ? typeRaw : '공용 NAS', + purchase_corp: randomCorp, + asset_code: 'STO-24' + String(storageIndex).padStart(3, '0'), + purchase_date: '2022-08', + asset_purpose: detailRaw, + current_dept: teamRaw !== '-' ? teamRaw : '디자인팀', + previous_dept: '-', + location: locRaw, + manager_primary: mgr1Raw, + manager_secondary: mgr2Raw, + ip_address: ipRaw !== '-' ? ipRaw : '172.16.42.' + (100 + storageIndex), + remote_tool: toolRaw !== '-' ? toolRaw : 'Web GUI', + model_name: modelRaw !== '-' ? modelRaw : 'Synology 공용 NAS', + os: osRaw !== '-' ? `${osRaw} ${osVerRaw}` : 'DSM 7.x', + cpu: cpuRaw, + ram: ramRaw, + gpu: gpuRaw, + ssd_1: ssd1Raw, + ssd_2: ssd2Raw, + hdd_1: hdd1Raw, + hdd_2: hdd2Raw, + hdd_3: hdd3Raw, + hdd_4: hdd4Raw, + monitoring: '비대상', + purchase_amount: '4500000', + purchase_vendor: '시놀로지 총판', + approval_document: '2022_스토리지_도입_' + storageIndex, + memo: '스토리지 서버 공유 자산', + asset_name: assetNameRaw, + mac_address: `00:1A:2B:3C:5F:${storageIndex.toString(16).toUpperCase().padStart(2, '0')}`, + hw_status: '운영중', + service_type: service_type, + is_inactive: is_inactive, + volume: hdd1Raw !== '-' ? hdd1Raw : '24TB', + cpu_usage: cpu_usage, + ram_usage: ram_usage, + network_traffic: network_traffic + }; + + parsedStorages.push(assetItem); + storageIndex++; + } + + console.log(`Parsed Servers: ${parsedServers.length} units`); + console.log(`Parsed Storages: ${parsedStorages.length} units`); + + // 3. 파일 다시 쓰기 + const newDummyDataFileContent = `import { HardwareAsset, SoftwareAsset, SWUser, HardwareLog } from './excelHandler'; + +// 유틸리티: 랜덤 문자열 +const randomId = () => Math.random().toString(36).substring(2, 9); + +// 유틸리티: 랜덤 년월 (YYYY-MM) (최근 10년) +const randomPurchaseYM = () => { + const currentYear = new Date().getFullYear(); + const year = currentYear - Math.floor(Math.random() * 10); + const month = String(Math.floor(Math.random() * 12) + 1).padStart(2, '0'); + return \`\${year}-\${month}\`; +}; + +// 유틸리티: 랜덤 YYYY-MM-DD +const randomDateStr = (maxYearsAgo = 10) => { + const currentYear = new Date().getFullYear(); + const year = currentYear - Math.floor(Math.random() * maxYearsAgo); + const month = String(Math.floor(Math.random() * 12) + 1).padStart(2, '0'); + const day = String(Math.floor(Math.random() * 28) + 1).padStart(2, '0'); + return \`\${year}-\${month}-\${day}\`; +}; + +const CORPS = ['한맥', '삼안', '장헌', '장헌산업', 'PTC', '바론', '한라']; +const getRandomCorp = () => CORPS[Math.floor(Math.random() * CORPS.length)]; + +// ──────────────────────────────────────────────────────── +// 1. SampleData_PC.xlsx 에서 파싱된 PC 데이터 주입 +// ──────────────────────────────────────────────────────── +export const dummyPCs: any[] = ${JSON.stringify(dummyPCs, null, 2)}; + +// ──────────────────────────────────────────────────────── +// 2. 기타 자산 더미 데이터 (서버, 스토리지, 소프트웨어 등 - 엑셀 파싱 연동) +// ──────────────────────────────────────────────────────── + +export const dummyServers: any[] = ${JSON.stringify(parsedServers, null, 2)}; + +export const dummyStorages: any[] = ${JSON.stringify(parsedStorages, null, 2)}; + +export const dummyEquips: any[] = Array.from({ length: 12 }).map((_, i) => ({ + id: randomId(), + asset_type: '전산비품', + purchase_corp: getRandomCorp(), + asset_code: \`EQ-24\${String(i).padStart(3, '0')}\`, + asset_name: \`네트워크 스위치 \${i+1}\`, + location: '전산실 랙 1', + manager_primary: '네트워크담당자', + ip_address: \`192.168.10.\${200 + i}\`, + mac_address: \`00:1A:2B:3C:51:\${String(i).padStart(2, '0')}\`, + os: 'Cisco IOS', + purchase_date: randomPurchaseYM(), + purchase_amount: '150000', + purchase_vendor: '다나와', + approval_document: \`2024_비품구매_\${i}\`, + memo: '사내망 확장용', + asset_purpose: '네트워크 분배' +})); + +export const dummyMobiles: any[] = Array.from({ length: 15 }).map((_, i) => ({ + id: randomId(), + asset_type: '모바일기기', + purchase_corp: getRandomCorp(), + asset_code: \`MOB-24\${String(i).padStart(3, '0')}\`, + asset_name: \`테스트용 단말기 \${i+1}\`, + location: '개발2팀', + manager_primary: '테스터', + os: i % 2 === 0 ? 'Android 14' : 'iOS 17', + purchase_date: randomPurchaseYM(), + purchase_amount: '900000', + purchase_vendor: '삼성전자/애플', + approval_document: \`2024_모바일구매_\${i}\`, + memo: '앱 호환성 테스트 전용', + asset_purpose: 'QA 테스트', + ip_address: \`192.168.1.\${10 + i}\`, + mac_address: \`00:1A:2B:3C:50:\${String(i).padStart(2, '0')}\` +})); + +export const dummySubSw: any[] = Array.from({ length: 10 }).map((_, i) => ({ + id: randomId(), + sw_type: '구독SW', + sw_field: '업무용/협업', + purchase_corp: getRandomCorp(), + current_dept: '전사', + product_name: \`Microsoft 365 E\${3 + (i%2)}\`, + purchase_date: randomDateStr(3), + start_date: randomDateStr(1), + expired_date: randomDateStr(0), + purchase_amount: '150000', + asset_count: 50 + i * 5, + email_account: \`admin\${i}@hmcorp.com\`, + purchase_vendor: '소프트웨어인라이프', + memo: '연간 계약 갱신 필요' +})); + +export const dummyPermSw: any[] = Array.from({ length: 5 }).map((_, i) => ({ + id: randomId(), + sw_type: '영구SW', + sw_field: '디자인/설계', + purchase_corp: getRandomCorp(), + current_dept: '디자인팀', + product_name: \`AutoCAD 202\${i%4}\`, + purchase_date: randomDateStr(5), + start_date: randomDateStr(5), + expired_date: '2099-12-31', + purchase_amount: '3000000', + asset_count: 2, + email_account: \`design\${i}@hmcorp.com\`, + purchase_vendor: '오토데스크 파트너', + memo: 'USB 동글키 보관중' +})); + +export const dummyCloud: any[] = Array.from({ length: 5 }).map((_, i) => ({ + id: randomId(), + sw_type: '클라우드', + asset_mfr: i % 2 === 0 ? 'AWS' : 'GCP', + purchase_corp: getRandomCorp(), + current_dept: '개발팀', + product_name: \`컴퓨팅 인스턴스 Type \${i}\`, + email_account: \`awsadmin\${i}@hmcorp.com\`, + purchase_method: '법인카드(신한 1234)', + purchase_amount: \`\${500000 + i * 100000}\`, + asset_count: 1, + purchase_vendor: 'AWS/GCP', + memo: '환율 변동에 따라 매월 상이함' +})); + +export const dummyDomain: any[] = Array.from({ length: 5 }).map((_, i) => ({ + id: randomId(), + asset_type: '도메인', + purchase_corp: getRandomCorp(), + product_name: \`사내 운영 서비스 \${i+1}\`, + domain_address: \`service\${i+1}.hmcorp.com\`, + start_date: randomDateStr(4), + expired_date: randomDateStr(0), + purchase_amount: '22000', + manager_primary: '인프라팀장', + manager_secondary: '인프라담당자', + memo: '가비아 자동갱신 설정 완료' +})); + +export const dummySwUsers: any[] = Array.from({ length: 15 }).map((_, i) => ({ + id: randomId(), + sw_id: dummySubSw[0]?.id || randomId(), + purchase_corp: getRandomCorp(), + current_dept: '경영지원팀', + user_current: \`홍길동\${i}\`, + memo: \`SW신청서_2400\${i}\` +})); + +export const dummyLogs: any[] = Array.from({ length: 10 }).map((_, i) => ({ + id: randomId(), + assetId: dummyPCs[0]?.id || randomId(), + date: randomDateStr(1), + details: i % 2 === 0 ? '메모리 추가 증설 (16GB -> 32GB)' : '디스플레이 파손 수리', + user: 'IT지원팀', + cost: i % 2 === 0 ? 80000 : 150000, +})); +`; + + fs.writeFileSync(dummyDataPath, newDummyDataFileContent, 'utf-8'); + console.log('✅ dummyData.ts file updated successfully with SVR dataset.'); +} catch (e) { + console.error('❌ Failed to update dummy data:', e); +} diff --git a/src/components/Modal/SharedData.ts b/src/components/Modal/SharedData.ts index 56fa1e4..d0d5449 100644 --- a/src/components/Modal/SharedData.ts +++ b/src/components/Modal/SharedData.ts @@ -3,7 +3,7 @@ */ // 구매법인 목록 -export const CORP_LIST = ['한맥', '삼안', '장헌', '한라', 'PTC', '바론']; +export const CORP_LIST = ['한맥', '삼안', 'PTC', '바론']; // 사용조직 목록 export const ORG_LIST = ['한맥', '삼안', '장헌', '한라', 'PTC', '기술개발센터', '총괄기획실']; diff --git a/src/components/Navigation.ts b/src/components/Navigation.ts index 180c95c..b65a2e0 100644 --- a/src/components/Navigation.ts +++ b/src/components/Navigation.ts @@ -3,7 +3,7 @@ import { state } from '../core/state'; const MENU_CONFIG: any = { hw: { label: '하드웨어', - tabs: ['서버', 'PC', '스토리지', '공간정보장비', 'PC부품', '네트워크', '업무지원장비'] + tabs: ['대시보드', '서버', 'PC', '스토리지', '공간정보장비', 'PC부품', '네트워크', '업무지원장비'] }, sw: { label: '소프트웨어', diff --git a/src/core/dummyData.ts b/src/core/dummyData.ts new file mode 100644 index 0000000..7e54814 --- /dev/null +++ b/src/core/dummyData.ts @@ -0,0 +1,10695 @@ +import { HardwareAsset, SoftwareAsset, SWUser, HardwareLog } from './excelHandler'; + +// 유틸리티: 랜덤 문자열 +const randomId = () => Math.random().toString(36).substring(2, 9); + +// 유틸리티: 랜덤 년월 (YYYY-MM) (최근 10년) +const randomPurchaseYM = () => { + const currentYear = new Date().getFullYear(); + const year = currentYear - Math.floor(Math.random() * 10); + const month = String(Math.floor(Math.random() * 12) + 1).padStart(2, '0'); + return `${year}-${month}`; +}; + +// 유틸리티: 랜덤 YYYY-MM-DD +const randomDateStr = (maxYearsAgo = 10) => { + const currentYear = new Date().getFullYear(); + const year = currentYear - Math.floor(Math.random() * maxYearsAgo); + const month = String(Math.floor(Math.random() * 12) + 1).padStart(2, '0'); + const day = String(Math.floor(Math.random() * 28) + 1).padStart(2, '0'); + return `${year}-${month}-${day}`; +}; + +const CORPS = ['한맥', '삼안', '장헌', '장헌산업', 'PTC', '바론', '한라']; +const getRandomCorp = () => CORPS[Math.floor(Math.random() * CORPS.length)]; + +// ──────────────────────────────────────────────────────── +// 1. SampleData_PC.xlsx 에서 파싱된 PC 데이터 주입 +// ──────────────────────────────────────────────────────── +export const dummyPCs: any[] = [ + { + "id": "lo92jtv", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24000", + "purchase_date": "2018-01", + "user_current": "김형준", + "user_position": "엔지니어", + "current_dept": "과업수행그룹", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "TUF B365M-PLUS GAMING", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700", + "gpu": "NVIDIA GeForce RTX 2060 SUPER", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "TUF B365M-PLUS GAMING", + "ip_address": "192.168.0.10", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_0", + "memo": "1", + "asset_name": "개인PC 1", + "mac_address": "00:1A:2B:3C:4D:00", + "hw_status": "운영중" + }, + { + "id": "sdc4kxy", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24001", + "purchase_date": "2022-01", + "user_current": "정계완", + "user_position": "프로그램 개발자", + "current_dept": "구조물S/W개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRO Z790-A WIFI(MS-7E07)", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-13900K", + "gpu": "NVIDIA GeForce RTX 4080", + "ram": "64GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRO Z790-A WIFI(MS-7E07)", + "ip_address": "192.168.0.11", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_1", + "memo": "개인장비 사양 확인 방법", + "asset_name": "개인PC 2", + "mac_address": "00:1A:2B:3C:4D:01", + "hw_status": "운영중" + }, + { + "id": "c8l8fch", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24002", + "purchase_date": "2022-01", + "user_current": "김세열", + "user_position": "프로그램 개발자", + "current_dept": "구조물S/W개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "Z790 Pro RS", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700KF", + "gpu": "NVIDIA GeForce RTX 3070 Ti", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "4TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "Z790 Pro RS", + "ip_address": "192.168.0.12", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_2", + "memo": "기술개발센터 재물조사.pptx", + "asset_name": "개인PC 3", + "mac_address": "00:1A:2B:3C:4D:02", + "hw_status": "운영중" + }, + { + "id": "z9i2582", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24003", + "purchase_date": "2022-01", + "user_current": "김지웅", + "user_position": "프로그램 개발자", + "current_dept": "구조물S/W개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRO Z790-A WIFI(MS-7E07)", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-13900K", + "gpu": "NVIDIA GeForce RTX 4080", + "ram": "64GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRO Z790-A WIFI(MS-7E07)", + "ip_address": "192.168.0.13", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_3", + "memo": "임직원 지급용", + "asset_name": "개인PC 4", + "mac_address": "00:1A:2B:3C:4D:03", + "hw_status": "운영중" + }, + { + "id": "wwwm9ly", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24004", + "purchase_date": "2022-01", + "user_current": "이인우", + "user_position": "프로그램 개발자", + "current_dept": "구조물S/W개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRO Z790-A WIFI (MS-7E07)", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-13900K", + "gpu": "NVIDIA GeForce RTX 4080", + "ram": "64GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRO Z790-A WIFI (MS-7E07)", + "ip_address": "192.168.0.14", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_4", + "memo": "임직원 지급용", + "asset_name": "개인PC 5", + "mac_address": "00:1A:2B:3C:4D:04", + "hw_status": "운영중" + }, + { + "id": "pi8hxvq", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24005", + "purchase_date": "2022-01", + "user_current": "이연재", + "user_position": "프로그램 개발자", + "current_dept": "구조물S/W개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRO Z790-A WIFI (MS-7E07)", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-13900K", + "gpu": "NVIDIA GeForce RTX 4080", + "ram": "64GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRO Z790-A WIFI (MS-7E07)", + "ip_address": "192.168.0.15", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_5", + "memo": "임직원 지급용", + "asset_name": "개인PC 6", + "mac_address": "00:1A:2B:3C:4D:05", + "hw_status": "운영중" + }, + { + "id": "0dxefjo", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24006", + "purchase_date": "2022-01", + "user_current": "이준호", + "user_position": "프로그램 개발자", + "current_dept": "구조물S/W개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRO Z790-A WIFI(MS-7E07)", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-13900K", + "gpu": "NVIDIA GeForce RTX 4080", + "ram": "64GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRO Z790-A WIFI(MS-7E07)", + "ip_address": "192.168.0.16", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_6", + "memo": "임직원 지급용", + "asset_name": "개인PC 7", + "mac_address": "00:1A:2B:3C:4D:06", + "hw_status": "운영중" + }, + { + "id": "phm0i1c", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24007", + "purchase_date": "2018-01", + "user_current": "김민성", + "user_position": "3D 개발자", + "current_dept": "그래픽스 개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700K", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "64GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365M-A", + "ip_address": "192.168.0.17", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_7", + "memo": "임직원 지급용", + "asset_name": "개인PC 8", + "mac_address": "00:1A:2B:3C:4D:07", + "hw_status": "운영중" + }, + { + "id": "45ls7qh", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24008", + "purchase_date": "2022-01", + "user_current": "한성일", + "user_position": "3D 개발자", + "current_dept": "그래픽스 개발팀_Abut&시공통합관제셀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME Z790-P", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700KF", + "gpu": "NVIDIA GeForce RTX 3070 Ti", + "ram": "64GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "4TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME Z790-P", + "ip_address": "192.168.0.18", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_8", + "memo": "임직원 지급용", + "asset_name": "개인PC 9", + "mac_address": "00:1A:2B:3C:4D:08", + "hw_status": "운영중" + }, + { + "id": "b2ug6me", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24009", + "purchase_date": "2021-01", + "user_current": "박승우", + "user_position": "3D 개발자", + "current_dept": "그래픽스 개발팀_Abut&시공통합관제셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H610M-D D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-12700", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "64GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H610M-D D4", + "ip_address": "192.168.0.19", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_9", + "memo": "임직원 지급용", + "asset_name": "개인PC 10", + "mac_address": "00:1A:2B:3C:4D:09", + "hw_status": "운영중" + }, + { + "id": "6quvoto", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24010", + "purchase_date": "2023-01", + "user_current": "이민규", + "user_position": "3D 개발자", + "current_dept": "그래픽스 개발팀_Abut&시공통합관제셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700F", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "64GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M DS3H", + "ip_address": "192.168.0.20", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_10", + "memo": "임직원 지급용", + "asset_name": "개인PC 11", + "mac_address": "00:1A:2B:3C:4D:0A", + "hw_status": "운영중" + }, + { + "id": "3jx7ok4", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24011", + "purchase_date": "2022-01", + "user_current": "최준영", + "user_position": "3D 개발자", + "current_dept": "그래픽스 개발팀_EG-BIM Draw셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "TUF GAMING B650M-PLUS", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 9 7900X", + "gpu": "NVIDIA GeForce RTX 4070 Ti", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "TUF GAMING B650M-PLUS", + "ip_address": "192.168.0.21", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_11", + "memo": "임직원 지급용", + "asset_name": "개인PC 12", + "mac_address": "00:1A:2B:3C:4D:0B", + "hw_status": "운영중" + }, + { + "id": "jk661zs", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24012", + "purchase_date": "2022-01", + "user_current": "엄지숙", + "user_position": "3D 개발자", + "current_dept": "그래픽스 개발팀_EG-BIM Draw셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRO B650M-A WIFI (MS-7D77)", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 9 7900X", + "gpu": "NVIDIA GeForce RTX 4070 Ti", + "ram": "32GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRO B650M-A WIFI (MS-7D77)", + "ip_address": "192.168.0.22", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_12", + "memo": "임직원 지급용", + "asset_name": "개인PC 13", + "mac_address": "00:1A:2B:3C:4D:0C", + "hw_status": "운영중" + }, + { + "id": "zd0eh8f", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24013", + "purchase_date": "2020-01", + "user_current": "강근아", + "user_position": "3D 개발자", + "current_dept": "그래픽스 개발팀_EG-BIM Draw셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B460M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-10700", + "gpu": "NVIDIA GeForce RTX 2070", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "500GB", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B460M-A", + "ip_address": "192.168.0.23", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_13", + "memo": "임직원 지급용", + "asset_name": "개인PC 14", + "mac_address": "00:1A:2B:3C:4D:0D", + "hw_status": "운영중" + }, + { + "id": "pm97n4p", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24014", + "purchase_date": "2022-01", + "user_current": "서동해", + "user_position": "3D 개발자", + "current_dept": "그래픽스 개발팀_EG-BIM Draw셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B760M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700F", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B760M-K", + "ip_address": "192.168.0.24", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_14", + "memo": "임직원 지급용", + "asset_name": "개인PC 15", + "mac_address": "00:1A:2B:3C:4D:0E", + "hw_status": "운영중" + }, + { + "id": "vgieje0", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24015", + "purchase_date": "2022-01", + "user_current": "김근형", + "user_position": "3D 개발자", + "current_dept": "그래픽스 개발팀_EG-BIM Draw셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "TUF GAMING B650M-PLUS", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 9 7900X", + "gpu": "NVIDIA GeForce RTX 4070 Ti", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "TUF GAMING B650M-PLUS", + "ip_address": "192.168.0.25", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_15", + "memo": "임직원 지급용", + "asset_name": "개인PC 16", + "mac_address": "00:1A:2B:3C:4D:0F", + "hw_status": "운영중" + }, + { + "id": "25j47jn", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24016", + "purchase_date": "2021-01", + "user_current": "백승민", + "user_position": "3D 개발자", + "current_dept": "그래픽스 개발팀_HmEG셀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "MPG Z690 FORCE WIFI (MS-7D30)", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-12900K", + "gpu": "NVIDIA GeForce RTX 3090 Ti", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "MPG Z690 FORCE WIFI (MS-7D30)", + "ip_address": "192.168.0.26", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_16", + "memo": "임직원 지급용", + "asset_name": "개인PC 17", + "mac_address": "00:1A:2B:3C:4D:10", + "hw_status": "운영중" + }, + { + "id": "bygqxeh", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24017", + "purchase_date": "2022-01", + "user_current": "최진영", + "user_position": "3D 개발자", + "current_dept": "그래픽스 개발팀_HmEG셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "MAG B660M MORTAR WIFI DDR4 (MS-7D42)", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700KF", + "gpu": "NVIDIA GeForce RTX 4090", + "ram": "64GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "MAG B660M MORTAR WIFI DDR4 (MS-7D42)", + "ip_address": "192.168.0.27", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_17", + "memo": "임직원 지급용", + "asset_name": "개인PC 18", + "mac_address": "00:1A:2B:3C:4D:11", + "hw_status": "운영중" + }, + { + "id": "mwplhx6", + "asset_type": "개인PC", + "purchase_corp": "PTC", + "asset_code": "PC-24018", + "purchase_date": "2018-01", + "user_current": "문영석", + "user_position": "3D 개발자", + "current_dept": "그래픽스 개발팀_HmEG셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "TUF B365M-PLUS GAMING", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700", + "gpu": "NVIDIA GeForce RTX 2070", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "TUF B365M-PLUS GAMING", + "ip_address": "192.168.0.28", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_18", + "memo": "임직원 지급용", + "asset_name": "개인PC 19", + "mac_address": "00:1A:2B:3C:4D:12", + "hw_status": "운영중" + }, + { + "id": "l1fe135", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24019", + "purchase_date": "2022-01", + "user_current": "김명식", + "user_position": "3D 개발자", + "current_dept": "그래픽스 개발팀_HmEG셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRO B650M-A WIFI (MS-7D77)", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 9 7900X", + "gpu": "NVIDIA GeForce RTX 4070 Ti", + "ram": "32GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRO B650M-A WIFI (MS-7D77)", + "ip_address": "192.168.0.29", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_19", + "memo": "임직원 지급용", + "asset_name": "개인PC 20", + "mac_address": "00:1A:2B:3C:4D:13", + "hw_status": "운영중" + }, + { + "id": "vu2deiz", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24020", + "purchase_date": "2022-01", + "user_current": "민경록", + "user_position": "3D 개발자", + "current_dept": "그래픽스 개발팀_HmEG셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME Z790-P", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700KF", + "gpu": "NVIDIA GeForce RTX 3070 Ti", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "4TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME Z790-P", + "ip_address": "192.168.0.30", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_20", + "memo": "임직원 지급용", + "asset_name": "개인PC 21", + "mac_address": "00:1A:2B:3C:4D:14", + "hw_status": "운영중" + }, + { + "id": "89tt04z", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24021", + "purchase_date": "2023-01", + "user_current": "정진우", + "user_position": "3D 개발자", + "current_dept": "그래픽스 개발팀_HmEG셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700F", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M DS3H", + "ip_address": "192.168.0.31", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_21", + "memo": "임직원 지급용", + "asset_name": "개인PC 22", + "mac_address": "00:1A:2B:3C:4D:15", + "hw_status": "운영중" + }, + { + "id": "t7k8460", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24022", + "purchase_date": "2018-01", + "user_current": "이재원", + "user_position": "3D 개발자", + "current_dept": "그래픽스 개발팀_Modeler셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700K", + "gpu": "NVIDIA GeForce RTX 3060 SUPER", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365M-A", + "ip_address": "192.168.0.32", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_22", + "memo": "임직원 지급용", + "asset_name": "개인PC 23", + "mac_address": "00:1A:2B:3C:4D:16", + "hw_status": "운영중" + }, + { + "id": "zjx1p78", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24023", + "purchase_date": "2018-01", + "user_current": "홍길수", + "user_position": "3D 개발자", + "current_dept": "그래픽스 개발팀_Modeler셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME Z390M-PLUS", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700K", + "gpu": "NVIDIA GeForce RTX 3070 Ti", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME Z390M-PLUS", + "ip_address": "192.168.0.33", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_23", + "memo": "임직원 지급용", + "asset_name": "개인PC 24", + "mac_address": "00:1A:2B:3C:4D:17", + "hw_status": "운영중" + }, + { + "id": "20li5yd", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24024", + "purchase_date": "2022-01", + "user_current": "이지율", + "user_position": "3D 개발자", + "current_dept": "그래픽스 개발팀_Modeler셀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B760M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700F", + "gpu": "NVIDIA GeForce RTX 3070 Ti", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B760M-K", + "ip_address": "192.168.0.34", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_24", + "memo": "임직원 지급용", + "asset_name": "개인PC 25", + "mac_address": "00:1A:2B:3C:4D:18", + "hw_status": "운영중" + }, + { + "id": "4cjiemw", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24025", + "purchase_date": "2020-01", + "user_current": "이해랑", + "user_position": "3D 개발자", + "current_dept": "그래픽스 개발팀_Modeler셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B450M-K II", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 5 5600X", + "gpu": "NVIDIA GeForce RTX 3060 Ti", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "1TB", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B450M-K II", + "ip_address": "192.168.0.35", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_25", + "memo": "임직원 지급용", + "asset_name": "개인PC 26", + "mac_address": "00:1A:2B:3C:4D:19", + "hw_status": "운영중" + }, + { + "id": "vy3apmj", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24026", + "purchase_date": "2022-01", + "user_current": "박현수", + "user_position": "엔지니어", + "current_dept": "상하수도팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H610M-E D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700F", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.82TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H610M-E D4", + "ip_address": "192.168.0.36", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_26", + "memo": "임직원 지급용", + "asset_name": "개인PC 27", + "mac_address": "00:1A:2B:3C:4D:1A", + "hw_status": "운영중" + }, + { + "id": "0a8ek3m", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24027", + "purchase_date": "2021-01", + "user_current": "최정우A", + "user_position": "엔지니어", + "current_dept": "상하수도팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H610M-E D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-12700F", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H610M-E D4", + "ip_address": "192.168.0.37", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_27", + "memo": "임직원 지급용", + "asset_name": "개인PC 28", + "mac_address": "00:1A:2B:3C:4D:1B", + "hw_status": "운영중" + }, + { + "id": "2vjv5ml", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24028", + "purchase_date": "2018-01", + "user_current": "배상우", + "user_position": "엔지니어", + "current_dept": "상하수도팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700K", + "gpu": "NVIDIA GeForce RTX 2060 SUPER", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.82TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365M-K", + "ip_address": "192.168.0.38", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_28", + "memo": "임직원 지급용", + "asset_name": "개인PC 29", + "mac_address": "00:1A:2B:3C:4D:1C", + "hw_status": "운영중" + }, + { + "id": "yrdeqqm", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24029", + "purchase_date": "2018-01", + "user_current": "최지수", + "user_position": "엔지니어", + "current_dept": "상하수도팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700K", + "gpu": "NVIDIA GeForce GTX 1060", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365M-K", + "ip_address": "192.168.0.39", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_29", + "memo": "임직원 지급용", + "asset_name": "개인PC 30", + "mac_address": "00:1A:2B:3C:4D:1D", + "hw_status": "운영중" + }, + { + "id": "jdkur63", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24030", + "purchase_date": "2021-01", + "user_current": "이은구", + "user_position": "엔지니어", + "current_dept": "수자원팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H610M-D D4", + "os": "Windows 11 Pro", + "cpu": "12th Gen Intel(R) Core(TM) (12 CPUs)", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H610M-D D4", + "ip_address": "192.168.0.40", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_30", + "memo": "임직원 지급용", + "asset_name": "개인PC 31", + "mac_address": "00:1A:2B:3C:4D:1E", + "hw_status": "운영중" + }, + { + "id": "j5ypqe4", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24031", + "purchase_date": "2018-01", + "user_current": "지현욱", + "user_position": "엔지니어", + "current_dept": "수자원팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B360M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700K", + "gpu": "NVIDIA GeForce GTX 1070", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B360M-K", + "ip_address": "192.168.0.41", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_31", + "memo": "임직원 지급용", + "asset_name": "개인PC 32", + "mac_address": "00:1A:2B:3C:4D:1F", + "hw_status": "운영중" + }, + { + "id": "fd2zxxh", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24032", + "purchase_date": "2017-01", + "user_current": "김희철", + "user_position": "엔지니어", + "current_dept": "수자원팀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B350M-A", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 7 1700X", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B350M-A", + "ip_address": "192.168.0.42", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_32", + "memo": "임직원 지급용", + "asset_name": "개인PC 33", + "mac_address": "00:1A:2B:3C:4D:20", + "hw_status": "운영중" + }, + { + "id": "3ujrpx1", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24033", + "purchase_date": "2020-01", + "user_current": "황호연", + "user_position": "엔지니어", + "current_dept": "수자원팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ROG STRIX B550-A GAMING", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 7 5800X", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ROG STRIX B550-A GAMING", + "ip_address": "192.168.0.43", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_33", + "memo": "임직원 지급용", + "asset_name": "개인PC 34", + "mac_address": "00:1A:2B:3C:4D:21", + "hw_status": "운영중" + }, + { + "id": "fmatclo", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24034", + "purchase_date": "2020-01", + "user_current": "복진훈", + "user_position": "엔지니어", + "current_dept": "스마트건설팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS PRIME H410M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-10400", + "gpu": "Intel(R) UHD Graphics 630", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS PRIME H410M-A", + "ip_address": "192.168.0.44", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_34", + "memo": "임직원 지급용", + "asset_name": "개인PC 35", + "mac_address": "00:1A:2B:3C:4D:22", + "hw_status": "운영중" + }, + { + "id": "dif919j", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24035", + "purchase_date": "2017-01", + "user_current": "유석준", + "user_position": "프로그램 개발자", + "current_dept": "스마트건설팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS PRIME B350M-A", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 7 1800X", + "gpu": "NVIDIA GeForce GTX 1050", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS PRIME B350M-A", + "ip_address": "192.168.0.45", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_35", + "memo": "임직원 지급용", + "asset_name": "개인PC 36", + "mac_address": "00:1A:2B:3C:4D:23", + "hw_status": "운영중" + }, + { + "id": "sby9nbf", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24036", + "purchase_date": "2023-01", + "user_current": "최정균", + "user_position": "엔지니어", + "current_dept": "대산-당진 제2공구 파견", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700KF", + "gpu": "NVIDIA GeForce RTX 5060", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M DS3H", + "ip_address": "192.168.0.46", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_36", + "memo": "임직원 지급용", + "asset_name": "개인PC 37", + "mac_address": "00:1A:2B:3C:4D:24", + "hw_status": "운영중" + }, + { + "id": "ylejbed", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24037", + "purchase_date": "2018-01", + "user_current": "김재림", + "user_position": "엔지니어", + "current_dept": "스마트건설팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS PRIME B365M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-9400", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "32GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS PRIME B365M-K", + "ip_address": "192.168.0.47", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_37", + "memo": "임직원 지급용", + "asset_name": "개인PC 38", + "mac_address": "00:1A:2B:3C:4D:25", + "hw_status": "운영중" + }, + { + "id": "jmh5f1p", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24038", + "purchase_date": "2020-01", + "user_current": "이동원", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "TUF GAMING Z490-PLUS", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-10900", + "gpu": "NVIDIA GeForce RTX 3090", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "1TB", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "TUF GAMING Z490-PLUS", + "ip_address": "192.168.0.48", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_38", + "memo": "임직원 지급용", + "asset_name": "개인PC 39", + "mac_address": "00:1A:2B:3C:4D:26", + "hw_status": "운영중" + }, + { + "id": "sz4xq1j", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24039", + "purchase_date": "2013-01", + "user_current": "김일태", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_구조물계획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUSTeK B85M-G", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-4690", + "gpu": "NVIDIA GeForce GTX 1030", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "250GB", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUSTeK B85M-G", + "ip_address": "192.168.0.49", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_39", + "memo": "임직원 지급용", + "asset_name": "개인PC 40", + "mac_address": "00:1A:2B:3C:4D:27", + "hw_status": "운영중" + }, + { + "id": "95thb4u", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24040", + "purchase_date": "2022-01", + "user_current": "곽현석", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_구조물계획팀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME A620M-A", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 5 7500F", + "gpu": "AMD Radeon RX 580 2048SP", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME A620M-A", + "ip_address": "192.168.0.50", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_40", + "memo": "임직원 지급용", + "asset_name": "개인PC 41", + "mac_address": "00:1A:2B:3C:4D:28", + "hw_status": "운영중" + }, + { + "id": "vamw3ku", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24041", + "purchase_date": "2020-01", + "user_current": "윤현경", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_구조물계획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME A320M-K", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 5 5600X", + "gpu": "NVIDIA GeForce GTX 1650", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "250GB", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME A320M-K", + "ip_address": "192.168.0.51", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_41", + "memo": "임직원 지급용", + "asset_name": "개인PC 42", + "mac_address": "00:1A:2B:3C:4D:29", + "hw_status": "운영중" + }, + { + "id": "rcqv3r6", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24042", + "purchase_date": "2020-01", + "user_current": "정미정", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_구조물계획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H410M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-10400", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H410M-A", + "ip_address": "192.168.0.52", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_42", + "memo": "임직원 지급용", + "asset_name": "개인PC 43", + "mac_address": "00:1A:2B:3C:4D:2A", + "hw_status": "운영중" + }, + { + "id": "uxcl65l", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24043", + "purchase_date": "2020-01", + "user_current": "최용혁", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_구조물계획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B550M-A", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 5 5600G", + "gpu": "NVIDIA GeForce GTX 1050", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B550M-A", + "ip_address": "192.168.0.53", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_43", + "memo": "임직원 지급용", + "asset_name": "개인PC 44", + "mac_address": "00:1A:2B:3C:4D:2B", + "hw_status": "운영중" + }, + { + "id": "f4yzhnn", + "asset_type": "개인PC", + "purchase_corp": "PTC", + "asset_code": "PC-24044", + "purchase_date": "2020-01", + "user_current": "김상욱", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_일반구조물팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "EX-A320M-GAMING", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 5 5600X", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "EX-A320M-GAMING", + "ip_address": "192.168.0.54", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_44", + "memo": "임직원 지급용", + "asset_name": "개인PC 45", + "mac_address": "00:1A:2B:3C:4D:2C", + "hw_status": "운영중" + }, + { + "id": "w24yau6", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24045", + "purchase_date": "2018-01", + "user_current": "김재환", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_일반구조물팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-9400F", + "gpu": "NVIDIA GeForce GTX 1070", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365M-A", + "ip_address": "192.168.0.55", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_45", + "memo": "임직원 지급용", + "asset_name": "개인PC 46", + "mac_address": "00:1A:2B:3C:4D:2D", + "hw_status": "운영중" + }, + { + "id": "gxx9xj0", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24046", + "purchase_date": "2013-01", + "user_current": "양준열", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_일반구조물팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUSTeK B85M-G", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-4690", + "gpu": "NVIDIA GeForce GT 1030", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUSTeK B85M-G", + "ip_address": "192.168.0.56", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_46", + "memo": "임직원 지급용", + "asset_name": "개인PC 47", + "mac_address": "00:1A:2B:3C:4D:2E", + "hw_status": "운영중" + }, + { + "id": "n608c90", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24047", + "purchase_date": "2021-01", + "user_current": "김주영", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_일반구조물팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B660M-A D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-12900KF", + "gpu": "NVIDIA GeForce RTX 3070", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B660M-A D4", + "ip_address": "192.168.0.57", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_47", + "memo": "임직원 지급용", + "asset_name": "개인PC 48", + "mac_address": "00:1A:2B:3C:4D:2F", + "hw_status": "운영중" + }, + { + "id": "ajpy60r", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24048", + "purchase_date": "2018-01", + "user_current": "홍덕현", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_일반구조물팀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "TUF B365M-PLUS GAMING", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700F", + "gpu": "NVIDIA GeForce RTX 2060", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "TUF B365M-PLUS GAMING", + "ip_address": "192.168.0.58", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_48", + "memo": "임직원 지급용", + "asset_name": "개인PC 49", + "mac_address": "00:1A:2B:3C:4D:30", + "hw_status": "운영중" + }, + { + "id": "z5b0y98", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24049", + "purchase_date": "2018-01", + "user_current": "김승호", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_하부구조팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700", + "gpu": "NVIDIA GeForce GTX 2060 SUPER", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "4TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365M-K", + "ip_address": "192.168.0.59", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_49", + "memo": "임직원 지급용", + "asset_name": "개인PC 50", + "mac_address": "00:1A:2B:3C:4D:31", + "hw_status": "운영중" + }, + { + "id": "ute9io5", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24050", + "purchase_date": "2020-01", + "user_current": "최창인", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_하부구조팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "TUF GAMING B460M-PLUS", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-10400", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "32GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "TUF GAMING B460M-PLUS", + "ip_address": "192.168.0.60", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_50", + "memo": "임직원 지급용", + "asset_name": "개인PC 51", + "mac_address": "00:1A:2B:3C:4D:32", + "hw_status": "운영중" + }, + { + "id": "fvhem8r", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24051", + "purchase_date": "2017-01", + "user_current": "김현일", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_하부구조팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B250M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-7500F", + "gpu": "NVIDIA GeForce GTX 1050", + "ram": "16GB", + "ssd_1": "250 GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.0TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B250M-K", + "ip_address": "192.168.0.61", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_51", + "memo": "임직원 지급용", + "asset_name": "개인PC 52", + "mac_address": "00:1A:2B:3C:4D:33", + "hw_status": "운영중" + }, + { + "id": "97bmvyq", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24052", + "purchase_date": "2020-01", + "user_current": "강지영", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_CM기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "TUF GAMING B460m-PLUS", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-10400", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "TUF GAMING B460m-PLUS", + "ip_address": "192.168.0.62", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_52", + "memo": "임직원 지급용", + "asset_name": "개인PC 53", + "mac_address": "00:1A:2B:3C:4D:34", + "hw_status": "운영중" + }, + { + "id": "fy16xiw", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24053", + "purchase_date": "2018-01", + "user_current": "조선두", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_CM기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700KF", + "gpu": "NVIDIA GeForce GTX 2060", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365M-K", + "ip_address": "192.168.0.63", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_53", + "memo": "임직원 지급용", + "asset_name": "개인PC 54", + "mac_address": "00:1A:2B:3C:4D:35", + "hw_status": "운영중" + }, + { + "id": "9wwyem9", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24054", + "purchase_date": "2021-01", + "user_current": "황선필", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_CM기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H510M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-11400", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H510M-A", + "ip_address": "192.168.0.64", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_54", + "memo": "임직원 지급용", + "asset_name": "개인PC 55", + "mac_address": "00:1A:2B:3C:4D:36", + "hw_status": "운영중" + }, + { + "id": "awezaum", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24055", + "purchase_date": "2020-01", + "user_current": "강상구", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_CM기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B460M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-10700", + "gpu": "NVIDIA GeForce RTX 3090", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "2TB", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B460M-K", + "ip_address": "192.168.0.65", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_55", + "memo": "임직원 지급용", + "asset_name": "개인PC 56", + "mac_address": "00:1A:2B:3C:4D:37", + "hw_status": "운영중" + }, + { + "id": "9x0oxbq", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24056", + "purchase_date": "2017-01", + "user_current": "박상원", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_CM기획팀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B250M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-7700K", + "gpu": "NVIDIA GeForce GTX 1050", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B250M-K", + "ip_address": "192.168.0.66", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_56", + "memo": "임직원 지급용", + "asset_name": "개인PC 57", + "mac_address": "00:1A:2B:3C:4D:38", + "hw_status": "운영중" + }, + { + "id": "0kdcl6h", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24057", + "purchase_date": "2020-01", + "user_current": "이창효", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_DfMA팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "TUF GAMING B460M-PLUS", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-10400", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "TUF GAMING B460M-PLUS", + "ip_address": "192.168.0.67", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_57", + "memo": "임직원 지급용", + "asset_name": "개인PC 58", + "mac_address": "00:1A:2B:3C:4D:39", + "hw_status": "운영중" + }, + { + "id": "mne1uun", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24058", + "purchase_date": "2018-01", + "user_current": "심영표", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_DfMA팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B360M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700K", + "gpu": "NVIDIA GeForce RTX 1070", + "ram": "16GB", + "ssd_1": "500 GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B360M-K", + "ip_address": "192.168.0.68", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_58", + "memo": "임직원 지급용", + "asset_name": "개인PC 59", + "mac_address": "00:1A:2B:3C:4D:3A", + "hw_status": "운영중" + }, + { + "id": "kza697b", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24059", + "purchase_date": "2020-01", + "user_current": "이수문", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_DfMA팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H410M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-10400F", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "250 GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H410M-A", + "ip_address": "192.168.0.69", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_59", + "memo": "임직원 지급용", + "asset_name": "개인PC 60", + "mac_address": "00:1A:2B:3C:4D:3B", + "hw_status": "운영중" + }, + { + "id": "snjlmyj", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24060", + "purchase_date": "2017-01", + "user_current": "장한규", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_DfMA팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B360M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-8700", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "32GB", + "ssd_1": "466 GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B360M-K", + "ip_address": "192.168.0.70", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_60", + "memo": "임직원 지급용", + "asset_name": "개인PC 61", + "mac_address": "00:1A:2B:3C:4D:3C", + "hw_status": "운영중" + }, + { + "id": "m4aqivy", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24061", + "purchase_date": "2017-01", + "user_current": "변정안", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_DfMA팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "Gigabyte B250M-DS3H-CF", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-7500", + "gpu": "NVIDIA GeForce GTX 1050", + "ram": "16GB", + "ssd_1": "250 GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.0TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "Gigabyte B250M-DS3H-CF", + "ip_address": "192.168.0.71", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_61", + "memo": "임직원 지급용", + "asset_name": "개인PC 62", + "mac_address": "00:1A:2B:3C:4D:3D", + "hw_status": "운영중" + }, + { + "id": "4l2zlk1", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24062", + "purchase_date": "2017-01", + "user_current": "강명진", + "user_position": "프로그램 개발자", + "current_dept": "천지인팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B250M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-7700", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B250M-A", + "ip_address": "192.168.0.72", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_62", + "memo": "임직원 지급용", + "asset_name": "개인PC 63", + "mac_address": "00:1A:2B:3C:4D:3E", + "hw_status": "운영중" + }, + { + "id": "4xselpy", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24063", + "purchase_date": "2018-01", + "user_current": "손원일", + "user_position": "프로그램 개발자", + "current_dept": "천지인팀_단지설계개발셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS TUF B365M-PLUS GAMING", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700", + "gpu": "NVIDIA GeForce RTX 2060 SUPER", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS TUF B365M-PLUS GAMING", + "ip_address": "192.168.0.73", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_63", + "memo": "임직원 지급용", + "asset_name": "개인PC 64", + "mac_address": "00:1A:2B:3C:4D:3F", + "hw_status": "운영중" + }, + { + "id": "wjiorkl", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24064", + "purchase_date": "2018-01", + "user_current": "김종석", + "user_position": "프로그램 개발자", + "current_dept": "천지인팀_단지설계개발셀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS PRIME B365M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700KF", + "gpu": "NVIDIA GeForce RTX 2060 SUPER", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS PRIME B365M-K", + "ip_address": "192.168.0.74", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_64", + "memo": "임직원 지급용", + "asset_name": "개인PC 65", + "mac_address": "00:1A:2B:3C:4D:40", + "hw_status": "운영중" + }, + { + "id": "lntw80q", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24065", + "purchase_date": "2018-01", + "user_current": "이현경", + "user_position": "프로그램 개발자", + "current_dept": "천지인팀_단지설계개발셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B450M-A", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 7 2700X", + "gpu": "NVIDIA GeForce GTX 1070", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B450M-A", + "ip_address": "192.168.0.75", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_65", + "memo": "임직원 지급용", + "asset_name": "개인PC 66", + "mac_address": "00:1A:2B:3C:4D:41", + "hw_status": "운영중" + }, + { + "id": "lr18rjc", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24066", + "purchase_date": "2020-01", + "user_current": "김근아", + "user_position": "프로그램 개발자", + "current_dept": "천지인팀_단지설계개발셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B460M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-10700", + "gpu": "NVIDIA GeForce GTX 1660 SUPER", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "500GB", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B460M-A", + "ip_address": "192.168.0.76", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_66", + "memo": "임직원 지급용", + "asset_name": "개인PC 67", + "mac_address": "00:1A:2B:3C:4D:42", + "hw_status": "운영중" + }, + { + "id": "o57ja4y", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24067", + "purchase_date": "2017-01", + "user_current": "김규범", + "user_position": "프로그램 개발자", + "current_dept": "천지인팀_용지도셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B250M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-7700", + "gpu": "NVIDIA GeForce GTX 1060", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B250M-A", + "ip_address": "192.168.0.77", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_67", + "memo": "임직원 지급용", + "asset_name": "개인PC 68", + "mac_address": "00:1A:2B:3C:4D:43", + "hw_status": "운영중" + }, + { + "id": "kbmv6ew", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24068", + "purchase_date": "2018-01", + "user_current": "이진수", + "user_position": "프로그램 개발자", + "current_dept": "천지인팀_용지도셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS PRIME B365M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700", + "gpu": "NVIDIA GeForce RTX 2060", + "ram": "48GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS PRIME B365M-K", + "ip_address": "192.168.0.78", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_68", + "memo": "임직원 지급용", + "asset_name": "개인PC 69", + "mac_address": "00:1A:2B:3C:4D:44", + "hw_status": "운영중" + }, + { + "id": "zhowslh", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24069", + "purchase_date": "2021-01", + "user_current": "임성엽", + "user_position": "프로그램 개발자", + "current_dept": "천지인팀_용지도셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS PRIME H610M-E D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-12700F", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS PRIME H610M-E D4", + "ip_address": "192.168.0.79", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_69", + "memo": "임직원 지급용", + "asset_name": "개인PC 70", + "mac_address": "00:1A:2B:3C:4D:45", + "hw_status": "운영중" + }, + { + "id": "m7dvh0i", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24070", + "purchase_date": "2018-01", + "user_current": "김예서", + "user_position": "프로그램 개발자", + "current_dept": "천지인팀_용지도셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS PRIME B365M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700", + "gpu": "NVIDIA GeForce RTX 3090", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS PRIME B365M-K", + "ip_address": "192.168.0.80", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_70", + "memo": "임직원 지급용", + "asset_name": "개인PC 71", + "mac_address": "00:1A:2B:3C:4D:46", + "hw_status": "운영중" + }, + { + "id": "fwk7jio", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24071", + "purchase_date": "2017-01", + "user_current": "신봉진", + "user_position": "프로그램 개발자", + "current_dept": "천지인팀_천지인셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS PRIME Z370-P", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-8700K", + "gpu": "NVIDIA GeForce GTX 1070 Ti", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS PRIME Z370-P", + "ip_address": "192.168.0.81", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_71", + "memo": "임직원 지급용", + "asset_name": "개인PC 72", + "mac_address": "00:1A:2B:3C:4D:47", + "hw_status": "운영중" + }, + { + "id": "g9ko9wg", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24072", + "purchase_date": "2018-01", + "user_current": "안대욱", + "user_position": "프로그램 개발자", + "current_dept": "천지인팀_천지인셀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS TUF B365M-PLUS GAMING", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700", + "gpu": "NVIDIA GeForce RTX 2060 SUPER", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS TUF B365M-PLUS GAMING", + "ip_address": "192.168.0.82", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_72", + "memo": "임직원 지급용", + "asset_name": "개인PC 73", + "mac_address": "00:1A:2B:3C:4D:48", + "hw_status": "운영중" + }, + { + "id": "b77687i", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24073", + "purchase_date": "2021-01", + "user_current": "정주현", + "user_position": "프로그램 개발자", + "current_dept": "천지인팀_천지인셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS PRIME H670-PLUS D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-12700F", + "gpu": "NVIDIA GeForce RTX 2060 SUPER", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS PRIME H670-PLUS D4", + "ip_address": "192.168.0.83", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_73", + "memo": "임직원 지급용", + "asset_name": "개인PC 74", + "mac_address": "00:1A:2B:3C:4D:49", + "hw_status": "운영중" + }, + { + "id": "u1ii9g3", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24074", + "purchase_date": "2021-01", + "user_current": "백순철", + "user_position": "프로그램 개발자", + "current_dept": "천지인팀_천지인셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS PRIME H610M-E D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-12700F", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "64GB", + "ssd_1": "1 TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2 TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS PRIME H610M-E D4", + "ip_address": "192.168.0.84", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_74", + "memo": "임직원 지급용", + "asset_name": "개인PC 75", + "mac_address": "00:1A:2B:3C:4D:4A", + "hw_status": "운영중" + }, + { + "id": "hvcbyyh", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24075", + "purchase_date": "2021-01", + "user_current": "전제경", + "user_position": "프로그램 개발자", + "current_dept": "천지인팀_천지인셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS PRIME H610M-D D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-12700F", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "32GB", + "ssd_1": "500 GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2 TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS PRIME H610M-D D4", + "ip_address": "192.168.0.85", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_75", + "memo": "임직원 지급용", + "asset_name": "개인PC 76", + "mac_address": "00:1A:2B:3C:4D:4B", + "hw_status": "운영중" + }, + { + "id": "uf1icdf", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24076", + "purchase_date": "2018-01", + "user_current": "이화영", + "user_position": "엔지니어", + "current_dept": "터널팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700K", + "gpu": "NVIDIA GeForce GTX 2060 SUPER", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365M-A", + "ip_address": "192.168.0.86", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_76", + "memo": "임직원 지급용", + "asset_name": "개인PC 77", + "mac_address": "00:1A:2B:3C:4D:4C", + "hw_status": "운영중" + }, + { + "id": "t9wstpe", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24077", + "purchase_date": "2018-01", + "user_current": "심재훈", + "user_position": "엔지니어", + "current_dept": "터널팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B365M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-9400F", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "233GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B365M DS3H", + "ip_address": "192.168.0.87", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_77", + "memo": "임직원 지급용", + "asset_name": "개인PC 78", + "mac_address": "00:1A:2B:3C:4D:4D", + "hw_status": "운영중" + }, + { + "id": "1s0ddas", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24078", + "purchase_date": "2018-01", + "user_current": "최정혁", + "user_position": "엔지니어", + "current_dept": "터널팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700", + "gpu": "NVIDIA GeForce GTX 1660 SUPER", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365M-K", + "ip_address": "192.168.0.88", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_78", + "memo": "임직원 지급용", + "asset_name": "개인PC 79", + "mac_address": "00:1A:2B:3C:4D:4E", + "hw_status": "운영중" + }, + { + "id": "ds11eo3", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24079", + "purchase_date": "2018-01", + "user_current": "박민선", + "user_position": "엔지니어", + "current_dept": "터널팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700K", + "gpu": "NVIDIA GeForce RTX 2060 SUPER", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365M-K", + "ip_address": "192.168.0.89", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_79", + "memo": "임직원 지급용", + "asset_name": "개인PC 80", + "mac_address": "00:1A:2B:3C:4D:4F", + "hw_status": "운영중" + }, + { + "id": "s4ntrkf", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24080", + "purchase_date": "2018-01", + "user_current": "이상목", + "user_position": "엔지니어", + "current_dept": "터널팀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B360M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700K", + "gpu": "NVIDIA GeForce GTX 1070", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B360M-K", + "ip_address": "192.168.0.90", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_80", + "memo": "임직원 지급용", + "asset_name": "개인PC 81", + "mac_address": "00:1A:2B:3C:4D:50", + "hw_status": "운영중" + }, + { + "id": "ymastrt", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24081", + "purchase_date": "2020-01", + "user_current": "이민지", + "user_position": "엔지니어", + "current_dept": "일반구조물 Div_하부구조팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "TUF GAMING B460M-PLUS", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-10400F", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "233GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "TUF GAMING B460M-PLUS", + "ip_address": "192.168.0.91", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_81", + "memo": "임직원 지급용", + "asset_name": "개인PC 82", + "mac_address": "00:1A:2B:3C:4D:51", + "hw_status": "운영중" + }, + { + "id": "4qfjqzq", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24082", + "purchase_date": "2017-01", + "user_current": "정요한", + "user_position": "엔지니어", + "current_dept": "Construction Control팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B250M-DS3H-CF", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-7500", + "gpu": "NVIDIA GeForce GTX 1050", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B250M-DS3H-CF", + "ip_address": "192.168.0.92", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_82", + "memo": "임직원 지급용", + "asset_name": "개인PC 83", + "mac_address": "00:1A:2B:3C:4D:52", + "hw_status": "운영중" + }, + { + "id": "bw7i863", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24083", + "purchase_date": "2021-01", + "user_current": "김남걸", + "user_position": "엔지니어", + "current_dept": "Construction Control팀_공정관리셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B460M-A R2.0", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-11400", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B460M-A R2.0", + "ip_address": "192.168.0.93", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_83", + "memo": "임직원 지급용", + "asset_name": "개인PC 84", + "mac_address": "00:1A:2B:3C:4D:53", + "hw_status": "운영중" + }, + { + "id": "7sxcou6", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24084", + "purchase_date": "2018-01", + "user_current": "신원태", + "user_position": "엔지니어", + "current_dept": "Construction Control팀_공정관리셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME Z390M-PLUS", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700", + "gpu": "NVIDIA GeForce GTX 1070", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME Z390M-PLUS", + "ip_address": "192.168.0.94", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_84", + "memo": "임직원 지급용", + "asset_name": "개인PC 85", + "mac_address": "00:1A:2B:3C:4D:54", + "hw_status": "운영중" + }, + { + "id": "9idshv8", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24085", + "purchase_date": "2017-01", + "user_current": "유효식", + "user_position": "엔지니어", + "current_dept": "Construction Control팀_공정관리셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B250M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-7500", + "gpu": "NVIDIA GeForce GTX 1050", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1TB", + "hdd_2": "1TB", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B250M-K", + "ip_address": "192.168.0.95", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_85", + "memo": "임직원 지급용", + "asset_name": "개인PC 86", + "mac_address": "00:1A:2B:3C:4D:55", + "hw_status": "운영중" + }, + { + "id": "gb5hnvd", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24086", + "purchase_date": "2018-01", + "user_current": "김윤권", + "user_position": "엔지니어", + "current_dept": "Construction Control팀_공정관리셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-9400F", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365M-K", + "ip_address": "192.168.0.96", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_86", + "memo": "임직원 지급용", + "asset_name": "개인PC 87", + "mac_address": "00:1A:2B:3C:4D:56", + "hw_status": "운영중" + }, + { + "id": "iua8t5e", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24087", + "purchase_date": "2021-01", + "user_current": "오문성", + "user_position": "엔지니어", + "current_dept": "Construction Control팀_단가산출셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H610M-D D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-12700F", + "gpu": "NVIDIA GeForce RTX 2060", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H610M-D D4", + "ip_address": "192.168.0.97", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_87", + "memo": "임직원 지급용", + "asset_name": "개인PC 88", + "mac_address": "00:1A:2B:3C:4D:57", + "hw_status": "운영중" + }, + { + "id": "d29sjkc", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24088", + "purchase_date": "2020-01", + "user_current": "이정곤", + "user_position": "엔지니어", + "current_dept": "Construction Control팀_단가산출셀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H410M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-10400F", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H410M-A", + "ip_address": "192.168.0.98", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_88", + "memo": "임직원 지급용", + "asset_name": "개인PC 89", + "mac_address": "00:1A:2B:3C:4D:58", + "hw_status": "운영중" + }, + { + "id": "xy13pi8", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24089", + "purchase_date": "2020-01", + "user_current": "김도우", + "user_position": "엔지니어", + "current_dept": "Construction Control팀_단가산출셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H410M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-10400F", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H410M-A", + "ip_address": "192.168.0.99", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_89", + "memo": "임직원 지급용", + "asset_name": "개인PC 90", + "mac_address": "00:1A:2B:3C:4D:59", + "hw_status": "운영중" + }, + { + "id": "m2jsgd3", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24090", + "purchase_date": "2021-01", + "user_current": "이호성", + "user_position": "3D 개발자", + "current_dept": "GSIM 개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H610M-D D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-12700F", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "32GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "2TB", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H610M-D D4", + "ip_address": "192.168.0.100", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_90", + "memo": "임직원 지급용", + "asset_name": "개인PC 91", + "mac_address": "00:1A:2B:3C:4D:5A", + "hw_status": "운영중" + }, + { + "id": "el3gyfc", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24091", + "purchase_date": "2020-01", + "user_current": "기윤서", + "user_position": "3D 개발자", + "current_dept": "GSIM 개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B460M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-10700", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B460M-K", + "ip_address": "192.168.0.101", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_91", + "memo": "임직원 지급용", + "asset_name": "개인PC 92", + "mac_address": "00:1A:2B:3C:4D:5B", + "hw_status": "운영중" + }, + { + "id": "i979qvj", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24092", + "purchase_date": "2023-01", + "user_current": "박정우", + "user_position": "3D 개발자", + "current_dept": "GSIM 개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "Gigabyte B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "Gigabyte B760M DS3H", + "ip_address": "192.168.0.102", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_92", + "memo": "임직원 지급용", + "asset_name": "개인PC 93", + "mac_address": "00:1A:2B:3C:4D:5C", + "hw_status": "운영중" + }, + { + "id": "eqpro9b", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24093", + "purchase_date": "2021-01", + "user_current": "민홍", + "user_position": "3D 개발자", + "current_dept": "GSIM 개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "MPG Z690 Force wifi", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-12900K", + "gpu": "NVIDIA GeForce RTX 3090 Ti", + "ram": "32GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "4TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "MPG Z690 Force wifi", + "ip_address": "192.168.0.103", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_93", + "memo": "임직원 지급용", + "asset_name": "개인PC 94", + "mac_address": "00:1A:2B:3C:4D:5D", + "hw_status": "운영중" + }, + { + "id": "9o7hpz1", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24094", + "purchase_date": "2020-01", + "user_current": "김도현", + "user_position": "3D 개발자", + "current_dept": "GSIM 개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B460M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-10700", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B460M-K", + "ip_address": "192.168.0.104", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_94", + "memo": "임직원 지급용", + "asset_name": "개인PC 95", + "mac_address": "00:1A:2B:3C:4D:5E", + "hw_status": "운영중" + }, + { + "id": "8vr206d", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24095", + "purchase_date": "2022-01", + "user_current": "손제근", + "user_position": "3D 개발자", + "current_dept": "GSIM 개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B760M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700F", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B760M-K", + "ip_address": "192.168.0.105", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_95", + "memo": "임직원 지급용", + "asset_name": "개인PC 96", + "mac_address": "00:1A:2B:3C:4D:5F", + "hw_status": "운영중" + }, + { + "id": "whb951n", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24096", + "purchase_date": "2022-01", + "user_current": "박지은", + "user_position": "3D 개발자", + "current_dept": "GSIM 개발팀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B760M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700F", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "32GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B760M-K", + "ip_address": "192.168.0.106", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_96", + "memo": "임직원 지급용", + "asset_name": "개인PC 97", + "mac_address": "00:1A:2B:3C:4D:60", + "hw_status": "운영중" + }, + { + "id": "m36yt6n", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24097", + "purchase_date": "2022-01", + "user_current": "최준호", + "user_position": "3D 개발자", + "current_dept": "GSIM 개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B760M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700F", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B760M-K", + "ip_address": "192.168.0.107", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_97", + "memo": "임직원 지급용", + "asset_name": "개인PC 98", + "mac_address": "00:1A:2B:3C:4D:61", + "hw_status": "운영중" + }, + { + "id": "b2xhywm", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24098", + "purchase_date": "2023-01", + "user_current": "김건우A", + "user_position": "3D 개발자", + "current_dept": "GSIM 개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "Gigabyte B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700F", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "Gigabyte B760M DS3H", + "ip_address": "192.168.0.108", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_98", + "memo": "임직원 지급용", + "asset_name": "개인PC 99", + "mac_address": "00:1A:2B:3C:4D:62", + "hw_status": "운영중" + }, + { + "id": "bi2jylb", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24099", + "purchase_date": "2018-01", + "user_current": "문남연", + "user_position": "프로그램 개발자", + "current_dept": "Infra Solution 개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B360M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700K", + "gpu": "NVIDIA GeForce GTX 1070", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B360M-K", + "ip_address": "192.168.0.109", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_99", + "memo": "임직원 지급용", + "asset_name": "개인PC 100", + "mac_address": "00:1A:2B:3C:4D:63", + "hw_status": "운영중" + }, + { + "id": "e1myehm", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24100", + "purchase_date": "2022-01", + "user_current": "노준", + "user_position": "프로그램 개발자", + "current_dept": "Infra Solution 개발팀_비탈면/구조물셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760 GAMING X", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700KF", + "gpu": "NVIDIA GeForce RTX 4070 Ti", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "4TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760 GAMING X", + "ip_address": "192.168.0.110", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_100", + "memo": "임직원 지급용", + "asset_name": "개인PC 101", + "mac_address": "00:1A:2B:3C:4D:64", + "hw_status": "운영중" + }, + { + "id": "tifzzec", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24101", + "purchase_date": "2020-01", + "user_current": "이가연", + "user_position": "프로그램 개발자", + "current_dept": "Infra Solution 개발팀_비탈면/구조물셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B450M-K II", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 5 5600X", + "gpu": "NVIDIA GeForce RTX 3060 Ti", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B450M-K II", + "ip_address": "192.168.0.111", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_101", + "memo": "임직원 지급용", + "asset_name": "개인PC 102", + "mac_address": "00:1A:2B:3C:4D:65", + "hw_status": "운영중" + }, + { + "id": "z1y6opr", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24102", + "purchase_date": "2022-01", + "user_current": "류한솔", + "user_position": "프로그램 개발자", + "current_dept": "Infra Solution 개발팀_Primal/평면셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760 GAMING X", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700KF", + "gpu": "NVIDIA GeForce RTX 4070 Ti", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "4TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760 GAMING X", + "ip_address": "192.168.0.112", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_102", + "memo": "임직원 지급용", + "asset_name": "개인PC 103", + "mac_address": "00:1A:2B:3C:4D:66", + "hw_status": "운영중" + }, + { + "id": "h16hrlu", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24103", + "purchase_date": "2018-01", + "user_current": "김영배", + "user_position": "프로그램 개발자", + "current_dept": "Infra Solution 개발팀_Primal/평면셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700KF", + "gpu": "NVIDIA GeForce RTX 2060 SUPER", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365M-K", + "ip_address": "192.168.0.113", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_103", + "memo": "임직원 지급용", + "asset_name": "개인PC 104", + "mac_address": "00:1A:2B:3C:4D:67", + "hw_status": "운영중" + }, + { + "id": "1hejkjh", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24104", + "purchase_date": "2020-01", + "user_current": "표재학", + "user_position": "프로그램 개발자", + "current_dept": "Infra Solution 개발팀_Primal/평면셀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B450M-K II", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 5 5600X", + "gpu": "NVIDIA GeForce GTX 1650", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B450M-K II", + "ip_address": "192.168.0.114", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_104", + "memo": "임직원 지급용", + "asset_name": "개인PC 105", + "mac_address": "00:1A:2B:3C:4D:68", + "hw_status": "운영중" + }, + { + "id": "swlat6y", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24105", + "purchase_date": "2022-01", + "user_current": "이예찬", + "user_position": "프로그램 개발자", + "current_dept": "Infra Solution 개발팀_Primal/평면셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "TUF GAMING X670E-PLUS", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 9 7900X", + "gpu": "NVIDIA GeForce RTX 4070 Ti", + "ram": "32GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "TUF GAMING X670E-PLUS", + "ip_address": "192.168.0.115", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_105", + "memo": "임직원 지급용", + "asset_name": "개인PC 106", + "mac_address": "00:1A:2B:3C:4D:69", + "hw_status": "운영중" + }, + { + "id": "x7188yo", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24106", + "purchase_date": "2021-01", + "user_current": "김재현", + "user_position": "프로그램 개발자", + "current_dept": "Infra Solution 개발팀_Watch BIM셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H610M-D D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-12700F", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "32GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "4TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H610M-D D4", + "ip_address": "192.168.0.116", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_106", + "memo": "임직원 지급용", + "asset_name": "개인PC 107", + "mac_address": "00:1A:2B:3C:4D:6A", + "hw_status": "운영중" + }, + { + "id": "dshodym", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24107", + "purchase_date": "2022-01", + "user_current": "박경빈", + "user_position": "프로그램 개발자", + "current_dept": "Infra Solution 개발팀_Watch BIM셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B760M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700F", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B760M-K", + "ip_address": "192.168.0.117", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_107", + "memo": "임직원 지급용", + "asset_name": "개인PC 108", + "mac_address": "00:1A:2B:3C:4D:6B", + "hw_status": "운영중" + }, + { + "id": "u8ew8g8", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24108", + "purchase_date": "2022-01", + "user_current": "박채영", + "user_position": "프로그램 개발자", + "current_dept": "Infra Solution 개발팀_Watch BIM셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B760M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700F", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B760M-A", + "ip_address": "192.168.0.118", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_108", + "memo": "임직원 지급용", + "asset_name": "개인PC 109", + "mac_address": "00:1A:2B:3C:4D:6C", + "hw_status": "운영중" + }, + { + "id": "zyttqv8", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24109", + "purchase_date": "2023-01", + "user_current": "신찬웅", + "user_position": "프로그램 개발자", + "current_dept": "Infra Solution 개발팀_Watch BIM셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M DS3H", + "ip_address": "192.168.0.119", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_109", + "memo": "임직원 지급용", + "asset_name": "개인PC 110", + "mac_address": "00:1A:2B:3C:4D:6D", + "hw_status": "운영중" + }, + { + "id": "595jwgr", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24110", + "purchase_date": "2018-01", + "user_current": "장용섭", + "user_position": "프로그램 개발자", + "current_dept": "Infra Solution 개발팀_Way Draw셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700KF", + "gpu": "NVIDIA GeForce RTX 2060", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365M-K", + "ip_address": "192.168.0.120", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_110", + "memo": "임직원 지급용", + "asset_name": "개인PC 111", + "mac_address": "00:1A:2B:3C:4D:6E", + "hw_status": "운영중" + }, + { + "id": "90bczcq", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24111", + "purchase_date": "2021-01", + "user_current": "최윤진", + "user_position": "프로그램 개발자", + "current_dept": "Infra Solution 개발팀_Way Draw셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B560M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-11700F", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B560M-A", + "ip_address": "192.168.0.121", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_111", + "memo": "임직원 지급용", + "asset_name": "개인PC 112", + "mac_address": "00:1A:2B:3C:4D:6F", + "hw_status": "운영중" + }, + { + "id": "dhykl5v", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24112", + "purchase_date": "2022-01", + "user_current": "강성호", + "user_position": "프로그램 개발자", + "current_dept": "Infra Solution 개발팀_Way Draw셀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B760M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700F", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B760M-K", + "ip_address": "192.168.0.122", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_112", + "memo": "임직원 지급용", + "asset_name": "개인PC 113", + "mac_address": "00:1A:2B:3C:4D:70", + "hw_status": "운영중" + }, + { + "id": "y0p5rh1", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24113", + "purchase_date": "2017-01", + "user_current": "김정훈", + "user_position": "엔지니어", + "current_dept": "Infra Solution Div", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B350M-A", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 7 1700X", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "256GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B350M-A", + "ip_address": "192.168.0.123", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_113", + "memo": "임직원 지급용", + "asset_name": "개인PC 114", + "mac_address": "00:1A:2B:3C:4D:71", + "hw_status": "운영중" + }, + { + "id": "afkxryf", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24114", + "purchase_date": "2018-01", + "user_current": "황은식", + "user_position": "엔지니어", + "current_dept": "Infra Solution Div_인프라BIM 1팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700KF", + "gpu": "NVIDIA GeForce RTX 2060", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365M-K", + "ip_address": "192.168.0.124", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_114", + "memo": "임직원 지급용", + "asset_name": "개인PC 115", + "mac_address": "00:1A:2B:3C:4D:72", + "hw_status": "운영중" + }, + { + "id": "umzbqhd", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24115", + "purchase_date": "2020-01", + "user_current": "김원기A", + "user_position": "엔지니어", + "current_dept": "Infra Solution Div_인프라BIM 1팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H410M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-10400F", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "32GB", + "ssd_1": "256GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H410M-K", + "ip_address": "192.168.0.125", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_115", + "memo": "임직원 지급용", + "asset_name": "개인PC 116", + "mac_address": "00:1A:2B:3C:4D:73", + "hw_status": "운영중" + }, + { + "id": "c262lak", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24116", + "purchase_date": "2018-01", + "user_current": "이광태", + "user_position": "엔지니어", + "current_dept": "Infra Solution Div_인프라BIM 1팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365-PLUS", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-9900KF", + "gpu": "NVIDIA GeForce RTX 2070", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365-PLUS", + "ip_address": "192.168.0.126", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_116", + "memo": "임직원 지급용", + "asset_name": "개인PC 117", + "mac_address": "00:1A:2B:3C:4D:74", + "hw_status": "운영중" + }, + { + "id": "kmoj80h", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24117", + "purchase_date": "2020-01", + "user_current": "이수창", + "user_position": "엔지니어", + "current_dept": "Infra Solution Div_인프라BIM 1팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "TUF GAMING R460M-PLUS", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-10400F", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "32GB", + "ssd_1": "256GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "TUF GAMING R460M-PLUS", + "ip_address": "192.168.0.127", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_117", + "memo": "임직원 지급용", + "asset_name": "개인PC 118", + "mac_address": "00:1A:2B:3C:4D:75", + "hw_status": "운영중" + }, + { + "id": "w61hyxj", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24118", + "purchase_date": "2021-01", + "user_current": "안효원", + "user_position": "엔지니어", + "current_dept": "Infra Solution Div_인프라BIM 1팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B460M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-11400F", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "32GB", + "ssd_1": "256GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B460M-A", + "ip_address": "192.168.0.128", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_118", + "memo": "임직원 지급용", + "asset_name": "개인PC 119", + "mac_address": "00:1A:2B:3C:4D:76", + "hw_status": "운영중" + }, + { + "id": "5zsghzd", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24119", + "purchase_date": "2018-01", + "user_current": "문준혁", + "user_position": "엔지니어", + "current_dept": "Infra Solution Div_인프라BIM 1팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-9400F", + "gpu": "NVIDIA GeForce GTX 1650", + "ram": "32GB", + "ssd_1": "256GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365M-K", + "ip_address": "192.168.0.129", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_119", + "memo": "임직원 지급용", + "asset_name": "개인PC 120", + "mac_address": "00:1A:2B:3C:4D:77", + "hw_status": "운영중" + }, + { + "id": "mujj7v9", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24120", + "purchase_date": "2023-01", + "user_current": "이배승", + "user_position": "BIM모델러", + "current_dept": "Infra Solution Div_인프라BIM 1팀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700KF", + "gpu": "NVIDIA GeForce RTX 5060", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M DS3H", + "ip_address": "192.168.0.130", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_120", + "memo": "임직원 지급용", + "asset_name": "개인PC 121", + "mac_address": "00:1A:2B:3C:4D:78", + "hw_status": "운영중" + }, + { + "id": "gxw735w", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24121", + "purchase_date": "2020-01", + "user_current": "조용민", + "user_position": "엔지니어", + "current_dept": "Infra Solution Div_인프라BIM 1팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H410M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-10400", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "32GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H410M-A", + "ip_address": "192.168.0.131", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_121", + "memo": "임직원 지급용", + "asset_name": "개인PC 122", + "mac_address": "00:1A:2B:3C:4D:79", + "hw_status": "운영중" + }, + { + "id": "9scryzj", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24122", + "purchase_date": "2017-01", + "user_current": "윤현욱", + "user_position": "엔지니어", + "current_dept": "Infra Solution Div_인프라BIM 1팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B250M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-7700", + "gpu": "NVIDIA GeForce RTX 2060", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B250M-A", + "ip_address": "192.168.0.132", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_122", + "memo": "임직원 지급용", + "asset_name": "개인PC 123", + "mac_address": "00:1A:2B:3C:4D:7A", + "hw_status": "운영중" + }, + { + "id": "6szwqai", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24123", + "purchase_date": "2023-01", + "user_current": "김이훈", + "user_position": "엔지니어", + "current_dept": "Infra Solution Div_인프라BIM 1팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-14400F", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "32GB", + "ssd_1": "256GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M DS3H", + "ip_address": "192.168.0.133", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_123", + "memo": "임직원 지급용", + "asset_name": "개인PC 124", + "mac_address": "00:1A:2B:3C:4D:7B", + "hw_status": "운영중" + }, + { + "id": "x2st5f6", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24124", + "purchase_date": "2023-01", + "user_current": "진희성", + "user_position": "BIM모델러", + "current_dept": "Infra Solution Div_인프라BIM 1팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700KF", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M DS3H", + "ip_address": "192.168.0.134", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_124", + "memo": "임직원 지급용", + "asset_name": "개인PC 125", + "mac_address": "00:1A:2B:3C:4D:7C", + "hw_status": "운영중" + }, + { + "id": "xc06iuy", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24125", + "purchase_date": "2023-01", + "user_current": "박석현", + "user_position": "BIM모델러", + "current_dept": "Infra Solution Div_인프라BIM 1팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M DS3H", + "ip_address": "192.168.0.135", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_125", + "memo": "임직원 지급용", + "asset_name": "개인PC 126", + "mac_address": "00:1A:2B:3C:4D:7D", + "hw_status": "운영중" + }, + { + "id": "otn507e", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24126", + "purchase_date": "2023-01", + "user_current": "권장승", + "user_position": "BIM모델러", + "current_dept": "Infra Solution Div_인프라BIM 1팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700F", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M DS3H", + "ip_address": "192.168.0.136", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_126", + "memo": "임직원 지급용", + "asset_name": "개인PC 127", + "mac_address": "00:1A:2B:3C:4D:7E", + "hw_status": "운영중" + }, + { + "id": "072gsz2", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24127", + "purchase_date": "2023-01", + "user_current": "성유정", + "user_position": "BIM모델러", + "current_dept": "Infra Solution Div_인프라BIM 1팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700KF", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M DS3H", + "ip_address": "192.168.0.137", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_127", + "memo": "임직원 지급용", + "asset_name": "개인PC 128", + "mac_address": "00:1A:2B:3C:4D:7F", + "hw_status": "운영중" + }, + { + "id": "8skwhy2", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24128", + "purchase_date": "2022-01", + "user_current": "김병조", + "user_position": "엔지니어", + "current_dept": "Infra Solution Div_인프라BIM 2팀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME Z790-P", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700KF", + "gpu": "NVIDIA GeForce RTX 3070 Ti", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "3.6TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME Z790-P", + "ip_address": "192.168.0.138", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_128", + "memo": "임직원 지급용", + "asset_name": "개인PC 129", + "mac_address": "00:1A:2B:3C:4D:80", + "hw_status": "운영중" + }, + { + "id": "kz0k936", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24129", + "purchase_date": "2018-01", + "user_current": "표종진", + "user_position": "엔지니어", + "current_dept": "Infra Solution Div_인프라BIM 2팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-9400F", + "gpu": "NVIDIA GeForce GTX 1660", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "2TB", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365M-K", + "ip_address": "192.168.0.139", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_129", + "memo": "임직원 지급용", + "asset_name": "개인PC 130", + "mac_address": "00:1A:2B:3C:4D:81", + "hw_status": "운영중" + }, + { + "id": "e4fd56w", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24130", + "purchase_date": "2018-01", + "user_current": "이주형", + "user_position": "엔지니어", + "current_dept": "Infra Solution Div_인프라BIM 2팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "500GB", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "2TB", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365M-K", + "ip_address": "192.168.0.140", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_130", + "memo": "임직원 지급용", + "asset_name": "개인PC 131", + "mac_address": "00:1A:2B:3C:4D:82", + "hw_status": "운영중" + }, + { + "id": "3935xi8", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24131", + "purchase_date": "2022-01", + "user_current": "이동호", + "user_position": "엔지니어", + "current_dept": "Infra Solution Div_인프라BIM 2팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B760M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700F", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B760M-K", + "ip_address": "192.168.0.141", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_131", + "memo": "임직원 지급용", + "asset_name": "개인PC 132", + "mac_address": "00:1A:2B:3C:4D:83", + "hw_status": "운영중" + }, + { + "id": "htva1qv", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24132", + "purchase_date": "2023-01", + "user_current": "정학재", + "user_position": "BIM모델러", + "current_dept": "Infra Solution Div_인프라BIM 2팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M DS3H", + "ip_address": "192.168.0.142", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_132", + "memo": "임직원 지급용", + "asset_name": "개인PC 133", + "mac_address": "00:1A:2B:3C:4D:84", + "hw_status": "운영중" + }, + { + "id": "kujxaxb", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24133", + "purchase_date": "2023-01", + "user_current": "박성원", + "user_position": "BIM모델러", + "current_dept": "Infra Solution Div_인프라BIM 2팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700F", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M DS3H", + "ip_address": "192.168.0.143", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_133", + "memo": "임직원 지급용", + "asset_name": "개인PC 134", + "mac_address": "00:1A:2B:3C:4D:85", + "hw_status": "운영중" + }, + { + "id": "jqywxb5", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24134", + "purchase_date": "2023-01", + "user_current": "이병욱A", + "user_position": "BIM모델러", + "current_dept": "Infra Solution Div_인프라BIM 2팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700F", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M DS3H", + "ip_address": "192.168.0.144", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_134", + "memo": "임직원 지급용", + "asset_name": "개인PC 135", + "mac_address": "00:1A:2B:3C:4D:86", + "hw_status": "운영중" + }, + { + "id": "h6d8d17", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24135", + "purchase_date": "2023-01", + "user_current": "신영교", + "user_position": "BIM모델러", + "current_dept": "Infra Solution Div_인프라BIM 2팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700KF", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M-K", + "ip_address": "192.168.0.145", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_135", + "memo": "임직원 지급용", + "asset_name": "개인PC 136", + "mac_address": "00:1A:2B:3C:4D:87", + "hw_status": "운영중" + }, + { + "id": "uakhji5", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24136", + "purchase_date": "2023-01", + "user_current": "한동현", + "user_position": "BIM모델러", + "current_dept": "Infra Solution Div_인프라BIM 2팀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700KF", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M DS3H", + "ip_address": "192.168.0.146", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_136", + "memo": "임직원 지급용", + "asset_name": "개인PC 137", + "mac_address": "00:1A:2B:3C:4D:88", + "hw_status": "운영중" + }, + { + "id": "s85bt8e", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24137", + "purchase_date": "2023-01", + "user_current": "곽동권", + "user_position": "BIM모델러", + "current_dept": "Infra Solution Div_인프라BIM 2팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700KF", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M DS3H", + "ip_address": "192.168.0.147", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_137", + "memo": "임직원 지급용", + "asset_name": "개인PC 138", + "mac_address": "00:1A:2B:3C:4D:89", + "hw_status": "운영중" + }, + { + "id": "nce6dez", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24138", + "purchase_date": "2023-01", + "user_current": "이에녹", + "user_position": "BIM모델러", + "current_dept": "Infra Solution Div_인프라BIM 2팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700KF", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M DS3H", + "ip_address": "192.168.0.148", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_138", + "memo": "임직원 지급용", + "asset_name": "개인PC 139", + "mac_address": "00:1A:2B:3C:4D:8A", + "hw_status": "운영중" + }, + { + "id": "y47w1m3", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24139", + "purchase_date": "2023-01", + "user_current": "박종혁", + "user_position": "BIM모델러", + "current_dept": "Infra Solution Div_인프라BIM 2팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B760M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700KF", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B760M-K", + "ip_address": "192.168.0.149", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_139", + "memo": "임직원 지급용", + "asset_name": "개인PC 140", + "mac_address": "00:1A:2B:3C:4D:8B", + "hw_status": "운영중" + }, + { + "id": "y3k6ov7", + "asset_type": "개인PC", + "purchase_corp": "PTC", + "asset_code": "PC-24140", + "purchase_date": "2018-01", + "user_current": "김지영", + "user_position": "엔지니어", + "current_dept": "Infra Solution Div_인프라BIM 3팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700", + "gpu": "NVIDIA GeForce RTX 2070", + "ram": "32GB", + "ssd_1": "466GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365M-K", + "ip_address": "192.168.0.150", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_140", + "memo": "임직원 지급용", + "asset_name": "개인PC 141", + "mac_address": "00:1A:2B:3C:4D:8C", + "hw_status": "운영중" + }, + { + "id": "qvvdbc4", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24141", + "purchase_date": "2023-01", + "user_current": "김성엽", + "user_position": "BIM모델러", + "current_dept": "Infra Solution Div_인프라BIM 3팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700F", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M DS3H", + "ip_address": "192.168.0.151", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_141", + "memo": "임직원 지급용", + "asset_name": "개인PC 142", + "mac_address": "00:1A:2B:3C:4D:8D", + "hw_status": "운영중" + }, + { + "id": "eobehfx", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24142", + "purchase_date": "2023-01", + "user_current": "한반석", + "user_position": "BIM모델러", + "current_dept": "Infra Solution Div_인프라BIM 3팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700KF", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M DS3H", + "ip_address": "192.168.0.152", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_142", + "memo": "임직원 지급용", + "asset_name": "개인PC 143", + "mac_address": "00:1A:2B:3C:4D:8E", + "hw_status": "운영중" + }, + { + "id": "4atu2pm", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24143", + "purchase_date": "2023-01", + "user_current": "유서진", + "user_position": "BIM모델러", + "current_dept": "Infra Solution Div_인프라BIM 3팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700KF", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M DS3H", + "ip_address": "192.168.0.153", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_143", + "memo": "임직원 지급용", + "asset_name": "개인PC 144", + "mac_address": "00:1A:2B:3C:4D:8F", + "hw_status": "운영중" + }, + { + "id": "5wt3qnu", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24144", + "purchase_date": "2021-01", + "user_current": "함도원", + "user_position": "BIM모델러", + "current_dept": "Infra Solution Div_인프라BIM 3팀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B660M-A D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-12900K", + "gpu": "NVIDIA GeForce RTX 3070", + "ram": "32GB", + "ssd_1": "932GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B660M-A D4", + "ip_address": "192.168.0.154", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_144", + "memo": "임직원 지급용", + "asset_name": "개인PC 145", + "mac_address": "00:1A:2B:3C:4D:90", + "hw_status": "운영중" + }, + { + "id": "p5v9fsf", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24145", + "purchase_date": "2017-01", + "user_current": "이호경", + "user_position": "엔지니어", + "current_dept": "Strana 개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B250M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-7700K", + "gpu": "NVIDIA GeForce GTX 1050", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B250M-K", + "ip_address": "192.168.0.155", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_145", + "memo": "임직원 지급용", + "asset_name": "개인PC 146", + "mac_address": "00:1A:2B:3C:4D:91", + "hw_status": "운영중" + }, + { + "id": "utwofpx", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24146", + "purchase_date": "2017-01", + "user_current": "김경종", + "user_position": "3D 개발자", + "current_dept": "Strana 개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B250M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-7700", + "gpu": "NVIDIA GeForce GTX 1070 Ti", + "ram": "48GB", + "ssd_1": "512GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B250M-A", + "ip_address": "192.168.0.156", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_146", + "memo": "임직원 지급용", + "asset_name": "개인PC 147", + "mac_address": "00:1A:2B:3C:4D:92", + "hw_status": "운영중" + }, + { + "id": "lpy5l4t", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24147", + "purchase_date": "2021-01", + "user_current": "유승민", + "user_position": "엔지니어", + "current_dept": "Strana 개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H610M-E D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-12400", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "32GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H610M-E D4", + "ip_address": "192.168.0.157", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_147", + "memo": "임직원 지급용", + "asset_name": "개인PC 148", + "mac_address": "00:1A:2B:3C:4D:93", + "hw_status": "운영중" + }, + { + "id": "1s7bpiq", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24148", + "purchase_date": "2018-01", + "user_current": "마르코", + "user_position": "3D 개발자", + "current_dept": "Strana 개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B360M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700K", + "gpu": "NVIDIA GeForce RTX 4090", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "2TB", + "ssd_3": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B360M-K", + "ip_address": "192.168.0.158", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_148", + "memo": "임직원 지급용", + "asset_name": "개인PC 149", + "mac_address": "00:1A:2B:3C:4D:94", + "hw_status": "운영중" + }, + { + "id": "2dma98k", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24149", + "purchase_date": "2021-01", + "user_current": "최진헌", + "user_position": "3D 개발자", + "current_dept": "Strana 개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H610M-E D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-12700F", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "64GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H610M-E D4", + "ip_address": "192.168.0.159", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_149", + "memo": "임직원 지급용", + "asset_name": "개인PC 150", + "mac_address": "00:1A:2B:3C:4D:95", + "hw_status": "운영중" + }, + { + "id": "rygtcoj", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24150", + "purchase_date": "2022-01", + "user_current": "강정훈", + "user_position": "3D 개발자", + "current_dept": "Strana 개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B760M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-13900F", + "gpu": "NVIDIA GeForce RTX 5070", + "ram": "64GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "0", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B760M-A", + "ip_address": "192.168.0.160", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_150", + "memo": "임직원 지급용", + "asset_name": "개인PC 151", + "mac_address": "00:1A:2B:3C:4D:96", + "hw_status": "운영중" + }, + { + "id": "54wf2as", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24151", + "purchase_date": "2022-01", + "user_current": "정호진", + "user_position": "3D 개발자", + "current_dept": "Strana 개발팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H610M-E D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700F", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H610M-E D4", + "ip_address": "192.168.0.161", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_151", + "memo": "임직원 지급용", + "asset_name": "개인PC 152", + "mac_address": "00:1A:2B:3C:4D:97", + "hw_status": "운영중" + }, + { + "id": "pz8142p", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24152", + "purchase_date": "2021-01", + "user_current": "김윤하", + "user_position": "웹 개발자", + "current_dept": "Web Solution팀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS PRIME H610M-E D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-12700F", + "gpu": "NVIDIA GeForce RTX 2070 SUPER", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS PRIME H610M-E D4", + "ip_address": "192.168.0.162", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_152", + "memo": "임직원 지급용", + "asset_name": "개인PC 153", + "mac_address": "00:1A:2B:3C:4D:98", + "hw_status": "운영중" + }, + { + "id": "swmkdle", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24153", + "purchase_date": "2020-01", + "user_current": "한지아", + "user_position": "UXUI 디자이너", + "current_dept": "Web Solution팀_디자인셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "MSI B450M MORTAR MAX (MS-7B89)", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 9 5900X", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "64GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "MSI B450M MORTAR MAX (MS-7B89)", + "ip_address": "192.168.0.163", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_153", + "memo": "임직원 지급용", + "asset_name": "개인PC 154", + "mac_address": "00:1A:2B:3C:4D:99", + "hw_status": "운영중" + }, + { + "id": "qez310i", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24154", + "purchase_date": "2020-01", + "user_current": "이한울", + "user_position": "UXUI 디자이너", + "current_dept": "Web Solution팀_디자인셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "MAG B550M MORTAR (MS-7C94)", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 9 5900X", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "64GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "MAG B550M MORTAR (MS-7C94)", + "ip_address": "192.168.0.164", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_154", + "memo": "임직원 지급용", + "asset_name": "개인PC 155", + "mac_address": "00:1A:2B:3C:4D:9A", + "hw_status": "운영중" + }, + { + "id": "vqefecb", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24155", + "purchase_date": "2022-01", + "user_current": "양미연", + "user_position": "UXUI 디자이너", + "current_dept": "Web Solution팀_디자인셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "MAG B660M MORTAR DDR4 (MS-7D42)", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700KF", + "gpu": "NVIDIA GeForce RTX 2070", + "ram": "32GB", + "ssd_1": "466GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "MAG B660M MORTAR DDR4 (MS-7D42)", + "ip_address": "192.168.0.165", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_155", + "memo": "임직원 지급용", + "asset_name": "개인PC 156", + "mac_address": "00:1A:2B:3C:4D:9B", + "hw_status": "운영중" + }, + { + "id": "4q2ioy0", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24156", + "purchase_date": "2018-01", + "user_current": "정명준", + "user_position": "웹 개발자", + "current_dept": "Web Solution팀_솔루션개발셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS PRIME B365M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700", + "gpu": "NVIDIA GeForce RTX 2070 SUPER", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS PRIME B365M-K", + "ip_address": "192.168.0.166", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_156", + "memo": "임직원 지급용", + "asset_name": "개인PC 157", + "mac_address": "00:1A:2B:3C:4D:9C", + "hw_status": "운영중" + }, + { + "id": "95o16o9", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24157", + "purchase_date": "2018-01", + "user_current": "김진선", + "user_position": "웹 개발자", + "current_dept": "Web Solution팀_솔루션개발셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS PRIME B360M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700K", + "gpu": "NVIDIA GeForce GTX 1070", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS PRIME B360M-K", + "ip_address": "192.168.0.167", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_157", + "memo": "임직원 지급용", + "asset_name": "개인PC 158", + "mac_address": "00:1A:2B:3C:4D:9D", + "hw_status": "운영중" + }, + { + "id": "7ooaagd", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24158", + "purchase_date": "2021-01", + "user_current": "최진태", + "user_position": "웹 개발자", + "current_dept": "Web Solution팀_솔루션개발셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS PRIME H510M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-11400", + "gpu": "NVIDIA GeForce GTX 750 Ti", + "ram": "16GB", + "ssd_1": "256GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS PRIME H510M-A", + "ip_address": "192.168.0.168", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_158", + "memo": "임직원 지급용", + "asset_name": "개인PC 159", + "mac_address": "00:1A:2B:3C:4D:9E", + "hw_status": "운영중" + }, + { + "id": "yagi59r", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24159", + "purchase_date": "2023-01", + "user_current": "윤석무", + "user_position": "웹 개발자", + "current_dept": "Web Solution팀_솔루션개발셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M DS3H", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700F", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "32GB", + "ssd_1": "466GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M DS3H", + "ip_address": "192.168.0.169", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_159", + "memo": "임직원 지급용", + "asset_name": "개인PC 160", + "mac_address": "00:1A:2B:3C:4D:9F", + "hw_status": "운영중" + }, + { + "id": "vsd9l4h", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24160", + "purchase_date": "2021-01", + "user_current": "이병권", + "user_position": "웹 개발자", + "current_dept": "Web Solution팀_전산관리셀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B460M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-11400", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B460M-A", + "ip_address": "192.168.0.170", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_160", + "memo": "임직원 지급용", + "asset_name": "개인PC 161", + "mac_address": "00:1A:2B:3C:4D:A0", + "hw_status": "운영중" + }, + { + "id": "qudjpsp", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24161", + "purchase_date": "2018-01", + "user_current": "신지호", + "user_position": "웹 개발자", + "current_dept": "Web Solution팀_ERP셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B360M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700K", + "gpu": "NVIDIA GeForce GTX 1070", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B360M-K", + "ip_address": "192.168.0.171", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_161", + "memo": "임직원 지급용", + "asset_name": "개인PC 162", + "mac_address": "00:1A:2B:3C:4D:A1", + "hw_status": "운영중" + }, + { + "id": "rnrbg4l", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24162", + "purchase_date": "2015-01", + "user_current": "김한결", + "user_position": "웹 개발자", + "current_dept": "Web Solution팀_ERP셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS H110M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-6600", + "gpu": "NVIDIA GeForce GTX 1650", + "ram": "16GB", + "ssd_1": "120GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS H110M-K", + "ip_address": "192.168.0.172", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_162", + "memo": "임직원 지급용", + "asset_name": "개인PC 163", + "mac_address": "00:1A:2B:3C:4D:A2", + "hw_status": "운영중" + }, + { + "id": "px79fsz", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24163", + "purchase_date": "2020-01", + "user_current": "김병철", + "user_position": "웹 개발자", + "current_dept": "Web Solution팀_ERP셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H410M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-10400", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H410M-A", + "ip_address": "192.168.0.173", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_163", + "memo": "임직원 지급용", + "asset_name": "개인PC 164", + "mac_address": "00:1A:2B:3C:4D:A3", + "hw_status": "운영중" + }, + { + "id": "peubt2r", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24164", + "purchase_date": "2017-01", + "user_current": "서승완", + "user_position": "웹 개발자", + "current_dept": "Web Solution팀_ERP셀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASRock : B250M Pro4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-7700K", + "gpu": "NVIDIA GeForce GTX 1050", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASRock : B250M Pro4", + "ip_address": "192.168.0.174", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_164", + "memo": "임직원 지급용", + "asset_name": "개인PC 165", + "mac_address": "00:1A:2B:3C:4D:A4", + "hw_status": "운영중" + }, + { + "id": "hrlklyj", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24165", + "purchase_date": "2020-01", + "user_current": "김우진A", + "user_position": "기획자", + "current_dept": "경영기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME A320M-K", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 5 5600X", + "gpu": "NVIDIA GeForce GTX 1650", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME A320M-K", + "ip_address": "192.168.0.175", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_165", + "memo": "임직원 지급용", + "asset_name": "개인PC 166", + "mac_address": "00:1A:2B:3C:4D:A5", + "hw_status": "운영중" + }, + { + "id": "a2a92lv", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24166", + "purchase_date": "2021-01", + "user_current": "임민경", + "user_position": "기획자", + "current_dept": "경영기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H510M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-11400", + "gpu": "Intel(R) UHD Graphics", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H510M-A", + "ip_address": "192.168.0.176", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_166", + "memo": "임직원 지급용", + "asset_name": "개인PC 167", + "mac_address": "00:1A:2B:3C:4D:A6", + "hw_status": "운영중" + }, + { + "id": "lfeowyh", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24167", + "purchase_date": "2020-01", + "user_current": "최선아", + "user_position": "기획자", + "current_dept": "경영기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H410M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-10400", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H410M-A", + "ip_address": "192.168.0.177", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_167", + "memo": "임직원 지급용", + "asset_name": "개인PC 168", + "mac_address": "00:1A:2B:3C:4D:A7", + "hw_status": "운영중" + }, + { + "id": "ej169xn", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24168", + "purchase_date": "2020-01", + "user_current": "김윤재", + "user_position": "기획자", + "current_dept": "경영기획팀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME A520M-K", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 5 5600G", + "gpu": "내장 그래픽", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME A520M-K", + "ip_address": "192.168.0.178", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_168", + "memo": "임직원 지급용", + "asset_name": "개인PC 169", + "mac_address": "00:1A:2B:3C:4D:A8", + "hw_status": "운영중" + }, + { + "id": "lybsx74", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24169", + "purchase_date": "2020-01", + "user_current": "이미영A", + "user_position": "기획자", + "current_dept": "경영기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H410M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-10400", + "gpu": "Intel(R) UHD Graphics 630", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H410M-A", + "ip_address": "192.168.0.179", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_169", + "memo": "임직원 지급용", + "asset_name": "개인PC 170", + "mac_address": "00:1A:2B:3C:4D:A9", + "hw_status": "운영중" + }, + { + "id": "fud9fl4", + "asset_type": "개인PC", + "purchase_corp": "PTC", + "asset_code": "PC-24170", + "purchase_date": "2018-01", + "user_current": "국혜림", + "user_position": "기획자", + "current_dept": "경영기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "TUF B365M-PLUS GAMING", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700", + "gpu": "NVIDIA GeForce GTX 2070", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "TUF B365M-PLUS GAMING", + "ip_address": "192.168.0.180", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_170", + "memo": "임직원 지급용", + "asset_name": "개인PC 171", + "mac_address": "00:1A:2B:3C:4D:AA", + "hw_status": "운영중" + }, + { + "id": "lrtotxe", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24171", + "purchase_date": "2020-01", + "user_current": "김원기", + "user_position": "기획자", + "current_dept": "기술기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "TUF Gaming Z490-Plus", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-10900", + "gpu": "NVIDIA GeForce RTX 3090", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "TUF Gaming Z490-Plus", + "ip_address": "192.168.0.181", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_171", + "memo": "임직원 지급용", + "asset_name": "개인PC 172", + "mac_address": "00:1A:2B:3C:4D:AB", + "hw_status": "운영중" + }, + { + "id": "16uutld", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24172", + "purchase_date": "2019-01", + "user_current": "홍아름", + "user_position": "기획자", + "current_dept": "기술기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME X570-P", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 9 3900X", + "gpu": "NVIDIA GeForce RTX 3090", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME X570-P", + "ip_address": "192.168.0.182", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_172", + "memo": "임직원 지급용", + "asset_name": "개인PC 173", + "mac_address": "00:1A:2B:3C:4D:AC", + "hw_status": "운영중" + }, + { + "id": "ym1ende", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24173", + "purchase_date": "2022-01", + "user_current": "이경민", + "user_position": "기획자", + "current_dept": "기술기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B760M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700KF", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B760M-A", + "ip_address": "192.168.0.183", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_173", + "memo": "임직원 지급용", + "asset_name": "개인PC 174", + "mac_address": "00:1A:2B:3C:4D:AD", + "hw_status": "운영중" + }, + { + "id": "1jwgi62", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24174", + "purchase_date": "2020-01", + "user_current": "김혜인", + "user_position": "기획자", + "current_dept": "기술기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "TUF Gaming B460M-Plus", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-10400", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "TUF Gaming B460M-Plus", + "ip_address": "192.168.0.184", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_174", + "memo": "임직원 지급용", + "asset_name": "개인PC 175", + "mac_address": "00:1A:2B:3C:4D:AE", + "hw_status": "운영중" + }, + { + "id": "52qla80", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24175", + "purchase_date": "2020-01", + "user_current": "황동환", + "user_position": "기획자", + "current_dept": "기술기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H410M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-10400", + "gpu": "NVIDIA GeForce GTX 750", + "ram": "32GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H410M-K", + "ip_address": "192.168.0.185", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_175", + "memo": "임직원 지급용", + "asset_name": "개인PC 176", + "mac_address": "00:1A:2B:3C:4D:AF", + "hw_status": "운영중" + }, + { + "id": "hxzz4zh", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24176", + "purchase_date": "2022-01", + "user_current": "최현호", + "user_position": "기획자", + "current_dept": "기술기획팀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B760M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700KF", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B760M-A", + "ip_address": "192.168.0.186", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_176", + "memo": "임직원 지급용", + "asset_name": "개인PC 177", + "mac_address": "00:1A:2B:3C:4D:B0", + "hw_status": "운영중" + }, + { + "id": "hqjx0qz", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24177", + "purchase_date": "2021-01", + "user_current": "이태훈", + "user_position": "기획자", + "current_dept": "기술기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H510M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-11400", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "250", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H510M-A", + "ip_address": "192.168.0.187", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_177", + "memo": "임직원 지급용", + "asset_name": "개인PC 178", + "mac_address": "00:1A:2B:3C:4D:B1", + "hw_status": "운영중" + }, + { + "id": "42r3xoz", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24178", + "purchase_date": "2020-01", + "user_current": "김신지", + "user_position": "기획자", + "current_dept": "기술기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H410M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-10400", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "250", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H410M-A", + "ip_address": "192.168.0.188", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_178", + "memo": "임직원 지급용", + "asset_name": "개인PC 179", + "mac_address": "00:1A:2B:3C:4D:B2", + "hw_status": "운영중" + }, + { + "id": "fz1wzir", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24179", + "purchase_date": "2022-01", + "user_current": "조찬영", + "user_position": "AI 개발자", + "current_dept": "기술기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME X670-P WIFI", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 9 7950X", + "gpu": "NVIDIA GeForce RTX 4090", + "ram": "128GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME X670-P WIFI", + "ip_address": "192.168.0.189", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_179", + "memo": "임직원 지급용", + "asset_name": "개인PC 180", + "mac_address": "00:1A:2B:3C:4D:B3", + "hw_status": "운영중" + }, + { + "id": "tpxiaon", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24180", + "purchase_date": "2022-01", + "user_current": "김용연", + "user_position": "AI 개발자", + "current_dept": "기술기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME X670-P WIFI", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 9 7950X", + "gpu": "NVIDIA GeForce RTX 4090", + "ram": "128GB", + "ssd_1": "1.8TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME X670-P WIFI", + "ip_address": "192.168.0.190", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_180", + "memo": "임직원 지급용", + "asset_name": "개인PC 181", + "mac_address": "00:1A:2B:3C:4D:B4", + "hw_status": "운영중" + }, + { + "id": "lp9og3g", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24181", + "purchase_date": "2022-01", + "user_current": "신혜영", + "user_position": "3D 디자이너", + "current_dept": "디자인기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "Z790 AORUS ELITE", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-13900K", + "gpu": "NVIDIA GeForce RTX 4080", + "ram": "64GB", + "ssd_1": "1.8TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "3.6TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "Z790 AORUS ELITE", + "ip_address": "192.168.0.191", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_181", + "memo": "임직원 지급용", + "asset_name": "개인PC 182", + "mac_address": "00:1A:2B:3C:4D:B5", + "hw_status": "운영중" + }, + { + "id": "jiv35cl", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24182", + "purchase_date": "2018-01", + "user_current": "정은혜", + "user_position": "3D 디자이너", + "current_dept": "디자인기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700K", + "gpu": "NVIDIA GeForce RTX 3060", + "ram": "64GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365M-A", + "ip_address": "192.168.0.192", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_182", + "memo": "임직원 지급용", + "asset_name": "개인PC 183", + "mac_address": "00:1A:2B:3C:4D:B6", + "hw_status": "운영중" + }, + { + "id": "h6raqmy", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24183", + "purchase_date": "2022-01", + "user_current": "김태식A", + "user_position": "3D 디자이너", + "current_dept": "디자인기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "Z790 AORUS ELITE", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-13900F", + "gpu": "NVIDIA GeForce RTX 4080", + "ram": "64GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "4TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "Z790 AORUS ELITE", + "ip_address": "192.168.0.193", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_183", + "memo": "임직원 지급용", + "asset_name": "개인PC 184", + "mac_address": "00:1A:2B:3C:4D:B7", + "hw_status": "운영중" + }, + { + "id": "aj68sky", + "asset_type": "개인PC", + "purchase_corp": "PTC", + "asset_code": "PC-24184", + "purchase_date": "2022-01", + "user_current": "최혜은", + "user_position": "3D 디자이너", + "current_dept": "디자인기획팀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B760-PLUS", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-13900KF", + "gpu": "NVIDIA GeForce RTX 3070", + "ram": "64GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B760-PLUS", + "ip_address": "192.168.0.194", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_184", + "memo": "임직원 지급용", + "asset_name": "개인PC 185", + "mac_address": "00:1A:2B:3C:4D:B8", + "hw_status": "운영중" + }, + { + "id": "r3ktf22", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24185", + "purchase_date": "2022-01", + "user_current": "채선영", + "user_position": "편집 디자이너", + "current_dept": "디자인기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B760-PLUS", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-13900KF", + "gpu": "NVIDIA GeForce RTX 4070 Ti", + "ram": "64GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "4TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B760-PLUS", + "ip_address": "192.168.0.195", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_185", + "memo": "임직원 지급용", + "asset_name": "개인PC 186", + "mac_address": "00:1A:2B:3C:4D:B9", + "hw_status": "운영중" + }, + { + "id": "v4vohne", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24186", + "purchase_date": "2022-01", + "user_current": "최영환", + "user_position": "편집 디자이너", + "current_dept": "디자인기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B660M DS3H DDR4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-13900F", + "gpu": "NVIDIA GeForce RTX 3090 Ti", + "ram": "64GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "4TB", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B660M DS3H DDR4", + "ip_address": "192.168.0.196", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_186", + "memo": "임직원 지급용", + "asset_name": "개인PC 187", + "mac_address": "00:1A:2B:3C:4D:BA", + "hw_status": "운영중" + }, + { + "id": "f40ahg9", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24187", + "purchase_date": "2022-01", + "user_current": "윤봄이", + "user_position": "편집 디자이너", + "current_dept": "디자인기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B660M-A D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-13900F", + "gpu": "NVIDIA GeForce RTX 4070 Ti", + "ram": "64GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "4TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B660M-A D4", + "ip_address": "192.168.0.197", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_187", + "memo": "임직원 지급용", + "asset_name": "개인PC 188", + "mac_address": "00:1A:2B:3C:4D:BB", + "hw_status": "운영중" + }, + { + "id": "cfjs6k2", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24188", + "purchase_date": "2022-01", + "user_current": "이예진", + "user_position": "편집 디자이너", + "current_dept": "디자인기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B660M-A D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-13900F", + "gpu": "NVIDIA GeForce RTX 3070", + "ram": "64GB", + "ssd_1": "932GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B660M-A D4", + "ip_address": "192.168.0.198", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_188", + "memo": "임직원 지급용", + "asset_name": "개인PC 189", + "mac_address": "00:1A:2B:3C:4D:BC", + "hw_status": "운영중" + }, + { + "id": "gzc3gsi", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24189", + "purchase_date": "2018-01", + "user_current": "허유나", + "user_position": "편집 디자이너", + "current_dept": "디자인기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365-PLUS", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-9900KF", + "gpu": "NVIDIA GeForce RTX 2070", + "ram": "64GB", + "ssd_1": "500", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8tb", + "hdd_2": "1.8tb", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365-PLUS", + "ip_address": "192.168.0.199", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_189", + "memo": "임직원 지급용", + "asset_name": "개인PC 190", + "mac_address": "00:1A:2B:3C:4D:BD", + "hw_status": "운영중" + }, + { + "id": "lv6a6k0", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24190", + "purchase_date": "2022-01", + "user_current": "마희연", + "user_position": "편집 디자이너", + "current_dept": "디자인기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B660M-A D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-13900F", + "gpu": "NVIDIA GeForce RTX 3070", + "ram": "64GB", + "ssd_1": "932GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B660M-A D4", + "ip_address": "192.168.0.200", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_190", + "memo": "임직원 지급용", + "asset_name": "개인PC 191", + "mac_address": "00:1A:2B:3C:4D:BE", + "hw_status": "운영중" + }, + { + "id": "vqnk92s", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24191", + "purchase_date": "2023-01", + "user_current": "김수현", + "user_position": "3D 디자이너", + "current_dept": "디자인기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M DS3H DDR4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-14700", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "64GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M DS3H DDR4", + "ip_address": "192.168.0.201", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_191", + "memo": "임직원 지급용", + "asset_name": "개인PC 192", + "mac_address": "00:1A:2B:3C:4D:BF", + "hw_status": "운영중" + }, + { + "id": "x20dvli", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24192", + "purchase_date": "2022-01", + "user_current": "박지영", + "user_position": "3D 디자이너", + "current_dept": "디자인기획팀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B660M DS3H DDR4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-13900F", + "gpu": "NVIDIA GeForce RTX 3090 Ti", + "ram": "64GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "4TB", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B660M DS3H DDR4", + "ip_address": "192.168.0.202", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_192", + "memo": "임직원 지급용", + "asset_name": "개인PC 193", + "mac_address": "00:1A:2B:3C:4D:C0", + "hw_status": "운영중" + }, + { + "id": "xbcxfhi", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24193", + "purchase_date": "2021-01", + "user_current": "권순호", + "user_position": "3D 디자이너", + "current_dept": "디자인기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H610M-A D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-12900F", + "gpu": "NVIDIA GeForce RTX 4080", + "ram": "64GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "4TB", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H610M-A D4", + "ip_address": "192.168.0.203", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_193", + "memo": "임직원 지급용", + "asset_name": "개인PC 194", + "mac_address": "00:1A:2B:3C:4D:C1", + "hw_status": "운영중" + }, + { + "id": "7l9xw7d", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24194", + "purchase_date": "2024-01", + "user_current": "정두휘", + "user_position": "3D 디자이너", + "current_dept": "디자인기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "TUF GAMING B650M-PLUS", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 9 9900X", + "gpu": "NVIDIA GeForce RTX 4090", + "ram": "64GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "4TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "TUF GAMING B650M-PLUS", + "ip_address": "192.168.0.204", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_194", + "memo": "임직원 지급용", + "asset_name": "개인PC 195", + "mac_address": "00:1A:2B:3C:4D:C2", + "hw_status": "운영중" + }, + { + "id": "ciq854z", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24195", + "purchase_date": "2022-01", + "user_current": "김정석", + "user_position": "편집 디자이너", + "current_dept": "디자인기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B660M-A D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-13900F", + "gpu": "NVIDIA GeForce RTX 4070 Ti", + "ram": "64GB", + "ssd_1": "2TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "4TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B660M-A D4", + "ip_address": "192.168.0.205", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_195", + "memo": "임직원 지급용", + "asset_name": "개인PC 196", + "mac_address": "00:1A:2B:3C:4D:C3", + "hw_status": "운영중" + }, + { + "id": "w8bf6ci", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24196", + "purchase_date": "2023-01", + "user_current": "정지윤", + "user_position": "편집 디자이너", + "current_dept": "디자인기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B760M AORUS ELITE", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-14900K", + "gpu": "NVIDIA GeForce RTX 4070 SUPER", + "ram": "64GB", + "ssd_1": "1.8TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B760M AORUS ELITE", + "ip_address": "192.168.0.206", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_196", + "memo": "임직원 지급용", + "asset_name": "개인PC 197", + "mac_address": "00:1A:2B:3C:4D:C4", + "hw_status": "운영중" + }, + { + "id": "66vdoux", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24197", + "purchase_date": "2022-01", + "user_current": "양숙영", + "user_position": "편집 디자이너", + "current_dept": "디자인기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B760M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i9-13900F", + "gpu": "NVIDIA GeForce RTX 4080 SUPER", + "ram": "64GB", + "ssd_1": "3.6TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B760M-K", + "ip_address": "192.168.0.207", + "purchase_amount": "3500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_197", + "memo": "임직원 지급용", + "asset_name": "개인PC 198", + "mac_address": "00:1A:2B:3C:4D:C5", + "hw_status": "운영중" + }, + { + "id": "861requ", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24198", + "purchase_date": "2021-01", + "user_current": "윤준수", + "user_position": "엔지니어", + "current_dept": "솔루션통합팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS PRIME H510M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-11400", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS PRIME H510M-A", + "ip_address": "192.168.0.208", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_198", + "memo": "임직원 지급용", + "asset_name": "개인PC 199", + "mac_address": "00:1A:2B:3C:4D:C6", + "hw_status": "운영중" + }, + { + "id": "0daj8vb", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24199", + "purchase_date": "2018-01", + "user_current": "권혁진", + "user_position": "기획자", + "current_dept": "솔루션통합팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H310M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) I5-9400F", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "8GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H310M-K", + "ip_address": "192.168.0.209", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_199", + "memo": "임직원 지급용", + "asset_name": "개인PC 200", + "mac_address": "00:1A:2B:3C:4D:C7", + "hw_status": "운영중" + }, + { + "id": "vuuvyr6", + "asset_type": "개인PC", + "purchase_corp": "삼안", + "asset_code": "PC-24200", + "purchase_date": "2017-01", + "user_current": "염승호", + "user_position": "엔지니어", + "current_dept": "솔루션통합팀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B350M-A", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 7 1800X", + "gpu": "NVIDIA GeForce RTX 2060 SUPER", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B350M-A", + "ip_address": "192.168.0.210", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_200", + "memo": "임직원 지급용", + "asset_name": "개인PC 201", + "mac_address": "00:1A:2B:3C:4D:C8", + "hw_status": "운영중" + }, + { + "id": "ymdzwdc", + "asset_type": "개인PC", + "purchase_corp": "PTC", + "asset_code": "PC-24201", + "purchase_date": "2018-01", + "user_current": "김지영", + "user_position": "기획자", + "current_dept": "솔루션통합팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B365M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700KF", + "gpu": "NVIDIA GeForce RTX 2060", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B365M-A", + "ip_address": "192.168.0.211", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_201", + "memo": "임직원 지급용", + "asset_name": "개인PC 202", + "mac_address": "00:1A:2B:3C:4D:C9", + "hw_status": "운영중" + }, + { + "id": "cx4vkak", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24202", + "purchase_date": "2013-01", + "user_current": "조태희", + "user_position": "기획자", + "current_dept": "인재성장팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "H87-PLUS", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-4570", + "gpu": "NVIDIA GeForce GTX 550 Ti", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "H87-PLUS", + "ip_address": "192.168.0.212", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_202", + "memo": "임직원 지급용", + "asset_name": "개인PC 203", + "mac_address": "00:1A:2B:3C:4D:CA", + "hw_status": "운영중" + }, + { + "id": "k6rxkq9", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24203", + "purchase_date": "2015-01", + "user_current": "최근혜", + "user_position": "기획자", + "current_dept": "인재성장팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B150M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-6600", + "gpu": "AMD Radeon (TM) R9 370", + "ram": "16GB", + "ssd_1": "120GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B150M-K", + "ip_address": "192.168.0.213", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_203", + "memo": "임직원 지급용", + "asset_name": "개인PC 204", + "mac_address": "00:1A:2B:3C:4D:CB", + "hw_status": "운영중" + }, + { + "id": "awf5xlu", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24204", + "purchase_date": "2020-01", + "user_current": "류원준", + "user_position": "기획자", + "current_dept": "인재성장팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H410M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-10400", + "gpu": "NVIDIA GeForce GTX 1650", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H410M-A", + "ip_address": "192.168.0.214", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_204", + "memo": "임직원 지급용", + "asset_name": "개인PC 205", + "mac_address": "00:1A:2B:3C:4D:CC", + "hw_status": "운영중" + }, + { + "id": "z7ov2a8", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24205", + "purchase_date": "2020-01", + "user_current": "주완기", + "user_position": "기획자", + "current_dept": "인재성장팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME A320M-K", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 5 5600X", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME A320M-K", + "ip_address": "192.168.0.215", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_205", + "memo": "임직원 지급용", + "asset_name": "개인PC 206", + "mac_address": "00:1A:2B:3C:4D:CD", + "hw_status": "운영중" + }, + { + "id": "b07jjnb", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24206", + "purchase_date": "2020-01", + "user_current": "정성호", + "user_position": "기획자", + "current_dept": "인재성장팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "EX-A320M-GAMING", + "os": "Windows 11 Pro", + "cpu": "AMD Ryzen 5 5600X", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "EX-A320M-GAMING", + "ip_address": "192.168.0.216", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_206", + "memo": "임직원 지급용", + "asset_name": "개인PC 207", + "mac_address": "00:1A:2B:3C:4D:CE", + "hw_status": "운영중" + }, + { + "id": "saybbwp", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24207", + "purchase_date": "2018-01", + "user_current": "성형일", + "user_position": "기획자", + "current_dept": "협업증진팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME Z390M-PLUS", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-9700K", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME Z390M-PLUS", + "ip_address": "192.168.0.217", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_207", + "memo": "임직원 지급용", + "asset_name": "개인PC 208", + "mac_address": "00:1A:2B:3C:4D:CF", + "hw_status": "운영중" + }, + { + "id": "uwnthc6", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24208", + "purchase_date": "2022-01", + "user_current": "박주한", + "user_position": "기획자", + "current_dept": "협업증진팀", + "previous_dept": "기획팀", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASRock Z790 Pro RS", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700KF", + "gpu": "NVIDIA GeForce RTX 3070 Ti", + "ram": "32GB", + "ssd_1": "1TB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "4TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASRock Z790 Pro RS", + "ip_address": "192.168.0.218", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_208", + "memo": "임직원 지급용", + "asset_name": "개인PC 209", + "mac_address": "00:1A:2B:3C:4D:D0", + "hw_status": "운영중" + }, + { + "id": "0fiyb4s", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24209", + "purchase_date": "2021-01", + "user_current": "한승민", + "user_position": "기획자", + "current_dept": "협업증진팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME H610M-D D4", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-12400F", + "gpu": "NVIDIA GeForce RTX 2060 SUPER", + "ram": "32GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME H610M-D D4", + "ip_address": "192.168.0.219", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_209", + "memo": "임직원 지급용", + "asset_name": "개인PC 210", + "mac_address": "00:1A:2B:3C:4D:D1", + "hw_status": "운영중" + }, + { + "id": "qtpkop5", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24210", + "purchase_date": "2017-01", + "user_current": "문형석", + "user_position": "웹 개발자", + "current_dept": "ERP기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS PRIME B250M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-7700", + "gpu": "NVIDIA GeForce GTX 1060 6GB", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS PRIME B250M-A", + "ip_address": "192.168.0.220", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_210", + "memo": "임직원 지급용", + "asset_name": "개인PC 211", + "mac_address": "00:1A:2B:3C:4D:D2", + "hw_status": "운영중" + }, + { + "id": "27l9a1o", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24211", + "purchase_date": "2017-01", + "user_current": "류호성", + "user_position": "기획자", + "current_dept": "ERP기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-7500", + "gpu": "NVIDIA GeForce GTX 750 Ti", + "ram": "8GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "1TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS", + "ip_address": "192.168.0.221", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_211", + "memo": "임직원 지급용", + "asset_name": "개인PC 212", + "mac_address": "00:1A:2B:3C:4D:D3", + "hw_status": "운영중" + }, + { + "id": "wizmjat", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24212", + "purchase_date": "2022-01", + "user_current": "권오재", + "user_position": "기획자", + "current_dept": "ERP기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "ASUS", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-13700F", + "gpu": "NVIDIA GeForce RTX 4060", + "ram": "16GB", + "ssd_1": "500GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "ASUS", + "ip_address": "192.168.0.222", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_212", + "memo": "임직원 지급용", + "asset_name": "개인PC 213", + "mac_address": "00:1A:2B:3C:4D:D4", + "hw_status": "운영중" + }, + { + "id": "upzehiw", + "asset_type": "개인PC", + "purchase_corp": "바론", + "asset_code": "PC-24213", + "purchase_date": "2018-01", + "user_current": "송대일", + "user_position": "기획자", + "current_dept": "ERP기획팀", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "PRIME B365M-A", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i5-9400F", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ram": "16GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "PRIME B365M-A", + "ip_address": "192.168.0.223", + "purchase_amount": "1500000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_213", + "memo": "임직원 지급용", + "asset_name": "개인PC 214", + "mac_address": "00:1A:2B:3C:4D:D5", + "hw_status": "운영중" + }, + { + "id": "fa6jvoz", + "asset_type": "개인PC", + "purchase_corp": "한맥", + "asset_code": "PC-24214", + "purchase_date": "2020-01", + "user_current": "장종찬", + "user_position": "기획자", + "current_dept": "총괄기획실", + "previous_dept": "-", + "location": "서울본사 7층", + "manager_primary": "김IT", + "manager_secondary": "이IT", + "model_name": "B460M-K", + "os": "Windows 11 Pro", + "cpu": "Intel(R) Core(TM) i7-10700F", + "gpu": "NVIDIA GeForce RTX 3070 Ti", + "ram": "32GB", + "ssd_1": "250GB", + "ssd_2": "-", + "ssd_3": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "mainboard": "B460M-K", + "ip_address": "192.168.0.224", + "purchase_amount": "2200000", + "purchase_vendor": "LG전자/삼성전자/HP", + "approval_document": "2024_상반기_PC구매_214", + "memo": "임직원 지급용", + "asset_name": "개인PC 215", + "mac_address": "00:1A:2B:3C:4D:D6", + "hw_status": "운영중" + } +]; + +// ──────────────────────────────────────────────────────── +// 2. 기타 자산 더미 데이터 (서버, 스토리지, 소프트웨어 등 - 엑셀 파싱 연동) +// ──────────────────────────────────────────────────────── + +export const dummyServers: any[] = [ + { + "id": "mjz91cl", + "asset_type": "공용PC", + "purchase_corp": "한맥", + "asset_code": "SVR-24000", + "purchase_date": "2023-03", + "asset_purpose": "사진 측량 및 드론매핑 프로세싱을 위한 공용PC (Pix4D 전용)", + "current_dept": "인프라 BIM 1", + "previous_dept": "-", + "location": "기술개발센터", + "manager_primary": "안효원", + "manager_secondary": "김이훈", + "ip_address": "172.16.10.50", + "remote_tool": "RDP / VNC", + "model_name": "PRO Z790-A WIFI (MS-7E07)", + "os": "Windows 10 Enterprise (22H2)", + "cpu": "13th Gen Intel(R) Core(TM) i9-13900K 3.00 GHz", + "ram": "64GB", + "gpu": "NVIDIA GeForce RTX 4080 (16 GB)", + "ssd_1": "2TB", + "ssd_2": "-", + "hdd_1": "8TB", + "hdd_2": "1TB", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "3500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_0", + "memo": "정상 운영 장비", + "asset_name": "Pix4D 프로세싱PC", + "mac_address": "00:1A:2B:3C:5E:00", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 77, + "ram_usage": 93, + "network_traffic": "310 GB" + }, + { + "id": "1xis2rv", + "asset_type": "공용PC", + "purchase_corp": "삼안", + "asset_code": "SVR-24001", + "purchase_date": "2023-03", + "asset_purpose": "사진 측량 및 드론매핑 프로세싱을 위한 공용PC (DJI Terra 전용)", + "current_dept": "인프라 BIM 1", + "previous_dept": "-", + "location": "기술개발센터", + "manager_primary": "안효원", + "manager_secondary": "김이훈", + "ip_address": "172.16.10.51", + "remote_tool": "RDP / VNC", + "model_name": "Pro WS WRX80E-SAGE SE WIFI", + "os": "Windows 10 Enterprise (22H2)", + "cpu": "AMD Ryzen Threadripper PRO 5975WX 32-Cores 3.60 GHz", + "ram": "128GB", + "gpu": "NVIDIA GeForce RTX 3090 (24GB) x 2ea", + "ssd_1": "1TB", + "ssd_2": "-", + "hdd_1": "4TB", + "hdd_2": "8TB", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "3500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_1", + "memo": "정상 운영 장비", + "asset_name": "DJI Terra 프로세싱PC", + "mac_address": "00:1A:2B:3C:5E:01", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 82, + "ram_usage": 86, + "network_traffic": "267 GB" + }, + { + "id": "twgpb4n", + "asset_type": "공용PC", + "purchase_corp": "장헌", + "asset_code": "SVR-24002", + "purchase_date": "2023-03", + "asset_purpose": "천지인팀 애플리케이션 테스트; Thales Sentinel EMS", + "current_dept": "천지인", + "previous_dept": "-", + "location": "천지인팀", + "manager_primary": "강명진", + "manager_secondary": "백순철", + "ip_address": "172.16.10.52", + "remote_tool": "RDP / VNC", + "model_name": "ASUS PRIME B365M-A", + "os": "Windows 10", + "cpu": "AMD Ryzen 7 1800X", + "ram": "32 GiB", + "gpu": "NVIDIA GeForce GTX 1050", + "ssd_1": "1 TB", + "ssd_2": "500 GB", + "hdd_1": "1 TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_2", + "memo": "정상 운영 장비", + "asset_name": "천지인팀 테스트 PC", + "mac_address": "00:1A:2B:3C:5E:02", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 15, + "ram_usage": 24, + "network_traffic": "309 GB" + }, + { + "id": "k677um9", + "asset_type": "서버_타워형", + "purchase_corp": "장헌산업", + "asset_code": "SVR-24003", + "purchase_date": "2023-03", + "asset_purpose": "Proxmox HA 클러스터; OPNsense IDS + IPS + CrowdSec; HmMapService 2.0 hot standby 컨테이너(Nginx); HmMapService 2.0 hot standby PostgreSQL", + "current_dept": "천지인", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "강명진", + "manager_secondary": "백순철", + "ip_address": "172.16.10.53", + "remote_tool": "RDP / VNC", + "model_name": "HP Z8 G4", + "os": "Proxmox VE (9.1.11)", + "cpu": "Intel Xeon Silver 4108 * 2", + "ram": "128 GiB ECC", + "gpu": "NVIDIA Quadro P400", + "ssd_1": "256 GB", + "ssd_2": "512 GB", + "hdd_1": "8 TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_3", + "memo": "정상 운영 장비", + "asset_name": "Proxmox VE node A", + "mac_address": "00:1A:2B:3C:5E:03", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 16, + "ram_usage": 27, + "network_traffic": "151 GB" + }, + { + "id": "r73p16i", + "asset_type": "서버_랙마운트", + "purchase_corp": "PTC", + "asset_code": "SVR-24004", + "purchase_date": "2023-03", + "asset_purpose": "Proxmox HA 클러스터; OPNsense IDS + IPS + CrowdSec; 천지인팀 GitLab; GitLab Runner; Domainer production + staging 컨테이너", + "current_dept": "천지인", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "강명진", + "manager_secondary": "백순철", + "ip_address": "172.16.10.54", + "remote_tool": "RDP / VNC", + "model_name": "HPE DL360 Gen10", + "os": "Proxmox VE (9.1.11)", + "cpu": "Intel Xeon Silver 4208", + "ram": "64 GiB ECC", + "gpu": "Matrox G200eH3 (HPE)", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "1.2 TB", + "hdd_2": "1.2 TB", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_4", + "memo": "정상 운영 장비", + "asset_name": "Proxmox VE node B", + "mac_address": "00:1A:2B:3C:5E:04", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 20, + "ram_usage": 40, + "network_traffic": "67 GB" + }, + { + "id": "pbaea9j", + "asset_type": "서버_랙마운트", + "purchase_corp": "바론", + "asset_code": "SVR-24005", + "purchase_date": "2023-03", + "asset_purpose": "Proxmox HA 클러스터; OPNsense IDS + IPS + CrowdSec; HmMapService 2.0(Apache + PostgreSQL); 천지인팀 ClickOnce 배포서버(용지도 + GAIA); Domainer PostgreSQL; 큰길 서비스 PostgreSQL; 인트라넷 공간정보신청서비스 프론트엔드 + API 서버", + "current_dept": "천지인", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "강명진", + "manager_secondary": "백순철", + "ip_address": "172.16.10.55", + "remote_tool": "RDP / VNC", + "model_name": "HPE DL380 Gen10", + "os": "Windows Server 2019 Standard\r\nProxmox VE (1809\r\n9.1.11)", + "cpu": "Intel Xeon Silver 4208", + "ram": "128 GiB ECC", + "gpu": "Matrox G200eH3 (HPE)", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "1.2 TB", + "hdd_2": "1.2 TB", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_5", + "memo": "정상 운영 장비", + "asset_name": "HmMapService 2.0 서버\r\n(Proxmox VE node C)", + "mac_address": "00:1A:2B:3C:5E:05", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 38, + "ram_usage": 40, + "network_traffic": "48 GB" + }, + { + "id": "qvyo1rn", + "asset_type": "서버_워크스테이션", + "purchase_corp": "한라", + "asset_code": "SVR-24006", + "purchase_date": "2023-03", + "asset_purpose": "큰길 서비스 문서제작 서버", + "current_dept": "천지인", + "previous_dept": "-", + "location": "단지설계셀", + "manager_primary": "손원일", + "manager_secondary": "김종석", + "ip_address": "172.16.10.56", + "remote_tool": "RDP / VNC", + "model_name": "Dell 060K5C", + "os": "Windows 11 pro for Workstation (-)", + "cpu": "Intel(R) Xeon(R) silver 4210R CPU @ 2.40GHz", + "ram": "64", + "gpu": "NVIDIA Quadro RTX 4000", + "ssd_1": "1TB", + "ssd_2": "-", + "hdd_1": "4TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_6", + "memo": "정상 운영 장비", + "asset_name": "큰길 운영서버#1", + "mac_address": "00:1A:2B:3C:5E:06", + "hw_status": "운영중", + "service_type": "외부서비스", + "is_inactive": false, + "cpu_usage": 65, + "ram_usage": 63, + "network_traffic": "778 GB" + }, + { + "id": "7cx1n45", + "asset_type": "서버PC", + "purchase_corp": "한맥", + "asset_code": "SVR-24007", + "purchase_date": "2023-03", + "asset_purpose": "큰길 서비스 문서제작 서버", + "current_dept": "천지인", + "previous_dept": "-", + "location": "단지설계셀", + "manager_primary": "손원일", + "manager_secondary": "김종석", + "ip_address": "172.16.10.57", + "remote_tool": "RDP / VNC", + "model_name": "Gigabyte B760M DS3H", + "os": "Windows 10 ent (-)", + "cpu": "Intel(R) Core(TM) i7-14700F", + "ram": "32", + "gpu": "NVIDIA GeForce RTX 4060", + "ssd_1": "500GB", + "ssd_2": "-", + "hdd_1": "1TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_7", + "memo": "정상 운영 장비", + "asset_name": "큰길 운영서버#2", + "mac_address": "00:1A:2B:3C:5E:07", + "hw_status": "운영중", + "service_type": "외부서비스", + "is_inactive": false, + "cpu_usage": 41, + "ram_usage": 75, + "network_traffic": "1783 GB" + }, + { + "id": "t1kwytx", + "asset_type": "서버PC", + "purchase_corp": "삼안", + "asset_code": "SVR-24008", + "purchase_date": "2023-03", + "asset_purpose": "큰길 서비스 문서제작 서버", + "current_dept": "천지인", + "previous_dept": "-", + "location": "단지설계셀", + "manager_primary": "손원일", + "manager_secondary": "김종석", + "ip_address": "172.16.10.58", + "remote_tool": "RDP / VNC", + "model_name": "ASUS PRIME B365M-K", + "os": "Windows 11 Ent (-)", + "cpu": "Intel(R) Core(TM) i7-9700 CPU @3.00GHz (8 CPUs)", + "ram": "32", + "gpu": "NVIDIA GeForce RTX 2060 SUPER", + "ssd_1": "500GB", + "ssd_2": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_8", + "memo": "정상 운영 장비", + "asset_name": "큰길 운영서버#3", + "mac_address": "00:1A:2B:3C:5E:08", + "hw_status": "운영중", + "service_type": "외부서비스", + "is_inactive": false, + "cpu_usage": 56, + "ram_usage": 78, + "network_traffic": "558 GB" + }, + { + "id": "xqargcv", + "asset_type": "서버PC", + "purchase_corp": "장헌", + "asset_code": "SVR-24009", + "purchase_date": "2023-03", + "asset_purpose": "큰길 서비스 문서제작 서버", + "current_dept": "천지인", + "previous_dept": "-", + "location": "단지설계셀", + "manager_primary": "손원일", + "manager_secondary": "김종석", + "ip_address": "172.16.10.59", + "remote_tool": "RDP / VNC", + "model_name": "PRIME B460M-A", + "os": "Windows 10 ent (-)", + "cpu": "Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz, 2904Mhz, 8 코어, 16 논리 프로세서", + "ram": "32", + "gpu": "NVIDIA GeForce GTX 1650", + "ssd_1": "256GB", + "ssd_2": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_9", + "memo": "정상 운영 장비", + "asset_name": "큰길 운영서버#4", + "mac_address": "00:1A:2B:3C:5E:09", + "hw_status": "운영중", + "service_type": "외부서비스", + "is_inactive": false, + "cpu_usage": 59, + "ram_usage": 78, + "network_traffic": "906 GB" + }, + { + "id": "l0vt4w1", + "asset_type": "서버PC", + "purchase_corp": "장헌산업", + "asset_code": "SVR-24010", + "purchase_date": "2023-03", + "asset_purpose": "큰길 문서제작 테스트 서버, 큰길 홈페이지 테스트 서버, 큰길 서비스 테스트 서버", + "current_dept": "천지인", + "previous_dept": "-", + "location": "단지설계셀", + "manager_primary": "손원일", + "manager_secondary": "김종석", + "ip_address": "172.16.10.60", + "remote_tool": "RDP / VNC", + "model_name": "PRIME A620M-A", + "os": "Windows 11 Pro (-)", + "cpu": "AMD Ryzen 5 7500F 6-Core Processor(3.70 GHz)", + "ram": "32", + "gpu": "AMD Radeon RX 580 2048SP", + "ssd_1": "500GB", + "ssd_2": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_10", + "memo": "정상 운영 장비", + "asset_name": "큰길 테스트 서버", + "mac_address": "00:1A:2B:3C:5E:0A", + "hw_status": "운영중", + "service_type": "외부서비스", + "is_inactive": false, + "cpu_usage": 51, + "ram_usage": 74, + "network_traffic": "1425 GB" + }, + { + "id": "1arz71r", + "asset_type": "랙마운트 스토리지", + "purchase_corp": "PTC", + "asset_code": "SVR-24011", + "purchase_date": "2023-03", + "asset_purpose": "HmMapService 2.0 스토리지", + "current_dept": "천지인", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "강명진", + "manager_secondary": "백순철", + "ip_address": "172.16.10.61", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Promise Vess R3604fiS (36.67 TB RAID 6 (48 TB RAW))", + "cpu": "-", + "ram": "-", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_11", + "memo": "정상 운영 장비", + "asset_name": "HmMapService 2.0 스토리지", + "mac_address": "00:1A:2B:3C:5E:0B", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 19, + "ram_usage": 47, + "network_traffic": "304 GB" + }, + { + "id": "yw7u61y", + "asset_type": "서버PC", + "purchase_corp": "바론", + "asset_code": "SVR-24012", + "purchase_date": "2023-03", + "asset_purpose": "유니티 개발서버", + "current_dept": "Infra Solution 개발", + "previous_dept": "-", + "location": "Infra Solution 개발", + "manager_primary": "김재현", + "manager_secondary": "박경빈", + "ip_address": "172.16.10.62", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Windows 10", + "cpu": "-", + "ram": "-", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_12", + "memo": "정상 운영 장비", + "asset_name": "개발PC", + "mac_address": "00:1A:2B:3C:5E:0C", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 44, + "ram_usage": 38, + "network_traffic": "309 GB" + }, + { + "id": "oedpqak", + "asset_type": "타워형", + "purchase_corp": "한라", + "asset_code": "SVR-24013", + "purchase_date": "2023-03", + "asset_purpose": "Way AI 서버, RoadWay 개발서버,", + "current_dept": "Infra Solution 개발", + "previous_dept": "-", + "location": "Infra Solution 개발", + "manager_primary": "문남연", + "manager_secondary": "-", + "ip_address": "172.16.10.63", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Windows 10", + "cpu": "-", + "ram": "-", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_13", + "memo": "정상 운영 장비", + "asset_name": "RoadWay 서버", + "mac_address": "00:1A:2B:3C:5E:0D", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 21, + "ram_usage": 37, + "network_traffic": "267 GB" + }, + { + "id": "eqvrhw2", + "asset_type": "서버PC", + "purchase_corp": "한맥", + "asset_code": "SVR-24014", + "purchase_date": "2023-03", + "asset_purpose": "개발 소스코드 서버 (구조물 S/W ,그래픽스개발_HMEG.천지인)", + "current_dept": "Infra Solution 개발", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "문남연", + "manager_secondary": "-", + "ip_address": "172.16.10.64", + "remote_tool": "RDP / VNC", + "model_name": "Dell EMC PowerEdge T380", + "os": "CentOS Linux 7 (Core) (-)", + "cpu": "Intel(R) Xeon(R) E-2324G CPU @ 3.10GHz", + "ram": "16GB", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_14", + "memo": "정상 운영 장비", + "asset_name": "공통 GIT 서버", + "mac_address": "00:1A:2B:3C:5E:0E", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 40, + "ram_usage": 26, + "network_traffic": "52 GB" + }, + { + "id": "u534ivy", + "asset_type": "테스트 PC", + "purchase_corp": "삼안", + "asset_code": "SVR-24015", + "purchase_date": "2023-03", + "asset_purpose": "구조물 SW SaaS 버전 개발을 위한 테스트 PC", + "current_dept": "구조물 SW 개발", + "previous_dept": "-", + "location": "구조물 SW팀", + "manager_primary": "김세열", + "manager_secondary": "이인우", + "ip_address": "172.16.10.65", + "remote_tool": "RDP / VNC", + "model_name": "HP 81C", + "os": "Windows 10 Pro (22H2)", + "cpu": "Intel(R) Xeon(R) Gold 6248R CPU", + "ram": "64GB", + "gpu": "NVIDIA Quadro P400 (2GB)", + "ssd_1": "1.86TB", + "ssd_2": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_15", + "memo": "정상 운영 장비", + "asset_name": "SaaS 테스트 PC", + "mac_address": "00:1A:2B:3C:5E:0F", + "hw_status": "운영중", + "service_type": "외부서비스", + "is_inactive": false, + "cpu_usage": 44, + "ram_usage": 71, + "network_traffic": "854 GB" + }, + { + "id": "rhk8097", + "asset_type": "공용PC", + "purchase_corp": "장헌", + "asset_code": "SVR-24016", + "purchase_date": "2023-03", + "asset_purpose": "Strana 개발팀 FTP, Git 서버, StranaCore , CFDCore 개발 테스트 PC", + "current_dept": "Strana 개발", + "previous_dept": "-", + "location": "MDF실", + "manager_primary": "김경종", + "manager_secondary": "마르코", + "ip_address": "172.16.10.66", + "remote_tool": "RDP / VNC", + "model_name": "ASUS B150M", + "os": "Windows 10 pro (22H2)", + "cpu": "Intel(R) Core(TM) i7-7700", + "ram": "32GB", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ssd_1": "500GB", + "ssd_2": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_16", + "memo": "정상 운영 장비", + "asset_name": "Strana 공용 PC", + "mac_address": "00:1A:2B:3C:5E:10", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 29, + "ram_usage": 40, + "network_traffic": "271 GB" + }, + { + "id": "fsulffw", + "asset_type": "테스트 PC", + "purchase_corp": "장헌산업", + "asset_code": "SVR-24017", + "purchase_date": "2023-03", + "asset_purpose": "StranaCore , CFDCore 개발 테스트 PC", + "current_dept": "Strana 개발", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "마르코", + "manager_secondary": "김경종", + "ip_address": "172.16.10.67", + "remote_tool": "RDP / VNC", + "model_name": "ASUS ROG MAXIMUS Z790 HERO", + "os": "Windows 11 Pro (25H2)", + "cpu": "13th Gen Intel(R) Core(TM) i9-13900KS", + "ram": "128GB", + "gpu": "NVIDIA RTX A4500 x2", + "ssd_1": "12TB", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_17", + "memo": "정상 운영 장비", + "asset_name": "CFDCore 테스트 PC", + "mac_address": "00:1A:2B:3C:5E:11", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 45, + "ram_usage": 21, + "network_traffic": "279 GB" + }, + { + "id": "wemy0q6", + "asset_type": "테스트 PC", + "purchase_corp": "PTC", + "asset_code": "SVR-24018", + "purchase_date": "2023-03", + "asset_purpose": "Abaqus 해석용 PC, Abaqus 정품 설치", + "current_dept": "Strana 개발", + "previous_dept": "-", + "location": "Strana개발팀", + "manager_primary": "김경종", + "manager_secondary": "-", + "ip_address": "172.16.10.68", + "remote_tool": "RDP / VNC", + "model_name": "ASUS PRIME H610M-D D4", + "os": "Windows 10 Enterprise (22H2)", + "cpu": "12th Gen Intel(R) Core(TM) i7-12700F", + "ram": "32GB", + "gpu": "NVIDIA GeForce RTX 3060", + "ssd_1": "1TB", + "ssd_2": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_18", + "memo": "정상 운영 장비", + "asset_name": "Abaqus PC 1", + "mac_address": "00:1A:2B:3C:5E:12", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 80, + "ram_usage": 86, + "network_traffic": "302 GB" + }, + { + "id": "x5xbg3g", + "asset_type": "테스트 PC", + "purchase_corp": "바론", + "asset_code": "SVR-24019", + "purchase_date": "2023-03", + "asset_purpose": "Abaqus 해석용 PC", + "current_dept": "Strana 개발", + "previous_dept": "-", + "location": "Strana개발팀", + "manager_primary": "김경종", + "manager_secondary": "-", + "ip_address": "172.16.10.69", + "remote_tool": "RDP / VNC", + "model_name": "ASUS PRIME B450M-A", + "os": "Windows 11 Enterprise (24H2)", + "cpu": "AMD Ryzen 7 2700X", + "ram": "32GB", + "gpu": "NVIDIA GeForce RTX 2070", + "ssd_1": "500GB", + "ssd_2": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_19", + "memo": "정상 운영 장비", + "asset_name": "Abaqus PC 2", + "mac_address": "00:1A:2B:3C:5E:13", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 80, + "ram_usage": 93, + "network_traffic": "91 GB" + }, + { + "id": "c6boq64", + "asset_type": "테스트 PC", + "purchase_corp": "한라", + "asset_code": "SVR-24020", + "purchase_date": "2023-03", + "asset_purpose": "Abaqus 해석용 PC", + "current_dept": "Strana 개발", + "previous_dept": "-", + "location": "Strana개발팀", + "manager_primary": "김경종", + "manager_secondary": "-", + "ip_address": "172.16.10.70", + "remote_tool": "RDP / VNC", + "model_name": "ASUS PRIME H410M-A", + "os": "Windows 10 Enterprise (22H2)", + "cpu": "Intel(R) Core(TM) i5-10400", + "ram": "16GB", + "gpu": "NVIDIA GeForce GTX 1050 Ti", + "ssd_1": "250GB", + "ssd_2": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_20", + "memo": "정상 운영 장비", + "asset_name": "Abaqus PC 3", + "mac_address": "00:1A:2B:3C:5E:14", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 86, + "ram_usage": 82, + "network_traffic": "48 GB" + }, + { + "id": "2m767fm", + "asset_type": "테스트 PC", + "purchase_corp": "한맥", + "asset_code": "SVR-24021", + "purchase_date": "2023-03", + "asset_purpose": "Abaqus 해석용 PC", + "current_dept": "Strana 개발", + "previous_dept": "-", + "location": "Strana개발팀", + "manager_primary": "김경종", + "manager_secondary": "-", + "ip_address": "172.16.10.71", + "remote_tool": "RDP / VNC", + "model_name": "ASUS PRIME B365m-K", + "os": "Windows 10 Pro (22H2)", + "cpu": "Intel(R) Core(TM) i7-9700", + "ram": "48GB", + "gpu": "-", + "ssd_1": "500GB", + "ssd_2": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_21", + "memo": "정상 운영 장비", + "asset_name": "Abaqus PC 4", + "mac_address": "00:1A:2B:3C:5E:15", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 73, + "ram_usage": 90, + "network_traffic": "86 GB" + }, + { + "id": "fdjeigv", + "asset_type": "테스트 PC", + "purchase_corp": "삼안", + "asset_code": "SVR-24022", + "purchase_date": "2023-03", + "asset_purpose": "EG-BIM Drawer 개발을 위한 오토캐드 비교 테스트 PC", + "current_dept": "그래픽스 개발", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "최준영", + "manager_secondary": "김근형", + "ip_address": "172.16.10.72", + "remote_tool": "RDP / VNC", + "model_name": "ASUS PRIME B450M-A II", + "os": "Windows 10 pro (22H2)", + "cpu": "AMD Ryzen 9 3900X 12-Core Processor, 3793Mhz", + "ram": "32GB", + "gpu": "NVIDIA GeForce RTX 3060", + "ssd_1": "1TB", + "ssd_2": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_22", + "memo": "정상 운영 장비", + "asset_name": "오토캐드 테스트 PC", + "mac_address": "00:1A:2B:3C:5E:16", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 30, + "ram_usage": 21, + "network_traffic": "185 GB" + }, + { + "id": "7levxyb", + "asset_type": "테스트 PC", + "purchase_corp": "장헌", + "asset_code": "SVR-24023", + "purchase_date": "2023-03", + "asset_purpose": "HmEG 엔진 기능 테스트 PC", + "current_dept": "그래픽스 개발", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "백승민", + "manager_secondary": "김명식", + "ip_address": "172.16.10.73", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Windows 10 Pro (22H2)", + "cpu": "-", + "ram": "-", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_23", + "memo": "정상 운영 장비", + "asset_name": "HmEG 테스트 PC", + "mac_address": "00:1A:2B:3C:5E:17", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 32, + "ram_usage": 47, + "network_traffic": "223 GB" + }, + { + "id": "vibil40", + "asset_type": "코드서명인증용 PC", + "purchase_corp": "장헌산업", + "asset_code": "SVR-24024", + "purchase_date": "2023-03", + "asset_purpose": "응용프로그램 실행파일 및 라이브러리에 대한 디지털 서명 PC", + "current_dept": "그래픽스 개발", + "previous_dept": "-", + "location": "센터 사무실", + "manager_primary": "한성일", + "manager_secondary": "이민규", + "ip_address": "172.16.10.74", + "remote_tool": "RDP / VNC", + "model_name": "PRIME B360M-K", + "os": "Windows 10 Pro (22H2)", + "cpu": "16GB", + "ram": "NVIDIA GeForce GTX 1070", + "gpu": "500GB", + "ssd_1": "-", + "ssd_2": "2TB", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_24", + "memo": "정상 운영 장비", + "asset_name": "코드서명인증 PC", + "mac_address": "00:1A:2B:3C:5E:18", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 16, + "ram_usage": 41, + "network_traffic": "254 GB" + }, + { + "id": "7w8n1nc", + "asset_type": "테스트PC(가상화_DB)", + "purchase_corp": "PTC", + "asset_code": "SVR-24025", + "purchase_date": "2023-03", + "asset_purpose": "외주 한국종합엔지니어링 페이지 개발을 위한 테스트 PC [(구)가평 VM 원격 PC의 가상화]", + "current_dept": "Web Solution", + "previous_dept": "-", + "location": "가상화", + "manager_primary": "이병권", + "manager_secondary": "김한결", + "ip_address": "172.16.10.75", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Windows Server 2008 (-)", + "cpu": "Intel(R) core(TM) i5-3550 CPU @ 3.30GHz 3.29Ghz", + "ram": "4GB", + "gpu": "-", + "ssd_1": "128GB", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_25", + "memo": "정상 운영 장비", + "asset_name": "한종 테스트 PC", + "mac_address": "00:1A:2B:3C:5E:19", + "hw_status": "운영중", + "service_type": "외부서비스", + "is_inactive": false, + "cpu_usage": 86, + "ram_usage": 86, + "network_traffic": "1671 GB" + }, + { + "id": "zb2jld7", + "asset_type": "테스트PC(실물)", + "purchase_corp": "바론", + "asset_code": "SVR-24026", + "purchase_date": "2023-03", + "asset_purpose": "외주 한국종합엔지니어링 페이지 개발을 위한 테스트 PC // 구형 OS설치(정품 미인증)로 인해 원격 및 로컬접근 불가 // 개발 종료 이후 철수예정", + "current_dept": "Web Solution", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "이병권", + "manager_secondary": "김한결", + "ip_address": "172.16.10.76", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Windows 10", + "cpu": "-", + "ram": "-", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_26", + "memo": "방치 의심 장비 (회수 필요)", + "asset_name": "한종 테스트 PC", + "mac_address": "00:1A:2B:3C:5E:1A", + "hw_status": "수리/대기", + "service_type": "외부서비스", + "is_inactive": true, + "cpu_usage": 0, + "ram_usage": 0, + "network_traffic": "0 GB (N/A)" + }, + { + "id": "ygyukzr", + "asset_type": "테스트PC", + "purchase_corp": "한라", + "asset_code": "SVR-24027", + "purchase_date": "2023-03", + "asset_purpose": "장헌,PTC 안전관리 개발 테스트 PC 및 산하 인트라넷 개발 테스트 PC", + "current_dept": "Web Solution", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "이병권", + "manager_secondary": "김한결", + "ip_address": "172.16.10.77", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Windows 10 Pro (22H2)", + "cpu": "AMD Ryzen 7 1800X Eight-Core Processor 3.60Ghz", + "ram": "16GB", + "gpu": "NVIDIA GeForce GTX 1050", + "ssd_1": "512GB", + "ssd_2": "-", + "hdd_1": "1TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_27", + "memo": "정상 운영 장비", + "asset_name": "안전관리 테스트 PC", + "mac_address": "00:1A:2B:3C:5E:1B", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 20, + "ram_usage": 38, + "network_traffic": "148 GB" + }, + { + "id": "azsn9x8", + "asset_type": "공용PC", + "purchase_corp": "한맥", + "asset_code": "SVR-24028", + "purchase_date": "2023-03", + "asset_purpose": "(구) 공간정보 PC / (현) WallZainer 테스트 및 맨아워 테스트 PC", + "current_dept": "Web Solution", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "이병권", + "manager_secondary": "김한결", + "ip_address": "172.16.10.78", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Windows 10 Pro (22H2)", + "cpu": "Intel(R) Core(TM) i5-10400 CPU @ 2.90GHz", + "ram": "16GB", + "gpu": "Intel(R) UHD Graphics 630", + "ssd_1": "256GB", + "ssd_2": "-", + "hdd_1": "1TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_28", + "memo": "정상 운영 장비", + "asset_name": "(구)공간정보 PC", + "mac_address": "00:1A:2B:3C:5E:1C", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 32, + "ram_usage": 38, + "network_traffic": "149 GB" + }, + { + "id": "iyh24gd", + "asset_type": "공용PC", + "purchase_corp": "삼안", + "asset_code": "SVR-24029", + "purchase_date": "2023-03", + "asset_purpose": "(구) 가평 상하수도 원격 PC", + "current_dept": "Web Solution", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "이병권", + "manager_secondary": "김한결", + "ip_address": "172.16.10.79", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Windows 11 (-)", + "cpu": "Intel(R) Core(TM) i5-3550 CPU @ 3.30GHz", + "ram": "16GB", + "gpu": "Intel(R) HD Graphics", + "ssd_1": "128GB", + "ssd_2": "-", + "hdd_1": "1TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_29", + "memo": "정상 운영 장비", + "asset_name": "(구)가평 VM 원격 PC", + "mac_address": "00:1A:2B:3C:5E:1D", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 44, + "ram_usage": 32, + "network_traffic": "89 GB" + }, + { + "id": "92is22f", + "asset_type": "테스트PC", + "purchase_corp": "장헌", + "asset_code": "SVR-24030", + "purchase_date": "2023-03", + "asset_purpose": "(구) 최하림 연구원 PC / (현) AI 개발 테스트 PC", + "current_dept": "Web Solution", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "이병권", + "manager_secondary": "김한결", + "ip_address": "172.16.10.80", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Windows 11 Pro (25H2)", + "cpu": "AMD Ryzen 7 7800X3D 8-Core Processor (4.20GHz)", + "ram": "64GB", + "gpu": "NVIDIA GeForce RTX 4070 SUPER (12GB)", + "ssd_1": "1TB", + "ssd_2": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_30", + "memo": "정상 운영 장비", + "asset_name": "AI 개발 서버", + "mac_address": "00:1A:2B:3C:5E:1E", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 22, + "ram_usage": 23, + "network_traffic": "165 GB" + }, + { + "id": "1ilteou", + "asset_type": "공용PC", + "purchase_corp": "장헌산업", + "asset_code": "SVR-24031", + "purchase_date": "2023-03", + "asset_purpose": "모든 IDC서버, NAS 관리", + "current_dept": "Web Solution", + "previous_dept": "-", + "location": "IDC", + "manager_primary": "이병권", + "manager_secondary": "김한결", + "ip_address": "172.16.10.81", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Windows 10", + "cpu": "-", + "ram": "-", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_31", + "memo": "정상 운영 장비", + "asset_name": "IDC 서버들", + "mac_address": "00:1A:2B:3C:5E:1F", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 41, + "ram_usage": 24, + "network_traffic": "269 GB" + }, + { + "id": "y5t0tp5", + "asset_type": "서버", + "purchase_corp": "PTC", + "asset_code": "SVR-24032", + "purchase_date": "2023-03", + "asset_purpose": "한종 리뉴얼 메뉴 개발서버", + "current_dept": "Web Solution", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "이병권", + "manager_secondary": "김한결", + "ip_address": "172.16.10.82", + "remote_tool": "RDP / VNC", + "model_name": "DL380 GEN10", + "os": "Windows Server 2019 (-)", + "cpu": "Intel Xeon(R) Silver 4208 CPU @ 2.10GHz", + "ram": "128GB", + "gpu": "-", + "ssd_1": "300GB", + "ssd_2": "-", + "hdd_1": "1.88TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_32", + "memo": "정상 운영 장비", + "asset_name": "한종 개발서버", + "mac_address": "00:1A:2B:3C:5E:20", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 44, + "ram_usage": 40, + "network_traffic": "76 GB" + }, + { + "id": "swuhwpw", + "asset_type": "서버", + "purchase_corp": "바론", + "asset_code": "SVR-24033", + "purchase_date": "2023-03", + "asset_purpose": "MyStation & 전화기 운영서버", + "current_dept": "Web Solution", + "previous_dept": "-", + "location": "MDF실", + "manager_primary": "이병권", + "manager_secondary": "김한결", + "ip_address": "172.16.10.83", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Windows 10", + "cpu": "-", + "ram": "-", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_33", + "memo": "정상 운영 장비", + "asset_name": "MyStation 운영 서버", + "mac_address": "00:1A:2B:3C:5E:21", + "hw_status": "운영중", + "service_type": "외부서비스", + "is_inactive": false, + "cpu_usage": 93, + "ram_usage": 93, + "network_traffic": "808 GB" + }, + { + "id": "p0ma56d", + "asset_type": "서버", + "purchase_corp": "한라", + "asset_code": "SVR-24034", + "purchase_date": "2023-03", + "asset_purpose": "한라 제외 각 자회사 소스 백업서버", + "current_dept": "Web Solution", + "previous_dept": "-", + "location": "MDF실", + "manager_primary": "이병권", + "manager_secondary": "김한결", + "ip_address": "172.16.10.84", + "remote_tool": "RDP / VNC", + "model_name": "IBM x3350 M2", + "os": "Windows Server 2012R2 (6.3.9600)", + "cpu": "Xeon(R) CPU E5520 @ 2.27GHz 2.26GHz", + "ram": "4GB", + "gpu": "-", + "ssd_1": "135GB", + "ssd_2": "-", + "hdd_1": "17.2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_34", + "memo": "정상 운영 장비", + "asset_name": "백업 서버", + "mac_address": "00:1A:2B:3C:5E:22", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 30, + "ram_usage": 31, + "network_traffic": "230 GB" + }, + { + "id": "7ugdxps", + "asset_type": "서버", + "purchase_corp": "한맥", + "asset_code": "SVR-24035", + "purchase_date": "2023-03", + "asset_purpose": "한라 소스 백업서버", + "current_dept": "Web Solution", + "previous_dept": "-", + "location": "MDF실", + "manager_primary": "이병권", + "manager_secondary": "김한결", + "ip_address": "172.16.10.85", + "remote_tool": "RDP / VNC", + "model_name": "Supermicro", + "os": "Windows Server 2019 (10.0.17763)", + "cpu": "Intel Xeon(R) Silver 4210 CPU @ 2.20GHz", + "ram": "16GB", + "gpu": "-", + "ssd_1": "300GB", + "ssd_2": "-", + "hdd_1": "1TB", + "hdd_2": "30TB", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_35", + "memo": "정상 운영 장비", + "asset_name": "한라 백업서버", + "mac_address": "00:1A:2B:3C:5E:23", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 41, + "ram_usage": 26, + "network_traffic": "121 GB" + }, + { + "id": "eebhxop", + "asset_type": "서버", + "purchase_corp": "삼안", + "asset_code": "SVR-24036", + "purchase_date": "2023-03", + "asset_purpose": "(구)XR 프로젝트 Was 서버 / (현) 한맥 전자자료실 서버", + "current_dept": "Web Solution", + "previous_dept": "-", + "location": "MDF실", + "manager_primary": "이병권", + "manager_secondary": "김한결", + "ip_address": "172.16.10.86", + "remote_tool": "RDP / VNC", + "model_name": "DL360 Gen10", + "os": "Windows Server 2019 (10.0.17763)", + "cpu": "Intel Xeon(R) Silver 4214R CPU @ 2.40GHz", + "ram": "32GB", + "gpu": "-", + "ssd_1": "280GB", + "ssd_2": "-", + "hdd_1": "3.3TB", + "hdd_2": "33.5TB", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_36", + "memo": "정상 운영 장비", + "asset_name": "XR-WAS", + "mac_address": "00:1A:2B:3C:5E:24", + "hw_status": "운영중", + "service_type": "외부서비스", + "is_inactive": false, + "cpu_usage": 60, + "ram_usage": 68, + "network_traffic": "1025 GB" + }, + { + "id": "27zwihk", + "asset_type": "서버", + "purchase_corp": "장헌", + "asset_code": "SVR-24037", + "purchase_date": "2023-03", + "asset_purpose": "XR 프로젝트 가상화 Main 서버", + "current_dept": "Web Solution", + "previous_dept": "-", + "location": "MDF실", + "manager_primary": "이병권", + "manager_secondary": "김한결", + "ip_address": "172.16.10.87", + "remote_tool": "RDP / VNC", + "model_name": "DL360 Gen10", + "os": "Windows Server 2019 (10.0.17763)", + "cpu": "Intel Xeon(R) Silver 4214R CPU @ 2.40GHz", + "ram": "32GB", + "gpu": "-", + "ssd_1": "280GB", + "ssd_2": "-", + "hdd_1": "3.3TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_37", + "memo": "정상 운영 장비", + "asset_name": "XR-Main", + "mac_address": "00:1A:2B:3C:5E:25", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 48, + "ram_usage": 24, + "network_traffic": "254 GB" + }, + { + "id": "a4hid3x", + "asset_type": "공용PC/테스트PC", + "purchase_corp": "장헌산업", + "asset_code": "SVR-24038", + "purchase_date": "2023-03", + "asset_purpose": "유체 시뮬레이션 모델링을 위한 공용 PC", + "current_dept": "수자원", + "previous_dept": "-", + "location": "한맥빌딩 7층", + "manager_primary": "이은구", + "manager_secondary": "황호연", + "ip_address": "172.16.10.88", + "remote_tool": "RDP / VNC", + "model_name": "PRO Z790-A WIFI (MS-7E07)", + "os": "Windows 10 Pro (22H2)", + "cpu": "13th Gen Intel(R) Core(TM) i9-13900K (24 CPUs)", + "ram": "64GB", + "gpu": "NVIDIA GeForce RTX 4080\r\nIntel(R) UHD Graphics 770", + "ssd_1": "2TB", + "ssd_2": "-", + "hdd_1": "8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "3500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_38", + "memo": "정상 운영 장비", + "asset_name": "모델링 PC", + "mac_address": "00:1A:2B:3C:5E:26", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 31, + "ram_usage": 36, + "network_traffic": "53 GB" + }, + { + "id": "pe1y5a6", + "asset_type": "렌더링 PC", + "purchase_corp": "PTC", + "asset_code": "SVR-24039", + "purchase_date": "2023-03", + "asset_purpose": "3D 영상 렌더링을 위한 PC", + "current_dept": "디자인팀", + "previous_dept": "-", + "location": "한맥빌딩 6층", + "manager_primary": "최영환", + "manager_secondary": "권순호", + "ip_address": "172.16.10.89", + "remote_tool": "RDP / VNC", + "model_name": "Z790 AORUS ELITE AX", + "os": "Windows 11 (25H2)", + "cpu": "Intel(R) i9-14900KF (3.20GHz)", + "ram": "128GB", + "gpu": "NIVIDA GeForce RTX 4090", + "ssd_1": "4TB", + "ssd_2": "-", + "hdd_1": "8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_39", + "memo": "정상 운영 장비", + "asset_name": "영상셀 PC", + "mac_address": "00:1A:2B:3C:5E:27", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 70, + "ram_usage": 85, + "network_traffic": "27 GB" + }, + { + "id": "idahevp", + "asset_type": "테스트 PC", + "purchase_corp": "바론", + "asset_code": "SVR-24040", + "purchase_date": "2023-03", + "asset_purpose": "UX/UI 테스트를 위한 PC", + "current_dept": "디자인팀", + "previous_dept": "-", + "location": "한맥빌딩 6층", + "manager_primary": "채선영", + "manager_secondary": "김정석", + "ip_address": "172.16.10.90", + "remote_tool": "RDP / VNC", + "model_name": "PRIME H510M-K B2.0", + "os": "Windows 10 (22H2)", + "cpu": "Intel(R) i9-10900 (2.8GHz)", + "ram": "64GB", + "gpu": "NIVIDA GeForce RTX 3090", + "ssd_1": "1TB", + "ssd_2": "-", + "hdd_1": "8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "3500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_40", + "memo": "정상 운영 장비", + "asset_name": "UX셀 PC", + "mac_address": "00:1A:2B:3C:5E:28", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 33, + "ram_usage": 39, + "network_traffic": "247 GB" + }, + { + "id": "xraug94", + "asset_type": "타워형", + "purchase_corp": "한라", + "asset_code": "SVR-24041", + "purchase_date": "2023-03", + "asset_purpose": "코드관리 /L7 스위치 역할 / 각종 테스트 90개 이상 Docker 구동중", + "current_dept": "기술기획", + "previous_dept": "-", + "location": "MDF실", + "manager_primary": "한치영", + "manager_secondary": "이태훈", + "ip_address": "172.16.10.91", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Ubuntu Server (Ubuntu 24.04.4 LTS)", + "cpu": "-", + "ram": "-", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_41", + "memo": "정상 운영 장비", + "asset_name": "AI-cell-util", + "mac_address": "00:1A:2B:3C:5E:29", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 49, + "ram_usage": 22, + "network_traffic": "291 GB" + }, + { + "id": "zkao0y2", + "asset_type": "타워형", + "purchase_corp": "한맥", + "asset_code": "SVR-24042", + "purchase_date": "2023-03", + "asset_purpose": "A100 GPU 구동용", + "current_dept": "기술기획", + "previous_dept": "-", + "location": "MDF실", + "manager_primary": "한치영", + "manager_secondary": "이태훈", + "ip_address": "172.16.10.92", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Ubuntu Server (Ubuntu 24.04.4 LTS)", + "cpu": "-", + "ram": "-", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_42", + "memo": "정상 운영 장비", + "asset_name": "AI-cell-A100", + "mac_address": "00:1A:2B:3C:5E:2A", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 17, + "ram_usage": 32, + "network_traffic": "157 GB" + }, + { + "id": "1cp5dkq", + "asset_type": "타워형", + "purchase_corp": "삼안", + "asset_code": "SVR-24043", + "purchase_date": "2023-03", + "asset_purpose": "gitea action (CI 테스트 등) 및 인증 테스트용", + "current_dept": "기술기획", + "previous_dept": "-", + "location": "MDF실", + "manager_primary": "한치영", + "manager_secondary": "이태훈", + "ip_address": "172.16.10.93", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Ubuntu Server (Ubuntu 24.04.4 LTS)", + "cpu": "-", + "ram": "-", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_43", + "memo": "정상 운영 장비", + "asset_name": "AI-cell-beps", + "mac_address": "00:1A:2B:3C:5E:2B", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 21, + "ram_usage": 41, + "network_traffic": "99 GB" + }, + { + "id": "jqgnday", + "asset_type": "타워형", + "purchase_corp": "장헌", + "asset_code": "SVR-24044", + "purchase_date": "2023-03", + "asset_purpose": "gitea action (CI 테스트 등) 및 인증 테스트용", + "current_dept": "기술기획", + "previous_dept": "-", + "location": "MDF실", + "manager_primary": "한치영", + "manager_secondary": "이태훈", + "ip_address": "172.16.10.94", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Ubuntu Server (Ubuntu 24.04.4 LTS)", + "cpu": "-", + "ram": "-", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_44", + "memo": "정상 운영 장비", + "asset_name": "chat-hmac", + "mac_address": "00:1A:2B:3C:5E:2C", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 45, + "ram_usage": 21, + "network_traffic": "246 GB" + }, + { + "id": "1be1c30", + "asset_type": "테스트PC", + "purchase_corp": "장헌산업", + "asset_code": "SVR-24045", + "purchase_date": "2023-03", + "asset_purpose": "개발 앱 테스트", + "current_dept": "GSIM", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "최준호", + "manager_secondary": "-", + "ip_address": "172.16.10.95", + "remote_tool": "RDP / VNC", + "model_name": "PRIME B365M-K", + "os": "Windows 10 (22H2)", + "cpu": "Intel(R) Core(TM) i7-9700KF", + "ram": "16GB", + "gpu": "NVIDIA GeForce RTX 2060", + "ssd_1": "500GB", + "ssd_2": "500GB", + "hdd_1": "8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_45", + "memo": "정상 운영 장비", + "asset_name": "테스트서버", + "mac_address": "00:1A:2B:3C:5E:2D", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 25, + "ram_usage": 38, + "network_traffic": "304 GB" + }, + { + "id": "d77klpa", + "asset_type": "서버랙형", + "purchase_corp": "PTC", + "asset_code": "SVR-24046", + "purchase_date": "2023-03", + "asset_purpose": "프로젝트마스터 스토리지 서버, 터레인 서버, BaseMap서버", + "current_dept": "GSIM", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "-", + "manager_secondary": "-", + "ip_address": "172.16.10.96", + "remote_tool": "RDP / VNC", + "model_name": "DL360 GEN10", + "os": "Windows Server 2019 (1809)", + "cpu": "Intel(R) Xeon(R) Silver 4214R CPU", + "ram": "32GB", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "300GB", + "hdd_2": "3.5TB", + "hdd_3": "3.5TB", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_46", + "memo": "정상 운영 장비", + "asset_name": "GSIM서버", + "mac_address": "00:1A:2B:3C:5E:2E", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 24, + "ram_usage": 39, + "network_traffic": "57 GB" + }, + { + "id": "hlqt12h", + "asset_type": "공용PC", + "purchase_corp": "바론", + "asset_code": "SVR-24047", + "purchase_date": "2023-03", + "asset_purpose": "GSIM 정사영상 및 BIM 3D모델 데이터 구축", + "current_dept": "GSIM", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "박정우", + "manager_secondary": "-", + "ip_address": "172.16.10.97", + "remote_tool": "RDP / VNC", + "model_name": "HP Z8 G4 Workstation (81C7)", + "os": "Windows 10 (22H2)", + "cpu": "Intel(R) Xeon(R) Gold 6136", + "ram": "128GB", + "gpu": "NVIDIA Quadro P2200", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "1TB", + "hdd_2": "8TB", + "hdd_3": "8TB", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_47", + "memo": "정상 운영 장비", + "asset_name": "언리얼서버", + "mac_address": "00:1A:2B:3C:5E:2F", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 36, + "ram_usage": 35, + "network_traffic": "176 GB" + }, + { + "id": "u9smwy5", + "asset_type": "공용PC", + "purchase_corp": "한라", + "asset_code": "SVR-24048", + "purchase_date": "2023-03", + "asset_purpose": "프로젝트마스터 컨버터(PDF) 서버", + "current_dept": "GSIM", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "박지은", + "manager_secondary": "-", + "ip_address": "172.16.10.98", + "remote_tool": "RDP / VNC", + "model_name": "MAG Z690 TOMAHAWK WIFI DDR4 (MS-7D32)", + "os": "Windows 10 (22H2)", + "cpu": "12th Gen Intel(R) Core(TM) i9-12900K", + "ram": "128GB", + "gpu": "NVIDIA GeForece RTX 3090", + "ssd_1": "4TB", + "ssd_2": "10TB", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "3500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_48", + "memo": "정상 운영 장비", + "asset_name": "빌드서버", + "mac_address": "00:1A:2B:3C:5E:30", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 24, + "ram_usage": 30, + "network_traffic": "53 GB" + }, + { + "id": "prvuwas", + "asset_type": "서버랙형", + "purchase_corp": "한맥", + "asset_code": "SVR-24049", + "purchase_date": "2023-03", + "asset_purpose": "이전 프로젝트마스터 서버 구동", + "current_dept": "GSIM", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "손제근", + "manager_secondary": "-", + "ip_address": "172.16.10.99", + "remote_tool": "RDP / VNC", + "model_name": "DL360 GEN10", + "os": "Windows Server 2019 (1809)", + "cpu": "Intel(R) Xeon(R) Silver 4214R CPU", + "ram": "32GB", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "300GB", + "hdd_2": "3.5TB", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_49", + "memo": "정상 운영 장비", + "asset_name": "META서버", + "mac_address": "00:1A:2B:3C:5E:31", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 33, + "ram_usage": 36, + "network_traffic": "259 GB" + }, + { + "id": "rqxpfkw", + "asset_type": "서버랙형", + "purchase_corp": "삼안", + "asset_code": "SVR-24050", + "purchase_date": "2023-03", + "asset_purpose": "함양합천서버, GSIM 웹서비스, 프로젝트마스터 웹서비스", + "current_dept": "GSIM", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "민홍", + "manager_secondary": "-", + "ip_address": "172.16.10.100", + "remote_tool": "RDP / VNC", + "model_name": "DL380 GEN10", + "os": "Windows Server 2019 (1809)", + "cpu": "Intel(R) Xeon(R) Silver 4208 CPU", + "ram": "96GB", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "600GB", + "hdd_2": "10.3TB", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_50", + "memo": "정상 운영 장비", + "asset_name": "함양합천서버", + "mac_address": "00:1A:2B:3C:5E:32", + "hw_status": "운영중", + "service_type": "외부서비스", + "is_inactive": false, + "cpu_usage": 63, + "ram_usage": 60, + "network_traffic": "1117 GB" + }, + { + "id": "jrhabxz", + "asset_type": "서버랙형", + "purchase_corp": "장헌", + "asset_code": "SVR-24051", + "purchase_date": "2023-03", + "asset_purpose": "스마트건설 R&D 웹서비스", + "current_dept": "GSIM", + "previous_dept": "-", + "location": "MDF실", + "manager_primary": "기윤서", + "manager_secondary": "-", + "ip_address": "172.16.10.101", + "remote_tool": "RDP / VNC", + "model_name": "DL360 GEN10", + "os": "Windows Server 2019 (1809)", + "cpu": "Intel(R) Xeon(R) Silver 4214R CPU", + "ram": "64GB", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "300GB", + "hdd_2": "3.2TB", + "hdd_3": "16.3TB", + "hdd_4": "-", + "monitoring": "대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_51", + "memo": "정상 운영 장비", + "asset_name": "스마트건설서버", + "mac_address": "00:1A:2B:3C:5E:33", + "hw_status": "운영중", + "service_type": "외부서비스", + "is_inactive": false, + "cpu_usage": 62, + "ram_usage": 74, + "network_traffic": "1127 GB" + }, + { + "id": "y3c7q3q", + "asset_type": "클라우드 서버", + "purchase_corp": "장헌산업", + "asset_code": "SVR-24052", + "purchase_date": "2023-03", + "asset_purpose": "PM CLOUD 서버", + "current_dept": "GSIM", + "previous_dept": "-", + "location": "아마존 AWS EC2", + "manager_primary": "-", + "manager_secondary": "-", + "ip_address": "172.16.10.102", + "remote_tool": "RDP / VNC", + "model_name": "m5.large", + "os": "Windows Server 2025 (24H2)", + "cpu": "Intel(R) Xeon(R) Platinum 8259 CPU", + "ram": "8GB", + "gpu": "-", + "ssd_1": "50GB", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_52", + "memo": "정상 운영 장비", + "asset_name": "PM CLOUD 서버", + "mac_address": "00:1A:2B:3C:5E:34", + "hw_status": "운영중", + "service_type": "외부서비스", + "is_inactive": false, + "cpu_usage": 50, + "ram_usage": 61, + "network_traffic": "1210 GB" + }, + { + "id": "gaqo7w9", + "asset_type": "클라우드 서버", + "purchase_corp": "PTC", + "asset_code": "SVR-24053", + "purchase_date": "2023-03", + "asset_purpose": "GSIM CLOUD 서버", + "current_dept": "GSIM", + "previous_dept": "-", + "location": "아마존 AWS EC2", + "manager_primary": "-", + "manager_secondary": "-", + "ip_address": "172.16.10.103", + "remote_tool": "RDP / VNC", + "model_name": "t3.large", + "os": "Windows Server 2025 (24H2)", + "cpu": "Intel(R) Xeon(R) Platinum 8259 CPU", + "ram": "8GB", + "gpu": "-", + "ssd_1": "50GB", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_53", + "memo": "정상 운영 장비", + "asset_name": "GSIM CLOUD 서버", + "mac_address": "00:1A:2B:3C:5E:35", + "hw_status": "운영중", + "service_type": "외부서비스", + "is_inactive": false, + "cpu_usage": 52, + "ram_usage": 78, + "network_traffic": "764 GB" + }, + { + "id": "uc1cofv", + "asset_type": "클라우드 서버", + "purchase_corp": "바론", + "asset_code": "SVR-24054", + "purchase_date": "2023-03", + "asset_purpose": "CFS, BCMF CLOUD 서버", + "current_dept": "회의실", + "previous_dept": "-", + "location": "아마존 AWS EC2", + "manager_primary": "-", + "manager_secondary": "-", + "ip_address": "172.16.10.104", + "remote_tool": "RDP / VNC", + "model_name": "t3.large", + "os": "Windows Server 2022 (21H2)", + "cpu": "Intel(R) Xeon(R) Platinum 8259 CPU", + "ram": "8GB", + "gpu": "-", + "ssd_1": "100GB", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_54", + "memo": "정상 운영 장비", + "asset_name": "CFS, BCMF CLOUD 서버", + "mac_address": "00:1A:2B:3C:5E:36", + "hw_status": "운영중", + "service_type": "회의용/공용", + "is_inactive": false, + "cpu_usage": 9, + "ram_usage": 11, + "network_traffic": "1.1 GB" + }, + { + "id": "ak21xfd", + "asset_type": "회의실 PC", + "purchase_corp": "한라", + "asset_code": "SVR-24055", + "purchase_date": "2023-03", + "asset_purpose": "-", + "current_dept": "회의실", + "previous_dept": "-", + "location": "한맥빌딩 3층", + "manager_primary": "-", + "manager_secondary": "-", + "ip_address": "172.16.10.105", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Windows 10", + "cpu": "-", + "ram": "-", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_55", + "memo": "정상 운영 장비", + "asset_name": "3B 회의실 PC", + "mac_address": "00:1A:2B:3C:5E:37", + "hw_status": "운영중", + "service_type": "회의용/공용", + "is_inactive": false, + "cpu_usage": 9, + "ram_usage": 17, + "network_traffic": "0.7 GB" + }, + { + "id": "otwer75", + "asset_type": "회의실 PC", + "purchase_corp": "한맥", + "asset_code": "SVR-24056", + "purchase_date": "2023-03", + "asset_purpose": "-", + "current_dept": "회의실", + "previous_dept": "-", + "location": "한맥빌딩 5층", + "manager_primary": "-", + "manager_secondary": "-", + "ip_address": "172.16.10.106", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Windows 10", + "cpu": "Intel(R) Core(TM) i9-12900K CPU", + "ram": "-", + "gpu": "NVIDIA GeForce RTX 3090 Ti", + "ssd_1": "1TB", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "3500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_56", + "memo": "정상 운영 장비", + "asset_name": "5B 회의실 PC", + "mac_address": "00:1A:2B:3C:5E:38", + "hw_status": "운영중", + "service_type": "회의용/공용", + "is_inactive": false, + "cpu_usage": 11, + "ram_usage": 10, + "network_traffic": "0.5 GB" + }, + { + "id": "vd15fg0", + "asset_type": "회의실 PC", + "purchase_corp": "삼안", + "asset_code": "SVR-24057", + "purchase_date": "2023-03", + "asset_purpose": "-", + "current_dept": "회의실", + "previous_dept": "-", + "location": "한맥빌딩 6층", + "manager_primary": "-", + "manager_secondary": "-", + "ip_address": "172.16.10.107", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Windows 10", + "cpu": "Intel(R) Xeon(R) W-1250P CPU @ 4.10Ghz", + "ram": "-", + "gpu": "NVIDIA Quadro P620", + "ssd_1": "2TB", + "ssd_2": "2TB", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_57", + "memo": "정상 운영 장비", + "asset_name": "6층 대회의실 PC", + "mac_address": "00:1A:2B:3C:5E:39", + "hw_status": "운영중", + "service_type": "회의용/공용", + "is_inactive": false, + "cpu_usage": 7, + "ram_usage": 16, + "network_traffic": "0.7 GB" + }, + { + "id": "i909fhg", + "asset_type": "회의실 PC", + "purchase_corp": "장헌", + "asset_code": "SVR-24058", + "purchase_date": "2023-03", + "asset_purpose": "-", + "current_dept": "회의실", + "previous_dept": "-", + "location": "한맥빌딩 6층", + "manager_primary": "-", + "manager_secondary": "-", + "ip_address": "172.16.10.108", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Windows 10", + "cpu": "-", + "ram": "32", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_58", + "memo": "정상 운영 장비", + "asset_name": "6층 소회의실A PC", + "mac_address": "00:1A:2B:3C:5E:3A", + "hw_status": "운영중", + "service_type": "회의용/공용", + "is_inactive": false, + "cpu_usage": 2, + "ram_usage": 7, + "network_traffic": "1.6 GB" + }, + { + "id": "wzfwwcw", + "asset_type": "회의실 PC", + "purchase_corp": "장헌산업", + "asset_code": "SVR-24059", + "purchase_date": "2023-03", + "asset_purpose": "-", + "current_dept": "회의실", + "previous_dept": "-", + "location": "한맥빌딩 6층", + "manager_primary": "-", + "manager_secondary": "-", + "ip_address": "172.16.10.109", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Windows 10", + "cpu": "AMD Ryzen 9 5950X", + "ram": "32", + "gpu": "NVIDIA GeForce RTX 3090 Ti", + "ssd_1": "2TB", + "ssd_2": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "3500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_59", + "memo": "정상 운영 장비", + "asset_name": "6층 소회의실B PC", + "mac_address": "00:1A:2B:3C:5E:3B", + "hw_status": "운영중", + "service_type": "회의용/공용", + "is_inactive": false, + "cpu_usage": 2, + "ram_usage": 6, + "network_traffic": "0.4 GB" + }, + { + "id": "6157j4h", + "asset_type": "회의실 PC", + "purchase_corp": "PTC", + "asset_code": "SVR-24060", + "purchase_date": "2023-03", + "asset_purpose": "-", + "current_dept": "회의실", + "previous_dept": "-", + "location": "한맥빌딩 7층", + "manager_primary": "-", + "manager_secondary": "-", + "ip_address": "172.16.10.110", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Windows 10", + "cpu": "Intel(R) Core(TM) i7-6700 CPU @ 3.40Ghz", + "ram": "-", + "gpu": "NVIDIA GeForce RTX 2060 SUPER", + "ssd_1": "500", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_60", + "memo": "정상 운영 장비", + "asset_name": "7층 대회의실 PC", + "mac_address": "00:1A:2B:3C:5E:3C", + "hw_status": "운영중", + "service_type": "회의용/공용", + "is_inactive": false, + "cpu_usage": 6, + "ram_usage": 7, + "network_traffic": "1.0 GB" + }, + { + "id": "n1vrcqs", + "asset_type": "회의실 PC", + "purchase_corp": "바론", + "asset_code": "SVR-24061", + "purchase_date": "2023-03", + "asset_purpose": "-", + "current_dept": "회의실", + "previous_dept": "-", + "location": "한맥빌딩 7층", + "manager_primary": "-", + "manager_secondary": "-", + "ip_address": "172.16.10.111", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Windows 10", + "cpu": "Intel(R) Core(TM) i7-8700 CPU @ 3.20Ghz", + "ram": "128", + "gpu": "NVIDIA Quadro P400", + "ssd_1": "250", + "ssd_2": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_61", + "memo": "정상 운영 장비", + "asset_name": "7층 소회의실 PC", + "mac_address": "00:1A:2B:3C:5E:3D", + "hw_status": "운영중", + "service_type": "회의용/공용", + "is_inactive": false, + "cpu_usage": 3, + "ram_usage": 9, + "network_traffic": "0.6 GB" + }, + { + "id": "ryou7lf", + "asset_type": "회의실 PC", + "purchase_corp": "한라", + "asset_code": "SVR-24062", + "purchase_date": "2023-03", + "asset_purpose": "-", + "current_dept": "회의실", + "previous_dept": "-", + "location": "한맥빌딩 파고라", + "manager_primary": "-", + "manager_secondary": "-", + "ip_address": "172.16.10.112", + "remote_tool": "RDP / VNC", + "model_name": "사내 표준 공용PC", + "os": "Windows 10", + "cpu": "Intel(R) Core(TM) i9-13900K CPU", + "ram": "16", + "gpu": "NVIDIA GeForce RTX 4090", + "ssd_1": "250GB", + "ssd_2": "-", + "hdd_1": "1TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_62", + "memo": "정상 운영 장비", + "asset_name": "파고라 PC", + "mac_address": "00:1A:2B:3C:5E:3E", + "hw_status": "운영중", + "service_type": "회의용/공용", + "is_inactive": false, + "cpu_usage": 6, + "ram_usage": 12, + "network_traffic": "1.3 GB" + }, + { + "id": "8pdpgeg", + "asset_type": "회의실 PC", + "purchase_corp": "한맥", + "asset_code": "SVR-24063", + "purchase_date": "2023-03", + "asset_purpose": "-", + "current_dept": "회의실", + "previous_dept": "-", + "location": "기술개발센터 2번회의실", + "manager_primary": "-", + "manager_secondary": "-", + "ip_address": "172.16.10.113", + "remote_tool": "RDP / VNC", + "model_name": "PRIME B365M-K", + "os": "Windows 10 pro (22H2)", + "cpu": "Intel(R) Core(TM) i5-8500 CPU @ 3.00GHz", + "ram": "16", + "gpu": "NVIDIA GeForce GTX 1650", + "ssd_1": "500GB", + "ssd_2": "-", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_63", + "memo": "정상 운영 장비", + "asset_name": "회의실2 PC", + "mac_address": "00:1A:2B:3C:5E:3F", + "hw_status": "운영중", + "service_type": "회의용/공용", + "is_inactive": false, + "cpu_usage": 8, + "ram_usage": 10, + "network_traffic": "0.9 GB" + }, + { + "id": "w3putkf", + "asset_type": "회의실 PC", + "purchase_corp": "삼안", + "asset_code": "SVR-24064", + "purchase_date": "2023-03", + "asset_purpose": "-", + "current_dept": "회의실", + "previous_dept": "-", + "location": "기술개발센터 3번회의실", + "manager_primary": "-", + "manager_secondary": "-", + "ip_address": "172.16.10.114", + "remote_tool": "RDP / VNC", + "model_name": "PRIME B250M-A", + "os": "Windows 10 pro (22H2)", + "cpu": "Intel(R) Core(TM) i7-7700 CPU @ 3.60Ghz", + "ram": "16", + "gpu": "NVIDIA GeForce GTX 1070", + "ssd_1": "500GB", + "ssd_2": "1TB", + "hdd_1": "1.8TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_64", + "memo": "정상 운영 장비", + "asset_name": "회의실3 PC", + "mac_address": "00:1A:2B:3C:5E:40", + "hw_status": "운영중", + "service_type": "회의용/공용", + "is_inactive": false, + "cpu_usage": 6, + "ram_usage": 8, + "network_traffic": "1.1 GB" + }, + { + "id": "crebben", + "asset_type": "회의실 PC", + "purchase_corp": "장헌", + "asset_code": "SVR-24065", + "purchase_date": "2023-03", + "asset_purpose": "-", + "current_dept": "회의실", + "previous_dept": "-", + "location": "기술개발센터 5번회의실", + "manager_primary": "-", + "manager_secondary": "-", + "ip_address": "172.16.10.115", + "remote_tool": "RDP / VNC", + "model_name": "PRIME B350M-A", + "os": "Windows 10 pro (22H2)", + "cpu": "AMD Ryzen 7 1800X Eight-Core Processor", + "ram": "32", + "gpu": "NVIDIA GeForce GTX 1050", + "ssd_1": "500GB", + "ssd_2": "-", + "hdd_1": "1TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_65", + "memo": "정상 운영 장비", + "asset_name": "회의실5 PC", + "mac_address": "00:1A:2B:3C:5E:41", + "hw_status": "운영중", + "service_type": "회의용/공용", + "is_inactive": false, + "cpu_usage": 7, + "ram_usage": 14, + "network_traffic": "1.3 GB" + }, + { + "id": "4q47y0x", + "asset_type": "회의실 PC", + "purchase_corp": "장헌산업", + "asset_code": "SVR-24066", + "purchase_date": "2023-03", + "asset_purpose": "-", + "current_dept": "회의실", + "previous_dept": "-", + "location": "기술개발센터 6번회의실", + "manager_primary": "-", + "manager_secondary": "-", + "ip_address": "172.16.10.116", + "remote_tool": "RDP / VNC", + "model_name": "PRIME B350M-K", + "os": "Windows 10 pro (22H2)", + "cpu": "Intel(R) Core(TM) i7-9700K CPU @ 3.60 Ghz", + "ram": "16", + "gpu": "NVIDIA GeForce GTX 1070", + "ssd_1": "500GB", + "ssd_2": "2TB", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_66", + "memo": "정상 운영 장비", + "asset_name": "회의실6 PC", + "mac_address": "00:1A:2B:3C:5E:42", + "hw_status": "운영중", + "service_type": "회의용/공용", + "is_inactive": false, + "cpu_usage": 7, + "ram_usage": 10, + "network_traffic": "0.3 GB" + }, + { + "id": "4iv7wr8", + "asset_type": "회의실 PC", + "purchase_corp": "PTC", + "asset_code": "SVR-24067", + "purchase_date": "2023-03", + "asset_purpose": "-", + "current_dept": "회의실", + "previous_dept": "-", + "location": "기술개발센터 7번회의실", + "manager_primary": "-", + "manager_secondary": "-", + "ip_address": "172.16.10.117", + "remote_tool": "RDP / VNC", + "model_name": "PRIME B365M-K", + "os": "Windows 10 Enterprise (22H2)", + "cpu": "Intel(R) Core(TM) i7-9700KF CPU @ 3.60 Ghz", + "ram": "32", + "gpu": "NVIDIA GeForce RTX 2060", + "ssd_1": "4TB", + "ssd_2": "2TB", + "hdd_1": "2TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_67", + "memo": "정상 운영 장비", + "asset_name": "회의실7 PC", + "mac_address": "00:1A:2B:3C:5E:43", + "hw_status": "운영중", + "service_type": "회의용/공용", + "is_inactive": false, + "cpu_usage": 7, + "ram_usage": 16, + "network_traffic": "1.4 GB" + }, + { + "id": "voxga62", + "asset_type": "회의실 PC", + "purchase_corp": "바론", + "asset_code": "SVR-24068", + "purchase_date": "2023-03", + "asset_purpose": "-", + "current_dept": "회의실", + "previous_dept": "-", + "location": "기술개발센터 사이니지룸", + "manager_primary": "-", + "manager_secondary": "-", + "ip_address": "172.16.10.118", + "remote_tool": "RDP / VNC", + "model_name": "TUF GAMING B550-PLUS", + "os": "Windows 10 pro (22H2)", + "cpu": "AMD Ryzen 9 5900X 12-core Processor", + "ram": "128", + "gpu": "NVIDIA GeForce RTX 3090 Ti", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "3500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_68", + "memo": "정상 운영 장비", + "asset_name": "사이니지룸 PC", + "mac_address": "00:1A:2B:3C:5E:44", + "hw_status": "운영중", + "service_type": "회의용/공용", + "is_inactive": false, + "cpu_usage": 9, + "ram_usage": 7, + "network_traffic": "0.2 GB" + } +]; + +export const dummyStorages: any[] = [ + { + "id": "dwrxncs", + "asset_type": "NAS", + "purchase_corp": "장헌산업", + "asset_code": "STO-24000", + "purchase_date": "2023-03", + "asset_purpose": "전세계 터레인, 전세계 배경지도, 전국 정사영상 자료 저장", + "current_dept": "GSIM", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "이호성", + "manager_secondary": "-", + "ip_address": "172.16.10.95", + "remote_tool": "RDP / VNC", + "model_name": "20TB", + "os": "AMD Ryzen R1600 (20TB)", + "cpu": "-", + "ram": "-", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_45", + "memo": "정상 운영 장비", + "asset_name": "GSIM NAS", + "mac_address": "00:1A:2B:3C:5E:2D", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 37, + "ram_usage": 45, + "network_traffic": "301 GB", + "volume": "10TB" + }, + { + "id": "wg2dii6", + "asset_type": "DAS", + "purchase_corp": "장헌산업", + "asset_code": "STO-24001", + "purchase_date": "2023-03", + "asset_purpose": "전세계 터레인, 전세계 배경지도, 전국 정사영상 자료 저장", + "current_dept": "GSIM", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "이호성", + "manager_secondary": "최준호", + "ip_address": "172.16.10.102", + "remote_tool": "RDP / VNC", + "model_name": "PROMISE Vess R3604fi", + "os": "Windows 10", + "cpu": "-", + "ram": "-", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "36TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_52", + "memo": "정상 운영 장비", + "asset_name": "GSIM DAS", + "mac_address": "00:1A:2B:3C:5E:34", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "cpu_usage": 43, + "ram_usage": 24, + "network_traffic": "114 GB", + "volume": "36TB" + }, + { + "id": "bh6cbt2", + "asset_type": "NAS", + "purchase_corp": "장헌산업", + "asset_code": "STO-24002", + "purchase_date": "2023-03", + "asset_purpose": "CLOUD R2 데이터 백업", + "current_dept": "GSIM", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "이호성", + "manager_secondary": "민홍", + "ip_address": "172.16.10.102", + "remote_tool": "RDP / VNC", + "model_name": "PROMISE Vess R3604fi", + "os": "Windows 10", + "cpu": "-", + "ram": "-", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "36TB", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "대상", + "purchase_amount": "1500000", + "purchase_vendor": "다나와", + "approval_document": "2023_공용PC_도입_52", + "memo": "정상 운영 장비", + "asset_name": "GSIM NAS", + "mac_address": "00:1A:2B:3C:5E:34", + "hw_status": "운영중", + "service_type": "외부서비스", + "is_inactive": false, + "cpu_usage": 86, + "ram_usage": 88, + "network_traffic": "1761 GB", + "volume": "36TB" + }, + { + "id": "1r4hiov", + "asset_type": "유형", + "purchase_corp": "장헌산업", + "asset_code": "STO-24003", + "purchase_date": "2022-08", + "asset_purpose": "상세", + "current_dept": "팀명", + "previous_dept": "-", + "location": "위치", + "manager_primary": "담당자(정)", + "manager_secondary": "담당자(부)", + "ip_address": "IP", + "remote_tool": "원격 접속도구", + "model_name": "메인보드/모델명", + "os": "OS(에디션) 버전", + "cpu": "CPU", + "ram": "RAM", + "gpu": "GPU", + "ssd_1": "SSD1", + "ssd_2": "SSD2", + "hdd_1": "HDD1", + "hdd_2": "HDD2", + "hdd_3": "HDD3", + "hdd_4": "HDD4", + "monitoring": "비대상", + "purchase_amount": "4500000", + "purchase_vendor": "시놀로지 총판", + "approval_document": "2022_스토리지_도입_3", + "memo": "스토리지 서버 공유 자산", + "asset_name": "자산명", + "mac_address": "00:1A:2B:3C:5F:03", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "volume": "HDD1", + "cpu_usage": 17, + "ram_usage": 60, + "network_traffic": "612 GB" + }, + { + "id": "rc5so7y", + "asset_type": "공용 NAS", + "purchase_corp": "PTC", + "asset_code": "STO-24004", + "purchase_date": "2022-08", + "asset_purpose": "그래픽스 개발팀의 데이터 백업 및 도커용 Tool 운영", + "current_dept": "그래픽스 개발", + "previous_dept": "-", + "location": "센터 서버실", + "manager_primary": "최준영", + "manager_secondary": "김민성", + "ip_address": "http://172.16.42.99/", + "remote_tool": "웹", + "model_name": "Synology 공용 NAS", + "os": "DSM DSM 7.3.2-86009 Update 3", + "cpu": "AMD Ryzen R1600", + "ram": "32GB", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "16TB", + "hdd_2": "16TB (미러링)", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "4500000", + "purchase_vendor": "시놀로지 총판", + "approval_document": "2022_스토리지_도입_4", + "memo": "스토리지 서버 공유 자산", + "asset_name": "데이터 스토리지", + "mac_address": "00:1A:2B:3C:5F:04", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "volume": "16TB", + "cpu_usage": 36, + "ram_usage": 62, + "network_traffic": "254 GB" + }, + { + "id": "sz9iqsa", + "asset_type": "NAS 서버", + "purchase_corp": "바론", + "asset_code": "STO-24005", + "purchase_date": "2022-08", + "asset_purpose": "디자인팀 실시간 프로젝트 작업 공유 및 최종 결과물 저장", + "current_dept": "디자인팀", + "previous_dept": "-", + "location": "한맥빌딩 B1", + "manager_primary": "최영환", + "manager_secondary": "권순호", + "ip_address": "172.16.10.100", + "remote_tool": "SMB", + "model_name": "X", + "os": "DSM 7.1", + "cpu": "X", + "ram": "X", + "gpu": "X", + "ssd_1": "X", + "ssd_2": "X", + "hdd_1": "10.9TB", + "hdd_2": "10.9TB", + "hdd_3": "10.9TB", + "hdd_4": "10.9TB", + "monitoring": "비대상", + "purchase_amount": "4500000", + "purchase_vendor": "시놀로지 총판", + "approval_document": "2022_스토리지_도입_5", + "memo": "스토리지 서버 공유 자산", + "asset_name": "디자인팀 서버(Design)", + "mac_address": "00:1A:2B:3C:5F:05", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "volume": "10.9TB", + "cpu_usage": 31, + "ram_usage": 51, + "network_traffic": "369 GB" + }, + { + "id": "ppqi5lq", + "asset_type": "NAS 서버", + "purchase_corp": "한라", + "asset_code": "STO-24006", + "purchase_date": "2022-08", + "asset_purpose": "영상셀 실시간 프로젝트 작업 공유 및 최종 결과물 저장", + "current_dept": "디자인팀", + "previous_dept": "-", + "location": "한맥빌딩 B1", + "manager_primary": "최영환", + "manager_secondary": "권순호", + "ip_address": "172.16.10.99", + "remote_tool": "SMB", + "model_name": "X", + "os": "DSM 7.2.2", + "cpu": "X", + "ram": "X", + "gpu": "X", + "ssd_1": "X", + "ssd_2": "X", + "hdd_1": "10.9TB", + "hdd_2": "10.9TB", + "hdd_3": "10.9TB", + "hdd_4": "10.9TB", + "monitoring": "비대상", + "purchase_amount": "4500000", + "purchase_vendor": "시놀로지 총판", + "approval_document": "2022_스토리지_도입_6", + "memo": "스토리지 서버 공유 자산", + "asset_name": "영상셀 서버", + "mac_address": "00:1A:2B:3C:5F:06", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "volume": "10.9TB", + "cpu_usage": 24, + "ram_usage": 54, + "network_traffic": "578 GB" + }, + { + "id": "aenhhii", + "asset_type": "NAS", + "purchase_corp": "한맥", + "asset_code": "STO-24007", + "purchase_date": "2022-08", + "asset_purpose": "인사정보NAS", + "current_dept": "디자인팀", + "previous_dept": "-", + "location": "한맥빌딩 6층(정성호 연구원)", + "manager_primary": "-", + "manager_secondary": "-", + "ip_address": "172.16.8.2", + "remote_tool": "Web GUI", + "model_name": "Synology 공용 NAS", + "os": "DS224+ 5.4TB", + "cpu": "-", + "ram": "-", + "gpu": "-", + "ssd_1": "-", + "ssd_2": "-", + "hdd_1": "-", + "hdd_2": "-", + "hdd_3": "-", + "hdd_4": "-", + "monitoring": "비대상", + "purchase_amount": "4500000", + "purchase_vendor": "시놀로지 총판", + "approval_document": "2022_스토리지_도입_7", + "memo": "스토리지 서버 공유 자산", + "asset_name": "인사정보 NAS", + "mac_address": "00:1A:2B:3C:5F:07", + "hw_status": "운영중", + "service_type": "내부서비스", + "is_inactive": false, + "volume": "24TB", + "cpu_usage": 36, + "ram_usage": 45, + "network_traffic": "63 GB" + } +]; + +export const dummyEquips: any[] = Array.from({ length: 12 }).map((_, i) => ({ + id: randomId(), + asset_type: '전산비품', + purchase_corp: getRandomCorp(), + asset_code: `EQ-24${String(i).padStart(3, '0')}`, + asset_name: `네트워크 스위치 ${i+1}`, + location: '전산실 랙 1', + manager_primary: '네트워크담당자', + ip_address: `192.168.10.${200 + i}`, + mac_address: `00:1A:2B:3C:51:${String(i).padStart(2, '0')}`, + os: 'Cisco IOS', + purchase_date: randomPurchaseYM(), + purchase_amount: '150000', + purchase_vendor: '다나와', + approval_document: `2024_비품구매_${i}`, + memo: '사내망 확장용', + asset_purpose: '네트워크 분배' +})); + +export const dummyMobiles: any[] = Array.from({ length: 15 }).map((_, i) => ({ + id: randomId(), + asset_type: '모바일기기', + purchase_corp: getRandomCorp(), + asset_code: `MOB-24${String(i).padStart(3, '0')}`, + asset_name: `테스트용 단말기 ${i+1}`, + location: '개발2팀', + manager_primary: '테스터', + os: i % 2 === 0 ? 'Android 14' : 'iOS 17', + purchase_date: randomPurchaseYM(), + purchase_amount: '900000', + purchase_vendor: '삼성전자/애플', + approval_document: `2024_모바일구매_${i}`, + memo: '앱 호환성 테스트 전용', + asset_purpose: 'QA 테스트', + ip_address: `192.168.1.${10 + i}`, + mac_address: `00:1A:2B:3C:50:${String(i).padStart(2, '0')}` +})); + +export const dummySubSw: any[] = Array.from({ length: 10 }).map((_, i) => ({ + id: randomId(), + sw_type: '구독SW', + sw_field: '업무용/협업', + purchase_corp: getRandomCorp(), + current_dept: '전사', + product_name: `Microsoft 365 E${3 + (i%2)}`, + purchase_date: randomDateStr(3), + start_date: randomDateStr(1), + expired_date: randomDateStr(0), + purchase_amount: '150000', + asset_count: 50 + i * 5, + email_account: `admin${i}@hmcorp.com`, + purchase_vendor: '소프트웨어인라이프', + memo: '연간 계약 갱신 필요' +})); + +export const dummyPermSw: any[] = Array.from({ length: 5 }).map((_, i) => ({ + id: randomId(), + sw_type: '영구SW', + sw_field: '디자인/설계', + purchase_corp: getRandomCorp(), + current_dept: '디자인팀', + product_name: `AutoCAD 202${i%4}`, + purchase_date: randomDateStr(5), + start_date: randomDateStr(5), + expired_date: '2099-12-31', + purchase_amount: '3000000', + asset_count: 2, + email_account: `design${i}@hmcorp.com`, + purchase_vendor: '오토데스크 파트너', + memo: 'USB 동글키 보관중' +})); + +export const dummyCloud: any[] = Array.from({ length: 5 }).map((_, i) => ({ + id: randomId(), + sw_type: '클라우드', + asset_mfr: i % 2 === 0 ? 'AWS' : 'GCP', + purchase_corp: getRandomCorp(), + current_dept: '개발팀', + product_name: `컴퓨팅 인스턴스 Type ${i}`, + email_account: `awsadmin${i}@hmcorp.com`, + purchase_method: '법인카드(신한 1234)', + purchase_amount: `${500000 + i * 100000}`, + asset_count: 1, + purchase_vendor: 'AWS/GCP', + memo: '환율 변동에 따라 매월 상이함' +})); + +export const dummyDomain: any[] = Array.from({ length: 5 }).map((_, i) => ({ + id: randomId(), + asset_type: '도메인', + purchase_corp: getRandomCorp(), + product_name: `사내 운영 서비스 ${i+1}`, + domain_address: `service${i+1}.hmcorp.com`, + start_date: randomDateStr(4), + expired_date: randomDateStr(0), + purchase_amount: '22000', + manager_primary: '인프라팀장', + manager_secondary: '인프라담당자', + memo: '가비아 자동갱신 설정 완료' +})); + +export const dummySwUsers: any[] = Array.from({ length: 15 }).map((_, i) => ({ + id: randomId(), + sw_id: dummySubSw[0]?.id || randomId(), + purchase_corp: getRandomCorp(), + current_dept: '경영지원팀', + user_current: `홍길동${i}`, + memo: `SW신청서_2400${i}` +})); + +export const dummyLogs: any[] = Array.from({ length: 10 }).map((_, i) => ({ + id: randomId(), + assetId: dummyPCs[0]?.id || randomId(), + date: randomDateStr(1), + details: i % 2 === 0 ? '메모리 추가 증설 (16GB -> 32GB)' : '디스플레이 파손 수리', + user: 'IT지원팀', + cost: i % 2 === 0 ? 80000 : 150000, +})); diff --git a/src/core/state.ts b/src/core/state.ts index a2a4daf..47c089a 100644 --- a/src/core/state.ts +++ b/src/core/state.ts @@ -1,5 +1,6 @@ import { HardwareAsset, SoftwareAsset, SWUser, HardwareLog } from './excelHandler'; import { API_BASE_URL } from './utils'; +import { dummyPCs, dummyServers, dummyStorages, dummyEquips, dummySubSw, dummyPermSw, dummyCloud, dummyDomain, dummySwUsers, dummyLogs } from './dummyData'; // --- State Definitions --- export interface MasterAssetData { @@ -43,7 +44,7 @@ export interface AppState { // 초기 상태 export const state: AppState = { activeCategory: 'hw', - activeSubTab: '서버', // 대시보드 제거됨에 따라 기본값 변경 + activeSubTab: '대시보드', activeCharts: [], masterData: { users: [], @@ -58,39 +59,27 @@ export const state: AppState = { }; /** - * 신규 14개 테이블 구조에 맞춘 데이터 로드 + * 신규 14개 테이블 구조에 맞춘 데이터 로드 (Dummy Data) */ export async function loadMasterDataFromDB() { try { - const endpoints = [ - { key: 'users', url: '/api/users' }, - { key: 'pc', url: '/api/pc' }, - { key: 'server', url: '/api/server' }, - { key: 'storage', url: '/api/storage' }, - { key: 'network', url: '/api/network' }, - { key: 'survey', url: '/api/survey' }, - { key: 'pcParts', url: '/api/pc-parts' }, - { key: 'equipment', url: '/api/equipment' }, - { key: 'officeSupplies', url: '/api/office-supplies' }, - { key: 'swInternal', url: '/api/sw/internal' }, - { key: 'swExternal', url: '/api/sw/external' }, - { key: 'cloud', url: '/api/cloud' }, - { key: 'domain', url: '/api/domain' }, - { key: 'cost', url: '/api/cost' }, - { key: 'vip', url: '/api/vip' }, - { key: 'swUsers', url: '/api/asset/software/assignment' }, - { key: 'logs', url: '/api/asset/history' } - ]; - - const results = await Promise.all(endpoints.map(e => fetch(API_BASE_URL + e.url))); - - for (let i = 0; i < endpoints.length; i++) { - if (results[i].ok) { - const data = await results[i].json(); - const key = endpoints[i].key; - (state.masterData as any)[key] = Array.isArray(data) ? data : []; - } - } + state.masterData.pc = dummyPCs || []; + state.masterData.server = dummyServers || []; + state.masterData.storage = dummyStorages || []; + state.masterData.network = dummyEquips || []; // dummy fallback + state.masterData.survey = []; + state.masterData.pcParts = []; + state.masterData.equipment = dummyEquips || []; + state.masterData.officeSupplies = []; + state.masterData.swInternal = dummyPermSw || []; + state.masterData.swExternal = dummySubSw || []; + state.masterData.cloud = dummyCloud || []; + state.masterData.domain = dummyDomain || []; + state.masterData.cost = []; + state.masterData.vip = []; + state.masterData.swUsers = dummySwUsers || []; + state.masterData.logs = dummyLogs || []; + state.masterData.users = []; // Mapping for backward compatibility state.masterData.equip = state.masterData.equipment; @@ -115,10 +104,10 @@ export async function loadMasterDataFromDB() { ...state.masterData.cloud ]; - console.log('✅ All data (including users) loaded and unified'); + console.log('✅ All dummy data loaded and unified'); return true; } catch (err) { - console.warn('⚠️ 서버 연결 실패:', err); + console.warn('⚠️ Dummy 로드 실패:', err); } return false; } @@ -128,45 +117,18 @@ export function updateState(newState: Partial) { } /** - * 자산 저장 (Generic API) + * 자산 저장 (Dummy API) */ export async function saveAsset(category: string, asset: any) { try { - const endpointMap: Record = { - 'users': '/api/users/batch', - 'pc': '/api/pc/batch', - 'server': '/api/server/batch', - 'storage': '/api/storage/batch', - 'network': '/api/network/batch', - 'survey': '/api/survey/batch', - 'pcParts': '/api/pc-parts/batch', - 'equipment': '/api/equipment/batch', - 'officeSupplies': '/api/office-supplies/batch', - 'swInternal': '/api/sw/internal/batch', - 'swExternal': '/api/sw/external/batch', - 'cloud': '/api/cloud/batch', - 'domain': '/api/domain/batch', - 'cost': '/api/cost/batch', - 'vip': '/api/vip/batch' - }; - - const url = `${API_BASE_URL}${endpointMap[category]}`; const currentList = [...(state.masterData as any)[category]]; const idx = currentList.findIndex(a => a.id === asset.id); if (idx > -1) currentList[idx] = asset; else currentList.push(asset); - const response = await fetch(url, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(currentList) - }); - - if (response.ok) { - await loadMasterDataFromDB(); // 전역 상태 갱신 - return true; - } + (state.masterData as any)[category] = currentList; + return true; } catch (err) { console.error('자산 저장 실패:', err); } @@ -174,42 +136,14 @@ export async function saveAsset(category: string, asset: any) { } /** - * 자산 삭제 (Generic API - Batch 방식 활용) + * 자산 삭제 (Dummy API) */ export async function deleteAsset(category: string, assetId: string) { try { - const endpointMap: Record = { - 'users': '/api/users/batch', - 'pc': '/api/pc/batch', - 'server': '/api/server/batch', - 'storage': '/api/storage/batch', - 'network': '/api/network/batch', - 'survey': '/api/survey/batch', - 'pcParts': '/api/pc-parts/batch', - 'equipment': '/api/equipment/batch', - 'officeSupplies': '/api/office-supplies/batch', - 'swInternal': '/api/sw/internal/batch', - 'swExternal': '/api/sw/external/batch', - 'cloud': '/api/cloud/batch', - 'domain': '/api/domain/batch', - 'cost': '/api/cost/batch', - 'vip': '/api/vip/batch' - }; - - const url = `${API_BASE_URL}${endpointMap[category]}`; const currentList = [...(state.masterData as any)[category]]; const filteredList = currentList.filter(a => a.id !== assetId); - - const response = await fetch(url, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(filteredList) - }); - - if (response.ok) { - await loadMasterDataFromDB(); // 전역 상태 갱신 - return true; - } + (state.masterData as any)[category] = filteredList; + return true; } catch (err) { console.error('자산 삭제 실패:', err); } diff --git a/src/main.ts b/src/main.ts index 3b1a92b..edf3ced 100644 --- a/src/main.ts +++ b/src/main.ts @@ -14,16 +14,7 @@ import { createIcons, Plus, X, LayoutDashboard, Monitor, Server, Database, Lapto // --- DB 저장을 위한 세분화된 헬퍼 함수들 --- async function apiBatchSave(url: string, data: any[], label: string) { try { - const response = await fetch(url, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(data) - }); - if (!response.ok) { - const errorData = await response.json().catch(() => ({})); - throw new Error(`${label} DB 저장 실패: ${errorData.error || response.statusText}`); - } - console.log(`✅ ${label} DB 저장 완료`); + console.log(`✅ ${label} DB 저장 완료 (Dummy Mode: ${data?.length || 0} items)`); } catch (err) { console.error(`❌ ${label} DB 저장 오류:`, err); alert(`${label} 저장 중 오류가 발생했습니다: ${(err as any).message}`); diff --git a/src/styles/common.css b/src/styles/common.css index b82aeb6..82e901a 100644 --- a/src/styles/common.css +++ b/src/styles/common.css @@ -91,7 +91,7 @@ body { color: var(--text-main); background-color: var(--bg-color); line-height: 1.5; - font-size: 14px; + font-size: 19px; overflow: hidden; } @@ -287,7 +287,7 @@ body { /* --- Footer --- */ .main-footer { - height: 40px; + height: 28px; background-color: var(--white); border-top: 1px solid var(--border-color); display: flex; @@ -324,7 +324,7 @@ body { .badge { padding: 2px 6px; border-radius: 4px; - font-size: 11px; + font-size: 16px; font-weight: 700; white-space: nowrap; } @@ -341,7 +341,7 @@ body { .text-tag { color: var(--text-muted); - font-size: 11px; + font-size: 16px; padding: 1px 5px; border: 1px solid var(--border-color); border-radius: 3px; diff --git a/src/styles/dashboard.css b/src/styles/dashboard.css index 44ddd6d..ee5b84f 100644 --- a/src/styles/dashboard.css +++ b/src/styles/dashboard.css @@ -1,39 +1,36 @@ -/* --- Dashboard View Specific Styles --- */ - +/* --- Premium Executive Dashboard View Specific Styles --- */ .dashboard-section-title { padding: 0 0 1rem 0; - font-size: 1.1rem; - font-weight: 700; + font-size: 1.55rem; + font-weight: 800; color: var(--text-main); + letter-spacing: -0.02em; } .dashboard-grid { display: grid; - grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 1.5rem; margin-bottom: 2rem; } -.stat-card { - background-color: var(--white); +/* Premium Glassmorphism Card Style */ +.dashboard-card, .stat-card { + background: rgba(255, 255, 255, 0.7); + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + border: 1px solid rgba(255, 255, 255, 0.5); + box-shadow: 0 8px 32px rgba(31, 38, 135, 0.07); + border-radius: 12px; padding: 1.5rem; - border: 1px solid var(--border-color); - border-radius: 8px; display: flex; flex-direction: column; + transition: transform 0.2s ease, box-shadow 0.2s ease; } -.stat-card .title { - font-size: 0.875rem; - color: var(--text-muted); - font-weight: 600; -} - -.stat-card .value { - font-size: 2.2rem; - font-weight: 800; - color: var(--primary-color); - margin-top: 0.5rem; +.dashboard-card:hover, .stat-card:hover { + transform: translateY(-5px); + box-shadow: 0 12px 40px rgba(31, 38, 135, 0.12); } .dashboard-layout-2col { @@ -42,14 +39,14 @@ gap: 1.5rem; } +.dashboard-layout-3col { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1.5rem; +} + .dashboard-card { - background-color: var(--white); - border: 1px solid var(--border-color); - border-radius: 8px; - padding: 1.5rem; - display: flex; - flex-direction: column; - min-height: 360px; + min-height: 380px; } .dashboard-card canvas { @@ -57,3 +54,142 @@ width: 100% !important; max-height: 280px; } + +/* Premium KPI Value Styling */ +.stat-value { + font-size: 2.2rem; + font-weight: 800; + background: linear-gradient(135deg, #1E5149 0%, #3B82F6 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + margin-top: 0.5rem; + display: flex; + align-items: center; + gap: 0.5rem; +} + +.stat-value-danger { + background: linear-gradient(135deg, #E11D48 0%, #F59E0B 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +.stat-label { + font-size: 1.15rem; + color: var(--text-muted); + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.05em; +} + +.stat-icon { + width: 48px; + height: 48px; + border-radius: 12px; + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 1rem; +} + +.icon-blue { background: rgba(59, 130, 246, 0.1); color: #3B82F6; } +.icon-green { background: rgba(30, 81, 73, 0.1); color: #1E5149; } +.icon-red { background: rgba(225, 29, 72, 0.1); color: #E11D48; } +.icon-yellow { background: rgba(245, 158, 11, 0.1); color: #F59E0B; } + +.table-premium { + background: white; + border-radius: 12px; + box-shadow: 0 4px 15px rgba(0,0,0,0.05); + overflow: hidden; +} + +.table-premium table { + width: 100%; + border-collapse: collapse; +} + +.table-premium th { + background: #F8FAFC; + color: #475569; + font-weight: 700; + padding: 1rem; + text-transform: uppercase; + font-size: 0.75rem; + letter-spacing: 0.05em; +} + +.table-premium td { + padding: 1rem; + border-bottom: 1px solid #E2E8F0; + color: #1E293B; + font-size: 13px; +} + +.table-premium tr:hover td { + background: #F1F5F9; +} + +/* --- Slider/Carousel Specific Styles --- */ +.dashboard-header-wrapper { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 2rem; +} + +.slider-controls { + display: flex; + align-items: center; + gap: 1rem; +} + +.slider-nav-btn { + background: white; + border: 1px solid var(--border-color); + box-shadow: 0 2px 8px rgba(0,0,0,0.05); + border-radius: 50%; + width: 36px; + height: 36px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + color: var(--text-main); + transition: all 0.2s; +} + +.slider-nav-btn:hover { + background: var(--primary-color); + color: white; + border-color: var(--primary-color); +} + +.slider-nav-btn:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.slider-indicator { + font-weight: 700; + color: var(--text-muted); + font-size: 1.2rem; +} + +.dashboard-slider-viewport { + width: 100%; + overflow: hidden; + padding: 0.5rem 0; +} + +.dashboard-slider-track { + display: flex; + transition: transform 0.5s cubic-bezier(0.25, 0.8, 0.25, 1); + width: 200%; /* For 2 pages */ +} + +.dashboard-slide { + width: 50%; /* 100% / 2 pages */ + flex-shrink: 0; + padding: 0 2px; /* Slight padding to avoid cutting off box-shadows */ +} diff --git a/src/styles/guide.css b/src/styles/guide.css index 73b0e13..5c64ce6 100644 --- a/src/styles/guide.css +++ b/src/styles/guide.css @@ -19,7 +19,7 @@ .guide-tab { padding: 0.75rem 1.25rem; - font-size: 13px; + font-size: 18px; font-weight: 600; color: var(--text-muted); cursor: pointer; @@ -72,7 +72,7 @@ } .guide-section h3 { - font-size: 1rem; + font-size: 1.3rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--primary-color); color: var(--primary-color); @@ -83,7 +83,7 @@ } .guide-text { - font-size: 13px; + font-size: 18px; color: var(--text-main); line-height: 1.7; margin: 0; @@ -127,7 +127,7 @@ border-radius: 50%; background-color: var(--primary-color); color: white; - font-size: 12px; + font-size: 17px; font-weight: 700; display: flex; align-items: center; @@ -138,12 +138,12 @@ .flow-step .step-label { font-weight: 700; color: var(--text-main); - font-size: 13px; + font-size: 18px; display: block; } .flow-step .step-desc { - font-size: 12px; + font-size: 17px; color: var(--text-muted); line-height: 1.5; margin-top: 4px; @@ -159,7 +159,7 @@ .guide-info-table { width: 100%; border-collapse: collapse; - font-size: 13px; + font-size: 18px; } .guide-info-table th { @@ -182,7 +182,7 @@ background: var(--primary-light); border-left: 4px solid var(--primary-color); padding: 1rem; - font-size: 13px; + font-size: 18px; color: var(--primary-color); line-height: 1.6; } diff --git a/src/styles/modal.css b/src/styles/modal.css index 6cdf7bb..f176673 100644 --- a/src/styles/modal.css +++ b/src/styles/modal.css @@ -41,7 +41,7 @@ } .modal-header h2 { - font-size: 1.125rem; + font-size: 1.4rem; font-weight: 600; letter-spacing: -0.02em; } @@ -94,7 +94,7 @@ /* Section Title for Grouping */ .form-section-title { grid-column: span 2; - font-size: 0.875rem; + font-size: 1.15rem; font-weight: 700; color: var(--primary-color); padding: 1.5rem 0 0.5rem 0; /* 패딩 조정 */ @@ -169,7 +169,7 @@ } .form-group label { - font-size: 0.8125rem; + font-size: 1.1rem; font-weight: 600; color: var(--text-muted); } @@ -181,7 +181,7 @@ border: 1px solid var(--border-color); border-radius: 4px; font-family: inherit; - font-size: 0.875rem; + font-size: 1.15rem; outline: none; transition: all 0.2s; background-color: var(--white); @@ -238,7 +238,7 @@ padding: 0.75rem 1rem; border-radius: 8px; cursor: pointer; - font-size: 13px; + font-size: 18px; font-weight: 500; display: flex; justify-content: space-between; @@ -295,7 +295,7 @@ .preview-table th { padding: 0.75rem 1rem; text-align: left; - font-size: 12px; + font-size: 17px; font-weight: 600; border-bottom: 1px solid var(--border-color); color: var(--text-muted); @@ -303,7 +303,7 @@ .preview-table td { padding: 0.75rem 1rem; - font-size: 13px; + font-size: 18px; border-bottom: 1px solid #f1f5f9; color: var(--text-main); } @@ -338,7 +338,7 @@ } .history-header h3 { - font-size: 0.9375rem; + font-size: 1.25rem; font-weight: 600; display: flex; align-items: center; @@ -406,21 +406,21 @@ } .history-date { - font-size: 0.75rem; + font-size: 1.05rem; color: var(--text-muted); font-weight: 500; margin-bottom: 0.25rem; } .history-user { - font-size: 0.75rem; + font-size: 1.05rem; font-weight: 600; color: var(--primary-color); margin-bottom: 0.25rem; } .history-details { - font-size: 0.8125rem; + font-size: 1.1rem; color: var(--text-main); line-height: 1.4; white-space: pre-wrap; @@ -431,7 +431,7 @@ padding: 2rem 0; text-align: center; color: var(--text-muted); - font-size: 0.8125rem; + font-size: 1.1rem; } /* Dashboard Detail Modal Table Fixed Header */ @@ -464,7 +464,7 @@ border-bottom: 2px solid var(--border-color); box-shadow: none; padding: 0.75rem 1rem; - font-size: 0.8125rem; + font-size: 1.1rem; font-weight: 600; color: var(--text-main); text-align: left; @@ -474,7 +474,7 @@ #dashboard-detail-modal tbody td { padding: 0.75rem 1rem; border-bottom: 1px solid var(--border-color); - font-size: 0.8125rem; + font-size: 1.1rem; color: var(--text-main); white-space: nowrap; } @@ -492,7 +492,7 @@ display: inline-block; padding: 0.125rem 0.5rem; border-radius: 4px; - font-size: 0.75rem; + font-size: 1.05rem; font-weight: 500; line-height: 1.5; } diff --git a/src/styles/table.css b/src/styles/table.css index ede3eac..0de7ee6 100644 --- a/src/styles/table.css +++ b/src/styles/table.css @@ -10,7 +10,7 @@ } .page-title { - font-size: 16px; + font-size: 21px; font-weight: 700; color: var(--primary-color); display: flex; @@ -30,7 +30,7 @@ } .page-description { - font-size: 12px; + font-size: 17px; color: var(--text-muted); margin: 0; line-height: 1.4; @@ -72,7 +72,7 @@ } .search-item label { - font-size: 11px; + font-size: 16px; font-weight: 700; color: var(--text-muted); } @@ -83,7 +83,7 @@ padding: 0 1rem; border: 1px solid var(--border-color); border-radius: 4px; - font-size: 14px; + font-size: 19px; outline: none; background-color: var(--white); } @@ -141,7 +141,7 @@ thead { th { background-color: #FAFAFA !important; - font-size: 13px; + font-size: 18px; font-weight: 600; color: var(--text-muted); position: sticky; @@ -152,7 +152,7 @@ th { } td { - font-size: 13px; + font-size: 18px; color: var(--text-main); font-weight: 400; } diff --git a/src/views/Dashboard/HwDashboard.ts b/src/views/Dashboard/HwDashboard.ts index fa1a49f..83c6956 100644 --- a/src/views/Dashboard/HwDashboard.ts +++ b/src/views/Dashboard/HwDashboard.ts @@ -9,9 +9,14 @@ export function renderHwDashboard(container: HTMLElement) { const allHw = state.masterData.hw || []; // 1. 데이터 가공 + const pcIds = new Set((state.masterData.pc || []).map((p: any) => p.id)); + const serverIds = new Set((state.masterData.server || []).map((s: any) => s.id)); + let totalAge = 0; let countWithDate = 0; let over5YearsCount = 0; + let agingPcCount = 0; + let agingServerCount = 0; let latestAsset: any | null = null; let latestYear = 0; @@ -30,6 +35,11 @@ export function renderHwDashboard(container: HTMLElement) { if (age >= 5) { over5YearsCount++; ageGroups.critical++; + if (pcIds.has(a.id)) { + agingPcCount++; + } else if (serverIds.has(a.id)) { + agingServerCount++; + } } else if (age >= 3) { ageGroups.warning++; } else { @@ -74,11 +84,24 @@ export function renderHwDashboard(container: HTMLElement) {
- 5년 이상 노후 자산 비율 -
총 ${over5YearsCount}대 해당
-
${over5Rate}%
-
-
+ 교체 대상 장비 (5년 노후) +
총 ${over5YearsCount}대 해당
+ +
+
+ 개인/공용 PC + ${agingPcCount}대 +
+
+
+ 서버 장비 + ${agingServerCount}대 +
+
+ +
+
+
From 34d99dc4b66c4a6d74bb111f6ddff0bc4bbd8d20 Mon Sep 17 00:00:00 2001 From: JooWangi Date: Tue, 2 Jun 2026 10:29:50 +0900 Subject: [PATCH 02/16] =?UTF-8?q?feat:=20=EC=84=9C=EB=B2=84=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=20=EB=AA=A8=EB=8B=AC=20=EB=A6=AC=EC=86=8C=EC=8A=A4=20?= =?UTF-8?q?=EC=A4=91=EC=8B=AC=20=EA=B0=9C=ED=8E=B8=20=EB=B0=8F=20=EC=82=AC?= =?UTF-8?q?=EC=96=91=20=EC=BB=AC=EB=9F=BC=20=EC=A0=9C=EC=99=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/Dashboard/HwDashboard.ts | 1156 ++++++++++++++++++++++++---- 1 file changed, 991 insertions(+), 165 deletions(-) diff --git a/src/views/Dashboard/HwDashboard.ts b/src/views/Dashboard/HwDashboard.ts index 83c6956..069b612 100644 --- a/src/views/Dashboard/HwDashboard.ts +++ b/src/views/Dashboard/HwDashboard.ts @@ -2,170 +2,840 @@ import { state } from '../../core/state'; import { openHwModal } from '../../components/Modal/HWModal'; import { calculateAssetAge, normalizeDate } from '../../core/utils'; import { ASSET_SCHEMA } from '../../core/schema'; +import { createIcons, DollarSign, Monitor, AlertTriangle, Activity, ChevronLeft, ChevronRight, UserCheck, TrendingUp, TrendingDown, Building2, X, FileText } from 'lucide'; declare var Chart: any; +declare global { + interface Window { lucide: any; } +} +let jobChartInstance: any = null; + +// ─── 네트워크 트래픽 문자열을 숫자(GB)로 파싱하는 헬퍼 ─── +function parseTrafficToGb(trafficStr: string): number { + if (!trafficStr || trafficStr === '-' || trafficStr.includes('N/A')) return 0; + const num = parseFloat(trafficStr.replace(/[^0-9.]/g, '')); + if (isNaN(num)) return 0; + return num; +} + +// ─── 100점 만점 감점형 성능 점수 계산 (CPU + RAM + GPU + 연식) ─── +function calculatePcScoreDeductive(cpu: string, ram: string, gpu: string, purchaseDate: string): number { + let score = 100; + if (!cpu) cpu = ''; + if (!ram) ram = ''; + if (!gpu) gpu = ''; + + const cpuUpper = cpu.toUpperCase(); + const ramUpper = ram.toUpperCase(); + const gpuUpper = gpu.toUpperCase(); + + // 1. CPU 등급 감점 (최대 -30점) + let cpuDeduction = 0; + if (cpuUpper.includes('I9') || cpuUpper.includes('RYZEN 9') || cpuUpper.includes('RYZEN9')) { + cpuDeduction = 0; + } else if (cpuUpper.includes('I7') || cpuUpper.includes('RYZEN 7') || cpuUpper.includes('RYZEN7')) { + cpuDeduction = 5; + } else if (cpuUpper.includes('I5') || cpuUpper.includes('RYZEN 5') || cpuUpper.includes('RYZEN5')) { + cpuDeduction = 15; + } else if (cpuUpper.includes('I3') || cpuUpper.includes('RYZEN 3') || cpuUpper.includes('RYZEN3')) { + cpuDeduction = 25; + } else { + cpuDeduction = 30; + } + score -= cpuDeduction; + + // 2. CPU 세대 노후 감점 (최대 -15점) + let genDeduction = 0; + const intelMatch = cpuUpper.match(/I\d-?(\d+)/); + let gen = 0; + if (intelMatch && intelMatch[1]) { + const numStr = intelMatch[1]; + if (numStr.length === 5) gen = parseInt(numStr.substring(0, 2), 10); + else if (numStr.length === 4) gen = parseInt(numStr.substring(0, 1), 10); + } + + const amdMatch = cpuUpper.match(/RYZEN\s?\d\s?-?(\d+)/); + let amdGen = 0; + if (amdMatch && amdMatch[1] && !intelMatch) { + const numStr = amdMatch[1]; + if (numStr.length === 4) amdGen = parseInt(numStr.substring(0, 1), 10); + } + + if (intelMatch) { + if (gen >= 12) genDeduction = 0; + else if (gen >= 10) genDeduction = 5; + else if (gen >= 8) genDeduction = 10; + else genDeduction = 15; + } else if (amdMatch) { + if (amdGen >= 5) genDeduction = 0; + else if (amdGen >= 3) genDeduction = 5; + else genDeduction = 10; + } else { + genDeduction = 15; + } + score -= genDeduction; + + // 3. RAM 용량 감점 (최대 -25점) + const ramMatch = ramUpper.match(/(\d+)\s*GB/); + let ramDeduction = 25; + if (ramMatch && ramMatch[1]) { + const ramVal = parseInt(ramMatch[1], 10); + if (ramVal >= 32) ramDeduction = 0; + else if (ramVal >= 16) ramDeduction = 10; + else if (ramVal >= 8) ramDeduction = 20; + else ramDeduction = 25; + } + score -= ramDeduction; + + // 4. GPU 성능 감점 (최대 -25점) + let gpuDeduction = 25; + if (!gpuUpper || gpuUpper === '-' || gpuUpper.trim() === '') { + gpuDeduction = 25; + } else if ( + gpuUpper.includes('RTX 4090') || gpuUpper.includes('RTX 4080') || gpuUpper.includes('RTX 4070') || + gpuUpper.includes('RTX A5000') || gpuUpper.includes('RTX A6000') || gpuUpper.includes('RTX A4000') + ) { + gpuDeduction = 0; + } else if ( + gpuUpper.includes('RTX 3070') || gpuUpper.includes('RTX 3060') || gpuUpper.includes('RTX 2060') || + gpuUpper.includes('RTX A2000') || gpuUpper.includes('RTX A3000') || gpuUpper.includes('QUADRO') + ) { + gpuDeduction = 5; + } else if ( + gpuUpper.includes('GTX 1660') || gpuUpper.includes('GTX 1080') || gpuUpper.includes('GTX 1070') || + gpuUpper.includes('GTX 1060') || gpuUpper.includes('RX 6700') || gpuUpper.includes('RX 6600') + ) { + gpuDeduction = 15; + } else { + gpuDeduction = 25; + } + score -= gpuDeduction; + + // 5. 연식(노후도) 감점 (최대 -15점) + let age = 0; + if (purchaseDate && purchaseDate !== '-') { + let normalized = purchaseDate.replace(/\./g, '-').trim(); + if (/^\d{6}$/.test(normalized)) { + normalized = `${normalized.substring(0, 4)}-${normalized.substring(4, 6)}`; + } + const purchase = new Date(normalized); + if (!isNaN(purchase.getTime())) { + // 2026년 5월 31일 기준 경과연수 계산 + const mockToday = new Date('2026-05-31'); + const diffMs = mockToday.getTime() - purchase.getTime(); + age = diffMs / (1000 * 60 * 60 * 24 * 365.25); + age = Math.max(0, parseFloat(age.toFixed(1))); + } + } + + let ageDeduction = 0; + if (age < 1) ageDeduction = 0; + else if (age < 2) ageDeduction = 3; + else if (age < 3) ageDeduction = 6; + else if (age < 4) ageDeduction = 9; + else if (age < 5) ageDeduction = 12; + else ageDeduction = 15; + + score -= ageDeduction; + + return Math.max(10, score); +} + +// ─── 권장 PC사양 점수 로컬스토리지 처리 ─── +function getRecommendedScores(jobs: string[]): Record { + const stored = localStorage.getItem('recommended_pc_scores'); + let scores: Record = {}; + if (stored) { + try { + scores = JSON.parse(stored); + } catch (e) { + console.error(e); + } + } + const defaultScores: Record = { + 'AI 개발자': 95, + '3D 개발자': 90, + '프로그램 개발자': 80, + '웹 개발자': 75, + '3D 디자이너': 90, + '편집 디자이너': 75, + 'UXUI 디자이너': 70, + 'BIM모델러': 75, + '엔지니어': 60, + '기획자': 50, + '감리원': 40, + '관리직': 40, + '미분류': 40 + }; + jobs.forEach(job => { + if (scores[job] === undefined) { + scores[job] = defaultScores[job] || 40; + } + }); + return scores; +} + +function saveRecommendedScores(scores: Record) { + localStorage.setItem('recommended_pc_scores', JSON.stringify(scores)); +} + +function showSpecMismatchModal(criticalPcList: any[], jobScores: any, allHw: any[], filterStatus?: '사양 부족' | '오버스펙') { + // 기존 모달 제거 + const existing = document.getElementById('spec-mismatch-modal'); + if (existing) existing.remove(); + + const filteredList = filterStatus ? criticalPcList.filter(p => p['_spec_status'] === filterStatus) : criticalPcList; + const titleText = filterStatus ? `PC ${filterStatus} 대상자 목록` : 'PC 사양 부적합 대상자 목록'; + + let rows = ''; + if (filteredList.length === 0) { + rows = '부적합 대상자가 없습니다.'; + } else { + for (const pc of filteredList) { + const job = pc[ASSET_SCHEMA.USER_POSITION.key] || '미분류'; + const score = pc['_pc_score']; + const avg = Math.round(jobScores[job].avg); + const status = pc['_spec_status']; + const color = status === '사양 부족' ? '#E11D48' : '#F59E0B'; + const bg = status === '사양 부족' ? '#FFE4E6' : '#FEF3C7'; + const userName = pc[ASSET_SCHEMA.CURRENT_USER.key] || '-'; + const assetCode = pc[ASSET_SCHEMA.ASSET_CODE.key] || '-'; + const corp = pc[ASSET_SCHEMA.PURCHASE_CORP.key] || '-'; + const cpuStr = pc[ASSET_SCHEMA.CPU.key] || '-'; + const ramStr = pc[ASSET_SCHEMA.RAM.key] || '-'; + const gpuStr = pc[ASSET_SCHEMA.GPU.key] || '-'; + rows += ''; + rows += '' + userName + ''; + rows += '' + job + ''; + rows += '' + corp + ''; + rows += '' + assetCode + ''; + rows += '' + cpuStr + ' / ' + ramStr + ' / ' + gpuStr + ''; + rows += '' + score + ''; + rows += '' + avg + ''; + rows += '' + status + ''; + rows += ''; + } + } + + const backdrop = document.createElement('div'); + backdrop.id = 'spec-mismatch-modal'; + backdrop.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.5);z-index:9999;display:flex;align-items:center;justify-content:center;animation:fadeIn 0.2s ease;'; + + const modal = document.createElement('div'); + modal.style.cssText = 'background:white;border-radius:16px;width:95%;max-width:1280px;max-height:80vh;overflow:hidden;box-shadow:0 25px 50px rgba(0,0,0,0.25);display:flex;flex-direction:column;'; + + modal.innerHTML = + '
' + + '

' + + ' ' + titleText + + '

' + + '' + + '
' + + '
' + + '
' + + '
' + + '🔻' + + '
사양 부족
' + criticalPcList.filter(p => p['_spec_status'] === '사양 부족').length + '명
' + + '
' + + '
' + + '🔺' + + '
오버스펙
' + criticalPcList.filter(p => p['_spec_status'] === '오버스펙').length + '명
' + + '
' + + '
' + + '
' + + '' + + '' + + '' + + '' + + '' + rows + '' + + '
사용자직무가족사자산번호사양(CPU/RAM/GPU)점수직무평균상태
' + + '
' + + '
'; + + backdrop.appendChild(modal); + document.body.appendChild(backdrop); + + // 아이콘 초기화 + setTimeout(() => { + if (window.lucide) window.lucide.createIcons(); + else createIcons({ icons: { UserCheck, X } }); + }, 50); + + // 닫기 이벤트 + const closeBtn = document.getElementById('close-spec-modal'); + if (closeBtn) closeBtn.addEventListener('click', () => backdrop.remove()); + backdrop.addEventListener('click', (e) => { if (e.target === backdrop) backdrop.remove(); }); + + // 행 클릭 → 자산 상세 모달 + modal.querySelectorAll('.clickable-row').forEach(row => { + row.addEventListener('click', () => { + const id = row.getAttribute('data-id'); + const asset = allHw.find((h: any) => h.id === id); + if (asset) openHwModal(asset, 'view'); + }); + }); +} + +function showServerStatusModal(serverList: any[], allHw: any[], titleText: string) { + // 기존 모달 제거 + const existing = document.getElementById('server-status-modal'); + if (existing) existing.remove(); + + let rows = ''; + if (serverList.length === 0) { + rows = '해당하는 장비가 없습니다.'; + } else { + serverList.forEach((a, idx) => { + const score = a['_server_score'] || 0; + const status = a['_server_status']; + const service = a.service_type || '내부서비스'; + + let badgeColor = '#EF4444'; + let badgeBg = '#FEE2E2'; + if (status === '자원 과잉') { badgeColor = '#D97706'; badgeBg = '#FEF3C7'; } + else if (status === '방치 의심') { badgeColor = '#475569'; badgeBg = '#F1F5F9'; } + else if (status === '적정') { badgeColor = '#10B981'; badgeBg = '#D1FAE5'; } + else if (status === '자원 부족') { badgeColor = '#EF4444'; badgeBg = '#FEE2E2'; } + + // 사용 리소스 및 트래픽 렌더링 준비 + let resourceHtml = '-'; + let trafficHtml = '-'; + + const isInactive = a.is_inactive === true || String(a.is_inactive) === 'true'; + if (!isInactive) { + const cpuUsage = a.cpu_usage !== undefined ? (typeof a.cpu_usage === 'number' ? a.cpu_usage : parseFloat(String(a.cpu_usage || '0'))) : 0; + const ramUsage = a.ram_usage !== undefined ? (typeof a.ram_usage === 'number' ? a.ram_usage : parseFloat(String(a.ram_usage || '0'))) : 0; + const hasWarning = cpuUsage > 75 || ramUsage > 80; + + if (hasWarning) { + resourceHtml = `CPU ${cpuUsage}% / RAM ${ramUsage}%`; + } else { + resourceHtml = `CPU ${cpuUsage}% / RAM ${ramUsage}%`; + } + trafficHtml = a.network_traffic || '-'; + } else { + resourceHtml = `-`; + trafficHtml = `0 GB (N/A)`; + } + + rows += ``; + rows += `${idx + 1}`; + rows += `${a.asset_name || a[ASSET_SCHEMA.ASSET_CODE.key]}`; + rows += `${service}`; + rows += `${a.current_dept || '-'}`; + rows += `${a.location || '-'}`; + rows += `${resourceHtml}`; + rows += `${trafficHtml}`; + rows += `${score}점`; + rows += `${status}`; + rows += ''; + }); + } + + const backdrop = document.createElement('div'); + backdrop.id = 'server-status-modal'; + backdrop.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.5);z-index:9999;display:flex;align-items:center;justify-content:center;animation:fadeIn 0.2s ease;'; + + const modal = document.createElement('div'); + modal.style.cssText = 'background:white;border-radius:16px;width:95%;max-width:1280px;max-height:80vh;overflow:hidden;box-shadow:0 25px 50px rgba(0,0,0,0.25);display:flex;flex-direction:column;'; + + modal.innerHTML = + '
' + + '

' + + ' ' + titleText + + '

' + + '' + + '
' + + '
' + + '
' + + '' + + '' + + '' + + '' + + '' + rows + '' + + '
순위장비명서비스 유형소속 부서설치 위치월 평균 리소스 사용량 (CPU/RAM)월 데이터 전송량점수상태
' + + '
' + + '
'; + + backdrop.appendChild(modal); + document.body.appendChild(backdrop); + + // 아이콘 초기화 + setTimeout(() => { + if (window.lucide) window.lucide.createIcons(); + else createIcons({ icons: { Monitor, X } }); + }, 50); + + // 닫기 이벤트 + const closeBtn = document.getElementById('close-server-modal'); + if (closeBtn) closeBtn.addEventListener('click', () => backdrop.remove()); + backdrop.addEventListener('click', (e) => { if (e.target === backdrop) backdrop.remove(); }); + + // 행 클릭 → 자산 상세 모달 + modal.querySelectorAll('.clickable-row').forEach(row => { + row.addEventListener('click', () => { + const id = row.getAttribute('data-id'); + const asset = allHw.find((h: any) => h.id === id); + if (asset) { + backdrop.remove(); + openHwModal(asset, 'view'); + } + }); + }); +} + +// ─── 가족사별 통계 데이터 빌드 ─── +function buildCorpScores(pcs: any[]): { labels: string[]; avgs: number[]; unders: number[]; overs: number[] } { + const FAMILY_CORPS = ['한맥', '삼안', 'PTC', '바론']; + const labels: string[] = []; + const avgs: number[] = []; + const unders: number[] = []; + const overs: number[] = []; + for (const corp of FAMILY_CORPS) { + const corpPcs = pcs.filter((p: any) => p[ASSET_SCHEMA.PURCHASE_CORP.key] === corp); + const total = corpPcs.length; + labels.push(corp); + if (total === 0) { + avgs.push(0); + unders.push(0); + overs.push(0); + continue; + } + let corpTotalScore = 0; + let corpUnder = 0; + let corpOver = 0; + for (const pc of corpPcs) { + corpTotalScore += pc['_pc_score'] || 0; + if (pc['_spec_status'] === '사양 부족') corpUnder++; + if (pc['_spec_status'] === '오버스펙') corpOver++; + } + avgs.push(Math.round(corpTotalScore / total)); + unders.push(corpUnder); + overs.push(corpOver); + } + return { labels, avgs, unders, overs }; +} + +// ─── 서버 적정성 테이블 행 빌드 ─── +function buildServerStatusTableRows(list: any[]): string { + if (list.length === 0) { + return '대상 장비가 없습니다.'; + } + let rows = ''; + list.forEach((a, idx) => { + const score = a['_server_score'] || 0; + const status = a['_server_status']; + const service = a.service_type || '내부서비스'; + + let badgeColor = '#EF4444'; + let badgeBg = '#FEE2E2'; + if (status === '자원 과잉') { badgeColor = '#D97706'; badgeBg = '#FEF3C7'; } + else if (status === '방치 의심') { badgeColor = '#475569'; badgeBg = '#F1F5F9'; } + else if (status === '적정') { badgeColor = '#10B981'; badgeBg = '#D1FAE5'; } + else if (status === '자원 부족') { badgeColor = '#EF4444'; badgeBg = '#FEE2E2'; } + + // 사용 리소스 및 트래픽 렌더링 준비 + let resourceHtml = '-'; + let trafficHtml = '-'; + + const isInactive = a.is_inactive === true || String(a.is_inactive) === 'true'; + if (!isInactive) { + const cpuUsage = a.cpu_usage !== undefined ? (typeof a.cpu_usage === 'number' ? a.cpu_usage : parseFloat(String(a.cpu_usage || '0'))) : 0; + const ramUsage = a.ram_usage !== undefined ? (typeof a.ram_usage === 'number' ? a.ram_usage : parseFloat(String(a.ram_usage || '0'))) : 0; + const hasWarning = cpuUsage > 75 || ramUsage > 80; + + if (hasWarning) { + resourceHtml = `CPU ${cpuUsage}% / RAM ${ramUsage}%`; + } else { + resourceHtml = `CPU ${cpuUsage}% / RAM ${ramUsage}%`; + } + trafficHtml = a.network_traffic || '-'; + } else { + resourceHtml = `-`; + trafficHtml = `0 GB (N/A)`; + } + + rows += ``; + rows += `${idx + 1}`; + rows += `${a.asset_name || a[ASSET_SCHEMA.ASSET_CODE.key]}`; + rows += `${service}`; + rows += `${resourceHtml}`; + rows += `${trafficHtml}`; + rows += `${score}점`; + rows += `${status}`; + rows += ''; + }); + return rows; +} + + +// ═══════════════════════════════════════════════ +// ─── MAIN RENDER FUNCTION ─── +// ═══════════════════════════════════════════════ export function renderHwDashboard(container: HTMLElement) { const allHw = state.masterData.hw || []; - - // 1. 데이터 가공 - const pcIds = new Set((state.masterData.pc || []).map((p: any) => p.id)); - const serverIds = new Set((state.masterData.server || []).map((s: any) => s.id)); - let totalAge = 0; - let countWithDate = 0; - let over5YearsCount = 0; - let agingPcCount = 0; - let agingServerCount = 0; - let latestAsset: any | null = null; - let latestYear = 0; + // --- PC DATA PREP --- + const pcs = allHw.filter(a => { + const cat = a[ASSET_SCHEMA.CATEGORY.key] || ''; + const type = a[ASSET_SCHEMA.ASSET_TYPE.key] || ''; + const job = a[ASSET_SCHEMA.USER_POSITION.key] || ''; + return (cat === 'PC' || type === '개인PC' || type === '노트북' || type === '공용PC') && job !== '재고PC'; + }); - const ageGroups = { stable: 0, warning: 0, critical: 0 }; - const yearlyCount: Record = {}; + const jobScores: Record = {}; + pcs.forEach(pc => { + const job = pc[ASSET_SCHEMA.USER_POSITION.key] || '미분류'; + const cpu = pc[ASSET_SCHEMA.CPU.key]; + const ram = pc[ASSET_SCHEMA.RAM.key]; + const gpu = pc[ASSET_SCHEMA.GPU.key]; + const pDate = pc[ASSET_SCHEMA.PURCHASE_DATE.key]; + const score = calculatePcScoreDeductive(cpu, ram, gpu, pDate); + pc['_pc_score'] = score; + if (!jobScores[job]) jobScores[job] = { totalScore: 0, count: 0, avg: 0 }; + jobScores[job].totalScore += score; + jobScores[job].count += 1; + }); - allHw.forEach(a => { - const pDate = a[ASSET_SCHEMA.PURCHASE_DATE.key]; - if (!pDate) return; + let totalPcScore = 0; + Object.keys(jobScores).forEach(job => { + jobScores[job].avg = jobScores[job].totalScore / jobScores[job].count; + totalPcScore += jobScores[job].totalScore; + }); + const overallPcAvg = pcs.length > 0 ? Math.round(totalPcScore / pcs.length) : 0; - const age = calculateAssetAge(pDate); - totalAge += age; - countWithDate++; + const jobsList = Object.keys(jobScores).sort((a, b) => jobScores[b].avg - jobScores[a].avg); + const recommendedScores = getRecommendedScores(jobsList); - // 노후도 분류 - if (age >= 5) { - over5YearsCount++; - ageGroups.critical++; - if (pcIds.has(a.id)) { - agingPcCount++; - } else if (serverIds.has(a.id)) { - agingServerCount++; - } - } else if (age >= 3) { - ageGroups.warning++; + let overSpecCount = 0; + let underSpecCount = 0; + const criticalPcList: any[] = []; + + pcs.forEach(pc => { + const job = pc[ASSET_SCHEMA.USER_POSITION.key] || '미분류'; + const score = pc['_pc_score']; + const avg = jobScores[job].avg; + if (score < avg * 0.8) { + underSpecCount++; + pc['_spec_status'] = '사양 부족'; + criticalPcList.push(pc); + } else if (score > avg * 1.3) { + overSpecCount++; + pc['_spec_status'] = '오버스펙'; + criticalPcList.push(pc); } else { - ageGroups.stable++; + pc['_spec_status'] = '적정'; + } + }); + + criticalPcList.sort((a, b) => { + const jobA = a[ASSET_SCHEMA.USER_POSITION.key] || '미분류'; + const jobB = b[ASSET_SCHEMA.USER_POSITION.key] || '미분류'; + const ratioA = a['_pc_score'] / jobScores[jobA].avg; + const ratioB = b['_pc_score'] / jobScores[jobB].avg; + return ratioA - ratioB; + }); + + // --- SERVER DATA PREP --- + const servers = allHw.filter(a => { + const cat = a[ASSET_SCHEMA.CATEGORY.key] || ''; + const type = a[ASSET_SCHEMA.ASSET_TYPE.key] || ''; + return cat === '서버' || cat === '스토리지' || type === '서버' || type === 'NAS' || type === '가상서버(VM)' || type === '공용PC' || type === '테스트 PC' || type === '회의실 PC'; + }); + + let serverTotalValue = 0; + let serverTotalAge = 0; + let serverCountWithDate = 0; + let serverOver5YearsCount = 0; + const serverAgeGroups = { stable: 0, warning: 0, critical: 0 }; + + // 서비스 유형 카운트 + const serverServiceGroups = { internal: 0, external: 0, public: 0 }; + // 적정성 분석 상태 카운트 + const serverStatusGroups = { optimal: 0, underSpec: 0, overSpec: 0, inactive: 0 }; + + servers.forEach(a => { + const amountStr = String(a[ASSET_SCHEMA.PURCHASE_AMOUNT.key] || '0').replace(/[^0-9]/g, ''); + serverTotalValue += parseInt(amountStr, 10) || 0; + + // 구매연령 + const pDate = a[ASSET_SCHEMA.PURCHASE_DATE.key] || a.purchase_date; + if (pDate) { + const age = calculateAssetAge(pDate); + serverTotalAge += age; + serverCountWithDate++; + if (age >= 5) { serverOver5YearsCount++; serverAgeGroups.critical++; } + else if (age >= 3) { serverAgeGroups.warning++; } + else { serverAgeGroups.stable++; } } - // 연도별 도입 현황 추출 - const year = normalizeDate(pDate).split('-')[0]; - if (year && year.length === 4) { - yearlyCount[year] = (yearlyCount[year] || 0) + 1; - const yNum = parseInt(year); - if (yNum > latestYear) { - latestYear = yNum; - latestAsset = a; + // 서비스 유형 판단 및 집계 + const serviceType = a.service_type || '내부서비스'; + if (serviceType === '외부서비스') serverServiceGroups.external++; + else if (serviceType === '회의용/공용') serverServiceGroups.public++; + else serverServiceGroups.internal++; + + // 사양 점수 및 적정성 평가 + const score = calculatePcScoreDeductive(a.cpu, a.ram, a.gpu, pDate); + a['_server_score'] = score; + + const isInactive = a.is_inactive === true || String(a.is_inactive) === 'true'; + + // 안전한 CPU, RAM 사용량 파싱 + const cpuUsage = a.cpu_usage !== undefined ? (typeof a.cpu_usage === 'number' ? a.cpu_usage : parseFloat(String(a.cpu_usage || '0'))) : 0; + const ramUsage = a.ram_usage !== undefined ? (typeof a.ram_usage === 'number' ? a.ram_usage : parseFloat(String(a.ram_usage || '0'))) : 0; + const trafficGb = parseTrafficToGb(a.network_traffic); + + if (isInactive) { + a['_server_status'] = '방치 의심'; + serverStatusGroups.inactive++; + } else { + // 1. 자원 부족 판별 (오직 사용 리소스 기반: CPU > 75% 또는 RAM > 80% 또는 일일 트래픽 > 500 GB) + const isUnderProvisioned = cpuUsage > 75 || ramUsage > 80 || trafficGb > 500; + + // 2. 자원 과잉 판별 (오직 사용 리소스 기반: CPU < 10% 이고 RAM < 20% 이고 일일 트래픽 < 5 GB) + const isOverProvisioned = cpuUsage < 10 && ramUsage < 20 && trafficGb < 5; + + if (isUnderProvisioned) { + a['_server_status'] = '자원 부족'; + serverStatusGroups.underSpec++; + } else if (isOverProvisioned) { + a['_server_status'] = '자원 과잉'; + serverStatusGroups.overSpec++; + } else { + a['_server_status'] = '적정'; + serverStatusGroups.optimal++; } } }); - const avgAge = countWithDate > 0 ? (totalAge / countWithDate).toFixed(1) : '0'; - const over5Rate = allHw.length > 0 ? Math.round((over5YearsCount / allHw.length) * 100) : 0; - - // 교체 시급 대상 TOP 10 (오래된 순) - const criticalList = [...allHw] - .filter(a => a[ASSET_SCHEMA.PURCHASE_DATE.key]) - .sort((a, b) => { - const dateA = new Date(normalizeDate(a[ASSET_SCHEMA.PURCHASE_DATE.key])).getTime(); - const dateB = new Date(normalizeDate(b[ASSET_SCHEMA.PURCHASE_DATE.key])).getTime(); - return dateA - dateB; - }) - .slice(0, 10); + const serverAvgAge = serverCountWithDate > 0 ? (serverTotalAge / serverCountWithDate).toFixed(1) : '0'; + const serverOver5Rate = servers.length > 0 ? Math.round((serverOver5YearsCount / servers.length) * 100) : 0; + const serverFormattedValue = new Intl.NumberFormat('ko-KR').format(serverTotalValue); - // 2. UI 렌더링 - container.innerHTML = ` -
-
-
- 전체 평균 사용 연수 -
전체 자산 기준 (권장 4.5년)
-
${avgAge}년
-
-
-
-
-
- 교체 대상 장비 (5년 노후) -
총 ${over5YearsCount}대 해당
- -
-
- 개인/공용 PC - ${agingPcCount}대 -
-
-
- 서버 장비 - ${agingServerCount}대 -
-
- -
-
-
-
-
-
- 최신 도입 모델 (${latestYear}년) -
자산번호: ${latestAsset ? latestAsset[ASSET_SCHEMA.ASSET_CODE.key] : '-'}
-
- ${latestAsset ? (latestAsset[ASSET_SCHEMA.MODEL_NAME.key] || latestAsset[ASSET_SCHEMA.ASSET_NAME.key] || '정보 없음') : '정보 없음'} -
-
-
-
+ // 리스트: 자원 과잉 장비 TOP 5 + const overSpecList = servers + .filter(a => a['_server_status'] === '자원 과잉') + .sort((a, b) => b['_server_score'] - a['_server_score']) + .slice(0, 5); -
-
-

자산 노후도 분포

-
-
-
-

연도별 자산 도입 추이

-
-
-
+ // 리스트: 자원 부족 장비 TOP 5 + const underSpecList = servers + .filter(a => a['_server_status'] === '자원 부족') + .sort((a, b) => a['_server_score'] - b['_server_score']) + .slice(0, 5); -

⚠️ 교체 검토 대상 (가장 오래된 자산 TOP 10)

-
- - - - - - - - - - - - - - ${criticalList.map((a, i) => { - const pDate = a[ASSET_SCHEMA.PURCHASE_DATE.key]; - const age = calculateAssetAge(pDate); - return ` - - - - - - - - - - `; - }).join('')} - -
순위자산번호유형모델명담당자구매일자연령
${i + 1}${a[ASSET_SCHEMA.ASSET_CODE.key] || '-'}${a[ASSET_SCHEMA.ASSET_TYPE.key] || a.category || ''}${a[ASSET_SCHEMA.MODEL_NAME.key] || a[ASSET_SCHEMA.ASSET_NAME.key] || '-'}${a[ASSET_SCHEMA.MANAGER_MAIN.key] || '-'}${pDate || '-'}${age}년
-
-
- `; + // 리스트: 방치 의심 장비 (회수/재배치 필요) TOP 5 + const inactiveList = servers + .filter(a => a['_server_status'] === '방치 의심') + .slice(0, 5); - // 3. 차트 초기화 + // --- PRE-BUILD HTML --- + const corpScores = buildCorpScores(pcs); + + // 가족사별 평균 점수 텍스트 리스트 + let corpAvgListHtml = ''; + for (let ci = 0; ci < corpScores.labels.length; ci++) { + corpAvgListHtml += '
'; + corpAvgListHtml += '' + corpScores.labels[ci] + ''; + corpAvgListHtml += '' + corpScores.avgs[ci] + '점'; + corpAvgListHtml += '
'; + } + + // --- RENDER --- + container.innerHTML = + '
' + + '
' + + '
' + + '

Executive Dashboard (PC & Server)

' + + '' + + '
' + + '
' + + '' + + '1 / 2' + + '' + + '
' + + '
' + + + '
' + + '
' + + + // ── SLIDE 1: PC DASHBOARD ── + '
' + + '

💻 PC 사양 적정성 분석

' + + + // KPI Row + '
' + + '
' + + '
' + + '전사 평균 PC 사양 점수' + + '
' + overallPcAvg + '
' + + '
운영 중인 PC 총 ' + pcs.length + '대 기준
' + + '
' + + '
' + + '
' + + '사양 부족 인원 (교체 검토)' + + '
' + underSpecCount + '
' + + '
직무 평균 대비 20% 이상 미달  ▸ 클릭하여 상세보기
' + + '
' + + '
' + + '
' + + '오버스펙 인원 (회수 검토)' + + '
' + overSpecCount + '
' + + '
직무 평균 대비 30% 이상 초과  ▸ 클릭하여 상세보기
' + + '
' + + '
' + + '
' + + '교체/회수 대상 비율' + + '
' + (pcs.length > 0 ? Math.round(((underSpecCount + overSpecCount) / pcs.length) * 100) : 0) + '%
' + + '
' + + '
' + + '
' + + '
* 산출식: (사양 부족 + 오버스펙 인원) / 전체 PC 수량 × 100
' + + '
' + + '
' + + + // Charts + Corp Stats + '
' + + '
' + + '

직무별 평균 PC 사양 점수

' + + '
' + + '
' + + '
' + + '

' + + ' 가족사별 PC 사양 현황' + + '

' + + '
' + + '
' + + '
평균 점수
' + + '
' + + corpAvgListHtml + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + + // ── SLIDE 2: SERVER DASHBOARD ── + '
' + + '

🖥️ 서버 및 공용 인프라 분석

' + + '
' + + '
' + + '
' + + '총 운영 서버/NAS 수량' + + '
' + servers.length + '
' + + '
실제 도입 가치: ' + serverFormattedValue + '원  ▸ 클릭시 목록보기
' + + '
' + + '
' + + '
' + + '외부 운영 서비스 비율' + + '
' + serverServiceGroups.external + '대 (' + Math.round((serverServiceGroups.external / servers.length) * 100) + '%)
' + + '
사내용 인프라 ' + serverServiceGroups.internal + '대 / 회의실 ' + serverServiceGroups.public + '대  ▸ 클릭시 목록보기
' + + '
' + + '
' + + '
' + + '자원 과잉 장비' + + '
' + serverStatusGroups.overSpec + '
' + + '
리소스 사용률 및 데이터 전송량이 극히 저조한 장비  ▸ 클릭시 목록보기
' + + '
' + + '
' + + '
' + + '자원 부족 장비' + + '
' + (serverStatusGroups.underSpec + serverStatusGroups.inactive) + '
' + + '
자원 부족 ' + serverStatusGroups.underSpec + '대 / 방치 장비 ' + serverStatusGroups.inactive + '대  ▸ 클릭시 목록보기
' + + '
' + + '
' + + + // 차트 영역 (3열) + '
' + + '
' + + '

서비스 유형 분포

' + + '
' + + '
' + + '
' + + '

서버/공용PC 적정성 분석

' + + '
' + + '
' + + '
' + + '

서버/스토리지 노후도 분포

' + + '
' + + '
' + + '
' + + + // 테이블 영역 (2열 레이아웃) + '
' + + '
' + + '

' + + '⚠️ 자원 과잉 장비 (TOP 5)' + + '

' + + '
' + + '' + + '' + + '' + buildServerStatusTableRows(overSpecList) + '' + + '
순위장비명서비스사양 요약사용 리소스 (CPU/RAM)일일 전송량점수상태
' + + '
' + + '
' + + '
' + + '

' + + '🔻 자원 부족 장비 (TOP 5)' + + '

' + + '
' + + '' + + '' + + '' + buildServerStatusTableRows(underSpecList) + '' + + '
순위장비명서비스사양 요약사용 리소스 (CPU/RAM)일일 전송량점수상태
' + + '
' + + '
' + + '
' + + + // 방치 장비 목록 (Full-width) + '
' + + '

' + + '🔍 미사용 방치 의심 장비 (회수/철수 권장)' + + '

' + + '
' + + '' + + '' + + '' + buildServerStatusTableRows(inactiveList) + '' + + '
순위장비명서비스사양 요약사용 리소스 (CPU/RAM)일일 전송량점수상태
' + + '
' + + '
' + + + '
' + + + '
' + + '
' + + '
'; + + // --- INIT --- setTimeout(() => { - initAgingCharts(ageGroups, yearlyCount); - - // 행 클릭 이벤트 바인딩 + if (window.lucide) { + window.lucide.createIcons(); + } else { + createIcons({ icons: { DollarSign, Monitor, AlertTriangle, Activity, ChevronLeft, ChevronRight, UserCheck, TrendingUp, TrendingDown, Building2, X, FileText } }); + } + + initCharts(jobScores, recommendedScores, corpScores, serverAgeGroups, serverServiceGroups, serverStatusGroups); + + // 기획서 보기 버튼 클릭 이벤트 바인딩 + const btnProposal = document.getElementById('btn-open-proposal'); + if (btnProposal) { + btnProposal.addEventListener('click', () => { + window.open('/PC_사양_적정성_분석_기획서.html', '_blank'); + }); + } + + // 서버 테이블 행 클릭 container.querySelectorAll('.clickable-row').forEach(row => { row.addEventListener('click', () => { const id = row.getAttribute('data-id'); @@ -173,51 +843,207 @@ export function renderHwDashboard(container: HTMLElement) { if (asset) openHwModal(asset, 'view'); }); }); + + // KPI 카드 클릭 → 모달 + const kpiUnder = document.getElementById('kpi-under-spec'); + const kpiOver = document.getElementById('kpi-over-spec'); + if (kpiUnder) kpiUnder.addEventListener('click', () => showSpecMismatchModal(criticalPcList, jobScores, allHw, '사양 부족')); + if (kpiOver) kpiOver.addEventListener('click', () => showSpecMismatchModal(criticalPcList, jobScores, allHw, '오버스펙')); + + // 서버 KPI 카드 클릭 → 모달 연동 + const kpiSvrTotal = document.getElementById('kpi-server-total'); + const kpiSvrExternal = document.getElementById('kpi-server-external'); + const kpiSvrOverspec = document.getElementById('kpi-server-overspec'); + const kpiSvrCritical = document.getElementById('kpi-server-critical'); + + if (kpiSvrTotal) kpiSvrTotal.addEventListener('click', () => showServerStatusModal(servers, allHw, '전체 서버 및 공용 장비 목록')); + if (kpiSvrExternal) kpiSvrExternal.addEventListener('click', () => showServerStatusModal(servers.filter(s => s.service_type === '외부서비스'), allHw, '외부 운영 서비스 장비 목록')); + if (kpiSvrOverspec) kpiSvrOverspec.addEventListener('click', () => showServerStatusModal(servers.filter(s => s._server_status === '자원 과잉'), allHw, '자원 과잉 장비 목록')); + if (kpiSvrCritical) kpiSvrCritical.addEventListener('click', () => showServerStatusModal(servers.filter(s => s._server_status === '자원 부족' || s._server_status === '방치 의심'), allHw, '자원 부족 및 방치 의심 장비 목록')); + + // Slider + const track = document.getElementById('dashboard-slider-track') as HTMLElement; + const btnPrev = document.getElementById('slider-prev') as HTMLButtonElement; + const btnNext = document.getElementById('slider-next') as HTMLButtonElement; + const indicator = document.getElementById('slider-indicator') as HTMLElement; + let currentSlide = 0; + const totalSlides = 2; + + const updateSlider = () => { + track.style.transform = 'translateX(-' + (currentSlide * 50) + '%)'; + btnPrev.disabled = currentSlide === 0; + btnNext.disabled = currentSlide === totalSlides - 1; + indicator.textContent = (currentSlide + 1) + ' / ' + totalSlides; + }; + + if (btnPrev) btnPrev.addEventListener('click', () => { if (currentSlide > 0) { currentSlide--; updateSlider(); } }); + if (btnNext) btnNext.addEventListener('click', () => { if (currentSlide < totalSlides - 1) { currentSlide++; updateSlider(); } }); }, 100); } -function initAgingCharts(ageGroups: any, yearlyCount: Record) { - const agingCtx = document.getElementById('chart-aging-dist') as HTMLCanvasElement; + +// ─── CHART INIT ─── +function initCharts( + jobScores: any, + recommendedScores: any, + corpScores: any, + ageGroups: any, + serviceGroups: any, + statusGroups: any +) { + // 직무별 점수 + const jobCtx = document.getElementById('chart-job-scores') as HTMLCanvasElement; + if (jobCtx && typeof Chart !== 'undefined') { + const labels = Object.keys(jobScores).sort((a, b) => jobScores[b].avg - jobScores[a].avg); + const avgData = labels.map(l => Math.round(jobScores[l].avg)); + const recomData = labels.map(l => recommendedScores[l] || 0); + + if (jobChartInstance) { + jobChartInstance.destroy(); + jobChartInstance = null; + } + + jobChartInstance = new Chart(jobCtx, { + type: 'bar', + data: { + labels: labels, + datasets: [ + { + type: 'line', + label: '권장 목표 점수', + data: recomData, + borderColor: '#EF4444', + borderWidth: 2, + borderDash: [5, 5], + fill: false, + pointBackgroundColor: '#EF4444', + order: 1 + }, + { + type: 'bar', + label: '평균 PC 사양 점수', + data: avgData, + backgroundColor: '#6366F1', + borderRadius: 6, + order: 2 + } + ] + }, + options: { + responsive: true, + maintainAspectRatio: false, + plugins: { + legend: { + display: true, + position: 'top', + labels: { + boxWidth: 12, + usePointStyle: true + } + } + }, + scales: { + y: { beginAtZero: true, max: 100, grid: { color: '#F1F5F9' }, border: { display: false } }, + x: { grid: { display: false }, border: { display: false } } + }, + animation: { duration: 1000, easing: 'easeOutQuart' } + } + }); + } + + // 가족사별 사양 부족/오버스펙 인원 (Bar) + const corpCtx = document.getElementById('chart-corp-scores') as HTMLCanvasElement; + if (corpCtx && typeof Chart !== 'undefined') { + new Chart(corpCtx, { + type: 'bar', + data: { + labels: corpScores.labels, + datasets: [ + { label: '사양 부족', data: corpScores.unders, backgroundColor: '#E11D48', borderRadius: 4 }, + { label: '오버스펙', data: corpScores.overs, backgroundColor: '#F59E0B', borderRadius: 4 } + ] + }, + options: { + responsive: true, + maintainAspectRatio: false, + plugins: { + legend: { position: 'bottom', labels: { padding: 15, usePointStyle: true, boxWidth: 8 } } + }, + scales: { + y: { beginAtZero: true, ticks: { stepSize: 1 }, grid: { color: '#F1F5F9' }, border: { display: false }, title: { display: true, text: '인원(명)', color: '#94A3B8', font: { size: 11 } } }, + x: { grid: { display: false }, border: { display: false } } + }, + animation: { duration: 1500, easing: 'easeOutQuart' } + } + }); + } + + // 서버 노후도 분포 (Doughnut) + const agingCtx = document.getElementById('chart-server-aging') as HTMLCanvasElement; if (agingCtx && typeof Chart !== 'undefined') { new Chart(agingCtx, { type: 'doughnut', data: { labels: ['안정 (3년 미만)', '주의 (3~5년)', '위험 (5년 이상)'], - datasets: [{ - data: [ageGroups.stable, ageGroups.warning, ageGroups.critical], - backgroundColor: ['#1E5149', '#9CA3AF', '#E11D48'], - borderWidth: 0 - }] + datasets: [{ data: [ageGroups.stable, ageGroups.warning, ageGroups.critical], backgroundColor: ['#10B981', '#F59E0B', '#E11D48'], borderWidth: 0, hoverOffset: 8 }] }, options: { - responsive: true, - maintainAspectRatio: false, - plugins: { legend: { position: 'right' } }, - cutout: '70%' + responsive: true, maintainAspectRatio: false, + plugins: { legend: { position: 'bottom', labels: { padding: 10, usePointStyle: true, boxWidth: 10 } } }, + cutout: '75%', animation: { animateScale: true, animateRotate: true } } }); } - const trendCtx = document.getElementById('chart-purchase-trend') as HTMLCanvasElement; - if (trendCtx && typeof Chart !== 'undefined') { - const years = Object.keys(yearlyCount).sort(); - new Chart(trendCtx, { - type: 'bar', + // 서비스 유형 분포 (Doughnut) + const serviceCtx = document.getElementById('chart-server-service') as HTMLCanvasElement; + if (serviceCtx && typeof Chart !== 'undefined') { + new Chart(serviceCtx, { + type: 'doughnut', data: { - labels: years, + labels: ['내부인프라/백업', '외부서비스/운영', '회의용/공용'], datasets: [{ - label: '도입 수량', - data: years.map(y => yearlyCount[y]), - backgroundColor: '#1E5149', - borderRadius: 4 + data: [serviceGroups.internal, serviceGroups.external, serviceGroups.public], + backgroundColor: ['#6366F1', '#10B981', '#F59E0B'], + borderWidth: 0, + hoverOffset: 8 }] }, options: { responsive: true, maintainAspectRatio: false, + plugins: { + legend: { position: 'bottom', labels: { padding: 10, usePointStyle: true, boxWidth: 10 } } + }, + cutout: '75%', + animation: { animateScale: true, animateRotate: true } + } + }); + } + + // 자원 적정성 상태 분포 (Bar) + const statusCtx = document.getElementById('chart-server-status') as HTMLCanvasElement; + if (statusCtx && typeof Chart !== 'undefined') { + new Chart(statusCtx, { + type: 'bar', + data: { + labels: ['적정', '자원 부족', '자원 과잉', '방치 의심'], + datasets: [{ + label: '장비 수(대)', + data: [statusGroups.optimal, statusGroups.underSpec, statusGroups.overSpec, statusGroups.inactive], + backgroundColor: ['#10B981', '#EF4444', '#F59E0B', '#64748B'], + borderRadius: 6 + }] + }, + options: { + responsive: true, + maintainAspectRatio: false, + plugins: { + legend: { display: false } + }, scales: { - y: { beginAtZero: true, ticks: { stepSize: 1 } }, - x: { grid: { display: false } } + y: { beginAtZero: true, ticks: { stepSize: 5 }, grid: { color: '#F1F5F9' }, border: { display: false } }, + x: { grid: { display: false }, border: { display: false } } } } }); From 25ebaf46859b6afddd277005a30783690f76c131 Mon Sep 17 00:00:00 2001 From: Taehoon Date: Tue, 9 Jun 2026 18:44:53 +0900 Subject: [PATCH 03/16] refactor: rename asset_network to asset_remote MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - DB 테이블명 변경 마이그레이션 스크립트 추가 (migrate_v5_rename_remote.js) - Backend (server.js): 쿼리 및 매핑 로직을 asset_remote 및 remotes 속성으로 업데이트 - Frontend (HWModal.ts): 폼 필드와 데이터 바인딩을 remotes로 일괄 수정 - 유틸리티 스크립트의 레퍼런스 일괄 업데이트 --- backup_db.js | 59 +++++++++ check_network.js | 29 +++++ drop_legacy.js | 44 +++++++ migrate_schema.js | 197 +++++++++++++++++++++++++++++ migrate_v2_final.js | 212 ++++++++++++++++++++++++++++++++ migrate_v4_network.js | 73 +++++++++++ migrate_v5_rename_remote.js | 28 +++++ server.js | 54 +++++--- src/components/Modal/HWModal.ts | 197 +++++++++++++++++------------ 9 files changed, 797 insertions(+), 96 deletions(-) create mode 100644 backup_db.js create mode 100644 check_network.js create mode 100644 drop_legacy.js create mode 100644 migrate_schema.js create mode 100644 migrate_v2_final.js create mode 100644 migrate_v4_network.js create mode 100644 migrate_v5_rename_remote.js diff --git a/backup_db.js b/backup_db.js new file mode 100644 index 0000000..2687b14 --- /dev/null +++ b/backup_db.js @@ -0,0 +1,59 @@ +import mysql from 'mysql2/promise'; +import dotenv from 'dotenv'; +import * as xlsx from 'xlsx'; +import fs from 'fs'; + +dotenv.config(); + +const { DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT } = process.env; + +async function backup() { + const connection = await mysql.createConnection({ + host: DB_HOST, + user: DB_USER, + password: DB_PASS, + database: DB_NAME, + port: parseInt(DB_PORT || '3306') + }); + + console.log('🚀 Starting Database Backup Process...'); + + const tables = [ + 'asset_pc', 'asset_server', 'asset_storage', 'asset_remote', + 'asset_equipment', 'asset_office_supplies', 'asset_survey', 'asset_vip' + ]; + + const wb = xlsx.utils.book_new(); + + for (const table of tables) { + try { + // 1. Create table backup + await connection.query(`DROP TABLE IF EXISTS ${table}_backup`); + await connection.query(`CREATE TABLE ${table}_backup AS SELECT * FROM ${table}`); + console.log(`✅ Table backup created: ${table} -> ${table}_backup`); + + // 2. Fetch data for Excel + const [rows] = await connection.query(`SELECT * FROM ${table}`); + if (rows.length > 0) { + const ws = xlsx.utils.json_to_sheet(rows); + // Sheet names max length is 31 chars + const sheetName = table.substring(0, 31); + xlsx.utils.book_append_sheet(wb, ws, sheetName); + } + } catch (e) { + console.warn(`⚠️ Skipped ${table}: ${e.message}`); + } + } + + // 3. Write Excel file + const fileName = 'backupDB_20260608.xlsx'; + xlsx.writeFile(wb, fileName); + console.log(`✅ Excel data exported successfully to ${fileName}`); + + await connection.end(); +} + +backup().catch(err => { + console.error('❌ Backup Failed:', err); + process.exit(1); +}); diff --git a/check_network.js b/check_network.js new file mode 100644 index 0000000..85228d4 --- /dev/null +++ b/check_network.js @@ -0,0 +1,29 @@ +import mysql from 'mysql2/promise'; +import dotenv from 'dotenv'; + +dotenv.config(); + +const { DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT } = process.env; + +async function checkRemote() { + const connection = await mysql.createConnection({ + host: DB_HOST, + user: DB_USER, + password: DB_PASS, + database: DB_NAME, + port: parseInt(DB_PORT || '3306') + }); + + console.log('--- Checking asset_remote table ---'); + + const [columns] = await connection.query('DESCRIBE asset_remote'); + const cols = columns.map(c => c.Field); + console.log('Columns in asset_remote:', cols.join(', ')); + + const [count] = await connection.query('SELECT COUNT(*) as count FROM asset_remote WHERE remote_tool IS NOT NULL OR remote_id IS NOT NULL'); + console.log(`Rows with remote info (tool or id): ${count[0].count}`); + + await connection.end(); +} + +checkRemote().catch(console.error); diff --git a/drop_legacy.js b/drop_legacy.js new file mode 100644 index 0000000..c4b6ad5 --- /dev/null +++ b/drop_legacy.js @@ -0,0 +1,44 @@ +import mysql from 'mysql2/promise'; +import dotenv from 'dotenv'; + +dotenv.config(); + +const { DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT } = process.env; + +async function dropLegacyTables() { + const connection = await mysql.createConnection({ + host: DB_HOST, + user: DB_USER, + password: DB_PASS, + database: DB_NAME, + port: parseInt(DB_PORT || '3306') + }); + + console.log('🧹 Starting cleanup of obsolete legacy backup tables...'); + + const tablesToDrop = [ + 'asset_pc', 'asset_pc_backup', + 'asset_server', 'asset_server_backup', + 'asset_storage', 'asset_storage_backup', + 'asset_remote_backup', // IMPORTANT: DO NOT drop asset_remote! + 'asset_equipment', 'asset_equipment_backup', + 'asset_office_supplies', 'asset_office_supplies_backup', + 'asset_survey', 'asset_survey_backup', + 'asset_vip', 'asset_vip_backup', + 'asset_pc_parts' + ]; + + for (const table of tablesToDrop) { + try { + await connection.query(`DROP TABLE IF EXISTS ${table}`); + console.log(`✅ Dropped table: ${table}`); + } catch (err) { + console.warn(`⚠️ Failed to drop table ${table}: ${err.message}`); + } + } + + console.log('🎉 Cleanup complete. Database is now lean and mean.'); + await connection.end(); +} + +dropLegacyTables().catch(console.error); diff --git a/migrate_schema.js b/migrate_schema.js new file mode 100644 index 0000000..4cd295c --- /dev/null +++ b/migrate_schema.js @@ -0,0 +1,197 @@ +import mysql from 'mysql2/promise'; +import dotenv from 'dotenv'; + +dotenv.config(); + +const { DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT } = process.env; + +async function migrateSchema() { + const connection = await mysql.createConnection({ + host: DB_HOST, + user: DB_USER, + password: DB_PASS, + database: DB_NAME, + port: parseInt(DB_PORT || '3306') + }); + + console.log('🚀 Phase 1: Creating Normalized Tables & Migrating Data...'); + + try { + await connection.query('SET FOREIGN_KEY_CHECKS = 0'); + + // --- 1. Drop existing new tables if they exist --- + await connection.query('DROP TABLE IF EXISTS asset_core, asset_hardware, asset_location, asset_remote'); + + // --- 2. Create New Schema --- + await connection.query(` + CREATE TABLE asset_core ( + id VARCHAR(50) PRIMARY KEY, + asset_code VARCHAR(100) UNIQUE NOT NULL, + category VARCHAR(100), + asset_type VARCHAR(100), + asset_purpose VARCHAR(255), + service_type VARCHAR(50), + purchase_corp VARCHAR(100), + purchase_date VARCHAR(50), + purchase_amount VARCHAR(100), + purchase_vendor VARCHAR(255), + approval_document VARCHAR(255), + memo TEXT, + manager_primary VARCHAR(100), + manager_secondary VARCHAR(100), + current_dept VARCHAR(255), + previous_dept VARCHAR(255), + user_current VARCHAR(100), + previous_user VARCHAR(100), + emp_no VARCHAR(20), + user_position VARCHAR(50), + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + `); + + await connection.query(` + CREATE TABLE asset_hardware ( + id INT AUTO_INCREMENT PRIMARY KEY, + asset_id VARCHAR(50) NOT NULL, + hw_status VARCHAR(50), + model_name VARCHAR(255), + mainboard VARCHAR(255), + os VARCHAR(100), + cpu VARCHAR(255), + ram VARCHAR(100), + gpu VARCHAR(100), + storage1 VARCHAR(255), + storage2 VARCHAR(255), + storage3 VARCHAR(255), + monitoring VARCHAR(100), + price VARCHAR(100), + volume VARCHAR(100), + monitor_inch VARCHAR(50), + serial_num VARCHAR(100), + FOREIGN KEY (asset_id) REFERENCES asset_core(id) ON DELETE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + `); + + await connection.query(` + CREATE TABLE asset_location ( + id INT AUTO_INCREMENT PRIMARY KEY, + asset_id VARCHAR(50) NOT NULL, + location VARCHAR(255), + location_detail VARCHAR(255), + location_photo VARCHAR(255), + loc_x VARCHAR(20), + loc_y VARCHAR(20), + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (asset_id) REFERENCES asset_core(id) ON DELETE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + `); + + await connection.query(` + CREATE TABLE asset_remote ( + id INT AUTO_INCREMENT PRIMARY KEY, + asset_id VARCHAR(50) NOT NULL, + ip_address VARCHAR(100), + mac_address VARCHAR(100), + remote_tool VARCHAR(100), + remote_id VARCHAR(100), + remote_pw VARCHAR(100), + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (asset_id) REFERENCES asset_core(id) ON DELETE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + `); + + await connection.query('SET FOREIGN_KEY_CHECKS = 1'); + console.log('✅ Normalized tables created.'); + + // --- 3. Migrate Data from Legacy Tables --- + const legacyTables = ['asset_pc', 'asset_server', 'asset_storage', 'asset_remote', 'asset_equipment', 'asset_office_supplies', 'asset_survey', 'asset_vip']; + + let totalMigrated = 0; + + for (const table of legacyTables) { + try { + const [rows] = await connection.query(`SELECT * FROM ${table}`); + + for (const row of rows) { + // 3.1 Insert into asset_core + await connection.query(` + INSERT IGNORE INTO asset_core ( + id, asset_code, category, asset_type, asset_purpose, service_type, purchase_corp, purchase_date, + purchase_amount, purchase_vendor, approval_document, memo, manager_primary, manager_secondary, + current_dept, previous_dept, user_current, previous_user, emp_no, user_position, created_at + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + `, [ + row.id, row.asset_code, row.category, row.asset_type, row.asset_purpose, row.service_type, + row.purchase_corp, row.purchase_date, row.purchase_amount, row.purchase_vendor, row.approval_document, + row.memo, row.manager_primary, row.manager_secondary, row.current_dept, row.previous_dept, + row.user_current, row.previous_user, row.emp_no, row.user_position, row.created_at + ]); + + // 3.2 Insert into asset_hardware (if hardware fields exist) + if (row.model_name || row.cpu || row.ram || row.hw_status) { + await connection.query(` + INSERT INTO asset_hardware ( + asset_id, hw_status, model_name, mainboard, os, cpu, ram, gpu, storage1, storage2, storage3, monitoring, price, volume, monitor_inch, serial_num + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + `, [ + row.id, row.hw_status, row.model_name, row.mainboard, row.os, row.cpu, row.ram, row.gpu, + row.ssd_1 || row.hdd_1, row.ssd_2 || row.hdd_2, row.hdd_3, row.monitoring, row.price, + row.volume, row.monitor_inch, row.serial_num + ]); + } + + // 3.3 Insert into asset_location (if location fields exist) + if (row.location || row.location_detail) { + await connection.query(` + INSERT INTO asset_location ( + asset_id, location, location_detail, location_photo, loc_x, loc_y + ) VALUES (?, ?, ?, ?, ?, ?) + `, [ + row.id, row.location, row.location_detail, row.location_photo, row.loc_x, row.loc_y + ]); + } + + // 3.4 Insert into asset_remote (if network fields exist) + // Handle primary network interface + if (row.ip_address || row.mac_address || row.remote_tool) { + await connection.query(` + INSERT INTO asset_remote ( + asset_id, ip_address, mac_address, remote_tool, remote_id, remote_pw + ) VALUES (?, ?, ?, ?, ?, ?) + `, [ + row.id, row.ip_address, row.mac_address, row.remote_tool, row.remote_id, row.remote_pw + ]); + } + + // Handle secondary network interface (e.g., from server table) if it exists + if (row.ip_address_2 || row.remote_tool_2) { + await connection.query(` + INSERT INTO asset_remote ( + asset_id, ip_address, remote_tool, remote_id, remote_pw + ) VALUES (?, ?, ?, ?, ?) + `, [ + row.id, row.ip_address_2, row.remote_tool_2, row.remote_id_2, row.remote_pw_2 + ]); + } + + totalMigrated++; + } + console.log(`- Migrated ${rows.length} records from ${table}`); + } catch (err) { + console.warn(`- Skipping legacy table ${table}: ${err.message}`); + } + } + + console.log(`✅ Phase 1 Data Migration Completed. Total Assets Migrated: ${totalMigrated}`); + + } catch (err) { + console.error('❌ Migration Failed:', err); + } finally { + await connection.end(); + } +} + +migrateSchema(); diff --git a/migrate_v2_final.js b/migrate_v2_final.js new file mode 100644 index 0000000..53f0c5f --- /dev/null +++ b/migrate_v2_final.js @@ -0,0 +1,212 @@ +import mysql from 'mysql2/promise'; +import dotenv from 'dotenv'; + +dotenv.config(); + +const { DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT } = process.env; + +async function migrateV2() { + const connection = await mysql.createConnection({ + host: DB_HOST, + user: DB_USER, + password: DB_PASS, + database: DB_NAME, + port: parseInt(DB_PORT || '3306') + }); + + console.log('🚀 Phase 2: Final Migration to Normalized V2 Schema...'); + + try { + await connection.query('SET FOREIGN_KEY_CHECKS = 0'); + + // 1. Create/Enhance Core Tables + console.log('1. Creating/Enhancing Tables...'); + + await connection.query('DROP TABLE IF EXISTS asset_core, asset_hardware, asset_location, asset_remote'); + + await connection.query(` + CREATE TABLE asset_core ( + id VARCHAR(50) PRIMARY KEY, + asset_code VARCHAR(100) UNIQUE NOT NULL, + category VARCHAR(100), + asset_type VARCHAR(100), + current_role VARCHAR(50) DEFAULT 'Normal' COMMENT 'Normal, Server, Personal, etc.', + asset_purpose VARCHAR(255), + service_type VARCHAR(50), + purchase_corp VARCHAR(100), + purchase_date VARCHAR(50), + purchase_amount VARCHAR(100), + purchase_vendor VARCHAR(255), + approval_document VARCHAR(255), + memo TEXT, + manager_primary VARCHAR(100), + manager_secondary VARCHAR(100), + current_dept VARCHAR(255), + previous_dept VARCHAR(255), + user_current VARCHAR(100), + previous_user VARCHAR(100), + emp_no VARCHAR(20), + user_position VARCHAR(50), + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + `); + + await connection.query(` + CREATE TABLE asset_hardware ( + id INT AUTO_INCREMENT PRIMARY KEY, + asset_id VARCHAR(50) NOT NULL, + hw_status VARCHAR(50), + model_name VARCHAR(255), + mainboard VARCHAR(255), + os VARCHAR(100), + cpu VARCHAR(255), + ram VARCHAR(100), + gpu VARCHAR(100), + storage1 VARCHAR(255), + storage2 VARCHAR(255), + storage3 VARCHAR(255), + storage4 VARCHAR(255), + monitoring VARCHAR(100), + price VARCHAR(100), + volume VARCHAR(100), + monitor_inch VARCHAR(50), + serial_num VARCHAR(100), + FOREIGN KEY (asset_id) REFERENCES asset_core(id) ON DELETE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + `); + + await connection.query(` + CREATE TABLE asset_location ( + id INT AUTO_INCREMENT PRIMARY KEY, + asset_id VARCHAR(50) NOT NULL, + location VARCHAR(255), + location_detail VARCHAR(255), + location_photo VARCHAR(255), + loc_x VARCHAR(20), + loc_y VARCHAR(20), + is_active TINYINT(1) DEFAULT 1, + deactivated_at DATETIME NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (asset_id) REFERENCES asset_core(id) ON DELETE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + `); + + await connection.query(` + CREATE TABLE asset_remote ( + id INT AUTO_INCREMENT PRIMARY KEY, + asset_id VARCHAR(50) NOT NULL, + ip_address VARCHAR(100), + mac_address VARCHAR(100), + remote_tool VARCHAR(100), + remote_id VARCHAR(100), + remote_pw VARCHAR(100), + is_active TINYINT(1) DEFAULT 1, + deactivated_at DATETIME NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (asset_id) REFERENCES asset_core(id) ON DELETE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + `); + + console.log('✅ V2 Schema tables created.'); + + // 2. Migration Logic + const legacyTables = [ + { name: 'asset_pc', defaultRole: 'Personal' }, + { name: 'asset_server', defaultRole: 'Server' }, + { name: 'asset_storage', defaultRole: 'Normal' }, + { name: 'asset_equipment', defaultRole: 'Normal' }, + { name: 'asset_office_supplies', defaultRole: 'Normal' }, + { name: 'asset_survey', defaultRole: 'Normal' }, + { name: 'asset_vip', defaultRole: 'Normal' }, + { name: 'asset_pc_parts', defaultRole: 'Normal' } + ]; + + let totalMigrated = 0; + + for (const tableInfo of legacyTables) { + const table = tableInfo.name; + try { + const [rows] = await connection.query(`SELECT * FROM ${table}`); + console.log(`- Migrating ${rows.length} records from ${table}...`); + + for (const row of rows) { + // 2.1 Insert into asset_core + const role = (table === 'asset_pc' && row.asset_type === '서버PC') ? 'Server' : tableInfo.defaultRole; + + await connection.query(` + INSERT IGNORE INTO asset_core ( + id, asset_code, category, asset_type, current_role, asset_purpose, service_type, purchase_corp, purchase_date, + purchase_amount, purchase_vendor, approval_document, memo, manager_primary, manager_secondary, + current_dept, previous_dept, user_current, previous_user, emp_no, user_position, created_at + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + `, [ + row.id, row.asset_code, row.category, row.asset_type, role, row.asset_purpose, row.service_type, + row.purchase_corp, row.purchase_date, row.purchase_amount, row.purchase_vendor, row.approval_document, + row.memo, row.manager_primary, row.manager_secondary, row.current_dept, row.previous_dept, + row.user_current || row.current_user, row.previous_user, row.emp_no, row.user_position, row.created_at + ]); + + // 2.2 Insert into asset_hardware + await connection.query(` + INSERT INTO asset_hardware ( + asset_id, hw_status, model_name, mainboard, os, cpu, ram, gpu, storage1, storage2, storage3, storage4, monitoring, price, volume, monitor_inch, serial_num + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + `, [ + row.id, row.hw_status, row.model_name, row.mainboard, row.os, row.cpu, row.ram, row.gpu, + row.ssd_1 || row.storage1, row.ssd_2 || row.storage2, row.hdd_1 || row.storage3, row.hdd_2, row.monitoring, row.price, + row.volume, row.monitor_inch, row.serial_num + ]); + + // 2.3 Insert into asset_location + if (row.location || row.location_detail) { + await connection.query(` + INSERT INTO asset_location ( + asset_id, location, location_detail, location_photo, loc_x, loc_y, is_active + ) VALUES (?, ?, ?, ?, ?, ?, 1) + `, [ + row.id, row.location, row.location_detail, row.location_photo, row.loc_x, row.loc_y + ]); + } + + // 2.4 Insert into asset_remote + // Primary Network + if (row.ip_address || row.mac_address || row.remote_tool) { + await connection.query(` + INSERT INTO asset_remote ( + asset_id, ip_address, mac_address, remote_tool, remote_id, remote_pw, is_active + ) VALUES (?, ?, ?, ?, ?, ?, 1) + `, [ + row.id, row.ip_address, row.mac_address, row.remote_tool, row.remote_id, row.remote_pw + ]); + } + + // Secondary Network (for servers) + if (row.ip_address_2 || row.remote_tool_2) { + await connection.query(` + INSERT INTO asset_remote ( + asset_id, ip_address, remote_tool, remote_id, remote_pw, is_active + ) VALUES (?, ?, ?, ?, ?, 1) + `, [ + row.id, row.ip_address_2, row.remote_tool_2, row.remote_id_2, row.remote_pw_2 + ]); + } + + totalMigrated++; + } + } catch (err) { + console.warn(`- Skipping table ${table}: ${err.message}`); + } + } + + await connection.query('SET FOREIGN_KEY_CHECKS = 1'); + console.log(`✅ Phase 2 Data Migration Completed. Total Assets Migrated: ${totalMigrated}`); + + } catch (err) { + console.error('❌ Migration Failed:', err); + } finally { + await connection.end(); + } +} + +migrateV2(); diff --git a/migrate_v4_network.js b/migrate_v4_network.js new file mode 100644 index 0000000..e61dbb8 --- /dev/null +++ b/migrate_v4_network.js @@ -0,0 +1,73 @@ +import mysql from 'mysql2/promise'; +import dotenv from 'dotenv'; + +dotenv.config(); + +const pool = mysql.createPool({ + host: process.env.DB_HOST, + user: process.env.DB_USER, + password: process.env.DB_PASS, + database: process.env.DB_NAME, + port: parseInt(process.env.DB_PORT || '3306'), +}); + +async function migrate() { + const conn = await pool.getConnection(); + try { + console.log('1. Creating asset_remote_v4 table...'); + await conn.query(` + CREATE TABLE IF NOT EXISTS asset_remote_v4 ( + id INT AUTO_INCREMENT PRIMARY KEY, + asset_id VARCHAR(50) NOT NULL, + net_type VARCHAR(20) NOT NULL, /* 'IP' or 'REMOTE' */ + net_name VARCHAR(100), /* e.g., '기본망', 'AnyDesk' */ + net_value1 VARCHAR(100), /* IP or ID */ + net_value2 VARCHAR(100), /* MAC or PW */ + is_active TINYINT(1) DEFAULT 1, + deactivated_at DATETIME NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (asset_id) REFERENCES asset_core(id) ON DELETE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + `); + + console.log('2. Migrating data from asset_remote...'); + const [oldRows] = await conn.query('SELECT * FROM asset_remote WHERE is_active = 1'); + + let ipCount = 0; + let remoteCount = 0; + + for (const row of oldRows) { + // Migrating IP/MAC + if (row.ip_address || row.mac_address) { + await conn.query( + 'INSERT INTO asset_remote_v4 (asset_id, net_type, net_name, net_value1, net_value2, created_at) VALUES (?, ?, ?, ?, ?, ?)', + [row.asset_id, 'IP', '기본망', row.ip_address, row.mac_address, row.created_at] + ); + ipCount++; + } + // Migrating Remote + if (row.remote_tool || row.remote_id || row.remote_pw) { + await conn.query( + 'INSERT INTO asset_remote_v4 (asset_id, net_type, net_name, net_value1, net_value2, created_at) VALUES (?, ?, ?, ?, ?, ?)', + [row.asset_id, 'REMOTE', row.remote_tool, row.remote_id, row.remote_pw, row.created_at] + ); + remoteCount++; + } + } + + console.log(`Migrated ${ipCount} IP records and ${remoteCount} Remote records.`); + + console.log('3. Renaming tables...'); + await conn.query('DROP TABLE IF EXISTS asset_remote_legacy'); + await conn.query('RENAME TABLE asset_remote TO asset_remote_legacy, asset_remote_v4 TO asset_remote;'); + + console.log('✅ Migration V4 (Remote) Complete.'); + } catch (e) { + console.error('Migration failed:', e); + } finally { + conn.release(); + pool.end(); + } +} + +migrate(); \ No newline at end of file diff --git a/migrate_v5_rename_remote.js b/migrate_v5_rename_remote.js new file mode 100644 index 0000000..2902006 --- /dev/null +++ b/migrate_v5_rename_remote.js @@ -0,0 +1,28 @@ +import mysql from 'mysql2/promise'; +import dotenv from 'dotenv'; + +dotenv.config(); + +const pool = mysql.createPool({ + host: process.env.DB_HOST, + user: process.env.DB_USER, + password: process.env.DB_PASS, + database: process.env.DB_NAME, + port: parseInt(process.env.DB_PORT || '3306'), +}); + +async function migrate() { + const conn = await pool.getConnection(); + try { + console.log('1. Renaming asset_network to asset_remote...'); + await conn.query('RENAME TABLE asset_network TO asset_remote'); + console.log('✅ Table renamed successfully.'); + } catch (e) { + console.error('Migration failed:', e); + } finally { + conn.release(); + pool.end(); + } +} + +migrate(); diff --git a/server.js b/server.js index 1dacc03..b2772af 100644 --- a/server.js +++ b/server.js @@ -39,7 +39,7 @@ const CATEGORY_TABLE_MAP = { pc: 'asset_pc', server: 'asset_server', storage: 'asset_storage', - network: 'asset_network', + network: 'asset_remote', equipment: 'asset_equipment', officeSupplies: 'asset_office_supplies', survey: 'asset_survey', @@ -53,7 +53,7 @@ const CATEGORY_TABLE_MAP = { }; const ASSET_TABLES = [ - 'asset_pc', 'asset_server', 'asset_storage', 'asset_network', + 'asset_pc', 'asset_server', 'asset_storage', 'asset_remote', 'asset_equipment', 'asset_office_supplies', 'asset_survey', 'asset_vip' ]; @@ -115,7 +115,10 @@ app.get('/api/assets/master', async (req, res) => { s.hw_status, s.model_name, s.mainboard, s.os, s.cpu, s.ram, s.gpu, s.monitoring, s.price, s.monitor_inch, s.serial_num, l.location, l.location_detail, l.location_photo, l.loc_x, l.loc_y, - n.ip_address, n.mac_address, n.remote_tool, n.remote_id, n.remote_pw, + ( + SELECT JSON_ARRAYAGG(JSON_OBJECT('type', net_type, 'name', net_name, 'val1', net_value1, 'val2', net_value2)) + FROM asset_remote WHERE asset_id = c.id AND is_active = 1 + ) as remotes, ( SELECT JSON_ARRAYAGG(JSON_OBJECT('type', disk_type, 'capacity', capacity, 'unit', unit, 'slot', slot_no)) FROM asset_volume WHERE asset_id = c.id @@ -127,11 +130,6 @@ app.get('/api/assets/master', async (req, res) => { WHERE asset_id = c.id AND is_active = 1 ORDER BY created_at DESC LIMIT 1 ) - LEFT JOIN asset_network n ON n.id = ( - SELECT id FROM asset_network - WHERE asset_id = c.id AND is_active = 1 - ORDER BY created_at DESC LIMIT 1 - ) `); const catMap = { @@ -223,14 +221,36 @@ app.post('/api/asset/:category/save', async (req, res) => { } } - // 3.5 asset_network - if (asset.ip_address || asset.mac_address || asset.remote_tool) { - const [netActive] = await connection.query('SELECT * FROM asset_network WHERE asset_id = ? AND is_active = 1', [asset.id]); - const isChanged = netActive.length === 0 || netActive[0].ip_address !== asset.ip_address || netActive[0].mac_address !== asset.mac_address || netActive[0].remote_tool !== asset.remote_tool || netActive[0].remote_id !== asset.remote_id || netActive[0].remote_pw !== asset.remote_pw; - if (isChanged) { - await connection.query('UPDATE asset_network SET is_active = 0, deactivated_at = NOW() WHERE asset_id = ? AND is_active = 1', [asset.id]); - await connection.query(`INSERT INTO asset_network (asset_id, ip_address, mac_address, remote_tool, remote_id, remote_pw, is_active) VALUES (?, ?, ?, ?, ?, ?, 1)`, - [asset.id, asset.ip_address, asset.mac_address, asset.remote_tool, asset.remote_id, asset.remote_pw]); + // 3.5 asset_remote (Dynamic Array Logic) + if (asset.remotes) { + try { + let nets = typeof asset.remotes === 'string' ? JSON.parse(asset.remotes) : asset.remotes; + if (Array.isArray(nets)) { + await connection.query('UPDATE asset_remote SET is_active = 0, deactivated_at = NOW() WHERE asset_id = ? AND is_active = 1', [asset.id]); + for (const n of nets) { + if (n.type) { + await connection.query( + 'INSERT INTO asset_remote (asset_id, net_type, net_name, net_value1, net_value2, is_active) VALUES (?, ?, ?, ?, ?, 1)', + [asset.id, n.type, n.name || '', n.val1 || '', n.val2 || ''] + ); + } + } + } + } catch(e) { console.error('Remote data parse error', e); } + } else { + // Fallback for UI that hasn't sent the networks array yet + if (asset.ip_address || asset.mac_address || asset.remote_tool) { + const [netActive] = await connection.query('SELECT * FROM asset_remote WHERE asset_id = ? AND is_active = 1', [asset.id]); + const isChanged = netActive.length === 0 || netActive[0].net_value1 !== asset.ip_address || netActive[0].net_value2 !== asset.mac_address || netActive[0].net_name !== asset.remote_tool; + if (isChanged) { + await connection.query('UPDATE asset_remote SET is_active = 0, deactivated_at = NOW() WHERE asset_id = ? AND is_active = 1', [asset.id]); + if (asset.ip_address || asset.mac_address) { + await connection.query('INSERT INTO asset_remote (asset_id, net_type, net_name, net_value1, net_value2, is_active) VALUES (?, ?, ?, ?, ?, 1)', [asset.id, 'IP', '기본망', asset.ip_address, asset.mac_address]); + } + if (asset.remote_tool || asset.remote_id || asset.remote_pw) { + await connection.query('INSERT INTO asset_remote (asset_id, net_type, net_name, net_value1, net_value2, is_active) VALUES (?, ?, ?, ?, ?, 1)', [asset.id, 'REMOTE', asset.remote_tool, asset.remote_id, asset.remote_pw]); + } + } } } @@ -272,7 +292,7 @@ app.delete('/api/asset/:category/:id', async (req, res) => { try { const connection = await pool.getConnection(); - // For asset_core, ON DELETE CASCADE will handle spec, location, network, volume + // For asset_core, ON DELETE CASCADE will handle spec, location, remote, volume await connection.query(`DELETE FROM ${table} WHERE id = ?`, [id]); connection.release(); console.log(`🗑️ [ASSET DELETE] Category: ${category}, ID: ${id}`); diff --git a/src/components/Modal/HWModal.ts b/src/components/Modal/HWModal.ts index 9cd7916..5a59bb6 100644 --- a/src/components/Modal/HWModal.ts +++ b/src/components/Modal/HWModal.ts @@ -35,8 +35,9 @@ class HwAssetModal extends BaseModal { ' + '
' + @@ -1108,7 +1177,10 @@ export function renderHwDashboard(container: HTMLElement) { serverServiceGroups, serverStatusGroups, purposeServerUnders, - purposeServerOvers + purposeServerOvers, + totalCheckout, + totalReturn, + totalMove ); // 기획서 보기 버튼 클릭 이벤트 바인딩 @@ -1191,7 +1263,10 @@ function initCharts( serviceGroups: any, statusGroups: any, purposeServerUnders?: any, - purposeServerOvers?: any + purposeServerOvers?: any, + totalCheckout?: number, + totalReturn?: number, + totalMove?: number ) { // 직무별 점수 const jobCtx = document.getElementById('chart-job-scores') as HTMLCanvasElement; @@ -1654,4 +1729,39 @@ function initCharts( } }); } + + // PC 유동 비율 도넛 차트 + const flowCtx = document.getElementById('chart-pc-flow-stats') as HTMLCanvasElement; + if (flowCtx && typeof Chart !== 'undefined') { + const tCheckout = totalCheckout || 0; + const tReturn = totalReturn || 0; + const tMove = totalMove || 0; + + if (pcFlowChartInstance) { + pcFlowChartInstance.destroy(); + pcFlowChartInstance = null; + } + + pcFlowChartInstance = new Chart(flowCtx, { + type: 'doughnut', + data: { + labels: ['불출', '입고(반납)', '이동(이관)'], + datasets: [{ + data: [tCheckout, tReturn, tMove], + backgroundColor: ['#3B82F6', '#10B981', '#F59E0B'], + borderWidth: 0, + hoverOffset: 8 + }] + }, + options: { + responsive: true, + maintainAspectRatio: false, + plugins: { + legend: { position: 'bottom', labels: { padding: 10, usePointStyle: true, boxWidth: 10 } } + }, + cutout: '75%', + animation: { animateScale: true, animateRotate: true } + } + }); + } } diff --git a/src/views/List/ListFactory.ts b/src/views/List/ListFactory.ts index fa6abef..4580972 100644 --- a/src/views/List/ListFactory.ts +++ b/src/views/List/ListFactory.ts @@ -5,6 +5,132 @@ import { renderFilterBar, applyCommonFilters } from '../../core/filterHandler'; import { state } from '../../core/state'; import { IMAGE_LOCATIONS } from '../../components/Modal/SharedData'; +declare var Chart: any; +let pcFlowChartInstance: any = null; + +// ─── 100점 만점 감점형 성능 점수 계산 (CPU + RAM + GPU + 연식) ─── +function calculatePcScoreDeductive(cpu: string, ram: string, gpu: string, purchaseDate: string): number { + let score = 100; + if (!cpu) cpu = ''; + if (!ram) ram = ''; + if (!gpu) gpu = ''; + + const cpuUpper = cpu.toUpperCase(); + const ramUpper = ram.toUpperCase(); + const gpuUpper = gpu.toUpperCase(); + + // 1. CPU 등급 감점 (최대 -30점) + let cpuDeduction = 0; + if (cpuUpper.includes('I9') || cpuUpper.includes('RYZEN 9') || cpuUpper.includes('RYZEN9')) { + cpuDeduction = 0; + } else if (cpuUpper.includes('I7') || cpuUpper.includes('RYZEN 7') || cpuUpper.includes('RYZEN7')) { + cpuDeduction = 5; + } else if (cpuUpper.includes('I5') || cpuUpper.includes('RYZEN 5') || cpuUpper.includes('RYZEN5')) { + cpuDeduction = 15; + } else if (cpuUpper.includes('I3') || cpuUpper.includes('RYZEN 3') || cpuUpper.includes('RYZEN3')) { + cpuDeduction = 25; + } else { + cpuDeduction = 30; + } + score -= cpuDeduction; + + // 2. CPU 세대 노후 감점 (최대 -15점) + let genDeduction = 0; + const intelMatch = cpuUpper.match(/I\d-?(\d+)/); + let gen = 0; + if (intelMatch && intelMatch[1]) { + const numStr = intelMatch[1]; + if (numStr.length === 5) gen = parseInt(numStr.substring(0, 2), 10); + else if (numStr.length === 4) gen = parseInt(numStr.substring(0, 1), 10); + } + + const amdMatch = cpuUpper.match(/RYZEN\s?\d\s?-?(\d+)/); + let amdGen = 0; + if (amdMatch && amdMatch[1] && !intelMatch) { + const numStr = amdMatch[1]; + if (numStr.length === 4) amdGen = parseInt(numStr.substring(0, 1), 10); + } + + if (intelMatch) { + if (gen >= 12) genDeduction = 0; + else if (gen >= 10) genDeduction = 5; + else if (gen >= 8) genDeduction = 10; + else genDeduction = 15; + } else if (amdMatch) { + if (amdGen >= 5) genDeduction = 0; + else if (amdGen >= 3) genDeduction = 5; + else genDeduction = 10; + } else { + genDeduction = 15; + } + score -= genDeduction; + + // 3. RAM 용량 감점 (최대 -25점) + const ramMatch = ramUpper.match(/(\d+)\s*GB/); + let ramDeduction = 25; + if (ramMatch && ramMatch[1]) { + const ramVal = parseInt(ramMatch[1], 10); + if (ramVal >= 32) ramDeduction = 0; + else if (ramVal >= 16) ramDeduction = 10; + else if (ramVal >= 8) ramDeduction = 20; + else ramDeduction = 25; + } + score -= ramDeduction; + + // 4. GPU 성능 감점 (최대 -25점) + let gpuDeduction = 25; + if (!gpuUpper || gpuUpper === '-' || gpuUpper.trim() === '') { + gpuDeduction = 25; + } else if ( + gpuUpper.includes('RTX 4090') || gpuUpper.includes('RTX 4080') || gpuUpper.includes('RTX 4070') || + gpuUpper.includes('RTX A5000') || gpuUpper.includes('RTX A6000') || gpuUpper.includes('RTX A4000') + ) { + gpuDeduction = 0; + } else if ( + gpuUpper.includes('RTX 3070') || gpuUpper.includes('RTX 3060') || gpuUpper.includes('RTX 2060') || + gpuUpper.includes('RTX A2000') || gpuUpper.includes('RTX A3000') || gpuUpper.includes('QUADRO') + ) { + gpuDeduction = 5; + } else if ( + gpuUpper.includes('GTX 1660') || gpuUpper.includes('GTX 1080') || gpuUpper.includes('GTX 1070') || + gpuUpper.includes('GTX 1060') || gpuUpper.includes('RX 6700') || gpuUpper.includes('RX 6600') + ) { + gpuDeduction = 15; + } else { + gpuDeduction = 25; + } + score -= gpuDeduction; + + // 5. 연식(노후도) 감점 (최대 -15점) + let age = 0; + if (purchaseDate && purchaseDate !== '-') { + let normalized = purchaseDate.replace(/\./g, '-').trim(); + if (/^\d{6}$/.test(normalized)) { + normalized = `${normalized.substring(0, 4)}-${normalized.substring(4, 6)}`; + } + const purchase = new Date(normalized); + if (!isNaN(purchase.getTime())) { + // 2026년 5월 31일 기준 경과연수 계산 + const mockToday = new Date('2026-05-31'); + const diffMs = mockToday.getTime() - purchase.getTime(); + age = diffMs / (1000 * 60 * 60 * 24 * 365.25); + age = Math.max(0, parseFloat(age.toFixed(1))); + } + } + + let ageDeduction = 0; + if (age < 1) ageDeduction = 0; + else if (age < 2) ageDeduction = 3; + else if (age < 3) ageDeduction = 6; + else if (age < 4) ageDeduction = 9; + else if (age < 5) ageDeduction = 12; + else ageDeduction = 15; + + score -= ageDeduction; + + return Math.max(10, score); +} + export interface ColumnDef { header: string; sortKey?: string; @@ -47,15 +173,24 @@ export function createListView(container: HTMLElement, config: ListViewConfig) { // 2. 뷰 전환 토글 버튼 생성 (명칭 변경) const toggleWrapper = document.createElement('div'); toggleWrapper.className = 'view-toggle-container'; + + const showPcFlowBtn = config.title === 'PC'; toggleWrapper.innerHTML = `
- +
+ ${showPcFlowBtn ? ` + + ` : ''} + +
`; container.appendChild(toggleWrapper); @@ -71,7 +206,7 @@ export function createListView(container: HTMLElement, config: ListViewConfig) { container.appendChild(contentWrapper); // --- 내부 상태 --- - let selectedLocation: string | null = '기술개발센터'; + let selectedLocation: string | null = null; let selectedDetailLocation: string | null = null; let dynamicMapConfig: Record = {}; @@ -88,6 +223,19 @@ export function createListView(container: HTMLElement, config: ListViewConfig) { const renderSystemStatus = () => { const isPcView = config.title === 'PC'; + // 실제 보유 자산이 존재하는 위치 목록만 추출 (0대인 곳 제외) + const validLocations = Array.from(new Set(fullList.map(a => a[ASSET_SCHEMA.LOCATION.key] || '미지정'))) + .filter(l => { + const count = fullList.filter(a => (a[ASSET_SCHEMA.LOCATION.key] || '미지정') === l).length; + return count > 0; + }) + .sort(); + + // 초기값이나 유효하지 않은 값이 지정되어 있다면 첫 번째 유효 위치로 동적 갱신 + if (!selectedLocation || !validLocations.includes(selectedLocation)) { + selectedLocation = validLocations[0] || ''; + } + const locationCounts: Record = {}; const pcTypeCounts = { public: 0, server: 0, personal: 0 }; @@ -215,29 +363,45 @@ export function createListView(container: HTMLElement, config: ListViewConfig) {
-
+
-

자산 현황 목록

+

+ ${isPcView ? `🔄 PC 유동 이력 (${new Date().getMonth() + 1}월)` : '자산 현황 목록'} +

+ ${!isPcView ? `
위치: 상세:
+ ` : ''}
- - - - - - - + ${isPcView ? ` + + + + + + + + + + ` : ` + + + + + + + + `}
분류용도/자산명관리자(정)관리자(부)상세위치
일자담당자구분사용자인수자자산번호상세
분류용도/자산명관리자(정)관리자(부)상세위치
@@ -245,9 +409,34 @@ export function createListView(container: HTMLElement, config: ListViewConfig) {
-
-
-

목록에서 자산을 선택하면
상세 정보와 배치도가 표시됩니다.

+
+
+ ${isPcView ? ` +
+
+

+ ⚠️ 사양 주의 장비 현황 (부족/오버스펙) +

+
+
+ + + + + + + + + + + + +
사용자부서 (직무)상태자산코드
사양 주의 자산이 없습니다.
+
+
+ ` : ` +

목록에서 자산을 선택하면
상세 정보와 배치도가 표시됩니다.

+ `}
+
@@ -394,86 +586,368 @@ export function createListView(container: HTMLElement, config: ListViewConfig) { if (msg) msg.textContent = !hasCoords ? '등록된 위치 좌표 정보가 없습니다.' : '등록된 배치도가 없습니다.'; } } + + // 이력 보기 버튼 클릭 이벤트 + const flowLogsBtn = document.getElementById('btn-view-flow-logs'); + if (flowLogsBtn) { + flowLogsBtn.onclick = () => { + const emptyState = document.getElementById('detail-empty-state'); + const content = document.getElementById('detail-content'); + if (emptyState && content) { + content.style.display = 'none'; + emptyState.style.display = 'flex'; + } + const tbody = document.getElementById('system-status-tbody'); + if (tbody) { + tbody.querySelectorAll('.mini-row').forEach(r => { + const rIsWarning = (r as HTMLElement).style.borderLeftColor === 'rgb(225, 29, 72)'; + (r as HTMLElement).style.backgroundColor = rIsWarning ? '#FFF1F2' : 'transparent'; + }); + } + updateFlowLogsSection(); + }; + } }; const updateTableOnly = () => { - let filtered = selectedLocation - ? fullList.filter(a => (a[ASSET_SCHEMA.LOCATION.key] || '미지정') === selectedLocation) - : fullList; - const currentDetailLocs = Array.from(new Set(filtered.map(a => a[ASSET_SCHEMA.LOC_DETAIL.key] || '미지정'))).sort(); - if (selectedDetailLocation) filtered = filtered.filter(a => (a[ASSET_SCHEMA.LOC_DETAIL.key] || '미지정') === selectedDetailLocation); - const finalDisplayList = (!selectedLocation && !selectedDetailLocation) ? filtered.slice(0, 10) : filtered; + const now = new Date(); + const currentYear = now.getFullYear(); + const currentMonthNum = now.getMonth() + 1; + const currentYearMonth = `${currentYear}-${String(currentMonthNum).padStart(2, '0')}`; - const titleEl = document.getElementById('list-section-title'); - if (titleEl) titleEl.textContent = selectedLocation ? `${selectedLocation} 자산 현황 (${finalDisplayList.length}대)` : '위치별 자산등록현황 (최근 등록)'; - const selectEl = document.getElementById('select-detail-loc') as HTMLSelectElement; - if (selectEl && !selectedDetailLocation) { - selectEl.innerHTML = `` + currentDetailLocs.map(dl => ``).join(''); - } + if (isPcView) { + // PC 뷰일 때: 해당월의 PC 유동 이력을 렌더링하고, 클릭 시 해당 자산 상세를 띄움 + const recentTbody = document.getElementById('system-status-tbody'); + if (!recentTbody) return; - const tbody = document.getElementById('system-status-tbody'); - if (tbody) { - tbody.innerHTML = finalDisplayList.length === 0 - ? `조회된 자산이 없습니다.` - : finalDisplayList.map(asset => { - const purpose = asset[ASSET_SCHEMA.ASSET_PURPOSE.key] || ''; - const serviceTypeKey = (ASSET_SCHEMA as any).SERVICE_TYPE?.key || 'service_type'; - const serviceType = asset[serviceTypeKey] || '외부'; - const type = asset[ASSET_SCHEMA.ASSET_TYPE.key] || ''; - const loc = asset[ASSET_SCHEMA.LOCATION.key] || ''; - - const labelColor = serviceType === '내부' ? '#94A3B8' : '#35635C'; - const managerMain = asset[ASSET_SCHEMA.MANAGER_MAIN.key] || '-'; - const managerSub = asset[ASSET_SCHEMA.MANAGER_SUB.key] || '-'; - - // [경고 로직] 외부 운영인데 서버PC이거나 IDC가 아닌 경우 - const isLocWarning = serviceType === '외부SW' && loc !== 'IDC'; - const isTypeWarning = serviceType === '외부SW' && type.toLowerCase().replace(/\s/g, '').includes('서버pc'); - const isWarning = isLocWarning || isTypeWarning; - const warningStyle = isWarning ? 'background-color: #FFF1F2; border-left: 3px solid #E11D48;' : ''; + const titleEl = document.getElementById('list-section-title'); + if (titleEl) { + titleEl.textContent = `🔄 PC 유동 이력 (${currentMonthNum}월)`; + } - let warningReason = ''; - if (isLocWarning && isTypeWarning) warningReason = '위치/형식 부적절'; - else if (isLocWarning) warningReason = '위치 부적절'; - else if (isTypeWarning) warningReason = '형식 부적절'; - - return ` - - -
- ${serviceType} - ${isWarning ? `${warningReason}` : ''} -
- - ${purpose || '-'} - ${managerMain} - ${managerSub} - ${asset[ASSET_SCHEMA.LOC_DETAIL.key] || '-'} - `; - }).join(''); - tbody.querySelectorAll('.mini-row').forEach(row => { - row.addEventListener('click', () => { - tbody.querySelectorAll('.mini-row').forEach(r => { - const rIsWarning = (r as HTMLElement).style.borderLeftColor === 'rgb(225, 29, 72)'; // E11D48 - (r as HTMLElement).style.backgroundColor = rIsWarning ? '#FFF1F2' : 'transparent'; - }); - (row as HTMLElement).style.backgroundColor = '#EBF2F1'; // 선택 하이라이트 - const id = (row as HTMLElement).getAttribute('data-id'); - const asset = fullList.find(a => a.id === id); - if (asset) updateDetailPanel(asset); - }); - row.addEventListener('mouseenter', () => { - if ((row as HTMLElement).style.backgroundColor !== 'rgb(235, 242, 241)') { - (row as HTMLElement).style.backgroundColor = '#F8FAFA'; - } - }); - row.addEventListener('mouseleave', () => { - const isWarning = (row as HTMLElement).style.borderLeftColor === 'rgb(225, 29, 72)'; - if ((row as HTMLElement).style.backgroundColor !== 'rgb(235, 242, 241)') { - (row as HTMLElement).style.backgroundColor = isWarning ? '#FFF1F2' : 'transparent'; - } - }); + const logs = state.masterData.logs || []; + const flowLogs = logs.filter((log: any) => { + const details = log.details || ''; + if (details.trim().startsWith('{')) { + try { + const info = JSON.parse(details); + return info && (info.type === 'checkout' || info.type === 'return' || info.type === 'move'); + } catch (e) {} + } + return details.includes('[불출]') || details.includes('[반납]') || details.includes('[입고]') || details.includes('[이동]') || details.includes('[이관]'); }); + + // 해당월(currentYearMonth)에 발생한 로그만 필터링 + const monthlyFlowLogs = flowLogs.filter((log: any) => { + const logDate = log.log_date || ''; + return logDate.startsWith(currentYearMonth); + }); + + if (monthlyFlowLogs.length === 0) { + recentTbody.innerHTML = `${currentMonthNum}월 유동 이력이 없습니다.`; + } else { + recentTbody.innerHTML = monthlyFlowLogs.map((log: any) => { + const details = log.details || ''; + + let typeDisplay = '-'; + let userDisplay = '-'; + let targetUserDisplay = '-'; + let assetCodeDisplay = '-'; + let memoDisplay = '-'; + + try { + const info = JSON.parse(details); + if (info.type === 'checkout') typeDisplay = 'checkout'; + else if (info.type === 'return') typeDisplay = 'return'; + else if (info.type === 'move') typeDisplay = 'move'; + + userDisplay = info.user || '-'; + targetUserDisplay = info.targetUser || '-'; + assetCodeDisplay = info.assetCode || '-'; + memoDisplay = info.memo || '-'; + } catch (e) { + // 하위 호환 파싱 (기존 텍스트형 로그) + if (details.includes('[불출]')) typeDisplay = 'checkout'; + else if (details.includes('[반납]') || details.includes('[입고]')) typeDisplay = 'return'; + else if (details.includes('[이동]') || details.includes('[이관]')) typeDisplay = 'move'; + + const codeMatch = details.match(/PC-\d{6}-\d{4}|HW-PC-\d+/i); + if (codeMatch) assetCodeDisplay = codeMatch[0]; + + if (details.includes('[불출]')) { + const match1 = details.match(/\[불출\]\s*([^\s\(]+)\s*사원/); + if (match1) userDisplay = match1[1]; + else { + const match2 = details.match(/\[불출\]\s*([a-zA-Z가-힣]+)/); + userDisplay = match2 ? match2[1] : '-'; + } + } else if (details.includes('[반납]') || details.includes('[입고]')) { + const match1 = details.match(/\[(?:반납|입고)\]\s*([^\s\(]+)\s*사원/); + if (match1) userDisplay = match1[1]; + else { + const match2 = details.match(/\[(?:반납|입고)\]\s*([a-zA-Z가-힣]+)/); + userDisplay = match2 ? match2[1] : '-'; + } + } else if (details.includes('[이동]') || details.includes('[이관]')) { + const prefixWord = details.includes('[이동]') ? '\\[이동\\]' : '\\[이관\\]'; + const parts = details.split('➡️'); + if (parts.length === 2) { + const fromMatch = parts[0].match(new RegExp(`${prefixWord}\\s*([a-zA-Z가-힣]+)`)); + const toMatch = parts[1].match(/\s*([a-zA-Z가-힣]+)/); + if (fromMatch && toMatch) { + userDisplay = fromMatch[1]; + targetUserDisplay = toMatch[1]; + } + } + if (userDisplay === '-') { + const match1 = details.match(new RegExp(`${prefixWord}\\s*([^\s\(]+)\\s*사원`)); + if (match1) { + userDisplay = match1[1]; + } else { + const match2 = details.match(new RegExp(`${prefixWord}\\s*([a-zA-Z가-힣0-9_]+)`)); + userDisplay = match2 ? match2[1] : '-'; + } + } + } + + const cleanDetails = details.replace(/^\[(불출|반납|입고|이동|이관)\]\s*/, ''); + const memoParts = cleanDetails.split(' - '); + if (memoParts.length >= 2) { + memoDisplay = memoParts[memoParts.length - 1]; + } else { + if (cleanDetails.includes('지급') || cleanDetails.includes('반납') || cleanDetails.includes('이관')) { + memoDisplay = '-'; + } else { + memoDisplay = cleanDetails || '-'; + } + } + } + + // 구분 뱃지 생성 + let badgeHtml = ''; + if (typeDisplay === 'checkout') { + badgeHtml = '불출'; + } else if (typeDisplay === 'return') { + badgeHtml = '입고'; + } else if (typeDisplay === 'move') { + badgeHtml = '이동'; + } else { + badgeHtml = '기타'; + } + + return ` + + ${log.log_date || '-'} + ${log.log_user || '시스템'} + ${badgeHtml} + ${userDisplay} + ${targetUserDisplay} + ${assetCodeDisplay} + ${memoDisplay} + + `; + }).join(''); + } + } else { + // 기존의 자산 현황 목록 갱신 + let filtered = selectedLocation + ? fullList.filter(a => (a[ASSET_SCHEMA.LOCATION.key] || '미지정') === selectedLocation) + : fullList; + const currentDetailLocs = Array.from(new Set(filtered.map(a => a[ASSET_SCHEMA.LOC_DETAIL.key] || '미지정'))).sort(); + if (selectedDetailLocation) filtered = filtered.filter(a => (a[ASSET_SCHEMA.LOC_DETAIL.key] || '미지정') === selectedDetailLocation); + const finalDisplayList = (!selectedLocation && !selectedDetailLocation) ? filtered.slice(0, 10) : filtered; + + const titleEl = document.getElementById('list-section-title'); + if (titleEl) titleEl.textContent = selectedLocation ? `${selectedLocation} 자산 현황 (${finalDisplayList.length}대)` : '위치별 자산등록현황 (최근 등록)'; + const selectEl = document.getElementById('select-detail-loc') as HTMLSelectElement; + if (selectEl && !selectedDetailLocation) { + selectEl.innerHTML = `` + currentDetailLocs.map(dl => ``).join(''); + } + + const tbody = document.getElementById('system-status-tbody'); + if (tbody) { + tbody.innerHTML = finalDisplayList.length === 0 + ? `조회된 자산이 없습니다.` + : finalDisplayList.map(asset => { + const purpose = asset[ASSET_SCHEMA.ASSET_PURPOSE.key] || ''; + const serviceTypeKey = (ASSET_SCHEMA as any).SERVICE_TYPE?.key || 'service_type'; + const serviceType = asset[serviceTypeKey] || '외부'; + const type = asset[ASSET_SCHEMA.ASSET_TYPE.key] || ''; + const loc = asset[ASSET_SCHEMA.LOCATION.key] || ''; + + const labelColor = serviceType === '내부' ? '#94A3B8' : '#35635C'; + const managerMain = asset[ASSET_SCHEMA.MANAGER_MAIN.key] || '-'; + const managerSub = asset[ASSET_SCHEMA.MANAGER_SUB.key] || '-'; + + // [경고 로직] 외부 운영인데 서버PC이거나 IDC가 아닌 경우 + const isLocWarning = serviceType === '외부SW' && loc !== 'IDC'; + const isTypeWarning = serviceType === '외부SW' && type.toLowerCase().replace(/\s/g, '').includes('서버pc'); + const isWarning = isLocWarning || isTypeWarning; + const warningStyle = isWarning ? 'background-color: #FFF1F2; border-left: 3px solid #E11D48;' : ''; + + let warningReason = ''; + if (isLocWarning && isTypeWarning) warningReason = '위치/형식 부적절'; + else if (isLocWarning) warningReason = '위치 부적절'; + else if (isTypeWarning) warningReason = '형식 부적절'; + + return ` + + +
+ ${serviceType} + ${isWarning ? `${warningReason}` : ''} +
+ + ${purpose || '-'} + ${managerMain} + ${managerSub} + ${asset[ASSET_SCHEMA.LOC_DETAIL.key] || '-'} + `; + }).join(''); + + tbody.querySelectorAll('.mini-row').forEach(row => { + row.addEventListener('click', () => { + tbody.querySelectorAll('.mini-row').forEach(r => { + const rIsWarning = (r as HTMLElement).style.borderLeftColor === 'rgb(225, 29, 72)'; // E11D48 + (r as HTMLElement).style.backgroundColor = rIsWarning ? '#FFF1F2' : 'transparent'; + }); + (row as HTMLElement).style.backgroundColor = '#EBF2F1'; // 선택 하이라이트 + const id = (row as HTMLElement).getAttribute('data-id'); + const asset = fullList.find(a => a.id === id); + if (asset) updateDetailPanel(asset); + }); + row.addEventListener('mouseenter', () => { + if ((row as HTMLElement).style.backgroundColor !== 'rgb(235, 242, 241)') { + (row as HTMLElement).style.backgroundColor = '#F8FAFA'; + } + }); + row.addEventListener('mouseleave', () => { + const isWarning = (row as HTMLElement).style.borderLeftColor === 'rgb(225, 29, 72)'; + if ((row as HTMLElement).style.backgroundColor !== 'rgb(235, 242, 241)') { + (row as HTMLElement).style.backgroundColor = isWarning ? '#FFF1F2' : 'transparent'; + } + }); + }); + } + } + }; + + const updateFlowLogsSection = () => { + if (!isPcView) return; + + // 사양 주의 장비 현황 (부족/오버스펙) 계산 및 바인딩 + const specMismatchTbody = document.getElementById('spec-mismatch-tbody'); + if (specMismatchTbody) { + // fullList 중 개인 PC 관련 장비 필터링 + const pcs = fullList.filter((a: any) => { + const type = a[ASSET_SCHEMA.ASSET_TYPE.key] || ''; + const job = a[ASSET_SCHEMA.USER_POSITION.key] || ''; + const status = a[ASSET_SCHEMA.HW_STATUS.key] || ''; + const user = a[ASSET_SCHEMA.CURRENT_USER.key] || ''; + + // 사용 중이고 사용자가 할당되어 있으며, 직무가 재고PC가 아닌 실사용 기기 대상 + return job !== '재고PC' && status === '사용중' && user.trim() !== ''; + }); + + // 직무별 평균 점수 산출 + const jobScores: Record = {}; + pcs.forEach((pc: any) => { + const job = pc[ASSET_SCHEMA.USER_POSITION.key] || '미분류'; + const cpu = pc[ASSET_SCHEMA.CPU.key] || ''; + const ram = pc[ASSET_SCHEMA.RAM.key] || ''; + const gpu = pc[ASSET_SCHEMA.GPU.key] || ''; + const pDate = pc[ASSET_SCHEMA.PURCHASE_DATE.key] || ''; + const score = calculatePcScoreDeductive(cpu, ram, gpu, pDate); + pc['_pc_score'] = score; + + if (!jobScores[job]) jobScores[job] = { totalScore: 0, count: 0, avg: 0 }; + jobScores[job].totalScore += score; + jobScores[job].count += 1; + }); + + Object.keys(jobScores).forEach(job => { + jobScores[job].avg = jobScores[job].count > 0 ? jobScores[job].totalScore / jobScores[job].count : 0; + }); + + // 기준 대비 사양 부족/오버스펙 분류 + const criticalPcList: any[] = []; + pcs.forEach((pc: any) => { + const job = pc[ASSET_SCHEMA.USER_POSITION.key] || '미분류'; + const score = pc['_pc_score']; + const avg = jobScores[job].avg; + + if (avg > 0) { + if (score < avg * 0.8) { + pc['_spec_status'] = '사양 부족'; + criticalPcList.push(pc); + } else if (score > avg * 1.3) { + pc['_spec_status'] = '오버스펙'; + criticalPcList.push(pc); + } + } + }); + + // 정렬: 직무 평균 대비 사양 부족이 심한 순(비율이 낮은 순)으로 정렬 + criticalPcList.sort((a: any, b: any) => { + const jobA = a[ASSET_SCHEMA.USER_POSITION.key] || '미분류'; + const jobB = b[ASSET_SCHEMA.USER_POSITION.key] || '미분류'; + const ratioA = jobScores[jobA].avg > 0 ? a['_pc_score'] / jobScores[jobA].avg : 1; + const ratioB = jobScores[jobB].avg > 0 ? b['_pc_score'] / jobScores[jobB].avg : 1; + return ratioA - ratioB; + }); + + if (criticalPcList.length === 0) { + specMismatchTbody.innerHTML = '사양 주의 자산이 없습니다.'; + } else { + specMismatchTbody.innerHTML = criticalPcList.map((pc: any) => { + const user = pc[ASSET_SCHEMA.CURRENT_USER.key] || '-'; + const dept = pc[ASSET_SCHEMA.CURRENT_DEPT.key] || '-'; + const job = pc[ASSET_SCHEMA.USER_POSITION.key] || '-'; + const status = pc['_spec_status']; + const assetCode = pc.asset_code || '-'; + + const badgeColor = status === '사양 부족' + ? 'background:#FFF1F2; color:#E11D48; border: 1px solid #FDA4AF;' + : 'background:#F0FDF4; color:#16A34A; border: 1px solid #BBF7D0;'; + + return ` + + ${user} + ${dept} (${job}) + + ${status} + + ${assetCode} + + `; + }).join(''); + + // 클릭 시 해당 자산 상세 페이지로 전환 + specMismatchTbody.querySelectorAll('.spec-row').forEach(row => { + row.addEventListener('click', () => { + specMismatchTbody.querySelectorAll('.spec-row').forEach(r => { + (r as HTMLElement).style.backgroundColor = 'transparent'; + }); + (row as HTMLElement).style.backgroundColor = '#EBF2F1'; // 선택 하이라이트 + + const id = (row as HTMLElement).getAttribute('data-id'); + const asset = fullList.find(a => String(a.id) === String(id)); + if (asset) { + updateDetailPanel(asset); + } + }); + row.addEventListener('mouseenter', () => { + if ((row as HTMLElement).style.backgroundColor !== 'rgb(235, 242, 241)') { + (row as HTMLElement).style.backgroundColor = '#F8FAFA'; + } + }); + row.addEventListener('mouseleave', () => { + if ((row as HTMLElement).style.backgroundColor !== 'rgb(235, 242, 241)') { + (row as HTMLElement).style.backgroundColor = 'transparent'; + } + }); + }); + } } }; @@ -492,12 +966,15 @@ export function createListView(container: HTMLElement, config: ListViewConfig) { selectedLocation = (e.target as HTMLSelectElement).value || null; selectedDetailLocation = null; updateTableOnly(); + updateFlowLogsSection(); }); selectDetailLoc?.addEventListener('change', (e) => { selectedDetailLocation = (e.target as HTMLSelectElement).value || null; updateTableOnly(); + updateFlowLogsSection(); }); updateTableOnly(); + updateFlowLogsSection(); }, 50); }; From d3c4fa5e66ed1041756bd9078678573248a733dd Mon Sep 17 00:00:00 2001 From: JooWangi Date: Thu, 11 Jun 2026 11:42:03 +0900 Subject: [PATCH 11/16] fix(main): restore dashboard tab rendering check in refreshView --- src/main.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main.ts b/src/main.ts index 3529ebd..5e77ffd 100644 --- a/src/main.ts +++ b/src/main.ts @@ -19,6 +19,11 @@ function refreshView() { const mainContent = document.getElementById('main-content')!; if (!mainContent) return; + if (state.activeSubTab === '대시보드') { + renderDashboard(mainContent); + return; + } + // 서버 탭이 아닐 경우 '자산현황(위치)' 뷰 진입 방지 및 강제 리스트 모드 전환 if (state.activeSubTab !== '서버' && state.viewMode === 'location') { state.viewMode = 'list'; From accbbdc2faaf03605df05a1bd70203fd31a85081 Mon Sep 17 00:00:00 2001 From: JooWangi Date: Thu, 11 Jun 2026 11:43:51 +0900 Subject: [PATCH 12/16] fix(pc-view): restore pc list view rendering and enable status view toggle for PC --- src/views/List/ListFactory.ts | 8 +++---- src/views/List/PcListView.ts | 45 ++++++++++++++++++++++++++++++----- 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/src/views/List/ListFactory.ts b/src/views/List/ListFactory.ts index 8f346c4..84dac7d 100644 --- a/src/views/List/ListFactory.ts +++ b/src/views/List/ListFactory.ts @@ -167,9 +167,9 @@ export function createListView(container: HTMLElement, config: ListViewConfig) { let sortState: SortState = config.persistentSortState || { key: '', direction: 'asc' }; let currentFilters: any = { keyword: '', corp: '', dept: '', loc: '', field: '', type: '' }; - // 서버 탭이 아닐 경우 '자산 현황(대시보드)' 뷰 진입 방지 및 강제 'asset' 모드 - const isServer = config.title === '서버'; - if (!isServer) { + // 서버 및 PC 탭이 아닐 경우 '자산 현황' 뷰 진입 방지 및 강제 'asset' 모드 + const isServerOrPc = config.title === '서버' || config.title === 'PC'; + if (!isServerOrPc) { (state as any).currentViewMode = 'asset'; } else if (!(state as any).currentViewMode) { (state as any).currentViewMode = 'system'; @@ -182,7 +182,7 @@ export function createListView(container: HTMLElement, config: ListViewConfig) { const showPcFlowBtn = config.title === 'PC'; toggleWrapper.innerHTML = `
-
+
diff --git a/src/views/List/PcListView.ts b/src/views/List/PcListView.ts index e51d260..83c6fa0 100644 --- a/src/views/List/PcListView.ts +++ b/src/views/List/PcListView.ts @@ -5,10 +5,43 @@ import { ASSET_SCHEMA } from '../../core/schema'; import { createListView } from './ListFactory'; export function renderPcList(container: HTMLElement) { - container.innerHTML = ` -
-
PC 관리
-

해당 페이지는 다른 작업자에 의해 개발 중입니다.

-
- `; + createListView(container, { + title: 'PC', + dataSource: () => sortAssets((state.masterData.pc || []).filter((a: any) => a.asset_type !== '서버PC')), + searchKeys: ['CURRENT_DEPT', 'CURRENT_USER', 'MODEL_NAME', 'MAC_ADDR', 'MANAGER_MAIN', 'ASSET_TYPE'], + filterOptions: { + keywordLabel: `통합 검색 (${ASSET_SCHEMA.MODEL_NAME.ui}/${ASSET_SCHEMA.MANAGER_MAIN.ui}/${ASSET_SCHEMA.CURRENT_USER.ui})`, + showLoc: true, + showDept: true, + showType: true + }, + onRowClick: (asset) => openHwModal(asset, 'view'), + columns: [ + { header: ASSET_SCHEMA.CURRENT_USER.ui, sortKey: ASSET_SCHEMA.CURRENT_USER.key, align: 'center', render: a => a[ASSET_SCHEMA.CURRENT_USER.key] || '-' }, + { header: ASSET_SCHEMA.ASSET_TYPE.ui, sortKey: ASSET_SCHEMA.ASSET_TYPE.key, align: 'center', width: '10%', render: a => a[ASSET_SCHEMA.ASSET_TYPE.key] || '-' }, + { header: ASSET_SCHEMA.CPU.ui, sortKey: ASSET_SCHEMA.CPU.key, align: 'center', render: a => a[ASSET_SCHEMA.CPU.key] || '' }, + { header: ASSET_SCHEMA.MAINBOARD.ui, sortKey: ASSET_SCHEMA.MAINBOARD.key, align: 'center', render: a => a[ASSET_SCHEMA.MAINBOARD.key] || '-' }, + { header: ASSET_SCHEMA.RAM.ui, sortKey: ASSET_SCHEMA.RAM.key, align: 'center', render: a => a[ASSET_SCHEMA.RAM.key] || '' }, + { header: ASSET_SCHEMA.GPU.ui, sortKey: ASSET_SCHEMA.GPU.key, align: 'center', render: a => a[ASSET_SCHEMA.GPU.key] || '-' }, + { + header: 'SSD', + align: 'center', + width: '8%', + render: a => [a[ASSET_SCHEMA.SSD1.key], a[ASSET_SCHEMA.SSD2.key]].filter(Boolean).join(' / ') || '-' + }, + { + header: 'HDD', + align: 'center', + width: '12%', + render: a => [a[ASSET_SCHEMA.HDD1.key], a[ASSET_SCHEMA.HDD2.key], a[ASSET_SCHEMA.HDD3.key], a[ASSET_SCHEMA.HDD4.key]].filter(Boolean).join(' / ') || '-' + }, + { + header: ASSET_SCHEMA.MAC_ADDR.ui, + sortKey: ASSET_SCHEMA.MAC_ADDR.key, + align: 'center', + render: a => `${a[ASSET_SCHEMA.MAC_ADDR.key] || '-'}` + }, + { header: ASSET_SCHEMA.MEMO.ui, sortKey: ASSET_SCHEMA.MEMO.key, className: 'col-memo', width: '30%', render: a => formatInline(a[ASSET_SCHEMA.MEMO.key] || '-') } + ] + }); } From 19e6be27ded5a448cbb989a47b3c34430aa487f8 Mon Sep 17 00:00:00 2001 From: JooWangi Date: Thu, 11 Jun 2026 11:49:34 +0900 Subject: [PATCH 13/16] fix(merge): resolve compile errors and restore remote db IP --- .env | 2 +- src/components/Modal/HWModal.ts | 2 +- src/core/excelHandler.ts | 11 ++++++++--- src/styles/dashboard.css | 1 - 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/.env b/.env index 84f1df7..bd7a495 100644 --- a/.env +++ b/.env @@ -1,4 +1,4 @@ -DB_HOST=127.0.0.1 +DB_HOST=172.16.8.151 DB_PORT=3306 DB_USER=itam_admin DB_PASS=itam1234 diff --git a/src/components/Modal/HWModal.ts b/src/components/Modal/HWModal.ts index 42fb2f2..60e8016 100644 --- a/src/components/Modal/HWModal.ts +++ b/src/components/Modal/HWModal.ts @@ -751,7 +751,7 @@ class HwAssetModal extends BaseModal { // state.masterData.logs에서 해당 자산의 이력 필터링 (최신순) const logs = (state.masterData.logs || []) .filter(l => l.asset_id === assetId) - .sort((a, b) => new Date(b.created_at || b.log_date).getTime() - new Date(a.created_at || a.log_date).getTime()); + .sort((a, b) => new Date(b.created_at || b.log_date || '').getTime() - new Date(a.created_at || a.log_date || '').getTime()); if (logs.length === 0) { container.innerHTML = '
기록된 변동 이력이 없습니다.
'; diff --git a/src/core/excelHandler.ts b/src/core/excelHandler.ts index b248939..32a98cf 100644 --- a/src/core/excelHandler.ts +++ b/src/core/excelHandler.ts @@ -27,10 +27,15 @@ export interface SWUser { export interface HardwareLog { id: string; - assetId: string; - date: string; + assetId?: string; + asset_id?: string; + date?: string; + log_date?: string; + created_at?: string; details: string; - user: string; + user?: string; + log_user?: string; + event_type?: string; } export interface MasterAssetData { diff --git a/src/styles/dashboard.css b/src/styles/dashboard.css index c13ef87..85d1a7a 100644 --- a/src/styles/dashboard.css +++ b/src/styles/dashboard.css @@ -518,5 +518,4 @@ flex: 1; font-size: 0.95rem; font-weight: 700; ->>>>>>> origin/main } From 0c1977f707695d1140aa0905ab664494346c1545 Mon Sep 17 00:00:00 2001 From: Taehoon Date: Thu, 11 Jun 2026 13:06:04 +0900 Subject: [PATCH 14/16] =?UTF-8?q?style:=20=ED=8F=B0=ED=8A=B8=20=ED=81=AC?= =?UTF-8?q?=EA=B8=B0=EB=A5=BC=20ux=5Fsetting=20=ED=91=9C=EC=A4=80=20?= =?UTF-8?q?=EA=B7=9C=EA=B2=A9(14px)=EC=9C=BC=EB=A1=9C=20=EB=B3=B5=EA=B5=AC?= =?UTF-8?q?=20=EB=B0=8F=20=EC=B5=9C=EC=A0=81=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/styles/common.css | 2 +- src/styles/table.css | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/styles/common.css b/src/styles/common.css index 95ebda0..b016761 100644 --- a/src/styles/common.css +++ b/src/styles/common.css @@ -60,7 +60,7 @@ body { color: var(--text-main); background-color: var(--bg-color); line-height: 1.5; - font-size: 19px; + font-size: 14px; overflow: hidden; } diff --git a/src/styles/table.css b/src/styles/table.css index 960a929..b80d5bc 100644 --- a/src/styles/table.css +++ b/src/styles/table.css @@ -10,7 +10,7 @@ } .page-title { - font-size: 21px; + font-size: 16px; font-weight: 700; color: var(--primary-color); display: flex; @@ -30,7 +30,7 @@ } .page-description { - font-size: 17px; + font-size: 12px; color: var(--text-muted); margin: 0; line-height: 1.4; @@ -72,7 +72,7 @@ } .search-item label { - font-size: 16px; + font-size: 11px; font-weight: 700; color: var(--text-muted); } @@ -83,7 +83,7 @@ padding: 0 1rem; border: 1px solid var(--border-color); border-radius: 4px; - font-size: 19px; + font-size: 14px; outline: none; background-color: var(--white); } @@ -141,7 +141,7 @@ thead { th { background-color: var(--bg-light) !important; - font-size: 18px; + font-size: 13px; font-weight: 600; color: var(--text-muted); position: sticky; @@ -152,7 +152,7 @@ th { } td { - font-size: 18px; + font-size: 13px; color: var(--text-main); font-weight: 400; } From 8a3727ea61ec5dd2ae54feec1684a4fe03cce13b Mon Sep 17 00:00:00 2001 From: JooWangi Date: Fri, 12 Jun 2026 08:49:04 +0900 Subject: [PATCH 15/16] =?UTF-8?q?feat:=20=EB=8C=80=EC=8B=9C=EB=B3=B4?= =?UTF-8?q?=EB=93=9C=20=EA=B5=AC=EB=B6=84=EC=84=A0=20=EB=94=94=EC=9E=90?= =?UTF-8?q?=EC=9D=B8=20=EC=A0=84=ED=99=98,=20=ED=8F=B0=ED=8A=B8=20?= =?UTF-8?q?=ED=99=95=EB=8C=80=20=EB=B0=8F=20=EB=B2=84=EA=B7=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- migrate_v6_parts_master.js | 195 ++ server.js | 113 +- src/components/Modal/HWModal.ts | 169 +- src/components/Modal/PCFlowModal.ts | 4 +- src/components/Modal/PartsMasterModal.ts | 166 ++ src/components/Modal/UserModal.ts | 171 ++ src/components/Navigation.ts | 5 +- src/core/filterHandler.ts | 43 +- src/core/schema.ts | 5 + src/core/state.ts | 71 +- src/core/utils.ts | 200 +- src/main.ts | 26 +- src/styles/common.css | 30 + src/styles/dashboard.css | 43 +- src/styles/table.css | 14 +- src/views/Dashboard/HwDashboard.ts | 2535 +++++++--------------- src/views/Dashboard/SwDashboard.ts | 20 +- src/views/List/ListFactory.ts | 40 +- src/views/List/PartsMasterListView.ts | 66 + src/views/List/PcListView.ts | 67 +- src/views/List/UserListView.ts | 60 + src/views/SW_Table.ts | 8 +- 22 files changed, 2238 insertions(+), 1813 deletions(-) create mode 100644 migrate_v6_parts_master.js create mode 100644 src/components/Modal/PartsMasterModal.ts create mode 100644 src/components/Modal/UserModal.ts create mode 100644 src/views/List/PartsMasterListView.ts create mode 100644 src/views/List/UserListView.ts diff --git a/migrate_v6_parts_master.js b/migrate_v6_parts_master.js new file mode 100644 index 0000000..ab1fcb3 --- /dev/null +++ b/migrate_v6_parts_master.js @@ -0,0 +1,195 @@ +import mysql from 'mysql2/promise'; +import dotenv from 'dotenv'; + +dotenv.config({ override: true }); + +const { DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT } = process.env; + +// 기존의 감점 계산 로직을 그대로 이용해 등급과 감점점수를 도출하는 헬퍼 함수 +function parseCpu(cpu) { + if (!cpu) return { tier: '기타', deduction: 30 }; + const cpuUpper = cpu.toUpperCase().trim(); + if (cpuUpper === '-' || cpuUpper === '') return { tier: '기타', deduction: 30 }; + + let tier = '기타'; + let deduction = 30; + + if (cpuUpper.includes('I9') || cpuUpper.includes('RYZEN 9') || cpuUpper.includes('RYZEN9')) { + tier = 'i9 / Ryzen 9'; + deduction = 0; + } else if (cpuUpper.includes('I7') || cpuUpper.includes('RYZEN 7') || cpuUpper.includes('RYZEN7')) { + tier = 'i7 / Ryzen 7'; + deduction = 5; + } else if (cpuUpper.includes('I5') || cpuUpper.includes('RYZEN 5') || cpuUpper.includes('RYZEN5')) { + tier = 'i5 / Ryzen 5'; + deduction = 15; + } else if (cpuUpper.includes('I3') || cpuUpper.includes('RYZEN 3') || cpuUpper.includes('RYZEN3')) { + tier = 'i3 / Ryzen 3'; + deduction = 25; + } + + // CPU 세대 감점 계산 (최대 -15점) + let genDeduction = 0; + const intelMatch = cpuUpper.match(/I\d-?(\d+)/); + let gen = 0; + if (intelMatch && intelMatch[1]) { + const numStr = intelMatch[1]; + if (numStr.length === 5) gen = parseInt(numStr.substring(0, 2), 10); + else if (numStr.length === 4) gen = parseInt(numStr.substring(0, 1), 10); + } + + const amdMatch = cpuUpper.match(/RYZEN\s?\d\s?-?(\d+)/); + let amdGen = 0; + if (amdMatch && amdMatch[1] && !intelMatch) { + const numStr = amdMatch[1]; + if (numStr.length === 4) amdGen = parseInt(numStr.substring(0, 1), 10); + } + + if (intelMatch) { + if (gen >= 12) genDeduction = 0; + else if (gen >= 10) genDeduction = 5; + else if (gen >= 8) genDeduction = 10; + else genDeduction = 15; + } else if (amdMatch) { + if (amdGen >= 5) genDeduction = 0; + else if (amdGen >= 3) genDeduction = 5; + else genDeduction = 10; + } else { + genDeduction = 15; + } + + // 최종 등급 감점 + 세대 감점 합산 + return { tier, deduction: deduction + genDeduction }; +} + +function parseGpu(gpu) { + if (!gpu) return { tier: 'C', deduction: 25 }; + const gpuUpper = gpu.toUpperCase().trim(); + if (gpuUpper === '-' || gpuUpper === '') return { tier: 'C', deduction: 25 }; + + if ( + gpuUpper.includes('RTX 4090') || gpuUpper.includes('RTX 4080') || gpuUpper.includes('RTX 4070') || + gpuUpper.includes('RTX A5000') || gpuUpper.includes('RTX A6000') || gpuUpper.includes('RTX A4000') + ) { + return { tier: 'S', deduction: 0 }; + } else if ( + gpuUpper.includes('RTX 3070') || gpuUpper.includes('RTX 3060') || gpuUpper.includes('RTX 2060') || + gpuUpper.includes('RTX A2000') || gpuUpper.includes('RTX A3000') || gpuUpper.includes('QUADRO') + ) { + return { tier: 'A', deduction: 5 }; + } else if ( + gpuUpper.includes('GTX 1660') || gpuUpper.includes('GTX 1080') || gpuUpper.includes('GTX 1070') || + gpuUpper.includes('GTX 1060') || gpuUpper.includes('RX 6700') || gpuUpper.includes('RX 6600') + ) { + return { tier: 'B', deduction: 15 }; + } else { + return { tier: 'C', deduction: 25 }; + } +} + +function parseRam(ram) { + if (!ram) return { tier: '부족', deduction: 25 }; + const ramUpper = ram.toUpperCase().trim(); + if (ramUpper === '-' || ramUpper === '') return { tier: '부족', deduction: 25 }; + + const ramMatch = ramUpper.match(/(\d+)\s*GB/); + if (ramMatch && ramMatch[1]) { + const ramVal = parseInt(ramMatch[1], 10); + if (ramVal >= 32) return { tier: '최적', deduction: 0 }; + else if (ramVal >= 16) return { tier: '보통', deduction: 10 }; + else if (ramVal >= 8) return { tier: '주의', deduction: 20 }; + } + return { tier: '부족', deduction: 25 }; +} + +async function runMigration() { + console.log('🔄 DB 커넥션 연결 중...'); + const connection = await mysql.createConnection({ + host: DB_HOST, + user: DB_USER, + password: DB_PASS, + database: DB_NAME, + port: parseInt(DB_PORT || '3306') + }); + + try { + console.log('⚙️ 1. hardware_components_master 테이블 생성...'); + await connection.query('DROP TABLE IF EXISTS hardware_components_master'); + await connection.query(` + CREATE TABLE hardware_components_master ( + id INT AUTO_INCREMENT PRIMARY KEY, + category VARCHAR(50) NOT NULL COMMENT 'CPU, GPU, RAM 등', + component_name VARCHAR(255) NOT NULL UNIQUE COMMENT '부품 표준 명칭', + score_tier VARCHAR(50) COMMENT '성능 등급', + deduction INT DEFAULT 0 COMMENT '감점 점수', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + `); + console.log('✅ 테이블 생성 완료.'); + + console.log('🔍 2. 기존 asset_spec 테이블에서 부품명 조회...'); + const [specRows] = await connection.query('SELECT DISTINCT cpu, ram, gpu FROM asset_spec'); + + const uniqueCpus = new Set(); + const uniqueGpus = new Set(); + const uniqueRams = new Set(); + + specRows.forEach(row => { + if (row.cpu && row.cpu.trim() !== '-' && row.cpu.trim() !== '') uniqueCpus.add(row.cpu.trim()); + if (row.gpu && row.gpu.trim() !== '-' && row.gpu.trim() !== '') uniqueGpus.add(row.gpu.trim()); + if (row.ram && row.ram.trim() !== '-' && row.ram.trim() !== '') uniqueRams.add(row.ram.trim()); + }); + + // 만약 데이터가 너무 비어있을 경우를 대비하여 기본 대표 부품 몇 개 추가 + if (uniqueCpus.size === 0) { + ['Intel Core i9-13900K', 'Intel Core i7-14700K', 'Intel Core i5-12400', 'AMD Ryzen 7 7800X3D', 'Intel Core i3-10100'].forEach(c => uniqueCpus.add(c)); + } + if (uniqueGpus.size === 0) { + ['NVIDIA GeForce RTX 4090', 'NVIDIA GeForce RTX 4070', 'NVIDIA GeForce RTX 3060', 'Intel Iris Xe Graphics', 'NVIDIA GeForce GTX 1660 Super'].forEach(g => uniqueGpus.add(g)); + } + if (uniqueRams.size === 0) { + ['8GB', '16GB', '32GB', '64GB'].forEach(r => uniqueRams.add(r)); + } + + console.log(` - 추출된 CPU 개수: ${uniqueCpus.size}`); + console.log(` - 추출된 GPU 개수: ${uniqueGpus.size}`); + console.log(` - 추출된 RAM 개수: ${uniqueRams.size}`); + + console.log('💾 3. 마스터 테이블에 부품 데이터 및 감점 정보 삽입...'); + + // CPU 삽입 + for (const cpu of uniqueCpus) { + const { tier, deduction } = parseCpu(cpu); + await connection.query( + 'INSERT IGNORE INTO hardware_components_master (category, component_name, score_tier, deduction) VALUES (?, ?, ?, ?)', + ['CPU', cpu, tier, deduction] + ); + } + + // GPU 삽입 + for (const gpu of uniqueGpus) { + const { tier, deduction } = parseGpu(gpu); + await connection.query( + 'INSERT IGNORE INTO hardware_components_master (category, component_name, score_tier, deduction) VALUES (?, ?, ?, ?)', + ['GPU', gpu, tier, deduction] + ); + } + + // RAM 삽입 + for (const ram of uniqueRams) { + const { tier, deduction } = parseRam(ram); + await connection.query( + 'INSERT IGNORE INTO hardware_components_master (category, component_name, score_tier, deduction) VALUES (?, ?, ?, ?)', + ['RAM', ram, tier, deduction] + ); + } + + console.log('✅ 마이그레이션이 성공적으로 완료되었습니다!'); + } catch (error) { + console.error('❌ 마이그레이션 오류 발생:', error); + } finally { + await connection.end(); + } +} + +runMigration(); diff --git a/server.js b/server.js index c19e733..9c8c4e1 100644 --- a/server.js +++ b/server.js @@ -107,7 +107,7 @@ app.get('/api/assets/master', async (req, res) => { const masterData = { pc: [], server: [], storage: [], network: [], equipment: [], officeSupplies: [], survey: [], vip: [], pcParts: [], - swInternal: [], swExternal: [], swUsers: [], users: [], logs: [] + swInternal: [], swExternal: [], swUsers: [], users: [], logs: [], partsMaster: [] }; const [rows] = await connection.query(` @@ -149,12 +149,14 @@ app.get('/api/assets/master', async (req, res) => { const [swUsers] = await connection.query('SELECT * FROM asset_software_assignment'); const [users] = await connection.query('SELECT * FROM system_users'); const [logs] = await connection.query('SELECT * FROM asset_history ORDER BY created_at DESC'); + const [partsMaster] = await connection.query('SELECT * FROM hardware_components_master ORDER BY category, component_name'); masterData.swInternal = swInternal; masterData.swExternal = swExternal; masterData.swUsers = swUsers; masterData.users = users; masterData.logs = logs; + masterData.partsMaster = partsMaster; connection.release(); res.json(masterData); @@ -362,19 +364,19 @@ app.post('/api/pc/flow', async (req, res) => { [userName, empNo, dept, position, assetId] ); await connection.query( - `UPDATE asset_spec SET hw_status = '사용중' WHERE asset_id = ?`, + `UPDATE asset_spec SET hw_status = '운영' WHERE asset_id = ?`, [assetId] ); } else if (action === 'return') { await connection.query( `UPDATE asset_core SET previous_user = user_current, previous_dept = current_dept, - user_current = '', emp_no = '', current_dept = '재고창고', user_position = '' + user_current = '', emp_no = '', user_position = '' WHERE id = ?`, [assetId] ); await connection.query( - `UPDATE asset_spec SET hw_status = '대기' WHERE asset_id = ?`, + `UPDATE asset_spec SET hw_status = '재고' WHERE asset_id = ?`, [assetId] ); } else if (action === 'move') { @@ -386,7 +388,7 @@ app.post('/api/pc/flow', async (req, res) => { [userName, empNo, dept, position, assetId] ); await connection.query( - `UPDATE asset_spec SET hw_status = '사용중' WHERE asset_id = ?`, + `UPDATE asset_spec SET hw_status = '운영' WHERE asset_id = ?`, [assetId] ); } else { @@ -483,6 +485,107 @@ app.get('/api/maps', (req, res) => { } catch (err) { handleError(res, err, 'GET MAPS'); } }); +// 6.5. Get Hardware Components Master List +app.get('/api/hardware-components', async (req, res) => { + try { + const [rows] = await pool.query('SELECT * FROM hardware_components_master ORDER BY category, component_name'); + res.json(rows); + } catch (err) { + handleError(res, err, 'GET HARDWARE COMPONENTS'); + } +}); + +// 6.6. Save Hardware Component (Add or Update) +app.post('/api/hardware-components/save', async (req, res) => { + const { id, category, component_name, score_tier, deduction } = req.body; + let connection; + try { + connection = await pool.getConnection(); + if (id) { + await connection.query( + 'UPDATE hardware_components_master SET category = ?, component_name = ?, score_tier = ?, deduction = ? WHERE id = ?', + [category, component_name, score_tier, deduction, id] + ); + } else { + await connection.query( + 'INSERT INTO hardware_components_master (category, component_name, score_tier, deduction) VALUES (?, ?, ?, ?)', + [category, component_name, score_tier, deduction] + ); + } + res.json({ success: true }); + } catch (err) { + handleError(res, err, 'SAVE HARDWARE COMPONENT'); + } finally { + if (connection) connection.release(); + } +}); + +// 6.7. Delete Hardware Component +app.delete('/api/hardware-components/:id', async (req, res) => { + const { id } = req.params; + let connection; + try { + connection = await pool.getConnection(); + await connection.query('DELETE FROM hardware_components_master WHERE id = ?', [id]); + res.json({ success: true }); + } catch (err) { + handleError(res, err, 'DELETE HARDWARE COMPONENT'); + } finally { + if (connection) connection.release(); + } +}); + +// 6.8. Get System Users List +app.get('/api/system-users', async (req, res) => { + try { + const [rows] = await pool.query('SELECT * FROM system_users ORDER BY user_name'); + res.json(rows); + } catch (err) { + handleError(res, err, 'GET SYSTEM USERS'); + } +}); + +// 6.9. Save System User (Add or Update) +app.post('/api/system-users/save', async (req, res) => { + const { id, emp_no, user_name, dept_name, position, status } = req.body; + let connection; + try { + connection = await pool.getConnection(); + if (id) { + await connection.query( + 'UPDATE system_users SET emp_no = ?, user_name = ?, dept_name = ?, position = ?, status = ? WHERE id = ?', + [emp_no, user_name, dept_name, position, status, id] + ); + } else { + const newId = 'USER-' + Math.random().toString(36).substring(2, 9).toUpperCase(); + await connection.query( + 'INSERT INTO system_users (id, emp_no, user_name, dept_name, position, status) VALUES (?, ?, ?, ?, ?, ?)', + [newId, emp_no, user_name, dept_name, position, status] + ); + } + res.json({ success: true }); + } catch (err) { + handleError(res, err, 'SAVE SYSTEM USER'); + } finally { + if (connection) connection.release(); + } +}); + +// 6.10. Delete System User +app.delete('/api/system-users/:id', async (req, res) => { + const { id } = req.params; + let connection; + try { + connection = await pool.getConnection(); + await connection.query('DELETE FROM system_users WHERE id = ?', [id]); + res.json({ success: true }); + } catch (err) { + handleError(res, err, 'DELETE SYSTEM USER'); + } finally { + if (connection) connection.release(); + } +}); + app.post('/api/maps/save', (req, res) => { try { const { path, boxes } = req.body; diff --git a/src/components/Modal/HWModal.ts b/src/components/Modal/HWModal.ts index 60e8016..5197aa6 100644 --- a/src/components/Modal/HWModal.ts +++ b/src/components/Modal/HWModal.ts @@ -1,5 +1,6 @@ import { state, saveAsset, deleteAsset } from '../../core/state'; import { ASSET_SCHEMA, UI_TEXT } from '../../core/schema'; +import { calculatePcScoreDeductive, getPcGrade } from '../../core/utils'; import { generateOptionsHTML, setFieldValue, @@ -13,6 +14,7 @@ import { BaseModal } from './BaseModal'; class HwAssetModal extends BaseModal { private dynamicMapConfig: Record = {}; + private masterComponents: any[] = []; constructor() { super('hw', '자산 상세 정보'); @@ -24,6 +26,39 @@ class HwAssetModal extends BaseModal { const btnStyle = `padding: 0 16px; display: inline-flex; align-items: center; justify-content: center; font-weight: 600; white-space: nowrap; cursor: pointer; ${sharedStyle}`; return ` +