2008년 1월 17일 목요일

DB 테이블 복사 유틸

간단하게 어떤 DB에 있는 테이블 내용을 다른 DB에 있는 테이블로 그대로 복사하는 유틸입니다.

일단은 오라클만 되게 만들었는데, 테이블의 스키마, 데이터타입, 컬럼길이만 맞는다면 다른 DB도 가능할 것 같네요. 아직 미확인 ^^;

컴파일한 클래스파일과 실행스크립트를 첨부할까 하다가, 간단히 이클립스에서 돌리시라고 그냥 소스를 올립니다.

뭐, 오류 생기면 알아서 고쳐 쓰시라는 의미도 되겠네요. 일단 이건 잘 돌아갔던 소스입니다.

정 못 고치시겠으면 저한테 메일이나 쪽지 남겨 주시면 해결해 드리겠습니다. 이건 유료일지도.. ㅋㅋ

 

 

장점

 

1. 데이터 내용에 작은따옴표(')가 있어도 옮길 수 있다.

   어떤 방법이든 export 받아서 insert문 만들면 작은따옴표 때문에 안 되더군요. 제가 아는 한도 내에서는... ^^

   그런데, 이건 JDBC 방식에 PreparedStatement로 처리해서 insert문을 안 만드니까 문제가 없어요.

   -> 이건 방법이 있었네요. ^^; 작은따옴표를 연속 2개 사용하면 하나인 걸로 인식해서 DB에 들어가네요.

       예를 들어, sometable 테이블의 somecol 컬럼에 123'456 이라는 값을 넣으려면 아래와 같이 하면 돼요.

       insert into sometable(somecol) values ('123''456');

 

2. LONG 타입도 옮길 수 있다.

   LONG 타입은 덤프 뜰 때 안 된다고 하더군요. 이것도 역시 그냥 들은 내용 ^^

   이 프로그램엔 LONG 타입도 옮길 수 있도록 처리해 놨습니다.

   INTEGER와 LONG 타입 외에는 모두 STRING으로 처리하게 만들었으니까 혹시 에러나면 다른 타입 처리코드를 추가해서 사용하세요.

 

3. DB연결정보만 알면 빠르게 옮길 수 있다.

   아래에 설명할 세팅정보만 넣고 실행하면 export, import 과정없이 즉석에서 옮길 수 있어요.

 

 

환경세팅

 

사용자 삽입 이미지

 

1. allColumns : 테이블의 모든 컬럼을 복사할지 설정한다.

true로 하면 모든 컬럼을, false로 하면 아래의 colArray에 설정한 컬럼만 복사한다.

 

2. colArray : 모든 컬럼을 복사하지 않을 경우, 복사할 컬럼을 정의하는 배열

이 값을 적용시키려면 allColumns를 false로 해야 한다.

 

3. source 테이블 연결정보

source로 시작하는 변수들에는 원본 데이터가 있는 테이블에 관한 정보를 입력한다.

 

4. target 테이블 연결정보

target로 시작하는 변수들에는 복사한 데이터를 insert할 테이블에 관한 정보를 입력한다.

 

 

※ 주의사항

source 테이블과 target 테이블의 스키마, 데이타타입, 컬럼길이는 호환가능해야 합니다.

target에는 무조건 insert를 하기 때문에, 원래 있던 데이터는 전혀 건드리지 않습니다.

JDBC 사용하니까 실행할 때 클래스패스에 DB JDBC 드라이버는 당근 포함되어 있어야겠죠.

예전에 VARCHAR2에 2,000 바이트 넘는 데이터 읽고 쓸 때 getString, setString으로 안 됐는데 지금은 되나 모르겠네요.

혹시 이런 케이스로 안 되는 분 있으시면 알려 주세요.

 

마지막으로,

마음껏 배포 가능합니다. 단, 소스 맨위의 주석은 건드리지 말아 주세요.

 

 

편리하게 이용하시길...

 

2007년 10월 24일 수요일

Server Alive Check

원래 이 포스트에는 AJAX로 웹주소만 체크하는 프로그램만 있었는데,

이번에 자바로 웹주소 뿐만 아니라 JDBC로 오라클(다른 DB는 안 됨)까지 체크하는 프로그램을 만들었습니다.

그래서, 원래 내용은 아래로 밀려나고 자바로 만든 프로그램이 윗자리를 차지하게 되었습니다.

 

-------------------------------------------------------------------------------------------------

 

 

사용자 삽입 이미지

 

svrchk.zip을 받아서 압축을 풀면, 5개의 파일이 나타나는데 그중에서 servercheck.bat를 실행하면 위와 같은 프로그램이 뜹니다.

 

1. 서버추가 : 체크할 서버를 추가합니다.

   - 웹주소는 서버명과 URL만 입력합니다.(URL은 서버의 부하를 줄이기 위해 꼭 떠야 하는 페이지 중에 금방 뜨는 주소로 합니다)

   - 오라클이면 URL에 JDBC 연결에 사용하는 connection-url(SID포함)을 입력하고, ID와 PW칸에 오라클 아이디, 패스워드를 입력합니다.

2. 서버삭제 : 등록된 서버중 선택된 하나를 삭제합니다.

3. ▲ : 선택한 서버를 한칸 위로 올립니다.

4. ▼ : 선택한 서버를 한칸 아래로 내립니다.

5. 체크주기 : '체크시작' 버튼을 클릭하면 체크주기에 입력한 시간주기로 체크합니다.

6. 체크시작 : 웹과 오라클을 체크하기 시작합니다.

7. 체크중지 : 웹과 오라클에 대한 체크를 중지합니다.

 

프로그램을 종료하면 등록되어 있는 서버정보를 server.lst라는 파일에 저장합니다.

오라클 패스워드는 읽기 어렵게(암호화까진 아니고 ^^;) 변환해서 저장합니다.

참, 서버에서 응답이 없으면 삐뽀삐뽀하고 사이렌 소리가 납니다. 끄기 전까지 계속 납니다. ㅋㅋ

 

중요> 여기 올리는 프로그램들은 누구나 자유롭게 사용하시라고 올리는 거니까 자유롭게 사용하세요.

       이게 오라클만 되니까 다른 DB의 경우 추가기능이 필요할지도 모르는데, 그럴 경우 요청해 주세요.

       단, 디컴파일해서 변형을 가하거나 상업적으로 이용하는 것은 저와 미리 상의해 주세요.

 

================================================================================================

 

별로 대단한 것은 아니고

AJAX를 주기적으로 돌려서 주어진 URL 리스트가 정상적으로 응답하는지 확인하는 자바스크립트이다.

여러 WAS에 여러 웹애플리케이션을 관리한다면 유용할 것 같다.

그냥 이 페이지만 웹브라우저에 띄워 놓으면 주기적으로 돌다가 응답이 없을 때 알려 준다.

 

사용자 삽입 이미지
 

 

정상적일 때는 이렇게 모두 OK로 뜨고,

 

 

사용자 삽입 이미지

제대로 응답이 없을 때는 위와 같이 에러 메시지가 뜬다.

 

 

다음은 설정방법...

 

사용자 삽입 이미지

 

1. 체크할 URL을 차례로 써 놓는다. 웹애플리케이션 주소나 JSP나 HTML을 해도 괜찮을 것 같다.

2. 몇 초 주기로 서버를 체크할지 변수를 설정한다. 너무 짧게 하면 서버에 부하가니까 넉넉하게...

 

이렇게 설정을 해서 WAS에 올려 놓고 웹브라우저로 열면 정상적으로 동작한다.

그냥 로컬 파일시스템에 있는 HTML을 그냥 열면 제대로 동작하지 않는다고 하던데...

만들고 보니 쓸 사람은 아주 조금일 거 같지만, 유용하게 쓰시길.

아니면 소스 보면서 AJAX 공부하는 것도 괜찮고.

 

2007년 8월 15일 수요일

클래스 위치 찾아 주는 프로그램

 


WAS에 jar 파일과 class 파일들을 만들어 올려서 사용하다 보면, 서버에서 에러가 나면서 어떤 클래스 파일에 문제가 있다고 메시지가 뜨는 경우가 많다.

그런데 이 클래스가 도무지 어디에 박혀 있는지 찾기가 쉽지 않다.

그냥 클래스파일이면 경로를 뒤지다 보면 나올 수도 있지만 jar 파일 안에라도 들어가 있으면 하나씩 열어 가면서 확인해야 한다.

그래서, jar 파일과 class 파일이 있는 디렉토리만 입력해 주면 포함된 모든 클래스 파일을 뒤져서 해당 클래스 파일을 찾아 주는 프로그램을 만들어 보았다.

본 S/W Architect 카테고리의 이전 포스트 중 '클래스 중복 확인 프로그램'과 기본 로직은 비슷하고 단지 이것은 그냥 필요한 것만 찾아 줄 뿐이다.

대신, 해당 클래스 파일을 모두 찾아 주기 때문에 같은 경로의 클래스 파일이 결과에 여러번 반복되어 나타난다면 중복되어 올라갔다고 볼 수 있으며 이런 것은 되도록 하나만 남도록 하는 것이 찾기 어려운 에러가 발생하는 것을 방지하는 좋은 방법이다.


사용법 :

1. 첨부된 zip 파일의 압축을 푼다.

2. lib.properties에 WAS 동작시 로딩되는 jar 파일 디렉토리(lib)와 class 파일 디렉토리(classes)를 모두 입력한다.

   jar를 포함한 디렉토리는 jar로 시작해서 일련번호를 붙이고, class파일을 포함한 디렉토리는 class로 시작해서 일련번호를 붙인다.

   단, 경로는 절대경로로 입력하며 경로구분자는 반드시 "/"로 해야 한다. "\"일 경우는 바꿔 주어야 한다.(이건 귀차니즘 때문에.. ^^;)

   웹애플리케이션을 개발할 경우, 보통 jar를 포함하는 lib 디렉토리들은 WAS 루트의 lib, server/lib, 웹애플리케이션의 WEB-INF/lib 정도가 되고,

   클래스파일 디렉토리는 웹애플리케이션의 WEB-INF/classes 정도가 된다.

3. runFinder.bat를 실행한다.

   C:\> runFinder [클래스명 전체 또는 일부]

    단, 여기서 클래스명은 대소문자를 구분한다.

4. 생성되는 result.txt 파일을 열어 클래스들의 위치를 확인한다.


프로젝트마다 lib.properties 하나만 세팅해 놓으면, 끝날 때까지 편리하게 사용할 수 있을 것이다.

클래스 중복 확인 프로그램과 형식이 똑같으므로 같은 디렉토리에 놓고 공유해서 사용해도 괜찮다.



이것도 역시, 아무쪼록 많은 도움이 되길...


추가>

이것도 원래 JDK1.5에서만 돌아가서 추가로 1.4로 컴파일한 프로그램을 올립니다.


2007년 8월 12일 일요일

놀라운 발견

오늘 코딩을 하다가 놀라운 사실을 발견했다.

아래와 같은 코드를 디버깅용으로 만들어 넣고 테스트해 보았다.

 

System.out.println("ignore:"+ignore+",characterencoding:"+request.getCharacterEncoding());

 

그런데, 분명히 콘솔에 찍혀야 되는데 안 찍히길래 컴파일이 제대로 된 건가 확인하기 위해 디컴파일러로 소스를 다시 보니 아래와 같은 코드가 보이는 것이다.

 

System.out.println((new StringBuilder("ignore:")).append(ignore).append(",characterencoding:").append(request.getCharacterEncoding()).toString());

 

흠, String concatenation 때문에 하도 문제가 생기니 JDK 1.5부턴 컴파일할 때 아예 이렇게 바이트코드를 만드는 모양이군...

요 몇달동안 String concatenation해야 할 게 많아서 그때마다 StringBuffer에 append하느라고 눈 빠질 뻔 했는데, 이게 언제 바뀐 거야.

바꾸면 나한테 전화라도 미리 해 줬어야 되는 거 아닌감? ㅋㅋ

 

2007년 8월 4일 토요일

웹개발을 위한 Power Tool - Firefox + Firebug

한동안 X-Internet 프로젝트를 하다 보니 순수 웹 개발에 대해서 잘 몰랐었는데

올해 순수 웹 개발을 하다 보니 말로만 듣던 Firefox + Firebug의 기능을 확인하게 되었다.

진작 이런 게 있었으면 웹개발 진짜 쉽게 할 수 있었는데, 왜 이제야 나온 거니? 왜 그런 거니?

 

1. Firebug 설치

Firefox만으로는 안 되고, Firebug라는 플러그인을 추가해야 강력한 무기를 완성하게 되는 것이다.

Firefox의 메뉴에서 "도구 > 부가기능"으로 들어간다.

 

사용자 삽입 이미지

 

이 다이얼로그는 이미 설치되어 있는 것이고, 없다면 아래의 "유용한 확장 기능 찾기"로 들어가 Firebug를 찾아 설치해야 한다.

설치되면 위와 같은 다이얼로그를 볼 수 있다.

설치된 후에 Firebug와 관련된 설정은 "도구 > Firebug"에서 조정할 수 있는데, Firefox를 오직 개발용으로 사용한다면 문제가 없지만 웹서핑용으로도 사용한다면 자신이 디버그를 원하는 주소를 등록하는 것이 좋다. 아무래도 디버깅툴이다 보니 Firebug가 동작하면 사이트가 뜨고 동작하는데 시간이 좀 걸린다.

 

 

2. Inspect Element

나를 반하게 한 기능 중의 하나가 Inspect Element이다. 이건 특정 element의 현재 속성을 HTML로 표현해 준다. 중요한 건 자바스크립트 등으로 변경되거나 추가된 각종 속성을 모두 보여 준다는 것이다. 그러니까, 서버에서 받은 코드가 아닌 현재 웹브라우저가 갖고 있는 실제 내용을 직접 확인할 수 있다는 얘기다.

 

이것은 화면상의 특정 부분에 오른쪽 클릭을 하고 메뉴에서 "Inspect Element"를 선택한다.

 

사용자 삽입 이미지

 

여기서는 맨 위의 플러스 이미지에서 오른쪽 클릭을 했다.

그러면, Firefox 하단에 아래와 같은 내용이 나타난다.

 

사용자 삽입 이미지

 

왼쪽 부분에는 현재 메모리상의 HTML 코드가 나오고, 오른쪽에는 이 element에 적용된 스타일이 표시된다.

HTML 코드에 마우스를 올려 놓으면 그 코드가 화면에서 어떤 부분인지 화면에 하늘색으로 표시가 되니 코드가 실제 화면에서 어떻게 나타나는지 확인하는 데도 유용하다.

 

 

3. 자바스크립트 디버그

이리저리 Firebug를 사용해 보다가 가장 놀란 기능이다. 자바스크립트를 디버그하다니...

먼저 위의 그림에서 Script 탭을 선택하고, 바로 위에서 디버그할 js나 자바스크립트를 포함한 html을 선택하면 아래에 코드가 나타난다.

코드에서 실행을 멈출 설정할 라인을 골라 클릭하면 breakpoint가 표시된다.

여기서 화면의 버튼을 클릭해서 자바스크립트를 실행시키거나, 화면을 다시 로딩하거나 하면 설정해 놓은 breakpoint에서 멈춰서 다음과 같은 화면이 나타난다.

 

사용자 삽입 이미지

 

여기부터는 이클립스에서 디버그를 해 본 사람이라면 편하게 사용할 수 있다.

오른쪽에 변수의 값들을 확인할 수 있고, New watch expression...에서 표현식을 입력하고 중간중간 확인해 볼 수도 있다.

프로그램 진행은 오른쪽 위의 각종 화살표를 누르면서 진행해 볼 수 있다. 단, 이클립스와 모양은 같지만 기능이 다르니 잘 확인해서 눌러야 한다.

 

 

이 포스트에선 내가 가장 유용하다고 생각되는 기능만을 다뤘는데 그 외의 버튼을 눌러보다 보면 정말 강력한 플러그인이라는 걸 느끼게 될 것이다.

단, Firefox는 IE에서 사용하는 비표준 태그나 자바스크립트 함수, ActiveX 등이 동작하지 않으므로 제한이 있다고 할 수도 있는데, 요즘 세상의 흐름이 표준을 준수하는 모든 브라우저를 사용할 수 있도록 사이트를 구성하는 것이기 때문에 이 기회에 이런 흐름을 따르는 것도 좋을 것 같다.

2007년 6월 14일 목요일

프린트 관련 CSS 속성

화면을 개발하다 보면 출력해야 하는 페이지가 꼭 있기 마련이다.

그런데, 통프레임이거나 프레임이 분리되는 경우라도 화면에는 보여야 하지만 출력할 때는 빼고 싶은 내용이 있다.

이거 찾는 데 시간이 걸리긴 했는데, 막상 적용하기는 무척 간단하다.

 

아래의 내용을 HTML의 style 태그 내에 넣거나, include하는 CSS 파일에 넣는다.

@media print
{

  .noprint { display:none; }

}

 

설명 : @media print 는 print되는 결과물에만 적용되는 스타일이라는 뜻이다.

        .noprint { display:none; } 잘 아는 바와 같이 display:none은 영역을 차지하지 않고, 보여주지도 않는다.

        결과적으로 noprint라는 스타일을 적용한 객체는 프린트할 때 제외된다는 뜻이다.

 

이렇게 선언이 되었으니 적용만 하면 된다.

table, tr, td, div, input 등 어떤 객체든 일반 스타일 적용하듯class="noprint"속성만 붙이면 출력할 때 제외된다.

만약에 그 객체에 이미 화면용 스타일이 적용되어 있다면,

적용된 화면용 스타일이 "input_text"라면 그냥 그 옆에 noprint만 추가해 주면 된다.

다음과 같이class="input_text noprint"하면 된다.

그리고, 자바스크립트로 window.print()만 실행하면 noprint 속성이 적용 안 된 내용만 프린터로 출력된다.

이것을 응용하면 @media print 내에 프린트용 폰트나 속성을 적용해서, 화면과 출력물의 모양을 달리 할 수도 있다.

하지만, 이런 귀찮은 작업을 누가 하겠는가? 하라고 하면 짜증날 것 같다. ^^;

 

 

참고로 아래에는 window.print()로 인쇄 다이얼로그가 떴을 때 기본 종이 방향이 가로가 되도록 하는 CSS이다.

화면 내용의 폭이 커서 가로 출력이 필요할 때 유용하다.

(그런데, IE6에선 동작하고, FireFox2에선 동작 안 한다. FireFox는 세로로 해도 알아서 넘어가지 않게 자동축소출력해 주니 문제없다.)

이것도 마찬가지로 HTML의 style 태그 내에나, include하는 CSS 파일 내에 추가시켜 주면 된다.

@page { size: landscape; }

 

2007년 5월 8일 화요일

중복 클래스 확인 프로그램

WAS에 jar 파일과 class 파일들을 만들어 올려서 사용하다 보면, 개발할 땐 잘 돌아갔는데 서버에서 에러가 나는 경우가 많다.

클래스로더의 상하구조 때문일 경우도 있고, 동일한 패키지의 동일한 클래스가 여러 버전으로 중복되어 올라가 있어 발생하는 경우도 있다.

그래서, jar 파일과 class 파일이 있는 디렉토리만 입력해 주면 포함된 모든 클래스 파일을 뒤져서 중복여부를 체크해 주는 프로그램을 만들어 보았다.

 

사용법 :

1. 첨부된 zip 파일의 압축을 푼다.

2. lib.properties에 WAS 동작시 로딩되는 jar 파일 디렉토리(lib)와 class 파일 디렉토리(classes)를 모두 입력한다.

   jar를 포함한 디렉토리는 jar로 시작해서 일련번호를 붙이고, class파일을 포함한 디렉토리는 class로 시작해서 일련번호를 붙인다.

   단, 절대경로로 입력하며 경로구분자는 반드시 "/"로 해야 한다. "\"일 경우는 바꿔 주어야 한다.(이건 귀차니즘 때문에.. ^^;)

3. runChecker.bat를 실행한다.

4. 생성되는 result.txt 파일을 열어 중복 클래스와 클래스들의 파일크기, 생성일자를 비교해 어떤 걸 빼야 할지 결정한다.

 

아무쪼록 많은 도움이 되길...

 

추가>

기존에 올렸던 프로그램이 JDK1.5에서만 돌아가기 때문에

추가로 JDK1.4를 사용하는 분들을 위한 프로그램을 첨부합니다.