개발 일상(Dev)

TLD 파일이란?

Roovelo 2022. 7. 19. 13:50

2022.07.14 ~ 2022.07.18 까지 하다가 정리했던 내용인데 매주 토요일이나 일요일에 정리해야지 했는데 막상 주말에 더 바빠서 시간이 없고 평일에 하게 되네요. ㅎㅎ 그리고 쓰다보니까 좀 부족한 내용이 보이긴 하던데 자꾸 추가하고 공부하고 보완하고 하다보면 끝없어 질 것 같아서 여기까지만 하고 일단 마무리를 합니다. ㅎㅎ


최근에 일을 하다가 소스 코드들을 전체적으로 훑어볼 시간이 있어서 보는데

templet_layout.tld
templet_menu.tld
 
이렇게 .tld 라는 이름의 확장자를 가진 파일이 있더라고요. 
 
여태까지는 그냥 내용을 보고 아~ 이렇게 쓰는거고 뭔가 설정하는파일이구나. 하고 그냥 쓰고 있었는데 정확히 무슨 파일인지 설명을 하라고 하면 못 하겠더라고요. 그래서 이번 기회에 제대로 알아두자라고 해서 생각을 해서 정리를 해보기로 했습니다.
 
우선 tld 파일이란? 라고 검색을 했는데 도메인에 대한 설명이 가장 먼저 나오던데 도메인과 관련해서도 tld 라는 용어가 있나보던데 이 내용은 아니기 때문에 tld 확장자란?이라고 검색을 해봤습니다.

 

TLD 확장자란?

