← 프로젝트
데이터·리포팅파일럿요약 공개

데이터 대시보드

매달 엑셀로 내려받아 사람이 합치고 가공하던 영업 실적을, 원천 파일만 넣으면 집계·마감보고·평가·대시보드까지 한 번에 만들어지는 웹 시스템으로 옮겼습니다. 조회하는 사람은 설치 없이 브라우저로 봅니다.

기간
2026-04 – 진행중
역할
기획 · 데이터 설계 · 구현 · 배포 (1인)
조직·맥락
보험 GA · 영업지원
사용자
조직 관리자 · 보고 담당 · 평가 담당
Problem

사내 시스템에서 받은 엑셀을 매달 사람이 합치고 수식으로 가공해 보고서와 평가표를 만들었습니다. 결합 작업 하나에 1~2시간이 걸렸고, 같은 숫자가 보고서마다 달랐고, 조회하는 사람도 PC마다 따로 설정이 필요했습니다.

성과

원천 데이터 결합 처리
엑셀 Power Query 1~2시간DuckDB 5~30초
같은 결합(self-join) 작업 기준
조회 환경
PC마다 ODBC·DSN 설정브라우저 접속만
대시보드 첫 로딩
26초 (쿼리 약 210개)연결 재사용·캐시로 개선
연결을 매번 새로 열던 비용 약 8초 제거
배포본 개인정보 컬럼
원천 그대로57개 제거 · 잔존 0건
더미 데이터로 검증
데이터 대시보드 한눈에 보기

배경과 문제

영업 실적과 인원 데이터는 사내 시스템에서 엑셀로만 내려받을 수 있었습니다. 매달 마감 때마다 여러 파일을 합치고, 엑셀 수식과 Power Query로 가공하고, 보고서 양식에 옮겨 적었습니다.

이 방식에는 불편이 세 가지 있었습니다.

  • 느렸습니다. 데이터를 서로 맞붙이는 결합 작업 하나에 1~2시간이 걸렸습니다.
  • 숫자가 달랐습니다. 같은 이름의 실적이 보고서마다 조금씩 달랐고, 그 차이를 설명하는 데 시간이 더 들었습니다. 조직 실적과 개인 평가는 셈하는 기준(모수)부터 다른데, 그 차이가 수식 속에 숨어 있었습니다.
  • 보는 사람도 번거로웠습니다. 자료를 직접 열어 보려면 PC마다 데이터 연결 설정이 필요했습니다.

여기에 회사 보안 정책상 엑셀 파일이 보안 파일로 바뀌어 프로그램이 바로 읽지 못하는 제약도 있었습니다.

목표

  • 원천 파일만 넣으면 집계, 마감보고, 평가, 대시보드가 한 번에 만들어질 것
  • 숫자의 정의(무엇을 어떻게 셀지)를 한 곳에서 관리할 것
  • 조회하는 사람은 설치 없이 브라우저로, 자기 조직 범위만 볼 것
  • 나중에 사내 시스템에서 데이터를 자동으로 받아오는 방식으로 바꿀 수 있는 구조일 것

만든 과정

1. 엉킨 첫 버전을 정리하다 (2026년 4~5월) 처음 만든 버전은 기능을 붙여 가는 사이에 화면 도구, 저장 방식이 문서마다 달라져 있었습니다. 4월에 "정리하고 다시 만든다"로 방향을 정하고, 흩어진 설계 문서를 대조해 무엇이 서로 안 맞는지부터 정리했습니다. 따로 시험해 둔 데이터 처리 도구(DuckDB)로 결합 작업이 12시간에서 530초로 줄어드는 것을 먼저 확인했고, 5월에 통합 설계를 확정했습니다.

  • 화면은 서버 하나로 관리자와 조회자를 모두 받을 수 있는 NiceGUI
  • 저장은 월별 원천은 Parquet, 집계는 DuckDB, 사용자·권한·처리 이력은 SQLite로 역할을 나눔

2. 기존 엑셀과 1:1로 맞춰 보며 옮기다 (2026년 6월) 6월에 지금의 저장소로 다시 시작하고, 따로 돌던 데이터 적재 도구를 합쳤습니다. 단계마다 기존 엑셀 마감보고와 숫자가 같은지 1:1로 대조하는 것을 규칙으로 했습니다. 먼저 점검 항목과 비교 기준선(회귀 기준)을 만든 뒤에 대시보드와 평가 화면을 다시 정비했습니다.

