배경

홈즈앱 가입률 같은 경영평가 지표를 실시간으로 보고 연월별 이력을 관리할 수 있게 함(‘26 2분기 과제). 화면은 보고서의 /rpt/opr-rpt/OprRpt/LhMngrRpt, 전국 운영단지 현황과 가입률 사이에 표로 들어감.

처음에는 기존 대시보드 쿼리로 값을 뽑았는데 과년도 성과지표와 값이 맞지 않았음. 조회 방법을 바꿔 전용 집계 테이블에서 가져오도록 했음.

변경 내용

신규 테이블

테이블용도
cmn.TB_KPI_M성과지표 정의 (가입율, DR참여율 등 / 표시명·단위 관리)
cmn.TB_KPI_GL_M연도별 목표값 (운영자가 직접 관리)
cmn.TB_KPI_PFM_Y성과지표 집계 결과 (보고서 화면이 보는 곳)

집계 테이블에 들어가는 값은 월(YYYYMM), 단지수, 전체 세대수, 가입 세대수임. 전체 세대수는 tb_sbd_opr_dly_y 기준임.

조회 쿼리

과년도(연도별 누계, AGG_UNIT_CD = 'Y')와 당해연도(월별, 'M')를 한 번에 가져옴.

<select id="findKpiStatus" parameterType="...ReportReqDto" resultType="...ReportResDto">
    SELECT p.KPI_CD, p.AGG_UNIT_CD, p.STND_YM AS TRG_YMD,
           p.SBD_CNT AS SBD_ID_CNT, p.DNM_VL AS ALL_HSH_CNT,
           p.NUM_VL AS ACM_JN_HSH_CNT,
           p.RATE_VL, p.GL_VL, p.ACHV_RATE_VL
    FROM cmn.TB_KPI_PFM_Y p
    INNER JOIN cmn.TB_KPI_M m
            ON m.KPI_CD = p.KPI_CD
           AND m.US_YN  = 'Y'
    WHERE p.KPI_CD = #{kpiCd}
      AND (
            (p.AGG_UNIT_CD = 'Y' AND #{curYr} > p.STND_YM)
         OR (p.AGG_UNIT_CD = 'M' AND p.STND_YM BETWEEN #{curYr} AND #{trgYm})
          )
    ORDER BY p.AGG_UNIT_CD DESC, p.STND_YM
</select>

파라미터

프론트에서는 trgYm = '202604' 한 값만 옴. Service에서 아래로 분해해 매퍼에 넘김.

파라미터예시설명
kpiCd'JN_RATE'조회할 성과지표 코드
curYr'202600'입력연도 + '00'. 연도별 누계 조회 상한 (이보다 작은 누계 = ‘24년, ‘25년)
ymFrom'202601'올해 1월 (월별 조회 시작)
ymTo'202604'입력월 (월별 조회 끝)

STND_YM202500은 ‘25년 누계, 202604는 26년 4월을 뜻함.

컬럼 의미

컬럼의미
KPI_NM지표명 (예: 가입율)
DNM_NM / NUM_NM분모 / 분자 표시명 (예: 전체세대수 / 가입세대수)
UNIT_NM단위 (%, kWh 등)
AGG_UNIT_CD집계단위 (Y: 연도 / M: 월)
STND_YM기준년월
SBD_CNT단지수
DNM_VL / NUM_VL분모값 / 분자값
RATE_VL비율 (실적)
GL_VL목표값
ACHV_RATE_VL달성도

화면 처리

  • AGG_UNIT_CD로 연도별 표와 월별 표를 나눠 그림.
  • 증감(△/▽)은 프론트에서 계산함. 같은 그룹 안에서 직전 행과 비교함.
  • 당해연도 1월의 증감 기준은 전년도 누계 중 가장 최근 연도 행임.
  • 지표가 추가돼도 kpiCd만 바꿔 호출하면 되고 매퍼·화면은 고치지 않아도 됨.

화면 위치 (2026-09-18 코드 확인)

독립 메뉴가 아니라 LMC 관리자 웹의 LH 관리자용 운영보고서 안의 두 표임.

  • 화면 경로 /rpt/opr-rpt/OprRpt/LhMngrRpt, 컴포넌트 views/rpt/opr-rpt/components/lh-mngr/LhMngrRptAllOprSbdXpn.vue
  • 표 제목은 “과년도 성과지표 관리”와 “월별 운영 현황” 임
  • API는 GET /api/v1/report/findKpiStatus(ReportController.java:280)이고 보내는 값은 kpiCdtrgYm 둘뿐임. 화면이 kpiCd'JN_RATE'(가입률)로 고정해 호출함
  • SMC(시스템 관리자 웹) 코드에는 이 화면도 쿼리도 없음 → 공개노트/개발/모듈/SMC 통합운영시스템
  • 화면·기능 전체는 공개노트/개발/모듈/LMC 기능 상세

건설/매입 필터는 적용되지 않음 (2026-09-18 코드 확인)

검토 단계의 “reportYn으로 건설만 필터링” 방향은 코드에 들어가지 않았음. 확인된 사실은 아래와 같음.

  • reportYn은 건설/매입을 가르는 값이 아님. 건설(01)/매입(02) 구분은 mntnLsTpCd이고, 공통 조인 조각 Common.commonTableJoin이 이 값으로 조인 경로를 바꿈
  • reportYn='Y'“보고서 화면에서 부른 호출인가”를 알리는 보고서 모드 플래그임. 대시보드용 실시간(금일·시간별) 쿼리를 월별·최근 12개월 집계로 바꾸는 용도임
  • 쓰이는 곳은 Dsbd_Mapper.xml 6군데뿐이고, 'Y'를 보내는 곳은 제어 현황(rptCmnApi.js:15)과 안전지원 이벤트 표(sbdMngrRptApi.js:16) 둘뿐임. 정의는 DsbdReqDto.java:79
  • 성과지표(findKpiStatus)에는 reportYnmntnLsTpCd도 들어가지 않음 → 성과지표 표에는 건설/매입 필터가 없고, cmn.TB_KPI_PFM_Y에 적재된 값을 그대로 읽기만 함

LMC는 이 값을 계산하지도 쓰지도 않음. 목표·실적·달성도·단지수·전체세대수·가입세대수가 전부 테이블 값임. 지표를 쓸지 말지는 cmn.TB_KPI_M.US_YN='Y' 로 정해짐. 성과지표 숫자가 틀리다는 문의는 LMC가 아니라 cmn.TB_KPI_PFM_Y를 채우는 쪽을 봐야 함. 화면에서 고칠 방법이 없음.

화면 각주: ”※ 가입률은 공가 세대(당월 임대료 청구 이력이 없는 세대)를 제외한 실세대 기준으로 산정됩니다.”

확인 필요

성과지표 수치의 적재 주체와 산출 범위 화면 각주는 “공가 세대를 제외한 실세대 기준”이라고 안내하지만, 그 계산을 어느 시스템·배치가 수행하는지, 건설임대와 매입임대를 합친 값인지 나눈 값인지는 LMC 코드로 알 수 없음. cmn.TB_KPI_PFM_Y 적재 주체와 수행 주기 확인 필요. 지표 코드가 화면에서 'JN_RATE' 하나로 고정돼 있어 다른 지표를 쓰려면 화면 수정이 필요함. 과년도 실적 수치는 ‘25년 12월 기준 1년 단위임. 기준일이 바뀌면 집계도 다시 만들어야 함.

확인 방법

  1. 보고서 화면에서 연도별 표와 월별 표가 따로 나오는지 봄.
  2. trgYm = '202604'로 호출해 Y(202400, 202500) + M(202601~202604) 행이 오는지 확인함.
  3. 가입률 수치가 공개노트/개발/대시보드 세대수와 단지 현황의 대시보드 가입률과 같은지 대조함.

관련