오늘은 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 모두 삭제 후 재설정 ( 클린 프로젝트 / 솔직히 클린 프로젝트까지는 안갔으면 한다... )
'IT > jsp' 카테고리의 다른 글
jsp : 왜 HTTP 대신 HTTPS가 꼭 필요할까? ( SSL 적용 방법 ) (8) | 2025.03.18 |
---|---|
jsp : 파비콘 ( Favicon ) 설정 (2) | 2025.03.12 |