[portfolio](https://geonwoo.kim/ko/portfolio) › 비즈톡

# BGMS 로그 마스킹 모듈

https://geonwoo.kim/ko/portfolio/log-masking

기간: 2025.07

SK텔레콤 해킹 사고 이후 전화번호 암호화 외에 로그 마스킹까지 요구하는 고객사가 생겼습니다. MSA 서버 14종에 공통으로 적용해야 해서, 어느 서버에나 이식할 수 있는 모듈로 만들었습니다.

로그마다 25회 넘게 하던 Redis 조회를 로컬 캐시로 건너뛰는 구조

팀: 1인

역할: 기획 · 모듈 설계 · Redis 병목 개선 · 개발·테스트 · 패치

Java 8 · Spring Boot 2.7 · Redis · Gson · JaCoCo

- 민감 고객사인지 먼저 판단하고, 로그 객체를 넘기기 전에 감싸 모듈 안에서 마스킹

## Redis 병목

문제: 민감 고객사인지 판단하려고 로그를 남길 때마다 Redis를 조회했습니다. 발송 로그 하나에 Redis 접근이 평균 25회를 넘어 병목이 될 가능성이 커졌습니다.

해결: 모듈 안에 로컬 캐시를 두고, 캐시에 있으면 Redis 조회를 건너뛰게 했습니다. 민감 고객사 목록은 매일 로컬로 동기화해 최신 상태를 유지했습니다.

## 중첩 객체의 필드 탐색

문제: 로그로 넘어오는 값은 단순 문자열이 아니라 객체·목록·JSON이 중첩된 형태였습니다. 마스킹할 필드를 찾으려면 모든 계층을 살펴야 했고, get/set 접근으로는 이를 할 수 없었습니다.

해결: 로그 객체를 Gson으로 직렬화한 뒤 DFS로 JSON 트리를 순회하게 했습니다. 순회 중 bsid로 민감 고객사인지 판단하고, 그 아래의 recipient, phone\_number, message 같은 필드를 가렸습니다. 객체의 구조와 관계없이 같은 방식으로 필드를 찾게 되어 어느 서버에나 붙일 수 있었습니다.


[AWS MSK 3.8 마이그레이션](https://geonwoo.kim/ko/portfolio/msk-migration) · [채권 미납 안내 RPA](https://geonwoo.kim/ko/portfolio/bond-rpa)
