소소한 일상과 잡다한 정보

IT/jsp

Intelli J jsp 빌드 중 자동 반영 ( Build project automatically )

pandada 2025. 4. 8. 21:29
반응형

오늘은 Intelli J 버전 업그레이드를 진행했다...

버전 업그레이드를 진행하니까 빌드를 하고 localhost로 Tomcat이 실행 중일때

.jsp 파일을 수정/저장 한 다음에 web을 새로고침하면 갑자기 반영이 안되는.... Tomcat 설정 rollback이 발생했다...

Intelli J는 가끔 그렇다... Android Studio 기반으로 Java 개발자에게는 Eclipse 보다 훨~~~씬 편하지만 이런건 쫌....

그래서 다시 설정하는 방법을 까먹은 김에 정리를 해보려고 한다.


  1. 자동 빌드 설정 확인

IntelliJ에서 JSP 수정 시 바로 반영되려면 아래 설정이 켜져 있어야 함:

  • Preferences → Build, Execution, Deployment → Compiler
  • Build project automatically 체크

그리고 IntelliJ 2020.1 이후 버전에서는 자동 빌드를 활성화하려면 다음도 필요함:

  • Ctrl+Shift+A (Cmd+Shift+A on Mac) → “Registry” 검색
  • compiler.automake.allow.when.app.running 항목을 체크

✅ 2. JSP 변경 시 바로 반영 안 되는 경우: war exploded 설정 확인

배포가 war exploded 방식이면 IntelliJ가 자동으로 해당 파일만 교체해줘야 함. 아래도 확인:

  • Run > Edit Configurations → Tomcat 설정 클릭
  • Deployment > Application context 아래

 Update classes and resources 옵션이 “Update resources” 또는 **“Update classes and resources”**로 설정돼 있어야 함.


✅ 3. Tomcat work 디렉토리 강제 삭제 후 재시작

JSP는 내부적으로 .java  .class로 컴파일되며, 이게 Tomcat의 work 디렉토리에 저장됨.

가끔 이게 캐시처럼 동작해서 변경이 반영 안 될 수도 있다.

👉 아래 경로 삭제해보고 다시 실행해봐:
{프로젝트}/out/
{프로젝트}/.idea/tomcat/
{Tomcat}/work/

✅ 4. 캐시 문제

Tomcat이 JSP를 캐시할 수 있다. web.xml에 아래 설정 추가하면 변경 시 즉시 컴파일됨:

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <page-encoding>UTF-8</page-encoding>
        <include-prelude></include-prelude>
        <include-coda></include-coda>
        <scripting-invalid>false</scripting-invalid>
        <el-ignored>false</el-ignored>
        <deferred-syntax-allowed-as-literal>false</deferred-syntax-allowed-as-literal>
        <trim-directive-whitespaces>true</trim-directive-whitespaces>
    </jsp-property-group>
</jsp-config>

혹은 /conf/web.xml <servlet> 태그에서 아래처럼 수정 가능:

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
        <param-name>modificationTestInterval</param-name>
        <param-value>1</param-value> <!-- 초 단위 -->
    </init-param>
    <init-param>
        <param-name>checkInterval</param-name>
        <param-value>1</param-value>
    </init-param>
    <init-param>
        <param-name>development</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>

 


✅ 4. JSP 수정 후 수동 반영 방법

  • Build > Rebuild Project
  • 또는 Build > Build Project (JSP만 수정했으면 이것만으로도 반영될 수 있음)
  • Run > Update → Update classes and resources 수동 실행 (Shift+F10 후 Ctrl+F10)

반응형

✅ 5. JSP 수정 후 저장만 하고 서버에 배포되지 않은 경우

 Ctrl+S만 눌러 저장한 후, Build  Make Project (Ctrl+F9)를 해줘야 자동 반영될 수 있다.


✅ 6. IntelliJ에서 JSP도 리빌드되도록 확인

 Settings > Build, Execution, Deployment > Compiler > Resource patterns에서 *.jsp가 빠져 있는지 확인하고,

빠져 있다면 다음처럼 포함시켜줘야 함:

!?*.jsp;!?*.java;!?*.form;!?*.class;!?*.groovy;!?*.scala;!?*.flex;!?*.kt;!?*.clj;!?*.aj

추가 설명을 하자면,  이건 제외(!?)하는 패턴이다.

즉, !?*.jsp *.jsp는 제외하지 마라 → 즉 포함시켜라는 뜻이니까 ?! 포함으로 넣어야 한다.


 

On frame deactivation은 IntelliJ에서 다른 창(프레임)으로 포커스가 이동할 때 어떤 작업을 할지를 설정하는 옵션이야.

 

**“IntelliJ IDEA 창을 벗어나면(=포커스를 잃으면) 자동으로 뭘 할까?”**를 설정하는 부분이다.

 

⚙️ 선택 가능한 옵션들:

옵션 설명
Do nothing 아무 동작도 하지 않음 (기본값)
Update classes and resources 클래스 파일 및 리소스를 자동으로 Tomcat에 반영함
Update resources JSP, HTML, CSS 같은 리소스 파일만 반영
Redeploy 전체 애플리케이션을 다시 배포함 (무거움)

 

📌 실전 팁:

보통 JSP 빠른 반영을 원한다면:

  • On frame deactivation → Update resources 또는 Update classes and resources
  • 그리고 compiler.automake.allow.when.app.running → ✅ 체크되어 있어야 진짜 반영된다.

나는 솔직히 Tomcat VM Update 부분만 바꿨어도 적용이 되었는데, 혹시 다른 사람들은 어떻게 진행했을까...

써칭좀 해보니까 그것만으로 해결이 안된 사람들이 의외로 있는 것 같아서 설정할 수 있는 모든 것들을 확인해 본 것 같다.

솔직히 이정도만 테스트 다 해봐도 자동적으로 적용 되는 것을 확인할 수 있을 것이고, 체크리스트를 아래에 참고 삼아 넣어볼테니 시간이 없는 사람들은 아래의 체크 리스트만 확인해봐도 될듯! 

이래도 안된다면... 나도 궁금하니까 댓글 요청!!!!!

✅ 7단계: 마지막 체크리스트 요약

항목
war exploded 설정
Update resources 설정
Build project automatically
Allow auto-make...
JSP 리소스 포함
JSP 컴파일 확인 (work/out 디렉터리)

 

📌 모르겠다... 만약 이래도 안 되면?

  • 수동으로 Build > Rebuild Project
  • 또는 Deployment > 다시 war exploded 재설정
  • 최후 수단은 .idea/.iml/.out 모두 삭제 후 재설정 ( 클린 프로젝트 / 솔직히 클린 프로젝트까지는 안갔으면 한다... )

 

반응형