posted by 지긋이 2019. 12. 12. 09:11

 

1. 특수문자 제거
SELECT REGEXP_REPLACE('Abcde/2019', '[[:punct:]]') AS Chg FROM DUAL;
=> Abcde2019

2. 날짜 치환

3. 문자 위치 찾기
- @ 위치 찾기(숫자 반환)
SELECT INSTR('ABC1234defg!@#','@',1,1) AS Search FROM DUAL;
=> 13
SELECT INSTR('ABC@1234@defg!@#','@',1,1) AS Search FROM DUAL;
: @1번째 위치를 찾는다.
=> 4
SELECT INSTR('ABC@1234@defg!@#','@',1,2) AS Search FROM DUAL;
: @2번째 위치를 찾는다.
=> 9

4. 문자 자르기(위치로 자르기)
SELECT SUBSTR('20191212',1,4) AS cut FROM DUAL;
=>2019
* 응용1 : 특정 문자 위치를 찾은 숫자반환으로 위치 자르기
SELECT SUBSTR('20191212>AAA>BCCC>',1,INSTR('20191212>AAA>BCCC>','>',1,2)) CUT_CHK FROM DUAL
: INSTR('20191212>AAA>BCCC>','>',1,2) 위치는 13. 즉, SUBSTR('20191212>AAA>BCCC>',1,13) 과 같은 의미
=> 20191212>AAA>
* 응용2 : 찾은 위치-1(> 찾은 위치-1)
SELECT SUBSTR('20191212>AAA>BCCC>',1,INSTR('20191212>AAA>BCCC>','>',1,2)-1) CUT_CHK FROM DUAL
: INSTR('20191212>AAA>BCCC>','>',1,2)-1 위치는 12. 즉, SUBSTR('20191212>AAA>BCCC>',1,12) 과 같은 의미
=> 
20191212>AAA

'IT(job) > DB' 카테고리의 다른 글

Oracle(Tool)에서 & 입력/조회하기  (0) 2020.02.18
[Oracle] Connect By...  (0) 2020.02.14
[Oracle] For문 Loop 입력하기  (0) 2019.12.02
[Oracle] Table Copy 기존 테이블을 이용한 응용  (0) 2019.11.26
[Oracle] Order by  (0) 2019.09.20
posted by 지긋이 2019. 12. 2. 15:12

생각보다 빈번하게 사용하는 거라 정리 한번.

1. 문자 -> 날짜(타입바꾸기)로 변경
calcu_formatChk(reqYmd);

function calcu_formatChk(ymd){ //형식이 yyyymmdd일 경우 . 만약 하이픈(-)이 포함되어 있다면 변환작업 후 진행(3번)
        var yyyy = ymd.substr(0,4); 
        var mm = ymd.substr(4,2); 
        var dd = ymd.substr(6,2);                         
         
      calcu_ymd = new Date(yyyy, mm-1, dd); 
       //console.log(ymd +"|결과 : " + calcu_ymd + "/n 월Chk : " + (calcu_ymd.getMonth()+1)); 
       return calcu_ymd; 
    }

2. 날짜 차이 구하기
getDayFromToCalDay(dt1, dt2);

function getDayFromToCalDay(dt1, dt2) { //Date 타입 혹은 YYYYMMDD로 들어왔을 때
        var diffDate_1 = dt1 instanceof Date ? dt1 :new Date(dt1);  //Test 필요(Date가 아닐 때 1번으로 연결하면 될 듯)
        var diffDate_2 = dt2 instanceof Date ? dt2 :new Date(dt2);  //Test 필요(Date가 아닐 때 1번으로 연결하면 될 듯)
                 
        var calDay = Math.abs(diffDate_2.getTime() - diffDate_1.getTime()); //시간으로 계산
        calDay = Math.ceil(calDay / (1000 * 3600 * 24)); //날짜로 변환
        //console.log(dt1+"|"+dt2+"\n날짜비교>>"+diffDate_1+"|"+diffDate_2+"||"+calDay); 
        return calDay
    }

3. 하이픈 포함된 날짜 하이픈 제거해서 반환
formatDate(searchApplYmd,"-");

