2013/11/14

톰캣(Tomcat) 서버의 캐시(Cache) 파일 삭제하기 // 서블릿(Servlet) 재생성, 새로고침(리프레쉬Refresh), JSP, 자바(Java) 클래스(Class) 파일

카페24(cafe24.com) 등 호스팅 업체의 웹 서버에 올려진 JSP 파일 또는 자바(Java)의 클래스(Class) 파일을 분명히 수정-또는 수정된 파일로 덮어쓰기- 했음에도 불구하고

크롬(Chrome) 등의 웹 브라우저에서 확인되는 소스 코드나 사이트의 작동 상황에는 수정한 내용이 반영이 안 되는 경우가 있습니다.


FTP 등으로 서버의 파일을 열어보면 수정되어 있는데, 브라우저에서 열리는 파일은 수정이 안 되어 있는 것이죠.

오! 마이! 갓! -o-;


1. 톰캣(Tomcat)의 JSP 캐시(Cache) 파일!?

FTP에서나 Telnet(SSH)에서 확인되는 서버(Server) 측의 파일은 수정이 되어 있지만, 클라이언트(Client)의 브라우저에서 열리는 파일은 수정이 안 되어 있다면 아마도 톰캣의 문제일 겁니다.

JSP의 작동 원리 상, JSP로 작성된 파일은 소스 파일로 변환(*.java) 되고 다시 컴파일(*.class) 되는 과정을 거쳐 서블릿 컨테이너(Servlet Container) 내에서 서비스가 되는 것인데

JSP 파일의 내용이 바뀌었음에도 불구하고 톰캣이 이를 인식하지 못해서인지, 서블릿 파일을 다시 생성하지 않아서 이러한 문제가 생기는 것입니다.

결과적으로 브라우저로 접근하는 클라이언트에서는 기존의 서블릿 파일만 보이고 (초보) 개발자는 멘붕에 빠지게 됩니다. ㅠ_ㅠ


2. 해결 방법

서버에 올려진 JSP 파일만 다시 서블릿 파일로 컴파일 하도록 하면 되는데, 저도 그 방법은 정확하게 모르겠구요

약간 돌아서 가는 방법이 있습니다. ^^; '약간'입니다. ㅋ


서버에 접속하여, 앞서 설명한 서블릿 관련 파일 2개를 삭제하는 것입니다. (JSP 파일 1개당 서블릿 파일 2개가 생성됩니다.)

* 삭제된 서블릿 파일은 톰캣이 다시 생성(컴파일)하니 겁먹지 말고 삭제하시면 됩니다. ㅎㅎ


3. 톰캣(Tomcat) 서버의 서블릿(Servlet) 파일 경로 // 카페24 포함


카페24(cafe24.com)의 '64bit JSP 광호스팅' 서비스의 경우를 예로 들어서 설명하도록 하겠습니다.

먼저, 톰캣의 서블릿 파일 경로를 찾아가야 하는데요, www 폴더에서 상위로 나가면 tomcat 폴더가 보이구요, tomcat 폴더를 다시 파고 들어가면,


tomcat
 |-- bin
 |-- conf
 |-- lib
 |-- logs
 |-- temp
 |-- webapps
 `-- work
      `-- [계정ID명]
           `-- [계정ID명).cafe24.com]
                `-- _ (밑줄)
                     `-- org
                          `-- apache
                               `-- jsp
                                    |-- [파일이름]_jsp.class   <--- 요놈
                                    `-- [파일이름]_jsp.java    <--- 이놈


tomcat/work/(계정ID명)/(계정ID명).cafe24.com/_/org/apache/jsp/... 과 같은 형태를 하고 있습니다.

저 뒤쪽으로는 유저의 폴더 상황에 따라서 각각의 폴더가 생성되어 있는데요, 원본 파일(*.jsp)이 위치한 폴더에 대응하는 폴더로 찾아가서 원본 파일이름에 해당하는 java 파일과 class 파일을 삭제해주시면 됩니다.


예를 들어,

www/main/page1.jsp 가 수정되었으나 서블릿은 다시 생성되지 않고 있다면

tomcat/work/(계정ID명)/(계정ID명).cafe24.com/_/org/apache/jsp/main/page1_jsp.class 파일과 page1_jsp.java 파일을 삭제하고

브라우저로 http://(계정ID명).cafe24.com/main/page1.jsp 로 접근해서 확인하면 됩니다.


*** 서블릿 파일은 톰캣이 자동으로 생성한 거라서 삭제하더라도 클라이언트가 접속 요청을 하면 다시 생성됩니다.

*** 카페24의 'Tomcat JSP 광호스팅' 서비스의 경우에는 www 폴더가 없고 tomcat 폴더만 존재합니다만 세부 경로는 위와 같습니다.


댓글 7개:

  1. 서블릿 파일을 삭제한 뒤에는

    톰캣 서버를 재시작 해주는 것도 좋습니다.


    톰캣 서버 재시작 방법은 아래 글을 참고하세요~

    http://comajava.blogspot.kr/2013/11/the-value-for-usebean-class-attribute.html

    답글삭제
  2. 로컬호스트에서 작업을 할 때에도

    서블릿 파일의 업데이트가 더딘-.- 경우에는

    이클립스에서 Project -> Clean... 으로 빌드(Build)를 다시 해주는 것도 좋습니다.

    (이 때에도 곧바로 업데이트가 되지는 않고 브라우저로 접속해서 새로고침을 몇 번 해줘야 합니다. ㅎ)


    *** 자바의 클래스(Class) 파일도 빌드를 다시 해주어야 변경된 소스 코드의 내용으로 재생성 되구요, 이클립스 환경에서 클래스 파일의 기본 경로는 workspace의 기본 경로 -> 프로젝트명 -> build -> classes -> 패키지명 입니다.

    답글삭제
  3. 자바스크립트(JavaScript)가 캐시(Cache) 때문에 이상하게 작동하고 있다는 느낌이 든다면 아래글을 참고하세요.

    http://comajava.blogspot.kr/2013/11/chrome-html5-jsp-javascript-jquery.html

    답글삭제
  4. PHP도 서버에 뭔가가 남아서

    업데이트 내용이 바로바로 반영되지 않는 경우가 있는 것 같더군요. ㅠ_ㅠ;;


    그거슨 캐삽질의 서막!

    답글삭제
    답글
    1. 그리고, 안 쓰는 부분을 주석 처리를 했음에도 불구하고

      해당 부분이 실행이 되면서!!!!

      작업하던 페이지가 멈춰버리는 문제도 후덜덜합니다. -_-;;

      삭제
  5. 서블릿 파일이 중간에 Record써있는거까지 총 4개 생기는데 이건 왜이러는거죠 ㅠ 다 지워야하나요?

    답글삭제
    답글
    1. 안녕하세요!
      같은 폴더에 뭔가가 더 있다면 그 파일을 지워도 다시 생성될 것 같기는 합니다. ^^a
      어차피 원본 파일은 따로 있는 상태이니까 다양한 시도를 해보셔도 될 것 같아용~

      삭제