시설물 평가 데이터·이력·지표 관리 시스템
본 프로젝트의 요구사항(평가결과 엑셀 등록, 과거 자료 적재, 시설물 평가 이력 조회, 지표 달성률 관리)을 기반으로 직접 구현한 프로젝트입니다.
프로젝트 개요
본 프로젝트의 요구사항(평가결과 엑셀 등록, 과거 자료 적재, 시설물 평가 이력 조회, 지표 달성률 관리)을 기반으로 직접 구현한 프로젝트입니다. 차수별 평가 데이터를 한 곳에 모으는 구조를 React와 Python 기반 API, SQLite로 설계합니다. 폐쇄망 환경에서 다중 PC 동시 사용 시 SQLite 잠금·재시도를 처리하고 exe 패킹으로 배포하는 구조를 제안합니다.
작업 범위
- 평가 현황·지표 달성률 보드: 차수별 평가 진행 현황과 경영평가·BSC 지표 달성률을 대형 추이 차트와 우측 요약 리스트로 한눈에 확인합니다
- 평가결과 엑셀 등록·과거 자료 적재: 외부 시스템에서 내려받은 평가결과 엑셀을 업로드해 검증 후 DB에 저장하고, 과거 1~3년치 자료를 차수별로 일괄 적재합니다
- 시설물 평가 이력 조회: 평가 화면에서 시설물을 선택하면 연도·차수별 평가자, 점수, 등급, 결과가 타임라인과 표로 나타납니다
- 지표 관리: 관리자가 경영평가·BSC 지표의 이름, 연도, 조건, 산식, 목표치를 화면에서 정의하고 달성률 반영 여부를 확인합니다
주요 업무
- 평가 현황·지표 달성률 보드 화면: 등록된 평가 데이터와 지표 정의를 조인해 달성률을 계산하고 차수·연도 필터로 전환하는 집계 API를 구성합니다
- 평가결과 엑셀 등록·과거 자료 적재 화면: 열 매핑 미리보기, 행 단위 검증, 중복 감지, 적재 결과 리포트로 이어지는 임포트 파이프라인을 구현합니다
- 시설물 평가 이력 조회 화면: 시설물 키 기준 이력 패널과 차수 횡단 검색 조건을 결합한 조회 화면을 구현합니다
- 지표 관리 화면: 산식 입력값을 검증하는 안전한 수식 평가기와 미리보기 계산 패널을 구현합니다



프로젝트 핵심 과제
외부 시스템 엑셀의 열 구성이 차수마다 달라질 수 있어 열 매핑 템플릿과 검증 규칙의 유연한 설계가 필요하며
매핑 프로필 저장으로 대응합니다
과거 1~3년치 자료와 현재 차수의 평가 기준이 다를 수
지표 버전 관리로 대응합니다
관리자가 입력하는 지표 산식의 오류와 악의적 입력을 막
화이트리스트 수식 평가기로 대응합니다
공유 폴더 기반 SQLite를 여러 PC가 함께 쓰는 환경의 쓰기 잠금 충돌을 재시도와 짧은 트랜잭션으로 대응할 계획입니다
핵심 기능 상세
평가 현황·지표 달성률 보드
차수별 평가 진행 현황과 경영평가·BSC 지표 달성률을 대형 추이 차트와 우측 요약 리스트로 한눈에 확인합니다.
- Recharts 복합 차트로 차수별 추이와 목표선을 한 화면에 중첩 표시
- SQLite 집계 뷰로 지표별 달성률 계산을 SQL 단계에서 수행
- 차수·연도 필터 상태를 URL 쿼리와 동기화하여 화면 공유 가능한 구조 설계
지표 정의(산식·목표치)와 평가 결과를 분리 저장하고 조회 시점에 달성률을 계산하는 구조로, 지표가 바뀌어도 과거 데이터를 재가공하지 않도록 설계합니다.


평가결과 엑셀 등록·과거 자료 적재
외부 시스템에서 내려받은 평가결과 엑셀을 업로드해 검증 후 DB에 저장하고, 과거 1~3년치 자료를 차수별로 일괄 적재합니다.
- openpyxl 기반 서버 파싱과 열 매핑 미리보기 화면 구현
- 행 단위 유효성 검증 결과를 오류·경고로 분류해 다운로드 가능한 리포트로 제공
- 차수 키와 시설물 키 조합의 중복 감지 후 덮어쓰기·건너뛰기 선택 UI 설계
트랜잭션 단위 적재와 롤백 구조로 대량 엑셀 등록 중 일부 행이 실패해도 기존 데이터가 오염되지 않도록 구현합니다.


시설물 평가 이력 조회
평가 화면에서 시설물을 선택하면 연도·차수별 평가자, 점수, 등급, 결과가 타임라인과 표로 나타납니다. 시설물 키 기준 이력 패널과 차수 횡단 검색 조건을 결합한 조회 화면을 구현합니다.
- 시설물·차수 복합 인덱스로 이력 조회 쿼리 설계
- TanStack Table 가상 스크롤과 다중 정렬·열 고정 적용
- 검색어·기간·등급 조건을 조합하는 동적 쿼리 빌더 구현
평가 화면 안에 이력 패널을 슬라이드로 겹쳐 열어 화면 이동 없이 과거 점수 추이를 비교하는 인터랙션을 구현합니다.


지표 관리
관리자가 경영평가·BSC 지표의 이름, 연도, 조건, 산식, 목표치를 화면에서 정의하고 달성률 반영 여부를 확인합니다. 산식 입력값을 검증하는 안전한 수식 평가기와 미리보기 계산 패널을 구현합니다.
- React Hook Form과 Zod 스키마로 지표 정의 폼 검증
- 허용 함수만 파싱하는 화이트리스트 수식 평가기 설계
- 지표 변경 이력을 버전 테이블로 보관하는 구조 구축
산식을 저장 전에 샘플 데이터로 미리 계산해 보는 패널을 두어 관리자가 코드 수정 없이 지표를 추가할 수 있도록 설계합니다.


프로젝트 진행 단계
평가 업무 분석 및 SQLite 스키마 설계 · 2026.10
차수·시설물·평가자 관계 분석, 평가결과·지표 테이블 정의, 과거 자료 적재 규칙 설계
엑셀 임포트 파이프라인 개발 · 2026.10
열 매핑·행 검증·중복 감지·롤백 적재 API 구현, 과거 차수 일괄 적재 도구 구성
이력 조회·지표 관리 화면 개발 · 2026.10
이력 패널과 차수 횡단 검색, 수식 평가기 기반 지표 관리 폼 구현
달성률 집계 및 통합 검증 · 2026.10
SQLite 집계 뷰와 현황 차트 연동, 데이터 정합성 검증 시나리오 작성
개발 결과
기술적 주안점
- 지표 정의(산식·목표치)와 평가 결과를 분리 저장하고 조회 시점에 달성률을 계산하는 구조로, 지표가 바뀌어도 과거 데이터를 재가공하지 않도록 설계합니다
- 트랜잭션 단위 적재와 롤백 구조로 대량 엑셀 등록 중 일부 행이 실패해도 기존 데이터가 오염되지 않도록 구현합니다
- 평가 화면 안에 이력 패널을 슬라이드로 겹쳐 열어 화면 이동 없이 과거 점수 추이를 비교하는 인터랙션을 구현합니다