// 날짜 포맷을 적용한다.. 
    function formatDate(strDate, saper) { 
        if(strDate == "" || strDate == null) { 
            return ""; 
        } 

        try { 
            if(strDate.length == 10) { //YYYY-MM-DD
                return strDate.substring(0,4)+saper+strDate.substring(5,7)+saper+strDate.substring(8,10); 
            } else if(strDate.length == 8) { 
                return strDate.substring(0,4)+saper+strDate.substring(4,6)+saper+strDate.substring(6,8); 
            } else { 
                return ""; 
            } 
        } catch(e) { 
            return ""; 
        } 
    }

posted by 지긋이 2019. 12. 2. 11:19

반복적으로 숫자 증가시켜 입력(INSERT)하기
: 동일한 내용을 특정 숫자만 추가해서 입력하여야 할 경우 사용한다.

예시) 1~20까지 숫자 증가시켜 입력시키기
DECLARE
  P_SQLCODE VARCHAR2(1000);
  P_SQLERRM VARCHAR2(1000);  
  i BINARY_INTEGER := 0;
BEGIN
-- for문 loop
  FOR i in 1..20 LOOP
  BEGIN  
    INSERT INTO TB_TEST001 
    values
    ('ABC','19G02',i,'P14',1,sysdate,'rosebay')
    ;  
  EXCEPTION
  WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE( 'cnt='||i );
        P_SQLERRM := 'cnt='||i||'의 TB_TEST001 UPDATE시 => ' || SQLERRM;
        P_COM_SET_LOG_NOCOMMIT('ABC','PAP','AAA','10','cnt='||i ||SQLERRM , 'ADMIN');
        RETURN;
  END;
  END Loop;
END;       

posted by 지긋이 2019. 11. 27. 10:24

업체로부터 요청사항이 이렇게 들어왔다.

최초 로딩시 Cell값은 빈칸으로 로딩되고 합계값만 표기해 주세요.
단, 해당 값은 기존에 있던 값과 같이 합계가 나와야합니다.

해당 Cell은 IBSheet를 사용하여 AutoSum을 구하고 있었는데 기존 값은 값대로 처리가 되어야 했으므로
기존값은 숨김처리하고 Temp Cell을 이용하여 처리해야 하는데 상단 Row값을 공백 처리하면 합계값도 0이 되는 상황 
IBSheet의 Type을 Int로 적용했는데 숫자의 콤마처리가 되지 않았다.

그래서 여러가지를 생각해봤는데
1. 쿼리에서 Text로 콤마를 붙여서 갖고 오는 방법(SUM을 구한후 포맷처리해야해서 쿼리를 좀 뜯어고쳐야...)
2. IBSheet 상 다른 콤마 처리를 찾아 보는 것
- IBSheet상 Type과 Format 처리는 바꿔도 동일. 간단할거 같았지만(?) 더 찾아보려면 많은 시간이 소요될 것 같았다...

그래서 생각한 가장 효과적인 방법은 기존 값의 AutoSum 합계값은 갖고 오고 스크립트로 콤마처리

예시) 보이는 1차값(Mon01Temp)은 Mon01 합계만 set한다.     
//쿼리에서는 mon01Temp 값을 세팅하지 않는다.
    var mon01SumSet = sheet1.GetCellValue(sheet1.LastRow(), "mon01");
    sheet1.SetCellValue(sheet1.LastRow(), "mon01Temp",addComma(mon01SumSet));

function addComma(num) {
  var regexp = /\B(?=(\d{3})+(?!\d))/g; //정규식
  return num.toString().replace(regexp, ',');
}

참고 https://webisfree.com/2016-08-29/[%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8]-%EC%88%AB%EC%9E%90-%ED%83%80%EC%9E%85%EA%B0%92%EC%97%90-%EC%BD%A4%EB%A7%88-%EC%B6%94%EA%B0%80%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

posted by 지긋이 2019. 11. 26. 10:12

1. 기존 사용하던 테이블 컬럼 설정 이용하여 Backup 테이블 만들기 
CREATE TABLE 신규테이블_BAK AS
SELECT * FROM 기존테이블 ;

COMMENT ON TABLE "스키마명"."신규테이블_BAK"  IS '기존테이블_BAK';

2. 기존 사용하던 테이블의 데이터 백업 테이블에 복사하기(데이터 copy)
INSERT INTO 신규테이블_BAK
SELECT * FROM 데이터가있는기존테이블명 
WHERE 절(특정 조건 있을 시/전부 복사하려면 WHERE 절 생략)

