개발 & 데이터베이스/DB

MySQL 이름, 이메일, 전화번호 데이터 마스킹 처리 방법

K.두부 2025. 3. 25. 15:36
반응형

외부에서 접근 시에 민감한 정보를 일부 가리기 위한 방법으로 마스킹 처리가 있습니다. 간단하게 이름, 이메일, 전화번호 등을 마스킹 처리하는 방법에 대해서 알아보겠습니다.

 

1️⃣ 앞 3자리만 남기고 나머지를 *로 변환

SELECT CONCAT(LEFT(user_id, 3), REPEAT('*', LENGTH(user_id) - 3)) AS masked_user_id
FROM dual;
user_id masked_user_id
abcdefgh abc*****

 

 

2️⃣ 중간 부분을 *로 변환

SELECT CONCAT(LEFT(user_id, 2),
REPEAT('*', LENGTH(user_id) - 4),
RIGHT(user_id, 2)) AS masked_user_id
FROM dual;
user_id masked_user_id
abcdefgh ab***fg

 

 

3️⃣ 전화번호

SELECT CONCAT(LEFT(phone, 4), '****', RIGHT(phone, 5)) AS masked_phone
FROM dual;
phone masked_phone
010-1234-5678 010-****-5678

 

 

4️⃣ 이메일

SELECT CONCAT(LEFT(email, 2),
REPEAT('*', LOCATE('@', email) - 3),
SUBSTRING(email, LOCATE('@', email))) AS masked_email
FROM dual;
email masked_email
abcde@example.com ab***@example.com

 

 

🎯 결론

  • 100만 건 이내에서는 큰 성능 차이는 없음 (조회 시 0.3~0.7초)
  • 대량 데이터(수백만~수천만 건)에서는 미리 컬럼을 만들어 저장하는 게 유리
  • 인덱스가 필요하면 SQL에서 마스킹하지 말고, 애플리케이션에서 처리하는 것이 좋음
반응형