강현구

현업 사례 · ERP 기업

건강검진 경영지표 통계

2025.08 – 2026.09

병원 건강검진센터의 검진 인원과 수익금, 검진 소요시간과 대기시간, 거래처별 실적, 지역별 집계를 보여 주는 통계입니다. 병원이 경영 판단의 근거로 쓰는 숫자라 틀리면 안 됐습니다. 병원 데이터가 가명화되어 적재되는 데이터 웨어하우스 위에서 집계용 데이터셋을 배치로 만들고, API가 이를 차트와 표로 보여 줍니다.

역할
통계 모듈 5개의 백엔드 전담 · 넘겨받은 통계의 검증과 재개발 · 엑셀 출력 공통 모듈 설계
JavaSpring BootMyBatisPostgreSQLMaterialized View파티셔닝Apache POIShedLock
개념도 · 일반화
  1. 데이터 웨어하우스병원 데이터가 가명화되어 적재
  2. 집계용 데이터셋대용량 처리 엔진 · Materialized View · 주기 배치 갱신
  3. 통계 API모듈 5개
    • 엑셀 출력 공통 모듈 (Apache POI)
  4. 차트와 표검진 인원·수익금, 소요·대기시간, 거래처별 실적, 지역별 집계

어려웠던 점과 해결

아무도 몰랐던 틀린 숫자

문제유지보수로 넘겨받은 마케팅 통계를 익히며 핵심 수치부터 검증했습니다. 검진 인원과 수익금이 실제보다 몇 배씩 부풀려 집계되고 있었지만, 아무도 문제 삼지 않던 상태였습니다.

해결같은 지표를 내는 다른 모듈과 데이터 웨어하우스에 직접 조회한 값으로 대조해 오류를 확인했고, 경영 판단에 쓰는 숫자라 재개발을 제안해 승인받았습니다. 집계 최소 단위로 데이터셋을 다시 설계해 숫자를 바로잡았고, 데이터셋이 가벼워지면서 화면도 기다림 없이 바로 뜨게 되었습니다.

정답이 없는 지표는 규칙부터

문제소요시간·대기시간 통계를 기획서 산식, API 응답, 엑셀 결과로 같은 조건에서 대조하자 평균이 최솟값보다 작게 나오는 등 결함이 줄줄이 이어졌습니다. 무엇이 맞는 값인지 정한 규칙이 없었습니다.

해결결함마다 빠진 규칙을 정리해 기획·사업 담당자와 정책 회의를 열고, 결정과 근거를 문서로 남긴 뒤 다시 개발했습니다.

원천 데이터까지 좁혀 가기

문제지역별 집계가 틀어졌는데, 가명화되어 들어오는 우편번호에 쓰지 않기로 한 옛 여섯 자리 값 등이 섞여 있었습니다. 가명화 때문에 원본 값을 직접 볼 수도 없었습니다.

해결우리 쪽 구간을 모두 검증해 원천 데이터 문제로 범위를 좁히고, 데이터 전송 담당과 협의해 자릿수를 식별할 수 있게 다시 적재했습니다.

배포 직전의 새 요구

문제배포를 코앞에 두고, 기획에 없던 요구가 여러 건 들어왔습니다.

해결병원의 표현을 실제 데이터 항목에 맞춰 뜻을 정리하고, 계약 관계가 없는 병원 전산팀과 협력사에 질문을 좁혀 필요한 정보를 받았습니다. 요구마다 병행할 때와 단독으로 할 때의 일수를 산정해 공유하고 결정은 사업팀에 맡겼습니다. 기다리는 동안 확정된 부분부터 개발하고 화면 개발자에게 API 입출력 명세와 초안을 먼저 넘겼습니다. 요구마다 미루거나, 받아들이거나, 기획을 바꿔 받아들이는 것으로 결론이 났고, 다시 합의한 배포일을 지켜 배포했습니다.

초대형 테이블 위의 데이터셋 생성

문제운영 데이터로 옮기자 검사 처방 테이블이 워낙 커서 데이터셋 생성이 크게 늘어졌고, 전용 인덱스만으로는 부족했습니다.

해결메모리 병목을 기준으로 구조를 다시 짜 생성 시간을 크게 줄였고, 이후 분기별 데이터셋을 연도별로 재편하면서 파티셔닝으로 전환했습니다.

체험 · 집계 단위

예시 데이터

가상의 검진 데이터입니다. 같은 통계를 원천 행에서 바로 셀 때와 집계 최소 단위로 미리 만든 데이터셋에서 셀 때, 결과는 같고 읽는 행 수가 달라집니다.

수검자 1,419명두 방식의 결과는 같습니다

원천 행에서 바로 집계 · 검사 항목 단위
42,215행
집계 최소 단위 데이터셋에서 합산
642행
일자 🔑센터 🔑검진 종류 🔑수검자
2025-12-31C센터일반1
2025-12-31C센터종합5
2025-12-31C센터암1

🔑 유일 키 · 일자, 센터, 검진 종류 조합마다 한 행만 두고 배치로 갱신합니다.

결과

현업 소스, 화면, 내부 문서는 싣지 않습니다. 개념도와 체험은 이해를 돕기 위해 새로 만든 예시입니다.