posted by 지긋이 2019. 9. 20. 11:51

정렬에 흔히 사용하는 Order by에서 DESC, ASC 외에 조건을 주고 싶을 때가 있다.

특히, 정렬을 하는데 Null이 문제가 될 경우 아래와 같이 사용해 보자.

Order by 컬럼명 DESC Nulls Last => Null값을 뒤로 나오도록 함
Order by 컬럼명 DESC Nulls First => Null값을 먼저 나오도록 함

작성예>
SELECT * 
FROM TABLE명
ORDER BY COLUMN명1, COLUMN명2 NULLS FIRST, COLUMN명3 DESC NULLS LAST;

 

posted by 지긋이 2019. 8. 8. 09:10

직장변경으로 기존에 사용하던 토드 말고
Oracle에서 제공하는 DB툴인 sql Developer를 사용할 일이 많아졌다.

알아야 할 기본 명령어는 Red. 자주 사용하게 된 명령어는 Bold 처리. 

범주 명령 단축키
Worksheet SQL 워크시트(W) Alt-F10
Worksheet 계획 설명(E) F10
Worksheet 내역(H) F8
Worksheet 변경사항 롤백(R) F12
Worksheet 명령문 실행 F9
Worksheet 명령문 실행 Ctrl-Enter
Worksheet 비공유 SQL 워크시트 Ctrl-Shift-N
Worksheet 스크립트 실행 F5
Worksheet 자동 추적(A) F6
Worksheet 지우기(C) Ctrl-D
Worksheet 변경사항 커밋(O) F11
검색 다음 찾기(N) F3
검색 바꾸기(R) Ctrl-R
검색 이전 찾기(P) Shift-F3
검색 증분 뒤로 찾기(B) Ctrl-Shift-E
검색 증분 앞으로 찾기(O) Ctrl-E
검색 찾기(F) Ctrl-F
검색 커서 다음 단어 찾기 Ctrl-F3
검색 커서 앞 단어 찾기 Ctrl-Shift-F3
기타 SQL 내역: 다음 내역에서 추가 Ctrl-Shift-Down
기타 SQL 내역: 다음 내역으로 바꾸기 Ctrl-Down
기타 SQL 내역: 이전 내역에서 추가 Ctrl-Shift-Up
기타 SQL 내역: 이전 내역으로 바꾸기 Ctrl-Up
기타 고급 형식 Ctrl-Shift-F7
기타 구현 디버그 Shift-F9
기타 대문자/소문자/첫 자를 대문자로 Ctrl-Quote
     
기타 보기 고정 Ctrl-Shift-P
기타 새로 고침 Ctrl-R
기타 새로 만들기(N) Ctrl-N
     