3. 다른 사람이 쓸 수 있게 만들다 (2026년 8월) 혼자 쓰던 도구를 여러 사람이 쓰는 서비스로 바꾸는 단계였습니다.

  • 코드에 박혀 있던 기본 계정과 비밀값을 모두 걷어 냈습니다.
  • 실제 데이터 없이 시험할 수 있게 가짜 데이터 생성기를 만들었습니다.
  • 메뉴 디자인을 하나의 체계로 통일하고, 목표 달성 현황 메뉴를 더했습니다.
  • 나중에 회사 개발팀이 다시 만들 수 있도록 데이터와 서비스의 경계(계약)를 정한 전환 로드맵을 썼습니다.

4. 서버에 올리다 (2026년 9월)

  • 대시보드를 새 버전으로 바꾸고, 컨테이너(Docker) 기반으로 버전 태그 하나면 시험 → 이미지 만들기 → 서버 반영이 이어지는 배포를 만들었습니다.
  • 서버에는 개인정보 검사를 통과한 집계본만 보냅니다. 검사는 주민등록번호 형식까지 확인합니다.
  • 회사 메일 인증과 회사 IP만 접속을 허용하는 이중 문을 달았습니다.
  • 써 보는 사람이 화면에서 바로 의견을 남길 수 있는 버튼을 붙였습니다.

5. 장애를 겪고 안전장치를 넣다 (2026년 9월) 배포 직후 실제로 여러 사람이 열어 보면서 문제가 드러났습니다. 아래 "겪은 문제와 해결"에 정리했습니다.

지금 할 수 있는 것

메뉴내용
대시보드업적·인원 순증·생산성·목표 달성 지표와 조직 비교
목표 달성 현황목표 대비 실적
위촉 현황위촉·해촉·순증
리스크 점검같은 고객인데 모집 담당이 다른 계약, 계약 갈아타기 등 점검
마감보고월 마감 집계표
실적 데이터조직 합계부터 개인별 명세까지
실적 예측시계열 예측과 유지 분석
평가여러 평가 제도의 산출과 근거
공간지점 지도, 사무실 도면 구상

권한은 두 갈래로 나눴습니다. 어떤 메뉴를 볼 수 있는가(평가 메뉴는 관리자가 따로 열어 줘야 보임)와 어느 조직까지 볼 수 있는가(지정된 화면은 본인 조직만)입니다.

데이터가 흐르는 길

사내 시스템에서 받은 원천 엑셀 (실적·마감·인사 등)
   ↓  적재 (별도 실행)
L1 월별 원천 저장 (Parquet)
   ↓
L2 조직 분류 — 부문·본부 규칙을 SQL 한 곳에서 부여
   ↓
L3 집계 테이블 — 보고·평가·대시보드용
   ↓
화면은 조회만
   ↓  배포할 때
개인정보 컬럼을 뺀 배포용 DB → 검사 통과 시에만 서버로 한 방향 전송

집계 SQL은 한 파일에 모았습니다. 숫자가 바뀌는 변경은 "무엇이 어떻게 달라지는지"를 작업 기록에 남기는 것을 규칙으로 했습니다.

겪은 문제와 해결

증상원인해결
대시보드를 한 번 여는 데 26초화면 하나에 쿼리 약 210개, 쿼리마다 DB 연결을 새로 엶연결 재사용, 결과 캐시
배포 직후 로그인조차 응답 없음캐시가 빈 상태에서 여러 명이 동시에 열어 서버 CPU 포화같은 계산은 한 번만, 동시 계산은 2개까지
당월 실적이 실제보다 적게 보임(오류 표시 없이)앱을 켠 채 데이터를 넣으면 원천만 바뀌고 집계는 다시 만들어지지 않음데이터 적재를 앱과 분리. 원천 대비 집계 건수가 97% 미만이면 실패로 표시
앱이 데이터베이스 연결을 거부한 프로그램 안에서 읽기 전용과 쓰기 연결을 같이 엶쓰기는 별도 실행 도구로만
저장 단계에서 실패한 열에 숫자와 글자가 섞여 있음문자열로 맞춘 뒤 저장
자동 시험이 한 번도 안 돌고 있었음시험이 main 브랜치에만 걸려 있었는데 실제 작업은 다른 브랜치시험 조건을 고치고, 통과 못 하면 배포를 막도록
권한이 제한된 계정이 끝없이 다시 이동처음 열 화면이 권한 밖이었음계정마다 볼 수 있는 첫 화면을 지정

