본문 바로가기

좋아하는 것_매직IT/39.JSP

JSP 수정하면 tomcat 재기동 없이 적용되는데 왜그럴까?

반응형

보통 Tomcat에서 JSP 파일을 재기동 없이 적용하는 방법은 기본적으로 JSP 파일 변경 시 자동으로 컴파일되고,
새로운 서블릿으로 반영되는 기능을 활용하는 것일텐데요.
Tomcat은 JSP 파일을 동적으로 처리하고, 파일의 변경 사항을 감지하여 자동으로 새로 컴파일하는 기능을 제공합니다.

그리고 Tomcat은 기본적으로 JSP 파일을 수정한 후 서버를 재시작하지 않고도 변경 사항을 자동으로 반영할 수 있습니다.

하지만 이 기능이 제대로 동작하려면 아래와 같이 몇 가지 전제 조건과 설정이 필요할 수 있습니다.

하나, JSP 파일 자동 컴파일 및 리로딩에 대한 부분입니다.
Tomcat은 기본적으로 JSP 파일을 변경하면 자동으로 다시 컴파일하여 새로운 서블릿 클래스를 생성합니다. 
이를 위해 Tomcat은 JSP 파일을 감시하고, 변경을 감지하면 이를 자동으로 컴파일하게되는데요.

우선, 기본적으로 동작하는 방식은 아래와 같습니다. 
JSP 파일을 처음 요청하면 Tomcat은 해당 JSP를 서블릿으로 변환하고 컴파일합니다.
이후 JSP 파일이 변경되면 Tomcat은 이를 감지하고, 서블릿 클래스를 다시 컴파일하여 새로운 서블릿을 실행합니다.
이 과정에서 서버 재시작 없이 변경 사항을 즉시 반영할 수 있게됩니다. 

둘. web.xml 설정인데요.
Tomcat에서는 web.xml 파일에 특별한 설정을 하지 않아도, 기본적으로 JSP 변경 감지 및 자동 컴파일이 동작합니다. 
그러나 만약 이 기능이 작동하지 않거나 최적화하려면 아래와 같이 web.xml에서 몇 가지 설정을 추가할 수 있습니다.

예시: web.xml에서 JSP 설정

<web-app>
    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <el-ignored>false</el-ignored> <!-- EL(Expression Language) 사용 -->
            <scripting-invalid>true</scripting-invalid> <!-- 스크립트 사용 금지 -->
            <buffer>8k</buffer> <!-- JSP 버퍼 크기 설정 -->
        </jsp-property-group>
    </jsp-config>
</web-app>

이 설정은 JSP의 컴파일과 관련된 사항을 정의합니다. 
예를 들어, el-ignored는 EL(Expression Language)을 사용할지 여부를 설정하고, scripting-invalid는 JSP 내에서 스크립트 사용을 제한하는 옵션이라고 보시면 됩니다.

셋, Tomcat의 context.xml 설정인데요.
Tomcat에서는 context.xml 파일에서 reloadable 속성을 통해 JSP 파일의 변경 감지를 설정할 수 있습니다. 
기본적으로 이 속성은 true로 설정되어 있습니다. 
이 설정을 통해 Tomcat은 JSP 파일 변경을 감지하고, 서버를 재기동하지 않고도 즉시 변경된 파일을 반영할 수 있습니다.

예시: context.xml에서 reloadable 설정 입니다. 

<Context reloadable="true">
    <!-- JSP 변경 감지 및 자동 리로드 활성화 -->
</Context>

이 설정은 Tomcat이 reloadable="true"일 때 JSP 파일의 변경을 감지하여 서버를 재시작하지 않고 즉시 새로 컴파일하게 한다고 보시면 됩니다. 

넷,. 개발 환경에서의 캐시 설정 인데요.
개발 환경에서 JSP 파일을 수정할 때마다 변경 사항을 즉시 반영하려면 캐시를 비활성화하는 것이 좋습니다. 
Tomcat은 기본적으로 JSP를 캐시하지만, 개발 환경에서는 캐시를 비활성화하여 파일 변경 사항을 즉시 반영할 수 있습니다. 
이 설정은 Tomcat의 web.xml 또는 context.xml에서 설정할 수 있습니다.

다섯. 디버그 모드 및 자동 리로딩
Tomcat은 개발 모드에서 자동 리로딩 기능을 제공하여 JSP 파일이 변경될 때마다 자동으로 컴파일하고 반영할 수 있도록 합니다. 
이 기능은 Tomcat의 기본 설정에서 활성화됩니다.

Tomcat 서버의 conf/context.xml에서 reloadable="true" 설정을 확인하고, 개발 환경에서 서버를 다시 시작하지 않고도 변경 사항을 적용할 수 있습니다.

여섯. 실행 환경과 성능 고려
서버가 실시간으로 JSP 파일을 감지하고 재컴파일하는 기능은 개발 환경에서는 유용하지만, 운영 환경에서는 성능에 영향을 줄 수 있습니다.
운영 환경에서는 JSP 파일을 미리 컴파일하거나, 캐싱하여 성능을 최적화하는 방법을 사용할 수 있습니다.
이때는 서버를 재시작하지 않고도 변경 사항을 반영하려면, 운영 환경에서는 서블릿 컨테이너의 리로딩 정책을 세밀하게 조정해야 할 수 있습니다.

그럼 오늘도 맺음말을 통해서 블로그를 마무리하도록 하겠습니다. 

맺음말


Tomcat에서 JSP 파일을 서버 재기동 없이 반영하려면 JSP 자동 컴파일 및 동적 리로딩 기능이 제대로 활성화되어 있어야 합니다.
Tomcat은 기본적으로 JSP 파일의 변경을 감지하고 이를 자동으로 재컴파일하여 반영하므로, 서버 재시작 없이도 변경 사항이 적용됩니다.
추가적으로, context.xml에서 reloadable="true"를 설정하거나, web.xml에서 JSP 관련 설정을 조정하여 동작을 최적화할 수 있습니다.

그럼, 서버 재기동 없이 JSP 변경을 반영부분에 대해서 정리해보자면!

Tomcat의 자동 컴파일 및 리로딩 기능을 활용
context.xml에서 reloadable="true" 설정
개발 환경에서 캐시 비활성화 및 디버그 모드 활용

이 방법들을 통해 Tomcat에서 JSP 파일을 재기동 없이 빠르게 반영할 수 있다고 보시면 됩니다!

오늘도 시청해주셔서 감사합니다. 

300x250