기타 파일 실행 Ctrl-F11
기타 팝업 메뉴 Shift-F10
기타 팝업 메뉴 Context Menu
기타 팝업 설명 Shift-F4
기타 편집(E) Ctrl-L
기타 형식 Ctrl-F7
데이터 편집기 데이터 필터링 Ctrl-Alt-F
데이터 편집기 새로 고침 Ctrl-R
데이터 편집기 선택된 행 삭제 Ctrl-D
데이터 편집기 정렬 Ctrl-Alt-S
데이터 편집기 행 삽입 Ctrl-I
도구 공백 표시 Ctrl-Shift-W
도움말 뒤로 Ctrl-Alt-Left
도움말 문맥에 따른 도움말 F1
도움말 문맥에 따른 도움말 Shift-F1
도움말 앞으로 Ctrl-Alt-Right
디버그 감시(W) Ctrl-F5
디버그 검사(I) Ctrl-I
디버그 내부 이동 F7
디버그 외부 이동 Shift-F7
디버그 이동 계속(C) Shift-F8
디버그 재개 F9
디버그 전체 이동 F8
디버그 종료 Ctrl-F2
디버그 중단점 토글(T) F5
디버그 커서까지 실행(U) F4
디버그 프로젝트 디버그 Shift-F9
버전 지정 속성(버전 지정) Ctrl-Shift-O
보기 로그(L) Ctrl-Shift-L
보기 중단점(B) Ctrl-Shift-R
소스 모두 축소(A) Ctrl-Shift-Open Bracket
소스 모두 확장(L) Ctrl-Shift-Close Bracket
소스 재형식화 Ctrl-Alt-L
소스 재형식화 Alt-Shift-F
실행(R) 프로젝트 실행 F11
이동 0 책갈피 토글 Ctrl-Shift-0
이동 0 책갈피로 이동 Ctrl-0
이동 1 책갈피 토글 Ctrl-Shift-1
이동 1 책갈피로 이동 Ctrl-1
이동 2 책갈피 토글 Ctrl-Shift-2
이동 2 책갈피로 이동 Ctrl-2
이동 3 책갈피 토글 Ctrl-Shift-3
이동 3 책갈피로 이동 Ctrl-3
이동 4 책갈피 토글 Ctrl-Shift-4
이동 4 책갈피로 이동 Ctrl-4
이동 5 책갈피 토글 Ctrl-Shift-5
이동 5 책갈피로 이동 Ctrl-5
이동 6 책갈피 토글 Ctrl-Shift-6
이동 6 책갈피로 이동 Ctrl-6
이동 7 책갈피 토글 Ctrl-Shift-7
이동 7 책갈피로 이동 Ctrl-7
이동 8 책갈피 토글 Ctrl-Shift-8
이동 8 책갈피로 이동 Ctrl-8
이동 9 책갈피 토글 Ctrl-Shift-9
이동 9 책갈피로 이동 Ctrl-9
이동 Maximize Toggle Ctrl-Alt-M
이동 기호 문서 찾아보기 Alt-Shift-Minus
이동 기호 찾아보기(M) Ctrl-Minus
이동 다음 메시지로 이동(X) Alt-F8
이동 다음 책갈피로 이동(O) Ctrl-Q
이동 뒤로(C) Alt-Left
이동 앞으로(W) Alt-Right
이동 이전 메시지로 이동(V) Alt-F7
이동 이전 책갈피로 이동(P) Ctrl-Shift-Q
이동 책갈피 토글(T) Ctrl-K
이동 책갈피로 이동(B) Ctrl-Shift-K
이동 최근 파일로 이동(F) Ctrl-Equals
이동 최근 편집으로 이동(E) Ctrl-Shift-Backspace
이동 행으로 이동(G) Ctrl-G
1 문서 활성화 Alt-1
2 문서 활성화 Alt-2
3 문서 활성화 Alt-3
4 문서 활성화 Alt-4
5 문서 활성화 Alt-5
6 문서 활성화 Alt-6
7 문서 활성화 Alt-7
8 문서 활성화 Alt-8
9 문서 활성화 Alt-9
Alt+1에 지정 Alt-Shift-1
Alt+2에 지정 Alt-Shift-2
Alt+3에 지정 Alt-Shift-3
Alt+4에 지정 Alt-Shift-4
Alt+5에 지정 Alt-Shift-5
Alt+6에 지정 Alt-Shift-6
Alt+7에 지정 Alt-Shift-7
Alt+8에 지정 Alt-Shift-8
Alt+9에 지정 Alt-Shift-9
다음 창(X) F6
다음 파일(N) Ctrl-F6
다음 파일(N) Ctrl-Tab
오른쪽 편집기(G) Alt-Page Down
왼쪽 편집기(E) Alt-Page Up
이전 창(V) Shift-F6
이전 파일(P) Ctrl-Shift-F6
이전 파일(P) Ctrl-Shift-Tab
파일 목록(F) Alt-0
편집기 메뉴 표시(S) Alt-Minus
코드 편집기 다음 단어 시작 부분까지 삭제 Ctrl-Delete
코드 편집기 다음 단어 시작 부분까지 삭제 Ctrl-T
코드 편집기 다음 단어 시작 부분으로 이동 Ctrl-Right
코드 편집기 뒤로 이동 Left
코드 편집기 로컬 탭 크기를 2로 설정 Ctrl-2
코드 편집기 로컬 탭 크기를 4로 설정 Ctrl-4
코드 편집기 로컬 탭 크기를 8로 설정 Ctrl-8
코드 편집기 매개변수 인사이트(P) Ctrl-Shift-Space
코드 편집기 삽입 모드 토글 Insert
코드 편집기 새 행 삽입 Shift-Enter
코드 편집기 새 행 삽입 Enter
코드 편집기 선택 사항 뒤로 이동 Shift-Left
코드 편집기 선택 사항 복제 Ctrl-Shift-D
코드 편집기 선택 사항 아래로 이동 Shift-Down
코드 편집기 선택 사항 앞으로 이동 Shift-Right
코드 편집기 선택 사항 위로 이동 Shift-Up
코드 편집기 선택 사항을 다음 단어 시작 부분으로 이동 Ctrl-Shift-Right
코드 편집기 선택 사항을 이전 단어 시작 부분으로 이동 Ctrl-Shift-Left
코드 편집기 선택 사항을 파일 끝으로 이동 Ctrl-Shift-End
코드 편집기 선택 사항을 파일 시작 부분으로 이동 Ctrl-Shift-Home
코드 편집기 선택 사항을 페이지 아래로 이동 Shift-Page Down
코드 편집기 선택 사항을 페이지 위로 이동 Shift-Page Up
코드 편집기 선택 사항을 행 끝으로 이동 Shift-End
코드 편집기 선택 사항을 행 시작 부분으로 이동 Shift-Home
코드 편집기 선택 해제 Ctrl-Back Slash
코드 편집기 선행 공백을 탭으로 변환 Ctrl-Shift-T
코드 편집기 선행 탭을 공백으로 변환 Ctrl-Shift-U
코드 편집기 스마트 완성 인사이트(A) Ctrl-Alt-Space
코드 편집기 아래로 이동 Down
코드 편집기 앞으로 이동 Right
코드 편집기 역방향 탭 Shift-Tab
코드 편집기 완성 인사이트(C) Ctrl-Space
코드 편집기 위로 이동 Up
코드 편집기 이전 단어 시작 부분까지 삭제 Ctrl-Backspace
코드 편집기 이전 단어 시작 부분으로 이동 Ctrl-Left
코드 편집기 이전 문자 삭제 Shift-Backspace
코드 편집기 이전 문자 삭제 Backspace
코드 편집기 일치하는 중괄호까지 선택 Alt-Shift-Close Bracket
코드 편집기 일치하는 중괄호까지 선택 Alt-Shift-Open Bracket
코드 편집기 일치하는 중괄호로 이동 Alt-Open Bracket
코드 편집기 일치하는 중괄호로 이동 Alt-Close Bracket
코드 편집기 취소 Escape
코드 편집기 탭 삽입 Tab
코드 편집기 파일 끝으로 이동 Ctrl-End
코드 편집기 파일 시작 부분으로 이동 Ctrl-Home
코드 편집기 페이지 아래로 이동 Page Down
코드 편집기 페이지 위로 이동 Page Up
코드 편집기 행 끝까지 삭제 Ctrl-Shift-Y
코드 편집기 행 끝으로 이동 End
코드 편집기 행 시작 부분으로 이동 Home
코드 편집기 행 아래로 스크롤 Ctrl-Down
코드 편집기 행 위로 스크롤 Ctrl-Up
코드 편집기 행 조인 Ctrl-J
코드 편집기 행 주석 토글(T) Ctrl-Slash
코드 편집기 행 주석 토글(T) Ctrl-Shift-Slash
파일 닫기 Ctrl-F4/Ctrl-W
     
