vi 초간단 매뉴얼

Linux 2007.08.29 23:10 Posted by 애플자라
1. 시작하기

vi를 실행해 보겠습니다.

vi[엔터]

물결표시 ( ~ ) 가득한 vi의 화면이 보일 것입니다. 아마 이름이 vim일텐데 신경쓰지 마십시오. Vi IMproved라고 해서 vi의 개선판입니다. 막 vi를 실행한 지금은 명령모드라고 합니다. ( 엄밀히 말하면 좀 다르지만 그렇게 알아두셔도 무리가 없을 듯 ) 명령모드에서는 글자가 입력되지 않습니다. 글자를 입력하기 위해서는 편집모드로 들어가야 됩니다. 편집모드로 들어가서 새로운 글을 써도 되지만 지금은 일단 파일을 불러와야 하니까, 다음과 같이 하십시오.

:e .bashrc[엔터]

shift 키를 누른 채 콜론 ( ; )을 입력하면 세미콜론( : )이 찍히죠. 그리고 e를 입력하고 ( 아마도 edit의 e 같습니다 ) 한 칸 띄고 편집하려는 파일 이름을 쓰고 엔터를 치면 됩니다. 그럼, 화면에 .bashrc 파일이 불려옵니다.

X 윈도즈에서 터미널 창을 불러 vi를 실행했다면 한글 부분이 제대로 보일 것이고, X 윈도우가 아닌 그냥 콘솔 모드에서는 한글이 표현되지 않기 때문에 한글 부분은 깨져 보일 것입니다.

어느 키보드를 누르라는 것까지 말씀드리는 건 vi를 처음 접하시는 분들에게는 너무나도 낯선 vi의 환경 때문입니다. 여러분이 익히 쓰시던 윈도즈의 프로그램들 수준에 vi를 맞춰서 이해하려 하지 마시고, vi의 성격에 여러분의 생각을 맞춰주시기 바랍니다.

2. 편집하기

커서를 여기저기 움직이기 위해서는 화살표 키를 이용하십시오. 물론 그것에 비하면 수백 배는 많은 이동 방법이 있지만 이 글은 초미니 매뉴얼이라는 걸 상기하시기 바랍니다. 일단은 사용할 수 있고 난 다음에 그런 축지법을 익힐 일입니다.

이제 깜빡거리는 커서를 움직여서 화면 맨 윗 줄, 맨 앞에 가져다 놓으십시오. 그리고 i ( 알파벳 소문자 아이 )를 누르세요. 화면 하단 부분에 -- INSERT -- 라고 바뀌면서 삽입모드로 전환되었습니다. 이제부터 여러분이 타이핑하는 것들은 문서에 입력되게 됩니다.

기억하세요. 명령모드에서 편집모드로 들어가기 위해서는 i를 누르면 됩니다. ( 화면에는 표시되지 않습니다. 그냥 명령이기 때문에 ) 편집모드에서 명령모드로 빠져나오기 위해서는 Esc 키를 누르면 됩니다. 앞으로는 습관처럼 Esc 키를 두들기십시오.

이제 편집모드에 있으므로 다음과 같이 입력하세요.

echo "Hey, What do you want?"[엔터]

그리고 나서 명령모드로 빠져나오세요. 당신은 드디어 파일을 편집할 수 있게 되었습니다.

3. 끝내기

vi를 마치려면 일단 지금까지 편집했던 내용들을 저장해야 합니다.

:w[엔터]

w는 아마도 write의 약자인 듯합니다. 저장장치에 쓰라는 말이겠죠. w 명령으로 당신은 편집한 파일을 저장하게 되었습니다. 이제 vi를 마칩시다.

:q[엔터]

이렇게 입력하면 vi를 끝내게 됩니다. 만약 파일이 변경되었는데 저장하지 않았다면 vi는 종료되지 않습니다. 변경된 내용을 무시하고 무조건 종료하기 위해서는 다음과 같이 하십시오.

:q![엔터]

느낌표를 붙이면 파일이 변경되었더라도 저장하지 않고 강제로 종료하게 됩니다. 느낌표는 q에 붙여서 쓰시기 바랍니다.

'Linux' 카테고리의 다른 글

* Proftpd(ftp daemon) 설치  (0) 2007.08.29
리눅스의 디렉토리구조  (0) 2007.08.29
vi 초간단 매뉴얼  (0) 2007.08.29
zterm & ssh  (0) 2007.08.29
리눅스 기초 명령어  (0) 2007.08.28
Linux 설치 파일  (0) 2007.08.28

zterm & ssh

Linux 2007.08.29 23:09 Posted by 애플자라
http://brainz.co.kr/products/products4_2.php  - zterm

http://nayana.com/cs/?inc=m_server_ssh  -ssh


ssh를 사용하니 port번호를 22번을 사용하십시요

'Linux' 카테고리의 다른 글

리눅스의 디렉토리구조  (0) 2007.08.29
vi 초간단 매뉴얼  (0) 2007.08.29
zterm & ssh  (0) 2007.08.29
리눅스 기초 명령어  (0) 2007.08.28
Linux 설치 파일  (0) 2007.08.28
grep 명령어 사용법  (0) 2007.01.26

리눅스 기초 명령어

Linux 2007.08.28 23:40 Posted by 애플자라
◎ 기초 명령어
여기서는 리눅스의 기초 명령어들에 대해서 알아본다.
자세히 하려면 명령어 수도 무지 많고, 다 알기도 힘들겠지만...
필수적이라고 생각되는 것들 위주로 정리해 보았다. (abc순)
리눅스에서는 명령어는 대부분의 경우 소문자로 이루어져 있다.
따라서 입력시 소문자로 되어 있는지를 확인하고 할 것...
<CR>은 엔터키를 의미한다.
 
① 파일 / 디렉토리 관리에 사용되는 명령어들
◈ cd (change directory) : 디렉토리를 옮기는 데 사용된다.
cd [directory] <CR>
cd /usr/local
-> /usr/local 디렉토리로 옮긴다.
-> '.'은 현재 디렉토리를 의미하고, '..'은 이전 디렉토리를 의미한다.
-> 현재 /usr/local에 있다고 할 때, 'cd ..' 하면 /usr 디렉토리로 간다.

-> 'cd .' 하면 아무 변화가 없다.
-> '.'과 '..'은 cp, mv 등의 다른 명령어 사용시에도 동일하게 사용할 수 있다.
 
◈ cp (copy) : 파일을 복사할 때 사용된다.
cp [source] [dest] <CR>
cp /usr/local/test.txt /root/abcd.txt <CR>
-> /usr/local/ 디렉토리에 있는 test.txt 파일을 /root/ 디렉토리에
abcd.txt로 복사한다.
 
◈ ls (list) : 파일의 목록을 보여준다. [ ls -a, ls -al, ... ]
ls -a <CR>
-> 숨겨진 파일( . 으로 시작하는 파일들)을 보여준다.
ls -l <CR>
-> 자세한 정보를 보여준다.
 
◈ mkdir (make directory) : 디렉토리를 만드는 데 사용된다.
mkdir [directory name] <CR>
 
◈ mv (move) : 파일을 이동하거나 이름을 바꿀 때 사용된다.
mv [source] [dest] <CR>
mv /usr/local/test.txt /root/abcd.txt <CR>
-> /usr/local/ 디렉토리에 있는 test.txt 파일을 /root/ 디렉토리에
abcd.txt로 이름을 바꾸어 이동한다.
 
