AMI 원격검침 통합 관리 시스템 (GS인증 1등급)
2021.09 – 2022.10 · 백엔드 개발 (선임) · 하이텍앤솔 ICT개발팀
- Java
- Spring 4.3
- MyBatis
- MySQL
- JSP
- Apache POI
- Log4j2
Overview
개요
전기·가스·수도 사용량을 자동으로 읽어 오는 원격검침(AMI)을 한곳에서 관리하는 웹 시스템입니다. 매일 정해진 시각에 카카오 알림톡을 자동 발송하는 기능, 개인정보 암호화 전환, 대량 검침 데이터 조회 속도 개선을 맡았습니다.
- 데이터 암호화 마이그레이션(AES-128 + SHA-256)으로 자사 AMI 시스템 GS인증 1등급 획득에 기여
- 카카오 알림톡 연동 + 매일 09시 자동 발송 배치 구현 — 누수 의심·계량기 불량·단말 통신 불량을 집계해 담당자에게 발송, 미지원 지자체는 SMS 자동 대체
- MySQL 월 단위 파티션 인지 쿼리로 일별·시간별 대용량 검침 데이터 상세 조회 성능 처리
- WAS/DB 구성 자동 판별 + CPU/메모리/디스크 및 FEP 처리량 모니터링 대시보드 백엔드
Architecture
시스템 아키텍처
Metrics
성과 지표
1등급
GS인증
자사 SW 품질인증
매일 09시
알림톡 발송
자동 배치
AES-128 / SHA-256
데이터 암호화
Troubleshooting
트러블슈팅
데이터 암호화 마이그레이션 (GS인증 1등급 대응)
문제 상황
수용가·단말·주소 등 개인정보성 데이터가 평문으로 저장되어 있었고, 비밀번호 또한 단방향 해시가 적용되지 않은 상태였다. 자사 SW 품질인증(GS인증) 심사에서 데이터 보호 요건을 충족해야 했다.
원인 가설
기존 평문 컬럼을 일괄 암호화하는 마이그레이션 엔드포인트와, 신규 입력 경로의 암호화 적용을 분리하면 운영 중단 없이 단계적으로 전환할 수 있다.
검증
마이그레이션 대상 테이블을 식별하고, 컬럼 단위 일괄 암호화 후 복호화 검증으로 데이터 무손실을 확인했다. 비밀번호는 해시 + Base64 인코딩 결과의 검증 로직을 점검했다. 테넌트별로 요구 암호화 체계가 달라(일반 테넌트 AES, 일부 테넌트는 별도 DB 암호화 에이전트) 분기 처리가 필요함을 확인했다.
해결
- 평문 데이터를 AES-128로 일괄 암호화하는 마이그레이션 엔드포인트를 구현하고, 신규 입력 경로에도 동일 암호화를 적용했다.
- 비밀번호를 SHA-256 해시 + Base64로 전환했다.
- 특정 테넌트는 외부 DB 암호화 에이전트(ARIA-256 계열) 연동 경로를 추가해 테넌트별 암호화 체계를 구성했다.
- 결과적으로 데이터 보호 요건을 충족하여 GS인증 1등급 획득에 기여했다.
카카오 알림톡 매일 자동 발송 배치
문제 상황
누수 의심·계량기 불량·단말 통신 불량 등 점검 필요 건을 담당자가 수동으로 확인해야 했고, 알림 채널을 지원하지 않는 일부 지자체에서는 통지 누락이 발생할 수 있었다.
원인 가설
Spring task:scheduled 기반으로 매일 정시에 상태를 집계해 알림톡을 발송하고, 채널 미지원 지자체는 SMS로 자동 대체하면 통지 누락을 막을 수 있다.
검증
스케줄 cron 표현식(0 0 9 * * *, 매일 09시)으로 배치 진입점을 등록하고, 수신자 목록·집계 건수가 의도대로 구성되는지 확인했다. 지자체별 분기(알림톡 vs SMS)와 수신자 CRUD(전화번호 중복 체크 포함)를 점검했다.
해결
- 매일 09시 상태 집계 → 수신자별 알림톡 발송 배치를 구현했다.
- 알림톡 미지원 지자체는 SMS 발송 경로로 자동 대체했다.
- 외부 알림톡 API 연동은 HTTP POST 래퍼로 처리하고, 수신자별 식별키를 동적으로 생성했다.
대용량 검침 데이터 상세 조회 성능 처리
문제 상황
일별/시간별 검침·사용량 데이터가 대용량 시계열로 누적되어, 수용가 단위 상세 조회 시 풀스캔에 가까운 부하가 발생할 위험이 있었다.
원인 가설
검침 데이터 테이블이 월 단위로 파티셔닝되어 있으므로, 조회월에 해당하는 파티션 존재 여부를 먼저 확인하고 파티션을 지정해 조회하면 스캔 범위를 크게 줄일 수 있다.
검증
조회월 기준 파티션 존재 여부를 확인하는 로직(checkPartition)을 추가하고, 파티션 지정 쿼리의 실행 범위가 해당 월로 한정되는지 확인했다.
해결
- 조회월 파티션 존재 여부 확인 후 파티션 인지 쿼리로 일별(1
31일)·시간별(0023시) 데이터를 수용가 매트릭스로 가공했다. - 암호화된 컬럼은 조회 시점에 복호화하고, 멀티테넌트 컨텍스트별로 컬럼 분기를 처리했다.
운영 디스크 용량 모니터링 (GS 빌드 정비)
문제 상황
GS인증 심사용 빌드에서 운영 상태 가시화가 필요했으나, 서버 디스크 사용률을 대시보드 진입 시점에 한눈에 볼 수 있는 지점이 없었다.
원인 가설
시스템 모니터 테이블의 호스트별 파일시스템 사용률 최신값을 대시보드 메인 진입점에서 조회하면 장애를 사전에 인지할 수 있다.
검증
호스트별 파일시스템 사용률 최신 1건 조회 쿼리(diskCheck)를 신설하고, 대시보드 메인에서 바인딩되는지 확인했다.
해결
- 대시보드 메인에 디스크 용량 모니터링(
diskCheck) 을 신설해 서버별 사용률을 노출했다. - 심사 범위에 맞춰 대시보드/시스템설정 모듈을 경량화하고, AOP 기반 로깅 일관성을 유지했다.