JSP에서 개인정보를 출력할 때 이름, 전화번호, 이메일 등을 그대로 노출하면 보안상 문제가 될 수 있습니다.
이번 글에서는 JSTL을 사용하여 문자열 일부를 숨기는 데이터 마스킹 방법을 정리합니다.
화면에 사용자 정보를 출력할 때 아래와 같은 요구사항이 있습니다.
- 이름: 홍길동 → 홍*동
- 전화번호: 010-1234-5678 → 010-****-5678
- 이메일: test@example.com → te***@example.com
JSTL만으로 처리하려고 하면 substring 처리에서 막히는 경우가 많습니다.
해결 방법
상단에 아래 코드를 작성해 JSTL 기본 설정을 해 줍니다.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
${fn:substring(name, 0, 1)}*${fn:substring(name, fn:length(name)-1, fn:length(name))}
출력 결과: 홍길동 → 홍*동
<c:set var="p1" value="${fn:substringBefore(phone, '-')}" />
<c:set var="rest" value="${fn:substringAfter(phone, '-')}" />
<c:set var="p2" value="${fn:substringBefore(rest, '-')}" />
<c:set var="p3" value="${fn:substringAfter(rest, '-')}" />
${p1}-****-${p3}
출력 결과: 010-1234-5678 → 010-****-5678
<c:set var="emailId" value="${fn:substringBefore(email, '@')}" />
<c:set var="domain" value="${fn:substringAfter(email, '@')}" />
${fn:substring(emailId, 0, 2)}***@${domain}
출력 결과: test@example.com → te***@example.com
정리
JSTL의 fn:substring, fn:length 함수를 활용하면 별도의 Java 코드 없이도 간단하게 데이터 마스킹 처리가 가능합니다.
특히 이름, 전화번호, 이메일과 같은 개인정보는 반드시 마스킹 처리 후 출력하는 것이 좋습니다.