프로그래밍 스티치

적어도 하나의 JAR가 TLD들을 찾기 위해 스캔 되었으나... 본문

JAVA

적어도 하나의 JAR가 TLD들을 찾기 위해 스캔 되었으나...

프로그래밍 스티치 2022. 7. 26. 23:16

큰 문제는 없지만 신경쓰이는 로그

INFO: 적어도 하나의 JAR가 TLD들을 찾기 위해 스캔되었으나 아무 것도 찾지 못했습니다. 스캔했으나 TLD가 없는 JAR들의 전체 목록을 보시려면, 로그 레벨을 디버그 레벨로 설정하십시오. 스캔 과정에서 불필요한 JAR들을 건너뛰면, 시스템 시작 시간과 JSP 컴파일 시간을 단축시킬 수 있습니다.

 

이클립스를 하다가 보면 자주 보이는 로그이다. 실행을 하거나 코드를 짜는데 큰 불편함이 없어서 그냥 넘어가는 경우가 대부분이지만 왠지 모르게 신경이 쓰여서 찾아서 해결해 보기로 하였다.

 

우선 tomcat이 서버문열때 가지고있는 jar들을 하나씩 훑어보면서 혹시 태그 라이브러리 정의 파일(TLD)을 가지고 있는지 스캔을 한다. 이 과정에서 상당한 시간이 소요되니까 부팅시간을 빠르게 하기 위해서 불필요한 JAR는 스캔 대상에서 제외하도록 미리 설정해 두라는 일종의 친절한 알림이라고 한다.

 

+ JAR란 Java ARchive Files의 줄임말로, 으로서 일종의 자바 프로젝트 압축파일을 의미합니다.

+ TLD란 Tag Library Descriptor의 줄임말로, JSP에서 사용되는 커스텀 태그 나 JSTL 의 태그들에 대한 설정 파일입니다.

 

그러면 불필요한 JAR스캔 대상은 어떻게 구별하며, 어떻게 설정해야 필요한 JAR파일들만 스캔하여 부팅시간을 빠르게 할 수 있을까? 

 

불필요한 JAR스캔 대상은 어떻게 구별?

톰캣 구동속도에 영향을 주는것은 JAR파일 탐색인데 톰캣은 기본적으로 다음의 두 가지를 위해 JAR파일의 클래스나 자원을 스캔합니다.

 

1. 특정 애노테이션을 가진 클래스 검색

2. TLD파일

 

즉, 위 내용과 상관 없는 JAR파일을 스캔 대상에서 제외하면 그만큼 톰캣 구동 속도가 빨라질것입니다.

 

어떻게 설정해야 필요한 JAR파일들만 스캔할까?

저 위의 로그는  웹 어플리케이션에 포함된 jar 파일을 탐색하는데 해당 jar 파일에 커스텀 태그와 관련된 TLD 파일이 없을 때 발생한다. TLD파일이 없는 JAR파일을 탐색하는것은 시간낭비 이므로 tld파일 검색 대상에서 해당 JAR파일을 제외하면 톰캣 구동시간을 줄일 수 있다.

 

추가로 웹 어플리케이션과 관련된 애노테이션을 붙인 클래스가 없는 jar 파일을 검색하는 것 역시 톰캣 구동 시간을 느리게 만드므로 이런 jar 파일도 검색 대상에서 제외하면 톰캣 시작 시간을 줄일 수 있다.

 

이 두 종류의 jar파일을 찾아내기 위해서 아래의 위치에 있는 logging.properties 파일에 TLD관련 로그 레벨을 FINE으로 바꿔줍니다.

 

logging.properties의 위치

 

# 탐색하는 jar 파일 목록 출력

org.apache.catalina.startup.ContextConfig.level = FINE

# TLD 관련 로그 출력

org.apache.jasper.servlet.TldScanner.level = FINE

 

logging.properties 파일 수정

해당 부분에 코드를 추가해주고, 

 

이클립스에서 Servers프로젝트의 catalina.properties파일 수정

이클립스에서는 Servers프로젝트의 catalina.properties파일에 보라색으로 네모쳐진부분을 추가해주면 된다.

 

rt.jar,\

spring-*.RELEASE.jar

 

spring-webmvc-*.jar

 

 

미세하게 빨라진것일수도있고 아닐수도있습니다.

 

감사합니다~