파일 모두 닫기(E) Ctrl-Shift-F4
파일 열기(O) Ctrl-O
파일 인쇄(P) Ctrl-P
파일 저장(S) Ctrl-S
파일 종료(X) Alt-F4
편집 실행 취소 Alt-Backspace/
     
편집 재실행 Alt-Shift-Backspace
편집 재실행 Ctrl-Shift-Z/Ctrl-Y
편집 경로 복사(H) Ctrl-Shift-C
편집 모두 선택(A) Ctrl-A
편집 복사(C) Ctrl-C
편집 복사(C) Ctrl-Insert
편집 붙여넣기(P) Ctrl+V/Shift-Insert
편집 확장된 붙여넣기(E) Ctrl+Shift+V
편집 삭제(D) Delete
편집 잘라내기(T) Shift-Delete/Ctrl-X

 

posted by 지긋이 2019. 7. 25. 13:27

보통 log4j의 경우 2가지 형태(Properties, Xml)로 작성이 되는데 그간 프로젝트에서는 Xml로 설정된 것만 사용하였다.

이번에도 그러한 경우인데 스쳐지나가는 정보로 알던 것을 기록상 남겨본다.

log4j의 정의라든가는 워낙 많은 정보가 인터넷상 있으므로(?) 핵심정보만!