가장 위험했던 것은 세 번째였습니다. 오류가 나면 바로 알지만, 틀린 숫자가 조용히 화면에 나오면 아무도 모른 채 보고서에 쓰입니다. 그래서 "건수가 맞지 않으면 실패로 보이게" 하는 장치를 넣었습니다.

AI와 함께 만든 방식

구현은 Claude Code가 맡고, 점검은 Codex가 따로 했습니다. 만든 AI가 스스로 검토하면 놓치는 것이 많아, 숫자와 권한이 걸린 이 프로젝트에서는 점검을 다른 도구로 분리했습니다. 화면 디자인은 Google Stitch로 시안을 먼저 만들었습니다.

  • 규칙 파일을 정본으로: 데이터 저장 방식, 권한 구조, 배포 절차 같은 개발 규칙을 프로젝트 지침 파일 한 곳에 적고, AI가 매번 그 규칙을 읽고 일하게 했습니다.
  • 반복 작업은 스킬로: 재시작, 작업 기록, 배포, 배포용 DB 만들기 같은 절차를 스킬로 만들어 같은 순서로 하게 했습니다.
  • 평가 계산을 바꾸면 검토부터: 평가 SQL을 고치면 검토 담당 에이전트가 먼저 확인합니다.
  • AI가 읽으면 안 되는 것은 막아 둠: 비밀값 파일과 원천 엑셀은 AI 도구가 열지 못하게 설정했습니다.
  • Codex로 교차 점검: 전체 코드, 집계 로직의 오류 가능성, 권한과 개인정보 처리, 보안, 메뉴별 화면 배치를 Codex가 따로 점검했습니다. 이 프로젝트에서 가장 큰 위험은 숫자가 화면마다 다르게 나오는 것과 권한 밖 데이터가 보이는 것이었습니다.
  • 점검 의견은 판정해서 받음: Codex와 외부 점검 의견은 그대로 받지 않고, Claude Code로 코드와 대조해 수용·보류·거절을 근거와 함께 표로 남겼습니다.
  • Stitch로 화면 시안부터: 대시보드 카드·표·필터 배치를 메뉴별로 Google Stitch에서 시안으로 만들고, 받은 코드를 기준으로 화면 구성과 스타일을 옮긴 뒤 디자인 체계에 맞게 다듬었습니다.
  • 보안 점검은 가짜 데이터로: 실제 데이터를 쓰지 않고 합성 데이터로 위험 동작을 재현해 확인했습니다.

지금 상태와 다음

  • 서버에 시험 배포해 검증하는 파일럿 단계입니다. 보안 재점검에서 운영 전에 고칠 항목이 남아 있어, 실제 데이터 운영은 그 항목을 고친 뒤에 하기로 했습니다.
  • 이 시스템의 목표는 영원히 혼자 운영하는 것이 아니라, 업무 규칙을 검증하고 회사 개발팀이 다시 만들 때 쓸 기준(계약)을 확보하는 것입니다. 화면 조회를 집계 테이블 전용으로 바꾸고, 데이터 접근 계층을 나누고, 데이터 입력을 바꿔 끼울 수 있게 하는 순서로 사내 인프라 이전을 준비하고 있습니다.

회고

  • 가장 큰 효과는 속도보다 "숫자의 정의가 한 곳에 있다"는 점이었습니다. 숫자가 다르면 어디를 봐야 하는지 알게 됐습니다.
  • 혼자 쓰던 도구를 여러 사람이 쓰게 하는 순간 문제의 종류가 바뀌었습니다. 기능보다 동시 접속, 권한, 개인정보, 배포가 더 큰 일이었습니다.
  • 다시 만들면서 기존 엑셀과 1:1로 대조하는 규칙을 둔 것이 새 시스템의 숫자를 믿을 근거가 됐습니다.