◈ pwd (print working directory) : 현재 위치한 디렉토리를 보여준다.
pwd <CR>
 
◈ rm (remove) : 파일이나 디렉토리를 삭제하는 데 사용된다.
rm [filename] <CR>
-> -r 옵션을 주면 디렉토리 및 그 밑에 있는 내용까지 몽땅 다 지워준다.
-> -f 옵션을 주면 에러 발생시(파일이 없다거나, 권한이 없는 경우 등)에도 계속 진행한다.
-> 디렉토리를 지울때는 rmdir [directory name] <CR>을 해도 된다.
 
② 압축 관련 명령어들
◈ compress / uncompress : 파일을 압축/해제 한다.
-> 사용방법은 gzip과 동일하다.
 
◈ gzip / gunzip : 파일을 압축/해제 한다. (생성되는 화일은 원래화일이름.gz가 된다.)
gzip testCR>
-> test 파일을 압축해서 test.gz로 만든다.
gunzip test.<CR> ===> '.gz'는 생략해도 된다.
-> test.gz 파일을 압축 해제한다.
-> gzip은 파일을 압축만 할 뿐이다. 여러개의 파일을 하나로 압축하려면 tar를
-> 함께 사용해야 한다. (tar 참고)
 
◈ tar : 여러 파일을 하나로 묶어준다.
tar [option] destfiles... <CR>
-> c를 옵션으로 주면 파일을 새로 생성한다.
-> v를 옵션으로 주면 작업 진행사항을 보여준다.
-> f를 옵션으로 주면 파일들을 묶어서 그 다음에 오는 파일 이름으로 저장한다.
-> x를 옵션으로 주면 지정된 파일들을 타르 파일로부터 끄집어 낸다.
tar cvf total.tar *.txt
-> .txt로 끝나는 모든 파일을 total.tar라는 이름으로 묶어준다.
tar xvf total.tar *.txt
-> total.tar라는 파일로부터 .txt로 끝나는 모든 파일을 끄집어낸다.
-> tar는 파일을 압축하는 것이 아니고, 단지 하나로 묶어줄 뿐이다.
-> 여러 파일을 하나로 압축하려면 먼저 tar로 파일을 묶은 후 gzip으로 압축한다.
 
③ 시스템 관련 명령어들
◈ chgrp (change group) : 파일과 디렉토리의 그룹을 변경해 준다.
chgrp [group] [filename] <CR>
-> file의 그룹을 [grop]으로 바꾸어 준다.
chgrp linux test.txt <CR>
-> test.txt의 그룹을 linux로 바꾸어 준다.
 
◈ chmod (change mode) : 파일과 디렉토리의 허가권(permission)을 변경해 준다.
chmod [permission] [file/directory name] <CR>
chmod 777 test.txt <CR>
-> test.txt 파일을 누구나 읽고, 쓰고, 실행할 수 있도록 한다.
-> [permission] 의 값을 정하는 방법
 user group other
읽기 4 4 4
쓰기 2 2 2
실행 1 1 1
permission a b c

위의 표에서, user는 파일의 소유자 이고, group은 소유자와 같은 그룹,
other는 그 나머지 사용자를 말한다.
각 사용자별로, 허가할 분야에 대해 적혀있는 값들을 더해서 a, b, c값을 구한다.
(허가하지 않을 부분은 0을 넣어서 계산한다.)
예를들어 user가 읽기, 실행만 가능하고, 쓰지 못하도록 하려면 a값은 4+0+1=6이 된다.
마찬가지 방법으로, b, c를 구한후 위의 permission 자리에 [abc] 형식으로 써주면 된다.
* 421인 경우, user는 읽기만 가능, group은 쓰기만 가능, other는 실행만 가능하게 된다.
* 362인 경우, user는 쓰기, 실행만 가능, group은 읽기, 쓰기만 가능, other는 쓰기만 가능하게 된다.
주의해야 할 것은, 어떤 파일의 소유권을 바꾸려면 그 파일에 대해 소유권을 바꿀 권한이 있어야 한다.
(아이러니?)
 
◈ date (date) : 현재 시간과 날짜를 보여준다.
date <CR>
 
◈ df (disk free) : 현재 사용가능한 하드디스크의 용량을 보여준다.
df <CR>

◈ du (disk usage) : 현재 각 파일 / 디렉토리가 사용하는 디스크의 크기를 보여준다.
du <CR>
 
◈ kill (kill process) : 현재 실행중인 프로세스를 종료시킨다.
kill [process id]<CR>
-> 현재 실행중인 프로세스 중에서 지정한 process id를 같는 프로세스를 종료시킨다.
 
◈ mount / umount (mount/unmount file systems) : 파일 시스템을 마운트 또는 해제 한다.
-> 마운트란 디스크, 프린터, CD-ROM 등의 주변기기를 하나의 디렉토리처럼 사용할 수
-> 있게 해 주는 개념이다.
mount [-t type] [device] [directory] <CR>
-> type은 파일시스템의 타입을 말하는 것으로서, 보통 windog의 경우 msdos (FAT16)나
-> vfat (FAT32)을 주면 된다.
-> 위에서 device는 다음과 같은식으로 적어주면 된다.
플로피 디스크는 여러개가 달려있으면, 순서대로 /dev/fd0 (-> 보통 a:라고 하는 것),
/dev/fd1 ... 이런식으로 나간다.
하드의 경우는 /dev/hda0, /dev/hda1...이런식으로 나가는데, 'hd'다음에 온 'a'는
하드가 여러개일 경우 첫번째 하드디스크를 의미한다. 따라서 두번째 하드디스크를
마운트 할 경우에는 'hdb0' 이런식으로 해 주면 된다.
그리고, 뒤에 온 숫자는 파티션 번호이므로 원하는 파티션 번호를 적어주면 된다.
스카시 하드의 경우 'hd' 대신 'sd'를 사용한다. 다음 예를 보자.
/dev/fd0 ==> a:드라이브
/dev/hdb2 ==> 두번째 하드디스크의 두번재 파티션
/dev/sda3 ==> 첫번째 스카시 하드디스크의 세번째 파티션
-> directory는 마운트될 파일 시스템을 연결할 디렉토리를 말하고, 보통 /mnt 디렉토리
-> 이하에 마운트 하기 전에 만들어주면 된다.
-> floppy와 cdrom 의 경우 단순히 'mount /mnt/floppy<CR>' 또는 'mount /mnt/cdrom<CR>'
-> 이라고만 해도 마운트가 된다.
-> 마운트는 root 계정만이 할 수 있다.
mkdir /mnt/win <CR> -> 마운트 대상이 될 디렉토리를 생성 (한번 만들어 놓으면 계속 사용 가능)
mount -t vfat /dev/hda3 /mnt/win <CR> -> 첫번째 하드디스크의 세번째 파티션(FAT32)을
/mnt/win 디렉토리에 마운트 한다.
umount /mnt/win <CR> -> 마운트를 해제한다.
-> 만일 세번째 파티션에 윈도그 98을 쓰고 있다면, 위와 같이 마운트 하고 나면 /mnt/win
-> 디렉토리에 win98의 하드 내용이 나타날 것이다. 물론 복사, 삭제, 이동 다 가능하다.
-> umount를 하기 전에는 현재 마운트 된 파일 시스템이 다른곳에서 사용되고 있지 않는가,
-> 현재 디렉토리가 mount 된 디렉토리가 아닌가를 확인한다. 둘 중 하나라도 해당되면 umount가
-> 되지 않는다.
-> 그냥 mount<CR> 하게 되면 현재 마운트 된 내용들이 화면에 나타난다.

