[Info]Tags categorized posts and contents patterns..

[AJAX] Ajax Code E xamples.. [Book] About the book.. [CSS] CSS Code E xamples.. [DB] Sql Code E xamples.. [DEV] All development stor...

2016년 3월 15일 화요일

[DEV]Tag Library Descriptor.. TLD 파일을 이용한 마스킹 처리..

지금 금감원 감사로 인해서 상당히 바쁘게 보내고 있다.. 그 중 가장 큰 문제가 되는 것이 사용자 정보에 대한 부분인데 이름, 연락처, 주소, 이메일 주소 등을 특정 기준에 맞춰서 다 마스킹[*] 처리를 해야 된다.. 개인정보 보호 때문에..

과거 이런 마스킹 문제가 생기면, JSP 에서 JSTL 태그를 쓰기 때문에 난 당연히 JAVA 에서 마스킹 처리를 해서 해당 값을 JSP 로 보내곤 했다.. 머 별다른 생각도 안했고, 그렇게 해왔기 때문에 습관처럼 그렇게 작업을 한 것이다..

하지만, 여기서 가장 큰 문제는 작업량이 많아진다는 것이다.. 왜냐면 JAVA 에서 JSP 로 보내는 부분을 수정하면, JAVA 만 수정하는 것이 아니라 JSP 에서도 수정을 해야 되는 경우가 생기기 때문이다.. hidden 처리 및 파라미터 전달 등으로 인해서 userNm 이라고하면, userNm 은 놔두고 또 userNmMask 이런식으로 추가가 되어야 하기 때문에 그만큼 수정 공수가 많이 들어간다..

그런데 왠열.. 역시 아는만큼 보인다고 해야되나.. 무식하면 손이 고생한다더니.. 딱 그말이 맞다.. ㅜㅠ.. TLD[Tag Library Descriptor] 라는 것이 있더라.. JSTL 태그를 노상 쓰면서도 내가 TLD 파일에 정의를 해서 사용자 스스로 사용할 수 있는 taglib 를 만들 생각은 전혀 못했던 것이다.. 몰랐으니 생각도 못한게 당연하긴 하다..

그래도 그나마 다행이라고 해야되나.. 많이 늦기는 했지만, 그래도 만들어서 테스트 해보고 적용을 했다.. 소스 수정본이 거의 절반으로 줄었다.. 과거에 했던 것을 다 수정할 수는 없는 노릇이고, 추가사항으로 나온 것에 대해서만 적용했다.. 앞으로는 해당 태그를 사용해서 하면, 훨씬 편하게 작업을 할 수 있을 듯하다..

그럼 얘기는 이쯤하고, 파일을 어떻게 만들어야 되는지 보자..
우선 파일은 기본적으로 WEB-INF 안에 있어야 된다..

나 같은 경우는 WEB-INF/tlds/MaskingUtil.tld 로 만들었다.. 기존에 tld 파일이 존재하면, 복사해와서 내용을 바꿔도 되고, eclipse 에서 만들어도 된다.. 모른다면 인터넷을 검색해보라.. 진짜 많이 나온다.. 그정도의 검색은 해봐야지..??.. ㅎㅎ

아래가 MaskingUtil.tld 내용이다.. 내가 캡쳐나 복사 그런게 안되는 관계로 내 소스보고 직접 다 코딩했다 ㅡㅡ.. 단, 전체는 아니고 윗 부분만 가져왔다.. 그 이후는 반복이기 때문에..


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
version="2.0">
    
    <description>JSTL 1.1 functions library</description>
    <display-name>JSTL XML</display-name>
    <tlib-version>1.1</tlib-version>
    <short-name>mask</short-name>
    
    <function>
        <description>이름 마스킹</description>
        <name>getNameMasking</name>
        <function-class>com.test.utils.MaskingUtil</function-class>
        <function-signature>java.lang.String getNameMasking(java.lang.String)</function-signature>
        <example>${mask:getNameMasking(String name)}</example>
    </function>
</taglib>


위의 MaskingUtil.tld 가 기본이 되는 내용들인데.. 9라인 까지는 기본적인 선언부이기 때문에 크게 문제가 없다.. 그러므로 그 다음부터 설명을 하겠다..

10라인 <short-name> 은 JSP 에서 실제 태그 앞에 간단히 쓸 함수 명이라고 보면 된다.. MaskingUtil.tld 을 불러들이기 위한 간단한 약어정도..?? <c:if test=""> 에서 c 의 의미라고 생각하면 된다..

12~18라인이 가장 중요하면서 하나의 묶음이라고 보면 된다.. 다른 함수를 더 추가하려면 12~18라인이 하나 더 생겨야 된다..

13라인 <description> 은 말 그대로 설명이다..
14라인 <name> 함수를 호출할때 사용되는 태그명이다..
15라인 <function-class> 는 java 소스의 경로다.. 근데 실제 경로는 저게 아니지만, BCCard 내부 소스이므로 형태만 보여지도록 코딩했다..
16라인 <function-signature> 는 실행할 메소드를 명시하는데 타입까지 지정해준다..
17라인 <example> 은 말 그대로 예제를 보여준다..

이것이 소스에 대한 설명이고, 그럼 JSP 에서 써봐야 될것 아닌가.. 우선 본인이 쓰려고 하는 JSP 로 간다.. JSP 상단에 아래와 같이 선언을 해준다..


<%@ taglib prefix="mask" uri="/WEB-INF/tlds/MaskingUtil.tld" %>

여기서 prefix 이 부분이 tld 파일에 정의한 <short-name> 이다.. 이제 확 이해가 가지..??.. 위에 저렇게 선언을 하고 나면, 본인이 마스킹 처리 할 곳에 쓰기만 하면 된다.. 아래처럼 말이지.. 엄청 간단하다..

${mask:getNameMasking(unserNm)}

위처럼 감싸주면, 기존 똥장군 에서 똥*군 이런식으로 마스킹이 되어서 개인정보 보안 규칙에 부합되는 것이다..

조금 더 빨리 알았다면, 정말 손쉽게 작업을 했을 텐데.. 뼈저리게 아프다.. ㅎㅎ.. 비록 늦었지만, 알고 지나가니 그나마 다행이라고 위안을 삼는다.. 역시..

아는 것이 힘!!!