1. log4j의 레벨
FATAL > ERROR > WARN > INFO > DEBUG > TRACE

  • FATAL : 아주 심각한 에러가 발생한 상태
  • ERROR : 요청을 처리하는 중 문제가 발생한 상태
  • WARN : 처리 가능한 문제이지만, 향후 에러의 원인이 될 수 있는 상태
  • INFO : 로그인, 상태변경과 같은 정보성 메세지
  • DEBUG : 개발시 디버그 용도로 사용
  • TRACE : 디버그 레벨이 너무 광범위하므로, 좀 더 상세한 상태를 나타냄

2. log4j 주요 클래스 : Appender 는 로그의 출력 위치를 지정해준다.
org.apache.log4j.ConsoleAppender 콘솔에 로그 메시지 출력    
org.apache.log4j.FileAppender 파일에 로그 메시지 기록   
org.apache.log4j.rolling.RollingFileAppender
파일 크기가 일정 수준 이상 일 때 기존 파일을 백업파일로 바꾸고 처음부터 기록   
org.apache.log4j.DailyRollingFileAppender 일정 기간  단위로 로그 파일을 생성하고 기록   
org.apache.log4j.jdbc.JDBCAppender
RDB 테이블에 로그를 출력. 하위에 Driver, URL, User, Password, Sql과 같은 parameter를 정의
org.apache.log4j.net.SMTPAppender 로그 메시지를 이메일로 전송   
org.apache.log4j.NTEventLoggerAppender 윈도우 시스템 이벤트 로그로 메시지 전송

<appender name="console" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%-5p] (%C{1}.%M:%L) %m%n" />   
    </layout>
</appender>

3. layout 출력 포맷
%p : 로그레벨 출력
%m : 로그내용 출력
%d : 로그가 발생한 시간을 출력
- 포맷은 %d{HH:mm:ss}, %d{yyyy-MM-dd HH:mm:ss}같은 형태로 사용(SimpleDateFormat 참고)
%t : 로그가 발생된 스레드의 이름을 출력
%% : % 표시를 출력하기 위해 사용
%n : 플랫폼 종속적인 개행문자가 출력. (\r\n 또는 \n)
%c : 해당되는 로거의 이름을 끝에서부터 출력 ex. %c{끝에서부터 숫자}
%C : 클래스명을 출력 ex. %C{끝에서부터 숫자}
%F : 로깅이 발생한 프로그램 파일명을 출력
%l : 로깅이 발생한 caller의 정보를 출력
%L : 로깅이 발생한 caller의 라인수를 출력
%M : 로깅이 발생한 method명을 출력
%r : 어플리케이션 시작 이후 부터 로깅이 발생한 시점의 시간(milliseconds)을 출력
%x : 로깅이 발생한 thread와 관련된 NDC(nested diagnostic context)를 출력
%X : 로깅이 발생한 thread와 관련된 MDC(mapped diagnostic context)를 출력

posted by 지긋이 2019. 7. 25. 11:45

프로젝트 구동 중에 자꾸 오류가 나서 Project Clean을 하려는데 타이틀과 같은 메시지가 발생되며 Clean Fail.

해결방법은 프로젝트 경로(workspace)의 metadata에 있는 validation 삭제

워크스페이스 경로\.metadata\.plugins\org.eclipse.wst.validation 를 삭제 후
Project Clean을 다시 실행하면 잘 된다~

posted by 지긋이 2019. 6. 14. 09:47

The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the...

잘 쓰고 있던 프로그램이 계속 용량 초과 오류가 발생되었다.
Test 서버에서는 잘 구동되고 있고, 예전에도 분명 수정했던 적이 있었던 페이지인데?!

원인은 mapped 설정. 기본이 true 인듯하다.
서버쪽 web.xml에 아래와 같이 추가해준다.

<servlet>
<servlet-name>jsp</servlet-name>
... 대략적인 기본 설정 내용이 들어가있다.
<init-param>
<param-name>mappedfile</param-name>
<param-value>false</param-value>
</init-param>
</servlet>

위의 mappedfile이 핵심내용이며,
web.xml의 servlet 구문 안에 위의 강조된 내용을 추가 한 후 서버를 재부팅 한다.