◈ ps (process) : 현재 실행중인 프로세스 (작업)을 보여준다.
ps [option] <CR>
-> -e 옵션을 주면 모든 프로세스를 다 보여준다.
-> -f 옵션을 주면 모든 정보를 다 보여준다.
 
◈ top (display top process) : 실행중인 프로세스 정보를 실시간으로 보여준다.
top <CR>
-> 현재 실행중인 프로세스를 CPU/메모리 사용 순으로 보여준다.
 
④ MSDOS 파일시스템 관련 명령어들
◈ mcd (msdos change directory) : 도스형식에서 디렉토리를 이동한다.
mcd temp <CR>
-> a:에 있는 temp directory로 이동한다.
 
◈ mcopy (msdos copy) : 도스형식에서 파일을 복사한다.
mcopy a:test.txt ./ <CR>
-> a:에 있는 test.txt 파일을 현재 디렉토리로 복사한다.
mcopy ./* a:
-> 현재 디렉토리에 있는 모든 파일들을 a:로 복사한다.
 
◈ mdel (msdos delete) : 도스형식에서 파일을 삭제한다.
mdel test.txt <CR>
-> a:에 있는 test.txt 파일을 삭제한다.
 
◈ mdir (msdos dir) : 도스형식에서 파일의 목록을 보여준다.
mdir test.* <CR>
-> a:에 있는 파일 중 test로 시작하는 파일의 목록을 보여준다.
 
◈ mmove (msdos move) : 도스형식에서 파일이나 디렉토리를 옮기거나 이름을 바꾸어 준다.
mmove a:abcd.txt efgh.txt <CR>
-> a:에 있는 abcd.txt를 efgh.txt로 바꾼다.
 
⑤ 파일 관련 명령어들
◈ cat (concatenate) : 파일의 내용을 보여준다.
cat [filename] <CR>
 
◈ cmp (compare) : 두개의 파일을 비교한다.
cmp [file1] [file2] <CR>
-> 두 파일의 내용을 비교한 후에 다르면, 다른 부분을 화면에 출력해 준다.
같은 경우엔 아무 출력도 안함.
 
◈ find (find) : 디렉토리 구조 내에서 파일을 찾는다.
find [filename] <CR>
-> 주어진 이름을 갖는 file을 찾는다.
 
◈ ln (link) : 파일 / 디렉토리간에 링크를 설정한다.
ln [option] [filename] [linkname] <CR>
-> -s를 옵션으로 주면 심볼릭 링크를 생성하고, 옵션이 없으면 하드링크를 생성한다.
ln -s test.txt link.txt <CR>
-> test.txt 파일에 대한 link.txt라는 심볼릭 링크를 생성한다.

ln test.txt link.txt <CR>
-> test.txt 파일에 대한 link.txt라는 하드 링크를 생성한다.
-> 심볼릭 링크의 경우 단지 링크만 시키는 것이어서, 어느 하나를 지우면 다른 하나도 사라진다.
-> 하드링크의 경우 동일한 파일을 다른 이름으로 하나 더 생성하게 되므로, 어느 하나를 지워도
-> 다른 하나가 남아있게 된다.
 
◈ more (more) : 화면 출력을 제어할 수 있다.
ls -al | more <CR> ====> more 앞에 있는 것은 키보드 백스페이스 왼쪽에 있는 것이다. (shift+)
-> 화면 출력을 페이지 단위로 멈추어 준다.
 
◈ sort (sort) : 파일 내의 모든 행을 정렬한다. (옵션이 많으므로 man page를 참고할 것.)
sort test.txt <CR>
-> test.txt 파일의 내용을 문자단위로 정렬한다.
 
⑥ 기타 명령어들
◈ clear (clear) : 화면을 다 지우고, 파일을 복사할 때 사용된다.
clear <CR>
 
◈ grep (grep pattern) : 내용 중 주어진 패턴이 포함된 행을 출력한다.
grep "and" test.txt <CR>
-> test.txt 의 내용중 "and"가 포함되어 있는 행을 보여준다.
-> 보통 다음과 같은 형태로 파이프(|)를 이용해서 많이 사용한다.
ls | grep test <CR>
-> 파일 목록의 내용 중 test가 포함된 행만 보여준다.
 
◈ man (manual) : 각 명령어에 대한 도움말을 보여준다.
-> 프로그래밍 시, 함수이름을 적어주면 함수의 사용법도 보여준다.
man ls <CR>
-> ls 에 관한 도움말을 보여준다.
man printf <CR>
-> printf() 함수에 대한 설명을 보여준다.

'Linux' 카테고리의 다른 글

리눅스의 디렉토리구조  (0) 2007.08.29
vi 초간단 매뉴얼  (0) 2007.08.29
zterm & ssh  (0) 2007.08.29
리눅스 기초 명령어  (0) 2007.08.28
Linux 설치 파일  (0) 2007.08.28
grep 명령어 사용법  (0) 2007.01.26

Linux 설치 파일

Linux 2007.08.28 23:39 Posted by 애플자라
ftp://ftp.bora.net/pub/OS/redhat/9/en/iso/i386/

shrike-i386-disc1.iso
shrike-i386-disc2.iso
shrike-i386-disc3.iso

위의 3개의 파일을 CD로 굽는다.

그다음 각자 자기 환경에 맞게 까는거다.

'Linux' 카테고리의 다른 글

리눅스의 디렉토리구조  (0) 2007.08.29
vi 초간단 매뉴얼  (0) 2007.08.29
zterm & ssh  (0) 2007.08.29
리눅스 기초 명령어  (0) 2007.08.28
Linux 설치 파일  (0) 2007.08.28
grep 명령어 사용법  (0) 2007.01.26

쓸만한 웹디버깅툴 Firebug

Tips 2007.05.30 09:18 Posted by 애플자라
javascript로 linkedlist 구현하다 꽤나 쓸만한 기능을 발견해서 바로 블로그에 메모할 생각을 하게되었다 -_-

firefox 전용 플러그인이다..

받는방법은 firefox 상단 도구(T) -> 부가기능 - > 유용한 확장기능 찾기 링크를 통해
firefox add-on 사이트로 들어간다.

검색창에 firebug을 치면 손쉽게 설치가 가능하다.

활성 / 비활성은 F12번 단축키나 상단메뉴 - 도구(T) - > firebug - > enable firebug로 활성화 시킬수 있다.

브라우저 하단 좌측에 체크표시가 나오는데 그것을 클릭하면
DOM / script / HTML / traffic / 등등 자세한 정보를 알수 있다.

특히 javascript debugging 할때는 아주 최강이다 -_-

내가 자주쓰는부분중 하나를 소개한다.

사용자 삽입 이미지
사진을 보면 우측에 붉은줄이 그어진부분을 확인할수 있다..
여기에서 javascript의 해당변수를 입력하면 스크립트 구동중에 변수의 값을 실시간으로 확인가능하다.
물론 다른언어의 디버깅툴처럼 breakpoints를 설정할수도 있다..

Container Version Servlet/JSP Spec Version

Programing 2007.03.05 00:39 Posted by 애플자라

Container

Version

Servlet/JSP Spec Version

Apache Tomcat

6.x

2.5 / 2.1

5.x

2.4 / 2.0

4.x

2.3 / 1.2

3.3

2.2 / 1.1

BEA WebLogic Server

9.x

2.4 / 2.0

6.x ~ 8.x

2.3 / 1.2

5.x

2.2 / 1.1

JEUS

5.x

2.4 / 2.0

4.x

2.3 / 1.2

IBM WebSphere App Server

6.x

2.4 / 2.0

5.x

2.3 / 1.2

4.x

2.2 / 1.1

Oracle Application Server

10g R3 (10.1.3.1)

2.4 / 2.0

10g (9.0.4)

2.3 / 1.2

요즘은 대세가 UTF-8입니다..

물론 특정문자열을 표시하지못합니다만..

그래도 다국어 지원이라는 매력점이 있는관계로.. ^^;

Java/JSP 개발환경에서 설정해주어야 할 몇가지를 설명합니다.

먼저 Eclipse IDE 개발환경입니다.

1. Eclipse 환경설정

먼저 이클립스의 Windows -> Preferences -> General -> Editors 로 이동하여
Text file encoding 을 UTF-8 로 맞춰 줍니다.



Content Type -> Java Source File 과 Javascript 파일의 인코딩을 UTF-8 로 Update 합니다.



2. Tomcat 환경일 경우
서블릿 필터를 이용하여 처리하여야합니다.

첨부파일을 참조하세요 .

web.xml 에 추가해야할 소스
<filter>
  <filter-name>Character Encoding Filter</filter-name>
  <filter-class>com.nethru.filter.SetCharacterEncodingFilter</filter-class>
  <init-param>
  <param-name>encoding</param-name>
  <param-value>UTF-8</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>Set Character Encoding</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>


스프링 프레임워크를 이용할경우 이미 필터도 제공합니다..
web.xml에 아래와 같은부분만 추가하면 끝 .
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>euc-kr</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>

[ORACLE] Oracle SQL Developer 리포트의 활용 

Database 2007.02.13 00:33 Posted by 애플자라

오라클이 무료로 제공하는 데이터베이스 개발 툴의 리포팅 기능을 활용하는 방법을 소개합니다.

게시일: 2006년 6월

Oracle SQL Developer(구 제품명 Project Raptor)는 오라클이 개발자와 DBA를 위해 제공하는 새로운 멀티플랫폼 그래픽 사용자 인터페이스입니다. Oracle Database 10g Express Edition (XE), Oracle JDeveloper와 마찬가지로 Oracle SQL Developer는 무료로 다운로드할 수 있습니다. Oracle SQL Developer는 Windows, Macintosh, Linux 플랫폼을 지원합니다.


Oracle SQL Developer는 데이터베이스 오브젝트 조작을 위한 그래픽 대화상자, SQL 워크시트, PL/SQL 편집기, 리포팅 등 개발자를 위한 강력한 기능을 제공합니다. Oracle SQL Developer는 Oracle JDeveloper, Java IDE를 기반으로 하고 있으며 직관적인 트리 기반 내비게이션 구조를 구현하고 있습니다.


리포트는 두 가지 방법으로 생성될 수 있습니다. 사전 정의된 표준 데이터 딕셔너리 리포트를 선택하거나 사용자 정의 리포트를 생성하는 것이 가능합니다. Oracle SQL Developer 리포트는 바인드 변수와 드릴다운 리포팅을 지원합니다.

본 문서에서는 데이터베이스의 설치, 구성, 연결 생성에 관련한 내용을 다루고 있지 않습니다. 이 주제에 대해 상세한 정보가 필요한 경우, OTN의 Oracle SQL Developer 홈 페이지 를 참고하십시오.

리포트를 생성하기 위해 먼저 Oracle SQL Developer를 실행합니다. 데이터베이스에 연결하고, Reports 탭을 클릭합니다. Reports 심볼 옆에 있는 플러스 기호( + )를 클릭하고 다시 Data Dictionary Reports 옆의 플러스 기호를 클릭합니다. 지금은 User Defined Reports 아이템을 무시하고 진행합니다.


트리-뷰 내비게이션은 폴더/파일의 개념으로 동작합니다. 예를 들어 Data Dictionary Reports 디렉토리는 Reports 폴더의 서브폴더이며 내비게이션 관점에서는 Reports->Data Dictionary Reports로 표시됩니다.

Data Dictionary 폴더의 서브폴더 중 하나의 플러스 기호를 클릭합니다.

Figure 1

오라클 기본 제공 리포트

(참고: 실행할 리포트를 선택한 경우 Select Connection 대화상자가 표시될 수 있습니다. 연결을 선택한 후 OK를 클릭합니다.)

Figure 2

Data Dictionary Reports 폴더는 오라클이 기본적으로 제공하는 사전정의 리포트의 목록을 저장하고 있습니다. 표준 리포트 중 하나를 선택해 보기로 합시다. 필자가 업무에 유용하게 사용하는 리포트의 목록이 아래와 같습니다. 목록에서 여러분에게 유용한 리포트가 있는지 확인해 보시기 바랍니다.

All Parameters 리포트(Reports->Data Dictionary Reports->Database Administration->Database Parameters->All Parameters)는 모든 데이터베이스 초기화 매개변수의 목록을 표시합니다.


리포트를 클릭하면 자동으로 실행됩니다. 일부 리포트의 경우 Enter Bind Values 대화상자를 통해 매개변수를 입력해 주어야 할 수 있습니다. 바인드 변수에 대해서는 나중에 설명하겠습니다. 리포트를 실행하려면 Apply를 선택합니다.


Figure 3

Figure 4

“Free Space report—Reports->Data Dictionary Reports->Database Administration->Storage->Free Space”를 선택하여 각 테이블스페이스의 여유 공간을 확인할 수 있습니다.

Figure 5

액티브 세션 리포트(Reports->Data Dictionary Reports->Database Administration->Sessions->Active Sessions)는 데이터베이스의 모든 액티브 세션을 표시합니다. 이 리포트를 사용하여 누가 로그인 했는지, 그리고 각 세션의 상세 정보를 확인할 수 있습니다.


Top SQL 노드(Reports->Data Dictionary Reports->Database Administration->Top SQL->*)에 위치한 리포트들은 어느 것 하나 빼놓을 것 없이 유용합니다. 필자는 이 리포트를 이용하여 시스템의 전반적인 상태를 확인하고, CPU 또는 IO를 기준으로 Top SQL 리스트를 조회하곤 합니다.


User Tables 리포트(Reports->Data Dictionary Reports->Table->User Tables)는 정확한 테이블명 또는 컬럼명을 기억하지 못한 경우에 유용합니다.


Quality Assurance 리포트(Reports->Data Dictionary Reports->Table->Quality Assurance->*)는 개발 과정에서 활용도가 높습니다. 필자는 DDL 구문을 직접 작성하는 과정에서 인덱스 또는 키를 빠뜨리는 실수를 방지하기 위해 이 리포트를 사용합니다.


PL/SQL 검색 리포트(Reports->Data Dictionary Reports->PL/SQL Search Source Code)는 시간 절약에 많은 도움이 됩니다. 오브젝트 이름 또는 소스 텍스트 문자열을 기준으로 검색을 수행할 수 있습니다.


이제 이 리포트에서 사용되는 SQL 코드를 살펴보기로 합시다. 앞에서 설명한 방법으로 리포트를 실행합니다. Reports 창의 리포트 데이터 상단에 세 개의 버튼(붉은색 핀, 초록색 삼각형, 사각형에 둘러싸인 SQL 텍스트)이 있습니다. 세 번째 SQL 버튼은 리포트에서 SQL을 복사하여 SQL 워크시트에 붙여 넣는데 사용됩니다. SQL 버튼을 클릭합니다.


Figure 6

결과로 표시된 SQL 구문에서 몇 가지 팁을 얻을 수 있습니다. 여기서 얻은 팁을 사용자 정의 리포트를 생성하는데 활용하시기 바랍니다.

드릴다운 리포트

Oracle SQL Developer 리포트의 중요한 기능의 하나로 드릴다운(drill-down)을 꼽을 수 있습니다. 이것은 필자가 Oracle SQL Developer에서 가장 선호하는 기능이기도 합니다. 사용자 정의 드릴다운 리포트를 직접 작성하는 방법은 뒷부분에서 설명하기로 합니다.


Reports->Data Dictionary Reports->Table->User Tables 리포트를 실행하여 스키마 내의 모든 테이블 목록을 표시합니다. 리포트 실행이 완료된 후 리포트 결과 화면의 로우 중 하나를 더블클릭 합니다.
해당 테이블에 대한 상세 정보를 포함하는 새로운 탭이 표시됩니다. 여기세 테이블의 컬럼 정의를 확인하실 수 있습니다. 데이터 창에는 두 개의 탭(방금 실행한 리포트를 위한 탭과 드릴다운 오브젝트를 위한 탭)이 존재합니다. 다른 리포트를 실행하고 임의의 로우를 더블클릭 합니다.


드릴다운 기능은 Navigator(Connections 탭 하위) 노드 밑에 존재하는 모든 노드에 대해 동작합니다. All Parameters 리포트를 더블클릭 하면 (Connections 하단에 Parameter 노드가 존재하지 않으므로) 아무런 결과도 표시되지 않을 것입니다.


드릴다운 기능이 Navigator 노드 하위 아이템에 대해서만 동작하기 때문에, 사용자 정의 리포트에서 드릴다운 기능을 활용하는데 다소간의 제약이 있을 수 있습니다. Oracle SQL Developer가 모든 노드에 대해 드릴다운 기능을 제공할 수 있게 된다면, 매우 유용한 기능으로 활용할 수 것입니다.


하지만 현재로서 드릴다운 기능은 딕셔너리 리포트에서 주로 활용됩니다. 작성 중인 리포트에 드릴다운을 추가하려면, 쿼리에 아래와 같이 3 개의 컬럼만 추가해 주면 됩니다.


Figure 7

위 그림에서 OBJECT_OWNER는 sdev_link_owner, OBJECT_NAME은 sdev_link_name, OBJECT TYPE은 sdev_link_type으로 정의되었습니다.


위와 동일한 앨리어스(alias)를 사용하여 3 개의 아이템을 추가하면, Oracle SQL Developer는 더블클릭 시 자동으로 드릴다운을 실행합니다. 다시 강조하지만 현재 버전에서 드릴다운 기능은 Navigator 창의 노드에 대해서만 지원됩니다.

간단한 사용자 리포트

참고: 필자가 사용하는 코드 예제는 모두 Oracle Database XE 환경의 SYSTEM, HR 스키마를 이용하고 있습니다. Oracle Database XE 데이터베이스 환경의 사용자라면 필자의 예제를 쉽게 따라 할 수 있을 것입니다. Oracle Database XE 데이터베이스가 설치되어 있지 않은 경우라면, 환경에 따라 다른 테이블을 사용해야 할 수도 있습니다. Oracle Database XE는 OTN에서 무료로 다운로드할 수 있습니다.


이제 간단한 리포트를 생성해 보기로 합시다. HR@XE로 로그인합니다. 내비게이터의 마지막 노드(User Defined Reports)를 클릭합니다. 확장된 노드를 마우스 오른쪽 버튼으로 클릭하면 여러 가지 옵션(Add Folder, Add Report, Delete, Copy, Cut, Paste)을 포함하는 컨텍스트 메뉴가 표시됩니다.


Oracle SQL Developer는 내비게이션을 위한 트리 구조를 제공합니다. 사용자정의 리포트 역시 동일한 구조를 이용하여 논리적으로 그룹핑하는 것이 권장됩니다. 아래 그림처럼 애플리케이션 단위로 그룹을 생성하는 것도 가능합니다. 또는 애플리케이션 이름이 아닌 다른 분류 기준을 정할 수도 있겠지만, User Defined Reports 노드 아래에 모든 리포트를 몰아넣는 것만큼은 피하는 것이 좋습니다.


Add Folder를 선택하여 새로운 폴더를 생성합니다. 이 폴더의 이름을 Employee Reports로 설정하기로 합시다. Description에는 설명으로 참조할 만한 문구를 입력합니다. ToolTip 텍스트는 내비게이터의 해당 아이템 위로 마우스를 가져가는 경우 표시됩니다. Apply를 클릭하여 저장합니다.


Figure 8

Employee Reports를 마우스 오른쪽 버튼으로 클릭합니다. 컨텍스트 메뉴에 Edit이 추가된 것을 볼 수 있습니다. Edit을 선택하고 편집 작업을 수행한 후 Apply를 클릭하여 저장합니다.


다시 마우스 오른쪽 버튼을 클릭하고 Add Report를 선택합니다. 리포트 이름은 “Number of Employees by Department”로 설정합니다. Description, ToolTip에는 임의의 텍스트를 입력합니다. SQL 박스에 아래 쿼리를 입력합니다:


Select department_id, count(*)
From Employees
Group By department_id


Figure 9

Apply를 클릭하여 저장합니다.

Employee Reports 노드 옆의 플러스 기호를 클릭하고 새로 생성한 리포트를 클릭합니다. 이때 Select Connection 대화상자가 표시될 수 있습니다. 대화상자에서 HR 연결을 선택하고 OK를 클릭합니다.

이제 첫 번째 사용자 정의 리포트를 성공적으로 생성하였습니다. 이 보고서에서 department ID 대신 department name을 표시하도록 다듬는다면 좀더 유용하게 활용할 수 있을 것입니다. 리포트를 마우스 오른쪽 버튼으로 클릭하고 표시된 컨텍스트 메뉴(Open, Open New Window, Edit, Show Properties)에서 Edit을 선택합니다.


department name이 표시되도록 쿼리를 변경합니다:

Select d.department_name, count(*)
  From Employees e
  Join Departments d On (e.department_id = d.department_id)
  Group By d.department_name
  

Apply를 클릭하여 저장하고 리포트를 재실행합니다.


리포트를 조금 더 다듬어 봅시다. 리포트를 마우스 오른쪽 버튼으로 클릭하고 Copy를 선택합니다. 다시 마우스 오른쪽 버튼을 클릭하면 Paste가 옵션으로 표시되지 않음을 확인할 수 있습니다. Employee Repots를 마우스 오른쪽 버튼으로 클릭합니다. 이제는 리포트를 붙여넣기 할 수 있습니다. 새로운 리포트(뒷부분의 괄호에 숫자가 표시된 리포트)를 마우스 오른쪽 버튼으로 클릭하고 Edit를 선택합니다. 쿼리를 아래와 같이 변경합니다:


Select e.Last_Name, e.First_name, d.department_name, 
       count(*) over (partition by d.department_name) dept_count, 
       count(*) over ()
  From Employees e
  Join Departments d On (e.department_id = d.department_id)
  

Figure 10

리포트를 실행합니다. 이제 정말로 유용한 리포트가 만들어졌습니다. 직원의 이름, 부서명, 부서의 직원 수, 전체 부서의 직원 수 등이 표시된 리포트가 생성되었습니다.


리포트의 유용성을 극대화하기 위해서는 다이내믹 리포트 생성이 지원되어야 합니다. 바인드 변수를 사용하면 실행 시점에 리포트 쿼리를 다이내믹하게 변경하는 것이 가능합니다. Oracle SQL Developer 1.0 이전 버전은 바인드 변수를 이용한 사용자 정의 리포트 기능을 직접적으로 지원하지 않았지만, SQL Developer User Information Directory에 위치한 UserReports.xml 파일을 수정하여 바인드 변수를 추가할 수는 있었습니다. 버전 1.0은 훨씬 단순화된 바인드 변수 지원 기능을 제공합니다.


이제 리포트에 마지막 변경 사항을 추가해 봅시다. 바인드 변수를 이용하여 사용자가 부서명(전체 또는 일부분)을 입력하거나 null 상태로 쿼리를 실행하여 전체 부서에 대한 리포트를 생성하는 기능을 구현해 보겠습니다. SQL 구문을 아래와 같이 수정합니다:

Select e.Last_Name, e.First_name, d.department_name, 
       count(*) over (partition by d.department_name) dept_count, 
       count(*) over ()
  From Employees e
  Join Departments d On (e.department_id = d.department_id)
  Where (:dept_name is null
         or d.department_name = :dept_name)
  

Figure 11

리포트를 실행하면 바인드 변수 입력 화면이 표시됩니다. 임의의 값을 입력해 봅니다.

복잡한 형태의 리포트

User Defined Reports 노드에 새로운 폴더를 생성합니다. 이 폴더에는 여러분이 직접 생성한 Data Dictionary 리포트를 저장하게 됩니다. 폴더의 이름은 “User Data Dictionary”로 설정합니다

Figure 12

이제 Recycle Bin에 있는 모든 오브젝트의 목록과, 이 오브젝트들에 의해 사용되는 디스크 공간을 표시하는 리포트를 생성해 보겠습니다. 이 리포트는 4GB의 디스크 공간 제한을 갖는 Oracle Database XE 환경에서 특히 유용하게 활용됩니다.


이 리포트를 실행하기 위해서는 SYS.DBA_OBJECTS, SYS.DBA_SEGMENTS, SYS.DBA_RECYCLEBIN 데이터베이스 오브젝트에 대한 액세스 권한을 가지고 있어야 합니다. 필자는 SYSDBA 계정을 이용하여 이 리포트를 실행합니다.


새로운 사용자 정의 리포트를 생성하고 이름을 Recycled Objects로 설정합니다. Description, ToolTip에는 임의의 정보를 입력합니다. 쿼리를 아래와 같이 편집합니다:


select ao.owner,
      ao.object_type,
      ar.original_name,
      ao.object_name recycled_name,
      ar.droptime,
      ds.bytes/1024/1024 "Megabytes",
      ao.owner        sdev_link_owner,
      ao.object_name  sdev_link_name,
      ao.object_type     sdev_link_type
from sys.dba_objects ao,
     sys.dba_segments ds,
     sys.dba_recyclebin ar
where ao.object_name like 'BIN$%'
  and ao.owner = ds.owner
  and ao.object_name = ds.segment_name
  and ar.object_name = ao.object_name
  and ((ao.subobject_name is null AND ds.partition_name IS NULL)
       or ao.subobject_name = ds.partition_name)
  and ((:original_name is null or 
        ar.original_name = :original_name)
      AND (:object_type is null or
          ao.object_type = :object_type))
  

이 리포트는 SDEV_LINK_OWNER, SDEV_LINK_NAME, SDEV_LINK_TYPE 앨리어스를 포함하고 있으며, 따라서 참조된 아이템에 대한 드릴다운이 가능합니다. 이 리포트에서는 RECYCLEBIN의 각 아이템에 대한 상세 정보를 얻기 위해 드릴다운 기능이 사용됩니다. SDEV_LINK_NAME을 ao.object_name에서 ar.original_name으로 변경한 경우, (기존 아이템이 존재하는 경우) 기존 아이템에 대한 드릴다운이 가능합니다. 또 모드 변환이 가능하도록 리포트를 수정할 수도 있습니다.

SDEV_LINK_NAME 라인을 아래와 같은 상태에서,

ao.object_name sdev_link_name,

아래와 같이 변경합니다.

decode( :original_or_recycle, 1, ar.original_name, ao.object_name) sdev_link_name,

이제 리포트를 실행한 뒤 모드 변경을 수행하지 않으면 Recycled Object에 대한 드릴다운을 결과를 얻게 되고, original_or_recycle 변수를 1로 변경하면 (기존 오브젝트가 존재하는 경우) 기존 오브젝트에 대한 드릴다운을 수행할 수 있습니다.

이 기능을 이용하면 Oracle SQL Developer에서 매우 유용한 드릴다운 리포트를 생성할 수 있습니다. 커스텀 쿼리에 대한 드릴다운 기능까지 추가된다면 그 활용도는 실로 무한할 것입니다! OTN Oracle SQL Developer 포럼(http://forums.oracle.com/forums/forum.jspa?forumID=260 ) 에 방문하셔서 커스텀 쿼리 드릴다운의 필요성을 오라클에 전달해 주시기 바랍니다!

original_or_recycle 변수를 변경하는 것 이외에도, 오브젝트 타입, 기존 오브젝트 네임 등을 기준으로 반환되는 값을 제한할 수 있습니다. 이 쿼리의 마지막 4개 라인은 바인드 변수를 생성하는데 사용됩니다. 바인드 변수는 위에서 자세히 설명되었으므로, 여기서 다시 설명하지는 않도록 하겠습니다.


또 엔드 유저가 확인하는 바인드 변수 대화상자에 설명을 추가할 수 있다면 도움이 될 것입니다. 특히 original_or_recycle 변수를 다른 사용자들이 사용하기 위해서는 충분한 설명이 필요할 것입니다.


앞에서 Oracle SQL Developer 1.0 이전 버전에서 UserReports.xml 파일을 편집하여 바인드 변수를 추가할 수 있다고 설명한 바 있습니다. 같은 방법을 이용하여 1.0 버전에서 바인드 변수 기능을 확장할 수 있습니다. 설명을 위한 텍스트를 추가하거나, 프롬프트를 변경하건, 디폴트 값을 할당하는 작업 등이 가능합니다. 설명을 위한 텍스트를 추가하는 방법이 아래와 같습니다:


내비게이션 대상이 되는 OS 디렉토리를 “SQL Developer User Information Directory”라 부릅니다. MS Windows 환경에서는 C:Documents and Settings가 이에 해당합니다. 이 디렉토리에서 사용자가 로그인에 사용한 계정을 선택합니다. 예를 들어 Icunning으로 로그인했다면, C:->Documents and Settings->lcunning 디렉토리로 이동합니다. 이 디렉토리에서 다시 .sqldeveloper 디렉토리로 이동합니다. (따라서 현재 위치는 C:->Documents and Settings->lcunning->.sqldeveloper 디렉토리가 됩니다.)


Linux에서는 홈 디렉토리에 .sqldeveloper 디렉토리가 위치합니다. 따라서 $HOME이 /home/lcunning으로 설정되어 있다면 UserReports.xml은 /home/lcunning/.sqldeveloper에 위치합니다.
.sqldeveloper 디렉토리에는 최소한 두 개의 파일이 존재합니다. 그 중 하나인 UserReports.xml은 사용자 정의 리포트를 저장하고 있습니다. 임의의 XML 편집기를 이용하여 이 파일을 열어 볼 수 있습니다.


Figure 13

참고: UserReports.xml 파일을 편집하기 전에 반드시 백업을 수행합니다! XML 문법이 잘못된 경우, 백업 파일을 복구하여 다시 처음부터 시작해야 합니다.

XML 문서는 아래와 같은 포맷으로 작성되어 있습니다:

<reports>
  <folder>
    <name></name>
    <description></description>
    <report enabled="true">
      <name></name>
      <description></description>
      <tooltip></tooltip>
      <query>
        <sql></sql>
      </query>
    </report>
  </folder>
</reports>
  

이 포맷은 안에서 밖으로(SQL 쿼리 -> 폴더 -> 리포트 문서) 읽을 수도 있고, 밖에서 안으로(리포트 문서 -> 폴더 -> SQL 쿼리) 읽을 수도 있습니다. 각각의 리포트는 name, description, tooltip, query 등의 속성을 포함하고 있습니다. 쿼리는 SQL 구문으로 작성됩니다.


변경 작업은 쿼리 노드에서 수행하게 됩니다. <query> 노드 안의 <sql> 노드 바로 뒤에 <binds> 노드를 추가합니다.

<binds> 노드의 내용이 아래와 같습니다:
<binds>
  <bind id="">
    <type></type>
    <prompt></prompt>
    <value></value>
    <tooltip></tooltip>
  </bind>
</binds>
  

바인드 태그의 id 속성은 바인드 변수의 이름을 의미합니다. 이 방법을 사용하여 바인드 변수를 정의하고자 한다면, 모든 바인드 변수에 대해 동일한 방법(UserReports.xml 파일 편집)을 사용해야 합니다.


바인드 변수에 디폴트 값을 설정하고자 하는 경우, <value> 엘리먼트를 이용합니다.


ToolTip은 사용자에게 추가적인 정보를 제공하고자 하는 경우에 이용됩니다. original_or_recycle, original_name, object_type 변수를 아래와 같이 정의합니다.

<binds>
  <bind id="original_or_recycle">
    <type><![CDATA[null</type>
    <prompt><![CDATA[original_or_recycle</prompt>
    <value><![CDATA[NULL_VALUE</value>
    <tooltip><![CDATA[Enter 1 to drill down to the original object, otherwise leave it null</tooltip>
  </bind>
  <bind id="original_name">
    <type><![CDATA[null</type>
    <prompt><![CDATA[original_name</prompt>
    <value><![CDATA[NULL_VALUE</value>
    <tooltip><![CDATA[Enter the original name</tooltip>
  </bind>
  <bind id="object_type">
    <type><![CDATA[null</type>
    <prompt><![CDATA[object_type</prompt>
    <value><![CDATA[NULL_VALUE</value>
    <tooltip><![CDATA[Enter an object type</tooltip>
  </bind>
</binds>
  

![CDATA ]] 텍스트는 XML 파서가 [ ] 기호 안의 문자열을 처리하지 않도록 설정하는데 이용됩니다. XML 구문에 익숙하지 않은 개발자라면, 반드시 이 기호를 사용하여 문자열을 보호하도록 해야 합니다.


설명을 위한 텍스트와 디폴트 값의 설정 기능은 그 활용 가치가 매우 높으며, 앞으로도 오라클에 의해 많은 기능 개선이 이루어질 것으로 기대가 되는 부분입니다. (커스터마이즈 기능은 현 버전에도 존재하고 있지만, 이를 활용하기 위한 인터페이스가 제공되고 있지 않은 것이 문제입니다.)


UserReports.xml 파일의 수정 작업을 완료했다면, Oracle SQL Developer를 종료하고 다시 시작합니다. 그런 다음 리포트를 실행합니다. 아래와 같은 스크린을 확인할 수 있습니다.

Figure 14

리포트의 공유

사용자 정의 리포트를 고객, 동료, 또는 다른 Oracle SQL Developer 사용자와 공유하고자 하는 경우, UserReports.xml 파일을 다른 사용자의 SQL Developer User Information Directory 디렉토리에 복사하면 됩니다.


공유할 필요가 없는 리포트가 존재하는 경우에는 해당 리포트의 <report>... </report> 텍스트를 삭제합니다 (변경 작업 이전에 파일을 백업하는 것을 잊지 마시기 바랍니다!)


리포트 데이터의 익스포트

리포트를 실행한 후 데이터 그리드를 마우스 오른쪽 버튼으로 클릭하면 컨텍스트 메뉴가 표시됩니다. 이 컨텍스트 메뉴에서는 Export 옵션만을 선택할 수 있습니다. Export를 선택하면 CSV, XML, Insert, Loader, Text 등의 메뉴가 다시 표시됩니다. 이 메뉴에서 리포트 데이터의 익스포트 포맷(export format)을 설정할 수 있습니다. 옵션 중 하나를 선택하면 아래와 같은 대화상자가 표시됩니다.

Figure 15

  • CSV는 “comma-separated values”의 약자로 데이터를 스프레드시트(또는 Oracle Application Express)에 익스포트하는 경우 사용됩니다.
  • XML은 XML 문서를 의미합니다.
  • INSERT 옵션은 데이터 셋의 각 레코드를 위한 INSERT 구문을 생성합니다.
  • LOADER 옵션은 SQL*Loader 데이터 컨트롤 파일을 생성합니다.
  • TXT 옵션은 탭으로 구분된 텍스트 파일을 생성합니다.

대화상자의 Columns 탭을 이용하면 익스포트 파일에 포함시킬 컬럼을 선택할 수 있습니다. 또 Where 탭은 출력 파일에 포함되는 레코드의 조건절을 생성하는데 활용됩니다.

Move Over, SQL*Plus

Oracle SQL Developer는 모든 오라클 개발자들이 반드시 사용해야 하는 도구의 하나입니다. Oracle SQL Developer는 개발자의 SQL, PL/SQL 개발 작업을 지원할 뿐 아니라, 사용자 정의 리포트를 생성하기 위한 매우 유용한 기능을 제공합니다.

Oracle SQL Developer를 이용하면 커스텀 리포트를 쉽게 생성할 수 있으며, 변수 입력 대화상자, 드릴다운 리포트와 같은 부가적인 기능을 함께 활용 가능합니다. 오라클 데이터베이스에 자주 접근하는 사용자라면 한 번쯤 Oracle SQL Developer를 다운로드해서 활용해 볼 필요가 있습니다.

JSP/Servlet Spec 버전별 특징

Programing 2007.02.06 16:16 Posted by 애플자라
JSP/Servlet Spec 버전별 특징
Java 웹 어플리케이션을 개발하다보면, 의외로 자기가 현재 사용중인 JSP/Servlet 스펙의 버전을 모르는 상태로 개발하는 것을 많이 보게 된다.

특히, 자주 나타나는 것으로 개발은 Tomcat 에서 하면서, 실제 갑은 톰캣이 아닌 다른 WAS를 사용할 경우가 있는데, 이는 나중에 아주 심각한 문제로 대두될 수 있다. Tomcat 5에서 Tomcat 5가 지원하는 JSP 2.0/Servlet 2.4로 (해당 스펙의 기능을 이용해서) 개발했다가, 나중에 갑이 우리는 죽었다 깨나도 웹 로직 8.1(JSP 1.2/Servlet 2.3) 쓸래... 그래버리면, 그때부터는 열심히 노가다로 고쳐야 된다.

간단하게 JSP/Servlet 스펙을 내가 아는대로 정리해본다. 특히 개발시 Tomcat으로 개발 환경을 구축한다면, 갑이 원하는 WAS가 지원하는 스펙 버전을 확인해서 그 스펙 버전에 맞는 톰캣을 사용하도록 한다. 물론 각 WAS별 지원 스펙은 해당 WAS의 업체에 물어보면 된다.

Tomcat 버전별 지원 스펙

* Tomcat 3.x : JSP 1.1, Servlet 2.2
* Tomcat 4.x : JSP 1.2, Servlet 2.3
* Tomcat 5.x : JSP 2.0, Servlet 2.4

위 내용은 http://tomcat.apache.org/whichversion.html에서 확인할 수 있다.
물론 상위 버전을 지원하는 WAS는 하위 버전 스펙도 지원한다. Tomcat 5.x에서 JSP 1.1/Servlet 2.2 어플리케이션 짜도 괜찮다. 하지만 안그러는게 더 안전할 거 같다.

Tomcat 3.x : JSP 1.1, Servlet 2.2 는...

* web.xml 에서 다음과 같은 DTD를 선언해줘야 한다.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
 <!-- 어쩌구 저쩌구...-->
</web-app>

* 한글 파라미터 처리에 심각한 문제가 있다. ServletRequest.setCharacterEncoding(String)메소드가 존재하지 않기 때문에 각 요청에 대해 일괄적인 문자 인코딩 지정을 할 수가 없다.
* 한글 파라미터 처리를 하려면 모든 요청에 대해서 다음 처럼 인코딩 변환작업을 해줘야 한다.
String param = new String(request.getParameter("param").getBytes("latin1"),"euc-kr");

위와 같은 노가다를 안 하려면 MVC 패턴 프레임워크를 사용하면서 Controller 부분에서 일괄적으로 request 객체를 바꿔치기해서 getParameter()가 인코딩을 자동으로 해주도록 해야 한다. Spring MVC에서 그런식으로 한 예제(이거도 사실 불완전함).
사실.. 한글 문제가 아니더라도 MVC패턴 프레임웍을 쓰는것이 여러모로 좋은 것은 이미 다들 아실거 같다.
* Filter와 Listener가 존재하지 않는다. 특히 Filter는 상당한 노가다를 줄여주는 역할을 해서, 많이 애용되지만 JSP 1.1/Servlet 2.2에는 존재하지 않는다.
* 서블릿을 web.xml에서 매핑하지 않고 패키지명을 포함한 클래스의 완전한 이름을 통해 브라우저에서 서블릿의 직접 호출이 가능하다. 매우 좋지 않은 습관이지만 어쨌든 가능하다.

너무 오래된 스펙이고 불편한 점이 많으므로 되도록 사용하지 않는게 좋다. 갑이 이 스펙의 WAS를 요구하면 설득해서 최소한 JSP 1.2/Servlet 2.3 으로 바꾸도록 하길 권장하고 싶다.

Tomcat 4.x : JSP 1.2, Servlet 2.3 는...

* web.xml 에서 다음과 같은 DTD를 선언해줘야 한다.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
     PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
....
</web-app>

* ServletRequest.setCharacterEncoding(String)를 통해서 파라미터의 문자 인코딩을 일괄적으로 지정할 수 있다.
* Filter와 Listener가 존재한다.
* Filter와 ServletRequest.setCharacterEncoding(String)를 이용하면, 한번에 한글 관련 설정이 끝난다.
  FIlter 강좌 하나...(영문)
  Listener 강좌 하나...(영문) : 리스너는 웹 어플리케이션이 시작/종료 되거나, 세션 생성/파괴와 같은 특정 이벤트가 발생할 때 부가적인 작업을 해줄 수 있도록 하는 클래스이다.
* 기본적으로 서블릿 매핑을 web.xml에 작성하지 않으면 서블릿을 호출할 수 없다.(이게 더 좋은거다... 보안상)
* JSTL 1.0 이 도입되었다.

JSP 1.2/Servlet 2.3 이 현재 우리나라에서 제일 많이 쓰이는 것으로 보이며 개발시 어느정도 무난하다 할 수 있다.

Tomcat 5.x : JSP 2.0, Servlet 2.4 는...

* web.xml 에서 다음과 같은 Schema를 선언해줘야 한다.
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
<!-- DTD에서 Schema 로 바뀌었다. -->
</web-app>

* 쉽고 강력해진 Tag Library 작성기능.
* EL을 JSTL이 아닌 모든 템플릿 문자열에서 사용가능하다.
* JSTL 1.1 이 도입되었다.
* Function 커스텀 태그를 만들 수 있다.
* 그외 자세한 JSP 2.0/Servlet 2.4의 변경 사항 JSP 2.0 뭐가 바뀌었나를 참조한다.

Tomcat 4.x/5.x에서의 한글 문제 해결법도 한 번 읽어보시길 권한다.

개인적으로는 JSP 2.0/Servlet 2.4의 사용을 권장하고 싶다. 스펙 버전이 올라갈 수록 JSP 개발은 더 쉬워지고 생산성도 높아진다(물론 갑이 이 스펙을 지원하는 WAS 사용을 결정했을 때 얘기이다).

tags : java jsp servlet 서블릿 spec 스펙 version 버전

grep 명령어 사용법

Linux 2007.01.26 18:01 Posted by 애플자라
1. 기능
파일 내에서 특정 패턴을 검색한다. 이름은 Global Regular Express Printer 의 머리글자이다.

2. 문법
# grep [ -vclhnief ] 표현 파일명(들)
# fgrep [ -vclhnief ] 문자열 파일명(들)

3. 옵션-type pattern 형식이 pattern인 것.
-V : 일치되는 내용이 없는 라인을 표시한다.
-C : 일치되는 내용이 있는 행의 개수를 센다.
-I : 일치되는 내용이 있는 파일의 이름만을 표시한다.
-h : 일치되는 내용을 찾은 파일의 이름을 표시하지 않는다.
-n : 일치 내용이 있는 행은 행 번호와 함께 표시된다.
-i : 대소문자 구분을 하지 않는다.
-e 표현 : 표현이 하이픈 문자로 시작될 때 사용한다.
-f 파일 : 찾으려는 문장이나 표현이 있는 파일을 지시한다.

4. 사용방법 및 정보
원하는 탐색 단어 혹은 문장을 검색한다. 표현은 일반 표현식을 사용한다. fgrep은 문자열을 검색할 때 빠르게 사용할 수 있다.

[root@sense ~]# ls | grep mail
mail.txt


- ls 결과 중 mail 이라는 구문이 들어 간 파일이 있는 지 검색한다.

grep "[Ss]ense" mail.txt


앞 글자가 대소문자인지 상관하지 않고 sense라는 단어를 찾는다. 이것은 다음의 fgrep 명령과 같은 동작을 한다.

# fgrep sense mail.txt

'Linux' 카테고리의 다른 글

리눅스의 디렉토리구조  (0) 2007.08.29
vi 초간단 매뉴얼  (0) 2007.08.29
zterm & ssh  (0) 2007.08.29
리눅스 기초 명령어  (0) 2007.08.28
Linux 설치 파일  (0) 2007.08.28
grep 명령어 사용법  (0) 2007.01.26
TAG grep