TLD 확장자란? ( https://dololak.tistory.com/750 ) 

 

여러 블로그와 사이트들을 봤는데 이 블로그에 가장 정리가 잘 되어 있는 것 같고요. "코끼리를 냉장고에 넣는 방법" 이라는 이 블로그는 개발하면서  검색을 하다 보면 무조건 들릴 수 밖에 없는 사이트인 것 같습니다.

 

위 사이트를 참고해서 tld 파일에 대해서 간단하게 정리를 하면 아래와 같습니다.

TLD(Tag Library Descriptor) 태그 라이브러리 디스크립터. 라고 하며 
JSP에서 사용되는 “커스텀 태그”나 “JSTL”의 태그들에 대한 설정 파일이다.

태그 핸들러에 대해 “속성”이나 “속성의 타입”, “태그명”, “uri” 등을 정의해두는 설정이 tld 파일이며 *.tld 라는 확장자를 갖는다.

tld 파일의 경우 web.xml 과 마찬가지로 WEB-INF 디렉토리의 하위에 작성해야 인식하며 JSP1.2 버전의 경우 web.xml 파일에 따로 tld 파일에 대한 추가 설정이 필요하지만 JSP 2.0 이상의 경우 WEB-INF 폴더하위에 작성하기만 하면 자동으로 인식한다.

그러니까 tld 파일은 JSP 파일에서 사용할 태그들에 대한 이름, 속성, 타입 등을 미리 설정하는 태그 설정 파일 이라고 볼 수 있습니다. 

TLD 파일 만들기

tld 파일은 XML 기반이기 때문에 dtd나 schema 를 tld 파일 상단에 명시해주어야 한다.

이클립스의 경우 XML 파일을 만들기를 해서 NEXT로 넘어가다보면 Create XML file from a DTD file 등의 방법을 이용해서 기본 셋팅이 된 tld 파일을 만들 수 있다고 합니다.

그리고 여기서 다시 DTD 파일은 뭐지? 라고 생각을 했는데요. 우선은 tld 를 알아보고 있는 상황이기 때문에 DTD는 개념만 잠깐 검색해 봤습니다.
dtd 란? 문서의 구조를 정의하는 규칙의 집합.

문서의 구조화 원소 및 원소의 속성 등을 정의함으로써 작성된 XML 문서가 유효한지 여부를 판단하는데 사용된다.

그러니까 DTD 규칙을 사용해서 XML을 작성하겠다. 라는 파일에 대한 작성 규칙을 선언하는 부분인 것 같은데요. 자세한 내용은 다음에 다시 공부해보기로 하고 일단은 tld 파일로 다시 돌아가겠습니다.

 

이클립스 Create XML File From 화면 캡처

이클립스에서는 이렇게 Create XML file from a DTD file 로 만들수 있습니다. 
그럼 이제 이렇게 만들어진 tld 파일을 어떤식으로 사용하는지 확인해봐야겠죠.
 
 

tld 파일 작성 방법

우선 tld 파일은 크게 4개 부분으로 나눠져 있다고 합니다.
  1. tld 문서의 전체 설정
  2. 태그라이브러리의 전체설정
  3. 커스텀태그의 전체 설정
  4. 커스텀태그의 인자 설정
바로 코드를 적으면서 확인해보겠습니다.
<?xml version=“1.0” encoding=“ISO-885901” ?>
<!DOCTYPE taglib
    PUBLIC “-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN”
    “http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd”>
//여기까지는 파일 생성을 하면 저절로 만들어지며 XML 헤더 정보를 나타냅니다. XML버전, 인코딩 정보, DTD파일 지정 등의 설정이 있습니다.
 
<taglib>
   <tlibversion>1.0</tlibversion> <!— Tag Library의 자체버전, 필수 —>
   <jspversion>1.1</jspversion> <!— JSP 스펙의 버전, 생략시 1.1, 필수(?) _ 생략시 1.1 이라고 하는데 설정은 또 필수라고 하는데 필수인데 어떻게 생략 가능한지 잘 모르겠습니다;; —>
   <shortname>first</shortname> <!— TagLib의 생략된 이름을 지정, 필수 —>
   <uri></uri> <!— 여러개의 tld 파일로 구분하여 사용되는 경우에 이용, 생략 가능 —>
   <info>A simple tab library for the examples</info> <!— 정보나 설명을 적는 부분, 생략가능 —>
//여기까지는 태그라이브러리에 관한 전체적인 설정을 작성합니다.
 
   <tag>
     <name>list</name> <!—태그의 이름, 이 이름으로 태그를 식별 즉 다음과 같이 사용 가능 <first:list>목록</first:list> —> 
     <tagclass>sample.common.tag.LabelTag</tagclss> <!— 커스텀 태그를 실제 수행하는핸들러, 필수(자바 파일의 위치라고 보면 될 것 같습니다.) —>
     <teiclass> ~~~ </teiclass> <!— 도우미 클래스, 필수 아님 —>
     <bodycontent>JSP</bodycontent> JSP에서 커스텀 태그를 사용할 때 시작태그와 끝내그 사이의 컨텐츠의 타입을 기술, empty, tagdependent, JSP등을 사용 그러니까 태그와 태그 사이에 뭐가 들어가냐? 라는 내용인 것 같음 —>
     <info>Tag with body and parameter</info> <!— 추가적인 설명을 적는 부분 —>
     <attribute>
       <name>depth</name> <!— 속성의 이름, 문자열 JSP page 에서는 다음과같이 사용된다. <first:list depth=“1”> 그리고 필수값.
       <required>true</required> <!— 필수인지의 여부, true, false 값 입력 —>
       <rtexprvalue>true</rtexprvalue> <!— default 값은 false, 이며 정적인 값을 받겠다는 의미. 만약 true 라면 동적으로 처리가능. <first:list name=‘<%request.getParameter(“name” %>’ /> 로 커스텀태그 실행시에 JSP를 사용할 수 있는지를 나타낸다. -->
     </attirbute>
   </tag>
   <tag>
     .. .. .. 
   </tag> 
</taglib>

//tag 로 둘러쌓인 부분은 커스텀태그에 관한 설정 부분.
//그리고 <tag> 부분이 이제 아래로 쭉쭉 추가되면서 tag 설정들이 여러개로 늘어납니다
 
tld 파일 자체는 위와 같은 형식으로 작성한다고 합니다.
그럼 이제 tld 파일이 태그에 관한 설정이라고 했으니  설정한 태그를 어떻게 사용하는지도 간단하게 확인해보겠습니다.
 
지금 제가 보고 있는 소스 상에서는 ~~.tag 파일에서 이 내용을 사용하고 있습니다.
.tag 파일이란?
tld 파일이 태그의 설정에 대한 내용이라면 .tag 는 파일확장자명 그대로 커스텀 태그 파일을 만드는 파일이라고 보면 되겠습니다. 
 

 

그리고 이 tld 파일을 prefix 를 사용해서 설정 후에 사용하고 있는데요. 
 
<%@ taglib uri=“/WEB-INF/tld/templet_menu.tld” prefix=“m”%>
//tld 파일을 불러오고 prefix를 설정.
 
 
<m:list depth=“1”>
사용할 때는 위와 같이 간단하게 사용하면 됩니다. 

 

m 과list 부분은 아까 tld 파일과 위의 prefix 에서 설정했던 부분들이고요.  뒤에 있는 depth 부분은 이제 그 태그를 어떻게 처리할지 tasClass 부분에 적은 그 파일에서 처리하는 부분이라고 보면 되겠습니다. 

 

그리고 아까 위에서 jsp2.0 이상이면서 WEB-INF 밑에 tld 파일이 있다면 경로를 안 적어도 된다고 했는데 이 프로젝트에는 web.xml 에서 설정을 하고 있긴 하더라고요. 

저희 소스에는 아래와 같이 되어있는데요. 
<jsp-config> 
  <taglib>
    <taglib-uri>jsp 에서 불러올 변수명</taglib-uri>
    <taglib-location>/WEB-INF/tld/templet_menu.tld</taglib-location>
  </taglib>
</jsp-config>

저 uri 부분은 좀 헷갈리는데요. 

web.xml 에서도 uri 설정을 하고 그냥 jsp 파일에서 불러올 때도 설정을 하고..? 근데 이제 이게 2개 다 해야하는건지 1개만 하면 되는건지 잘 모르겠고 게다가 저희 회사는 자체 프레임워크를 사용하는데 저 uri 와 jsp 파일의 prefix 부분의 uri 가 또 다르네요. ㅋㅋ ;; 

우선 오늘은 tld 파일이 뭔지 그리고 어떻게 작성하는건지 알았으니까 거기에서 만족해야겠습니다. ㅎㅎ

 

 

728x90