2009년 11월 24일 화요일

2009년 11월 5일 목요일

server update 건

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 kernel                  i686       2.6.9-89.0.11.EL  update             13 M
 kernel-devel            i686       2.6.9-89.0.11.EL  update            4.0 M
 kernel-smp              i686       2.6.9-89.0.11.EL  update             12 M
Updating:
 acl                     i386       2.2.23-5.4.el4   update             59 k
 acpid                   i386       1.0.3-2.el4_7.1  update             20 k
 at                      i386       3.1.8-82.el4     update             54 k
 audit                   i386       1.0.16-4.el4     update            202 k
 audit-libs              i386       1.0.16-4.el4     update             39 k
 authconfig              i386       4.6.10-7.el4     update            289 k
 autofs                  i386       1:4.1.3-238      update            296 k
 bash                    i386       3.0-21.el4       update            1.7 M
 bind                    i386       20:9.2.4-30.el4_8.4  update            583 k
 bind-libs               i386       20:9.2.4-30.el4_8.4  update            569 k
 bind-utils              i386       20:9.2.4-30.el4_8.4  update            142 k
 binutils                i386       2.15.92.0.2-25   update            2.9 M
 bzip2                   i386       1.0.2-14.el4_7   update             47 k
 bzip2-libs              i386       1.0.2-14.el4_7   update             34 k
 cpio                    i386       2.5-16.el4       update             47 k
 cpp                     i386       3.4.6-11         update            1.6 M
 crash                   i386       4.0-5.0.0.2      update            1.4 M
 cryptsetup              i386       0.1-6            update            441 k
 cups-libs               i386       1:1.1.22-0.rc1.9.32.el4.3  update            114 k
 cvs                     i386       1.11.17-11.el4   update            1.2 M
 device-mapper           i386       1.02.28-2.el4    update            577 k
 dhclient                i386       7:3.0.1-65.el4_8.1  update            227 k
 dhcp                    i386       7:3.0.1-65.el4_8.1  update            566 k
 dhcp-devel              i386       7:3.0.1-65.el4_8.1  update            109 k
 dhcpv6_client           i386       0.10-24_EL4      update             71 k
 diffutils               i386       2.8.1-12.1.el4   update            204 k
 diskdumputils           i386       1.4.1-7          update            111 k
 dmraid                  i386       1.0.0.rc14-9_RHEL4_U7.el4  update            692 k
 e2fsprogs               i386       1.35-12.24.el4   update            784 k
 e2fsprogs-devel         i386       1.35-12.24.el4   update            490 k
 file                    i386       4.10-8.el4       update            259 k
 freetype                i386       2.1.9-10.el4.7   update            765 k
 freetype-demos          i386       2.1.9-10.el4.7   update             96 k
 freetype-devel          i386       2.1.9-10.el4.7   update            534 k
 freetype-utils          i386       2.1.9-10.el4.7   update             27 k
 gcc                     i386       3.4.6-11         update            4.4 M
 gcc-c++                 i386       3.4.6-11         update            2.4 M
 gdb                     i386       6.3.0.0-1.162.el4  update            2.6 M
 glibc                   i686       2.3.4-2.43       update            6.0 M
 glibc-common            i386       2.3.4-2.43       update             16 M
 glibc-devel             i386       2.3.4-2.43       update            1.9 M
 glibc-headers           i386       2.3.4-2.43       update            589 k
 glibc-kernheaders       i386       2.4-9.1.103.EL   update            696 k
 grep                    i386       2.5.1-32.4.el4   update            170 k
 hal                     i386       0.4.2-8.EL4      update            153 k
 hotplug                 i386       3:2004_04_01-7.10  update             62 k
 hwdata                  noarch     0.146.33.EL-17   update            481 k
 iproute                 i386       2.6.9-4.el4      update            683 k
 ipsec-tools             i386       0.3.3-7.el4_7    update            221 k
 iptables                i386       1.2.11-3.2.RHEL4  update            171 k
 iputils                 i386       20020927-22.el4  update            106 k
 jwhois                  i386       3.2.2-15.el4     update             78 k
 kernel-smp-devel        i686       2.6.9-89.0.11.EL  update            4.0 M
 kernel-utils            i386       1:2.4-18.el4     update            1.1 M
 krb5-devel              i386       1.3.4-62.el4     update            826 k
 krb5-libs               i386       1.3.4-62.el4     update            486 k
 krb5-workstation        i386       1.3.4-62.el4     update            827 k
 kudzu                   i386       1.1.95.26-1      update            333 k
 kudzu-devel             i386       1.1.95.26-1      update            144 k
 lftp                    i386       3.0.6-8.el4      update            706 k
 libacl                  i386       2.2.23-5.4.el4   update             16 k
 libgcc                  i386       3.4.6-11         update             64 k
 libpng                  i386       2:1.2.7-3.el4_7.2  update            155 k
 libpng-devel            i386       2:1.2.7-3.el4_7.2  update            169 k
 libstdc++               i386       3.4.6-11         update            283 k
 libstdc++-devel         i386       3.4.6-11         update            1.6 M
 libtiff                 i386       3.6.1-12.el4_8.4  update            255 k
 libuser                 i386       0.52.5-1.el4.3   update            326 k
 libxml2                 i386       2.6.16-12.7      update            622 k
 libxml2-devel           i386       2.6.16-12.7      update            1.8 M
 libxml2-python          i386       2.6.16-12.7      update            441 k
 libxslt                 i386       1.1.11-1.el4_7.2  update            436 k
 logrotate               i386       3.7.1-10.RHEL4   update             35 k
 logwatch                noarch     5.2.2-4.el4      update            133 k
 lvm2                    i386       2.02.42-5.el4_8.2  update            2.2 M
 make                    i386       1:3.80-7.EL4     update            336 k
 man-pages               noarch     1.67-17.el4      update            3.9 M
 mgetty                  i386       1.1.31-14.el4    update            428 k
 mkinitrd                i386       4.2.1.13-4       update             96 k
 module-init-tools       i386       3.1-0.pre5.3.11  update            357 k
 net-snmp-libs           i386       5.1.2-18.el4     update            1.8 M
 net-tools               i386       1.60-39.el4      update            341 k
 netconfig               i386       0.8.21-1.2       update             68 k
 netdump                 i386       0.7.16-15        update             16 k
 newt                    i386       0.51.6-10.el4_8.1  update             82 k
 nfs-utils               i386       1.0.6-93.EL4     update            194 k
 nfs-utils-lib           i386       1.0.6-10.el4     update             49 k
 nscd                    i386       2.3.4-2.43       update            140 k
 nss_ldap                i386       253-7.el4        update            1.1 M
 ntp                     i386       4.2.0.a.20040617-8.el4_8.2  update            1.2 M
 openldap                i386       2.2.13-12.el4_8.2  update            238 k
 openssh                 i386       3.9p1-11.el4_7   update            326 k
 openssh-clients         i386       3.9p1-11.el4_7   update            349 k
 openssh-server          i386       3.9p1-11.el4_7   update            212 k
 pam                     i386       0.77-66.26       update            1.9 M
 pam-devel               i386       0.77-66.26       update             86 k
 pam_krb5                i386       2.1.17-8.el4     update             97 k
 parted                  i386       1.6.19-23.EL     update            490 k
 perl                    i386       3:5.8.5-49.el4   update             12 M
 perl-HTML-Parser        i386       3.55-1.el4       update             91 k
 popt                    i386       1.9.1-32_nonptl  update             61 k
 prelink                 i386       0.3.3-1.EL4      update            945 k
 procps                  i386       3.2.3-8.17       update            190 k
 python                  i386       2.3.4-14.7.el4_8.2  update            4.9 M
 quota                   i386       1:3.12-7.el4     update            304 k
 rhnlib                  noarch     2.1.4-7.el4      update             61 k
 rpm                     i386       4.3.3-32_nonptl  update            652 k
 rpm-build               i386       4.3.3-32_nonptl  update            461 k
 rpm-libs                i386       4.3.3-32_nonptl  update            784 k
 rpm-python              i386       4.3.3-32_nonptl  update             82 k
 samba                   i386       3.0.33-0.17.el4  update             16 M
 samba-client            i386       3.0.33-0.17.el4  update            4.5 M
 samba-common            i386       3.0.33-0.17.el4  update            7.6 M
 samba-swat              i386       3.0.33-0.17.el4  update            8.1 M
 sed                     i386       4.1.2-7.el4      update            167 k
 selinux-policy-targeted  noarch     1.17.30-2.152.el4  update            126 k
 sendmail                i386       8.13.1-3.3.el4   update            577 k
 sendmail-cf             i386       8.13.1-3.3.el4   update            302 k
 setup                   noarch     2.5.37-3.el4     update             32 k
 shadow-utils            i386       2:4.0.3-66.RHEL4  update            594 k
 shared-mime-info        i386       0.15-10.2.el4    update             68 k
 sos                     noarch     1.7-6.6.el4      update            102 k
 spamassassin            i386       3.2.4-1.el4.1    update            1.0 M
 specspo                 noarch     9.0.92-3         update            4.3 M
 squid                   i386       7:2.5.STABLE14-4.el4  update            1.1 M
 strace                  i386       4.5.16-1.el4_8.2  update            156 k
 sudo                    i386       1.6.7p5-30.1.5   update            162 k
 sysklogd                i386       1.4.1-28.el4     update             68 k
 sysstat                 i386       5.0.5-25.el4     update            117 k
 system-config-network-tui  noarch     1.3.22.0.EL.4.6-1.el4  update            1.4 M
 tcl                     i386       8.4.7-4.el4      update            898 k
 tcp_wrappers            i386       7.6-37.9.el4     update             98 k
 tcsh                    i386       6.13-10.el4      update            586 k
 tmpwatch                i386       2.9.1-1.el4.1    update             15 k
 traceroute              i386       1.4a12-27.EL4.1  update             25 k
 tzdata                  noarch     2009m-1.el4      update            457 k
 udev                    i386       039-10.29.el4    update            854 k
 unzip                   i386       5.51-10.el4      update            142 k
 usermode                i386       1.74-2.el4.1     update            138 k
 util-linux              i386       2.12a-24.el4     update            1.5 M
 vim-common              i386       1:6.3.046-2.el4.1  update            3.4 M
 vim-enhanced            i386       1:6.3.046-2.el4.1  update            958 k
 vim-minimal             i386       1:6.3.046-2.el4.1  update            252 k
 vixie-cron              i386       4:4.1-57.el4     update             85 k
 vsftpd                  i386       2.0.1-8.el4      update            123 k
 xinetd                  i386       2:2.3.13-4.5.el4  update            128 k
 xmlsec1                 i386       1.2.6-3.1        update            147 k
 xmlsec1-openssl         i386       1.2.6-3.1        update             58 k
 xorg-x11-Mesa-libGL     i386       6.8.2-1.EL.63    update            389 k
 xorg-x11-libs           i386       6.8.2-1.EL.63    update            2.7 M
 ypserv                  i386       2.13-19          update            130 k
 zip                     i386       2.3-29.EL4       update            114 k
Installing for dependencies:
 perl-Archive-Tar        noarch     1.30-1.el4       update             47 k
 perl-Compress-Zlib      i386       1.42-1.el4       update             54 k
 perl-IO-Zlib            noarch     1.04-4.2.el4     update             16 k

Transaction Summary
=============================================================================
Install      6 Package(s)         
Update     152 Package(s)         
Remove       0 Package(s)         
Total download size: 192 M

2009년 10월 31일 토요일

디아블로2 룬조합법

리눅스: 실시간프로세스확인

리눅스에서 실시간으로 프로세스를 확인하려면 아래의 명령을 이용하자

watch --interval=0.000000001 mysqladmin  -utaegwan processlist


이런 것두 있다.. ㅡㅠㅡ;


watch -d -n 1 ftpwho
watch -d -n 1 w
watch -d -n 1 cat /proc/meminfo

꼽사리...load 수치 그래픽화
tload -d 1

[출처]. 고독을 즐기는 진정한 아웃사이더

EditPlus 단축키 모음

  새 보통 문서          Ctrl+N                보통 텍스트 문서를 새로 작성합니다

  새 HTML 페이지        Ctrl+Shift+N          HTML 페이지를 새로 작성합니다
  열기                  Ctrl+O                기존 문서를 엽니다
  인쇄                  Ctrl+P                현재 열린 문서를 인쇄합니다
  저장                  Ctrl+S                현재 열린 문서를 저장합니다
  FTP 업로드            Ctrl+Shift+S          파일을 FTP 서버로 업로드합니다

  날짜                  Ctrl+D                현재 날짜를 삽입합니다
  날짜 길게             Ctrl+Shift+D          현재 날짜를 긴 형식으로 삽입합니다
  들여쓰기 줄임         Ctrl+Shift+I          현재 줄이나 선택 부분의 들여쓰기를 줄입니다
  줄 끝까지 지우기      Ctrl+Shift+Delete     현재 줄의 끝까지 지웁니다
  단어 끝까지 지우기    Ctrl+Delete           현재 단어의 끝까지 지웁니다
  줄 지우기             Alt+Shift+Delete      현재 줄을 지웁니다
  단어 지우기           Alt+Delete            현재 단어를 지웁니다
  글자 복제             Ctrl+-                이전 줄에서 글자를 복제합니다
  줄 복제               Ctrl+J                현재 줄을 복제합니다
  클립텍스트 찾기       F2                    현재 단어를 대응하는 클립텍스트 항목으로 바꿉니다
  들여쓰기 늘임         Ctrl+I                현재 줄이나 선택 부분의 들여쓰기를 늘입니다
  삽입 모드             Insert                삽입 모드와 겹쳐쓰기 모드를 전환합니다
  대소문자 뒤바꿈       Ctrl+K                선택한 텍스트에서 대소문자를 뒤바꿉니다
  줄 합치기             Ctrl+Shift+J          선택한 줄들을 하나로 합칩니다
  붙여넣기              Ctrl+V                클립보드의 내용을 붙여 넣습니다
  다시 실행             Ctrl+Y                이전에 취소한 동작을 다시 수행합니다
  모양 재구성           Ctrl+Shift+R          모양 기준 칸에 맞추어 단락의 모양을 다시 구성합니다
  문서에서 찾기         Shift+F2              현재 단어를 현재 문서에서 찾은 확장된 단어로 바꿉니다
  열려진 모든파일 찾기  Ctrl+F2               현재 단어를 열려진 모든 파일에서 찾은 확장된 단어로 바꿉니다
  선택 시작/종료        Alt+Shift+B           선택영역 지정을 시작하거나 종료합니다
  전체 선택             Ctrl+A                문서 전체를 선택합니다
  칸 단위 선택 시작/종료Alt+Shift+E           칸 단위 선택영역 지정을 시작하거나 종료합니다
  줄 선택               Ctrl+R                현재 줄을 선택합니다
  소문자로              Ctrl+L                선택한 텍스트를 소문자로 변환합니다
  대문자로              Ctrl+U                선택한 텍스트를 대문자로 변환합니다
  실행 취소             Ctrl+Z                마지막으로 한 동작을 취소합니다

  브라우저로 보기       Ctrl+B                현재 열린 문서를 웹 브라우저에 읽어 들입니다
  모두 숨김             Ctrl+Alt+Num -        들여쓰기된 텍스트를 모두 숨깁니다
  표시                  Ctrl+Num +            현재 줄에 생략된 코드를 표시합니다
  모두 표시             Ctrl+Alt+Num +        생략된 텍스트를 모두 표시합니다
  한 단계 표시          Ctrl+Shift+Num +      전체 코드를 한 단계 표시합니다
  클립텍스트/디렉토리로 가기F5                    포커스를 클립텍스트/디렉토리와 문서 사이에서 전환합니다
  코드 생략 사용        Ctrl+Shift+F          코드 생략 기능을 켜거나 끕니다
  전체화면 모드         Alt+Shift+0           전체화면 모드를 켜거나 끕니다
  커서 위치 표시        Alt+Shift+C           커서 위치 표시를 보이거나 숨깁니다
  탭과 공백 기호        Alt+Shift+I           탭과 공백 기호를 보이거나 숨깁니다
  줄 번호               Ctrl+Shift+L          현재 열린 문서에서 줄 번호를 보이거나 숨깁니다
  URL 강조              Alt+Shift+U           URL과 전자 메일 주소를 강조합니다

  찾기                  Alt+F3                지정한 문자열을 찾습니다
  다음 찾기             F3                    다음 일치하는 말을 찾습니다
  이전 찾기             Shift+F3              이전에 일치하는 말을 찾습니다
  바꾸기                Ctrl+H                지정한 문자열을 다른 문자열로 바꿉니다
  괄호 찾기             Ctrl+]                짝을 이루는 괄호를 검색합니다
  다음 단어 찾기        Ctrl+F3               현재 단어나 선택한 텍스트와 다음에 일치하는 말을 찾습니다
  이전 단어 찾기        Ctrl+Shift+F3         현재 단어나 선택한 텍스트와 이전에 일치하는 말을 찾습니다
  URL로 가기            F8                    강조된 URL로 찾아갑니다
  자동 줄 바꿈          Ctrl+Shift+W          현재 열린 문서에서 자동 줄 바꿈 기능을 켜거나 끕니다
  최근 작업 창          F12                   바로 전에 작업한 문서 창으로 이동합니다
  창 목록               F11                   모든 문서 창들의 목록을 보여줍니다
  다음 창               Ctrl+Tab              다음 문서 창으로 이동합니다
  이전 창               Ctrl+Shift+Tab        이전 문서 창으로 이동합니다


[출처]. jinclown님의 노트 , "Programmer"님의 'Editplus에서 자주 쓰는 기능 정리'도 볼만함

2009년 10월 22일 목요일

디아블로2 퀘스트

▒   ACT I : 보이지 않는 눈 (THE SIGHTLESS EYE)   ▒

Den of Evil 퀘스트 1 : 덴 오브 이블 Den of Evil

카샤의 로그 정찰병에 의해 알려진 바로는 마을근처에 있는 동굴(Den of Evil)은 수많은 몬스터들로 채워져 있다한다.
퀘스트의 목적은 이 동굴에 있는 모든 몬스터를 죽여 동굴을 정화 하는것이다.
상당수의 몬스터중에는 유니크 몬스터도 있으므로 주의해야하고 마지막 다섯마리가 남으면 다시 퀘스트로그창이 뜬다.
모든 몬스터가 죽으면 동굴에 빛이 스며들어 정화되었음을 알수 있다.

Tip : 퀘스트는 아카라와의 대화에서 퀘스트를 받을 수있으며, 해결후에도 아카라에게 보상(스킬포인트 1)을 받을 수 있다.
Blood Moor 에서 Den of Evil을 찾으면 된다.

Sister's Burial Grounds 퀘스트 2 : 베리얼 그라운드 Sisters' Burial Grounds

카샤의 로그정찰병에 의해 발견되어진 수도원 묘지안에 있는 한 몬스터를 죽여야 한다.
블러드 래이븐 이라는 이 몬스터는 원래 디아블로에 대항해 싸웠던 로그의 지도자 였지만
안다리엘에 의해 타락했다. 블러드 래이븐은 로그정찰대들의 시체를 좀비로 만들어 지속적인 공격을 해온다.
또한 장거리에서 활공격을 하며 도망다니므로 조심해야한다.

Tip : 퀘스트를 해결하면 카샤가 보상으로 한명의 로그용병을 공짜로 붙여준다.
Cold Plains 안에 있는 묘지를 찾아야 한다.

Cairn Stones 퀘스트 3 : 케인을 찾아서 The Search for Cain

트리스트럼(Tristram)에 갇혀있는 케인(Deckard Cain)을 구출하는 것이 퀘스트의 목표이다.
Cold Plains을 지나 Stony Field 에서 다시 Underground Passage라는 지하통로를 따라가면 Dark Wood 가 나온다.
이곳에서 이니프스의 나무를 찾아야 한다. 나무주변에는 강력한 몬스터가 지키고 있다.
나무를 클릭하면 한개의 스크롤이 떨어지는데 이것을 아카라에게 들고가 보여주면 해석해 준다.
다시 스토니필드로가서 Cairn Stones이라는 보기좋게 배열된 돌기둥을 찾아서 스크롤에 해석된 대로
기둥을 차례로 클릭하면 크리스트람으로 가는 빨간색 포털이 열린다.
포탈을 통과해 들어가면 갖혀있는 케인이 있다. 그를 클릭하면 된다.
또한 이곳에서는 디아블로1에서 사기꾼으로 나왔던 위트가 시체로 누워있는데
위트의 시체를 클릭하면 자신의 의족과 그동안 사기로 벌어들였던 많은 돈이 바닥에 떨어진다.
이 '위트의 의족'을 잘 보관 해두자. 힘이 남아돈다면 그리스월드라는 몬스터를 물리친후 마을로 돌아가면 된다.

로그캠프에 와있던 데커드케인이 감사와 함께 앞으로 모든 아이템의 감정을 공짜로 해주겠다고 한다.

The Forgotten Tower 퀘스트 4 : 포가튼 타워 The Forgotten Tower

잊혀진 탑에 살며 처녀의 피로 목욕해 젊음을 유지한다는 카운테스(Countess)를 죽여야 한다.
다크우드에서 더 나아가면 블랙마쉬 라는 곳이있다. 이곳을 잘 둘러보면 지하 던젼으로 이어진 탑 입구가 있다.
지하 5층까지 가면 많은 부하를 데리고 불공격을 해대는 카운테스를 만날수 있다.

카운테스는 탑 곳곳에 많은 양의 골드를 숨겨놓고 있는데 퀘스트 해결에 대한 보상으로 가지면 된다.

Tools of the Trade 퀘스트 5 : 거래의 도구 Tools of the Trade

엑트1의 대장장이인 찰시가 주는 퀘스트이다.
찰시가 수도원을 떠나올때 두고온 호라드릭 마루스라는 마법해머를 찾아다 주면 된다.
블랙마쉬지역을 지나 타모하이랜드로 들어가 클로이스터 외곽으로 가면된다.
이곳에는 많은 몬스터들이 있는데 이들을 물리치고 여러개의 입구중 병영(Barrack)로 가는 길을 찾아 들어가면
매우 복잡한 복도와 방들이 어어져 있다. 이곳을 돌아다니다 보면 오토맵상에 망치처럼 보이는 이미지가 나타난다.
이곳이 호라드릭 마루스가 있는 곳이다. 마루스 주변에는 스미스라는 어마어마하게 강한 유니크 몬스터가 지키고 있다.
스미스는 죽이지 않아도 된다. 마루스만 찾아서 찰시에게 주면 퀘스트는 끝이난다.

퀘스트 해결에 대한 보답으로 찰시는 어떤 아이템이든 한개의 아이템에 대해 마법을 부여해 준다.
퀘스트 해결후 찰시와의 대화상자에는 임뷰라는 메뉴가 보이게 되는데 사용하지 않아도 된다.
나중에 기본 속성이 좋은 아이템을 얻게되면 이때 임뷰하면 된다.

Sisters to the Slaughter 퀘스트 6 : 자매교의 학살자 Sisters to the Slaughter

데커드 케인으로 부터 주어지는 퀘스트 이다.
병영에서 조금더 지나 자일(Jail)이라는 지하통로를 따라가면 다시 땅위로 연결된 계단을 통해 클로이스터 내곽으로 갈 수있다.
계속 진행하면 카타콤으로 향하게 된다. 카타콤은 여러개의 층으로 이어져 있으며 복잡한 방과 함정들이 존재한다.
마직막의 카타콤 4층에서 입구의 몬스터들을 제거하고 안으로 가면 엑트1의 보스인 안다리엘을 만나게 된다.
강한 독공격을 주무기로 하므로 해독제를 준비하는것이 좋다. 안다리엘을 죽이면 마을로 가는 포털이 열린다.

마을에 돌아온후 케인과 대화하고 케인옆에 있는 워리브를 만나면 엑트 2로 데려다 준다.

 
 
 
 

▒   ACT II : 비저레이의 비밀(THE SECRET OF THE VIZJEREI)   ▒

Radament's Lair 퀘스트 1 : 라다먼트의 은신처 Radament's Lair

술집 앞에 가보면 울고 있는 아트마를 발견할 수 있는데 첫번째 퀘스트는 아트마의 부탁대로 그녀의 남편과 아들의 복수를 해주는 것이다.
마을 내에는 지하로 들어가는 두곳의 입구가 있다. 어느 곳으로 가든 상관 없으며 지하 하수도는 세개층으로 이뤄져 있다.
좀비계열의 드라이드 콥스와 버닝데드 아쳐 계열의 몬스터가 많으므로 장거리 공격에 대비해야 한다.
마지막 층에 있는 라다먼트를 죽이면 스킬북이 떨어지고 아트마와 대화를 하면 퀘스트가 종료된다.

이 퀘스트의 보상은 스킬포인트 1점이다. 또 라다먼트의 보물상자안에 있는 호라드릭 스크롤은 다른 퀘스트와도 연결된다.

The Horadric Staff 퀘스트 2 : 호라드릭 스태프 The Horadric Staff

퀘스트1의 호라드릭 스크롤을 데커드 케인에게 줌으로써 시작된다.
케인은 호라드림의 마지막 생존자로 호라드릭 스크롤의 내용을 해석해준다.
호라드릭 스태프를 만들기위해 필요한 세가지 물건을 찾아야 한다.

드라이 힐 아래에 있는 죽은자의 방(Halls of the Dead)에서 호라드릭 큐브를 찾은 후,
다시 파 오아시그 지역 아래의 마곳 레이어(Maggot Lair)에서 지팡이의 몸체를 찾고,
마지막으로 로스트시티를 지나 크로 바이퍼 템플(Claw Viper Temple)에서 지팡이의 머리 부분을 찾아서,
호라드릭 큐브에 넣어 두가지를 합성해 한개의 지팡이(호라드릭 스태프)를 만들어야 한다.

매우 길고도 지루한 퀘스트 이지만 이번 퀘스트를 넘기지 않고는 마지막 퀘스트를 수행할 수 없게 연결 되어있으므로
반드시 3가지의 아이템을 모아야 한다.

The Tainted Sun 퀘스트 3 : 더럽혀진 태양 The Tainted Sun

두번째 퀘스트를 수행중 갑자기 하늘이 어두워진 적이 있을 것이다.
이때에 퀘스트 로그 화면에 드로그난을 찾아가 이 현상에 대해 물어보라고 한다.
태양이 사라진 다음 태양빛을 없앤 악마를 없앤다면 이 퀘스트는 끝이난다.
그러나 이 퀘스트는 퀘스트2의 마지막 물건인 호라드릭 스태프의 머리를 찾는 퀘스트와 중복되어있다.
크로 바이퍼 템플을 클리어 했다면 이 퀘스트도 자동으로 끝이 난다.

크로 바이퍼 템플 2층의 제단을 클릭하면 일식이 사라진다.

The Arcane Sanctuary 퀘스트 4 : 비밀의 성역 The Arcane Sanctuary

드로그난(Drognan)과의 대화를 통해 시작 되는 퀘스트이다.
제라인을 통해 지하 궁전으로 들어가 여러 층을 거친후 비밀의 성역으로 들어가야 한다.
퀘스트 4의 목적은 결국 숨겨진 탈라샤 무덤에 대한 단서를 찾기 위한 것이다.
자하궁전의 마지막에 만나는 유니크 몬스터를 물리치고 근처에 보면 특이하게 생긴 출구가 있다.
출구의 새로운 포털을 통해 비밀의 성역( Arcane Sanctuary)에 들어가면 네방향으로 난 길이 있다.
이중 한곳의 끝에보면 서모너(Summoner)을 만나게 되는 서모너 옆에 있는 포라즌 저널이라는 책이있다.

이번 퀘스트 역시 퀘스트5 와 중복되어 있는데 무덤의 단서를 찾아야 한다.

The Summoner 퀘스트 5 : 서모너 The Summoner

Arcane Sanctuary의 한 곳에서 서모너를 만났다면 그를 죽이면 된다.
그를 죽이고 나서 호라즌 저널이라는 책을 클릭하면 숨겨진 무덤으로 갈 수 있는 새로운 포털이 열린다.
반드시 마을로 돌아가 새로운 정보를 얻어야 한다
.

The Seven Tombs 퀘스트 6 : 일곱개의 무덤 The Seven Tombs

퀘스트 5의 마지막에 열린 빨간색 포털을 통해 마기의 계곡으로 이동하면 황량한 사막과 만나게 된다. 사막은 절벽에 둘러쌓여 있는데 절벽을 따라가보면 지하 무덤으로 들어가는 여러개의 입구를 만날 수 있다. 모든 무덤의 입구에는 각기 다른 심벌이 세겨져 있는데 퀘스트5를 마치고 마을로 갔을때 얻은 정보가 퀘스트 로그 화면에 나타난다. 퀘스트로그 화면에 나타난 심벌과 같은 심벌이 세겨진 무덤으로 들어가면 된다. 진짜 무덤의 끝에는 호라드릭 오리피스가 나타난다. 이곳에 호라드릭스태프를 놓으면 감춰진 벽이 뚫리며 엑트2의 보스인 듀리엘과 만날 수 있다. 듀리엘을 죽이고 옆방으로 이동하면 대천사 티라엘이 묶여있는데 그를 풀어주고 마을로 돌아 가면 된다.

마을에서 순서대로 NPC를 만나야만 다음 엑트로 이동 할 수 있다.

 
 
 
▒   ACT III : 영원의 문(THE INFERNAL GATE)   ▒

The Golden Bird 퀘스트 1 : 황금 조각 새 The Golden Bird

이 퀘스트는 엑트3의 전투를 통해 제이드 인형(Jade Figurine)을 얻고나서 열리게 된다.
제이드의 인형을 매쉬프에게 보여주면 퀘스트의 힌트를 얻을 수 있다.
제이드 인형은 엑트3에서 처음 만나는 유니크 몬스터를 죽이면 얻을 수 있다.

퀘스트의 보상으로 포션 오브 라이프 를 알코에게서 얻을 수 있다.
영구히 자신의 라이프를 +20 해주므로 반드시 넘겨야 하는 퀘스트 이다.

Blade of the Old Religion 퀘스트 2 : 고대 종교의 검  Blade of the Old Religion

Hratli와 대화를 통해 시작 되는 퀘스트이다.
흐라들리가 부탁하는 스캇시미 블레이드 즉 기드빈(Gidbinn)을 찾아 내야 한다.

스파이더 포리스트와 연결된 프레이어 정글(Flayer Jungle)을 헤매다니다 보면 향로처럼 생긴 기드빈을 보게된다. 기드빈을 클릭하면 유니크 몬스터가 나오며 이 몬스터를 처치하면 화살촉처럼 생긴 작은 검을 얻을 수 있다.

오무스를 거쳐 아샤라에게 가면 한명의 용병을 공짜로 고용시켜 준다.
다시 오무스에게 가면 여러 마법이 담긴 반지 하나를 주며 자랑스럽게 끼고 다니라고 한다.

Khalim's Will 퀘스트 3 : 카림의 의지  Khalim's Will

케인에게서 주어지는 이번 퀘스트는 엑트3의 목적인 메피스토와 연결 된다.
메피스토의 감옥으로 가는 컴펠링 오브를 파괴 할 수 있는 무기를 구해야 한다.
카림의 프레일과 여러 아이템을 호라드릭 큐브에 넣어 새로운 아이템으로 만들어야 하는데,
여기저기 흩어져 있는 아이템을 모으려면 많은 모험과 난관을 거쳐야 한다.

스파이더 포리스트에 있는 스파이더 캐빈에서 '카림의 눈'(Khalim's Eye)을 찾을 수 있다.
'카림의 뇌'는 프레이어 던젼의 지하 3층에 있다.
'카림의 심장'을 얻기 위해서는 쿠라스트 바자에 있는 하수구(Sewer)로 들어가야 한다.
마지막 카림의 프레일(Flail)은 트리빈컬의 위쪽에 있는최고 평의회 몬스터들을 죽임으로 얻을 수 있다.

모두 찾았다면 네개의 아이템을 큐브에 넣고 합성하면 하나의 새로운 아이템인 카림의 의지가 만들어 진다.

Lam Esen's Tome 퀘스트 4 : 람 에센의 무덤 Lam Esen's Tome

알코가 주는 이 퀘스트는 메피스토와는 아무런 상관이 없는 퀘스트이다.
넓은 쿠라스트 지역에 분포해있는 여러개의 지하 사원, 신전, 보관소등을 뒤져야하는데
이중 한 곳에서 알코가 부탁한 '잃어버린 람에센이 기록한 책'을 얻을 수 있다.

책을 찾아준 대가로 알코로 부터 5점의 스테이트 포인트를 받는다.

The Blackened Temple 퀘스트 5 : 어둠의 사원  The Blackened Temple

오무스(Ormus)에게서 주어지는 이 퀘스트는 퀘스트 3을 완수 하기위해 넘겨야 한다.
트라빈컬(Travincal)의 최고평의회 를 죽이면 이 퀘스트는 마무리 된다.

퀘스트의 목적이 불분명하다. 이미 말했듯 3번째 퀘스트와 중복된다.
'카림의 의지'로 오브를 부수고 듀렌스 오브 헤이트로 들어가면 된다.

The Guardian 퀘스트 6 : 가디언 The Guardian

오무스가 비관적인 상황을 설명하면서 시작된다.
오무스는 디아블로와 바알이 메피스토를 구출하기전에 메피스토를 처치하라고 플레이어를 종용한다.
증오의 감옥(Durance of Hate)으로 가서 메피스토를 찾아 처치해야 하는데,
주변에 상당히 강한 몬스터들이 몰려있으므로 포털을 미리 열어 두는 것이 좋다.

메피스토를 죽이면 소울스톤을 떨어뜨리는데 엑트4의 퀘스트 2와 연관 있으므로 챙겨두자.
방 가운데 있는 작음 섬을 클릭하면 엑트4로 이어진 빨간 포털이 열리게 된다.

 
 
 
▒   ACT IV : 정복(THE HARROWING)   ▒

The Fallen Angel 퀘스트 : 타락한 천사 The Fallen Angel

엑트2에서 풀어주었던 대천사 티라엘에 의해 주어진다.
절망의 평원(Plains of Despair)에 있는 이주얼을 찾아서 처치하면 되는데 ,엑트4부터는 몬스터들이 비약적으로 강해지므로 조심해야 한다.
한때 티라엘의 부관이었던 이주얼이 악마에게 잡혀 변질되어 강력한 적이 되어있는데, 보기드물게 강한 체력과 다양한 속성공격을 해댄다.
마침내 그를 죽이게 되면 이주얼의 영혼이 나타나는데 그 영혼과 대화한후 티라엘에게 돌아가자.

힘든 만큼 보상도 크다. 티라엘은 감사의 표시로 2개의 스킬포인트를 준다.

The Hellforge 퀘스트 : 헬포지  The Hellforge

메피스토가 죽으며 떨어뜨린 소울스톤을 파괴하는것이 이번 퀘스트의 목적이다.
소울스톤을 부숴야만 메피스토의 부활이 불가능해지기 때문인데 이 소울스톤은 특별한 장소에서만 파괴가 가능하다.
절망의 평원을 지나 City Of Damned로 가면 다시 불의 강(River of The Flame)이라는 지하로 들어가는 입구가 나온다.
불의 강을 누비며 헬포지를 찾아 그곳을 지키는 스미스의 형제인 헤파스토를 죽이면 커다란 해머를 떨어뜨린다.
이 해머가 소울 스톤을 부수는 유일한 도구이다. 이 헬포지 해머를 들고 헬포지 위를 클릭하면 어느새 소울 스톤이 헬포지 위에 올려져 있다.

소울 스톤이 파괴되면 많은 양의 퍼펙트 보석과 룬이 떨어진다.

Terror's End 퀘스트 : 공포의 끝 Terror's End

티라엘이 이번 퀘스트를 주는데 혼돈의 신전(Chaos Sanctuary)에 있는 디아블로를 죽여야 한다.
불의 강을 지나가다 보면 하드리엘(Hadriel)이 지키는 곳이 나온다.
이곳을 지나 더 나아가면 Chaos Sanctuary로 들어 갈 수 있다.
혼돈의 신전에 있는 다섯개의 봉인을 모두 열면 디아블로가 등장한다.

오리지널 디아블로2때 디아블로를 죽이면 그 게임은 카운트 다운이 시작되며 몇초후 게임이 종료되었다.
디아블로는 강한 체력을 바탕으로 여러방법으로 공격해온다.
프레임 서클, 본 케이지, 파이어 서펀트, 라이팅 인페르노등 하나하나가 모두 위력적이다.

 
 
 
 

▒   ACT V : 파괴의 군주(LORD OF DESTRUCTION)   ▒

Siege On Harrogath 퀘스트 1 : 해로개쓰의 위기 Siege On Harrogath

첫번째 퀘스트는 대장장이인 라주크(Larzuk)가 준다.
Baal과 싸우울 수 있는 전사임을 증명하라면서 그의 부하 중 하나인 'Shenk the Overseer'를 찾아서 없애라고 한다.
마을 끝에 있는 게이트를 통해 나가면 'BLOODY FOOTHILLS' 이라는 지역이 펼쳐져 있다.
엑트 4에서와는 다른 새로운 종류의 몬스터들과 싸우며 긴 계단앞에 이르면 'Shenk the Overseer'를 만날 수 있다.

라주크를 만나면 플레이어가 가지고 있는 아이템 중 하나에 소켓을 추가해주며, Larzuk의 대장간을 보다 적은 돈으로 사용할 수 있게 해준다.
이미 소켓이 있는 아이템이나 Rune Word 아이템, 소켓을 지원하지 않는 아이템(장갑류, 벨트류, 링 등)은 소켓이 추가되지 않는다.
.'Larzuk'의 'ADD SOCKETS(소켓 추가)' 보답은 액트1의 임뷰(Imbue)처럼 나중에 하여도 된다.

Rescue on Mount Arreat 퀘스트 2 : 아리앗 산의 구출 Rescue on Mount Arreat

마을의 중앙에 있는 Qual-Kehk에게서 받게되는 퀘스트이다.
'BLOODY FOOTHILLS'를 지나면 'The Frigid Highlands'란 지역이 나온다.
이 Frigid Highland에 포로로 잡혀있는 15명의 바바리안 병사들을 구출해 주면 임무가 완성된다.
모두 세곳에 5명씩의 바바리안들이 갖혀있는데 그들이 갖힌 감옥의 입구를 파괴하면 바바리안들이 포털을 열고 사라진다.

마을로 돌아가면 'Qual-Kehk'은 이번 퀘스트의 보답이라고 하면서 자신이 보관하고 있던 3개의 룬(Rune)인 Tal Rune, Ral Rune, Ort Rune을 준다.
또 이때부터 'Qual-Kehk'에게서 바바리안 용병을 고용할 수 있게된다.

Prison of Ice 퀘스트 3 : 얼음 감옥  Prison of Ice

Malah에 의해 시작되는 이번 퀘스트의 목적은 프로즌 리버(Frozen River)에 갇혀있는 실종된 연금술사 앤야(Anya)를 찾아 마을로 데려오는 것이다.
퀘스트2를 수행하였던 지역인 'The Frigid Highlands'를 지나가면 'The Arreat Plateau'가 나오고 그곳에서 다시
'Crystalline Passage'로 통하는 입구를 찾아 그 속으로 들어 가야한다. 그 안은 얼음 동굴처럼 구성되어있는데 다양한 몬스터가 진을 치고있다.
다시 프로즌 리버(Frozen River)로 내려갈 수 있는 입구를 찾을 수 있고 그 끝에는 앤야가 있다.
주변의 몬스터를 모드 처치하고 앤야를 클릭하면 앤야가 마라에게서 자신의 몸을 녹일 포션을 받아 주길 바란다는 부탁을 한다.
마라에게서 받은 포션을 앤야에게 주면 퀘스트는 마무리 된다.

마라에게로 가면 마라는 'Scroll of Resistance'라는 스크롤을 주는데 이것을 오른쪽으로 클릭하면 모든 저항력을 +10 올려준다.
다시 마을 가운데로 와있는 앤야에게 가면 감사의 보답으로 랜덤하게 한개의 아이템을 준다.

Betrayal of Harrogath 퀘스트 4 : 배신의 장소 해로개쓰  Betrayal of Harrogath

앤야는 Baal에 의해 조종되는 'Nihlathak'을 막아보려고 했지만 오히려 그에게 당해 얼음 동굴 안에 갖혔다며
그가 은신하고 있는 Nihlathak's Temple에서 그를 찾아 제거해 달라고 하며 자신의 옆에 Nihlathak's Temple로 통하는 빨간 포털을 열어준다.
니라타의 템플에는 죽음 시체들이 널려있지만 곧 살아나 플레이어를 공격해온다.
이들은 'Halls of Anguish'로 들어가는 입구를 지키는데 이 좀비들의 대장이 바로 핀들스킨이다.
Halls of Anguish로 들어가서 다시 Halls of Pain 을 거쳐야만 니라타가 숨어있는 'Halls of Vaught'로 갈 수 있다.

니라타를 죽인후 앤야를 만나면 플레이어에게 감사하 는 표시로 플레이어가 소유하고 있는 아이템중 하나에 플레이어의 이름을 새겨넣어 준다.

Rite of Passage 퀘스트 5 : 고대인의 통과의례  Rite of Passage

Qual-Kehk에 의해 시작되는 이 퀘스트는 다른 퀘스트들과는 달리 레벨 제한이 있다.
자격없는 자들은 접근할수 없도록, 고대인들에 의해 보호받고 있는 곳이라는 아리앗 정상에 가서 고대인3명을 죽여야만 한다.
크리스탈라인을 지나 그래이셜 트레일에서 프로즌 툰드라를 지나 고대인의 길을 걷다보면 Arreat Summit의 입구에 이르게된다.
이 입구로 들어가면 입구가 닫히며 Baal에게 갈 수 있는 유일한 길목을 지키고 있는 동상처럼 서있는 세명의 고대인을 보게된다.
립어택, 워크라이, 훨윈드등 바바리안의 기술을 사용하며 공격해오는 이들을 한번의 포털도 열지않고 무찔러야만 한다.

이들을 모두 죽이면 한꺼번에 많은 양의 경험치를 얻을 수 있으며 앞에서 밝힌 바와 같이 레벨의 제한이 있다.
또한 얻게되는 경험치는 일정하게 정해져 있어 혼자 클리어하든 파티와 하던 변하지 않는다.

노멀 난이도- 레벨제한: 20 / 경험치: 140만
나이트메어 난이도- 레벨제한: 40 / 경험치: 2000만
헬 난이도 - 레벨제한: 60 / 경험치: 5000만

Eve of Destruction 퀘스트 6 : 파멸의 전야  Eve of Destruction

고대인의 시험에 통과한후 바로 뒤쪽벽으로부터 'World Stone Keep'으로 갈 수 있다.
'The Worldstone Keep'은 지하 3층으로 이루어져 있으며 각각의 층마다 많은 몬스터가 기다리고 있다.
이들을 물리치며 가면 마침내 'Throne of Destruction'으로 내려가는 입구를 찾을 수 있는데
이곳에서 부터 바알의 웃음 소리가 간혹들리며 웃음속에는 독이 포함되어 있다.
여기서 만나게 되는 바알은 'The Worldstone Chamber'입구에 지키고 앉아 액트1부터 액트5까지 대표적인 몬스터들을 소환해 낸다.
이들을 물리친후 도망치는 바알을 쫓아 'The Worldstone Chamber'로 들어가면 바알과 대결 할 수 있게된다.

특징있는 바알만의 공격을 물리치고 바알을 죽이면 대천사 티라엘이 내려와 플레이어에게 바알을 죽여줘서 고맙다는 인사를 한다.
이것으로 액트5의 모든 퀘스트는 끝이 나며 이제 당신은 새로운 타이틀을 받게 된다.

2009년 7월 21일 화요일

PHP 프로그래밍을 위한 Zend Studio 사용하기

출처. 한빛미디어 || 레퍼런스출처. 다음
원문출처. Using Zend Studio for PHP Programming

참고영상. PHP에 테스트 주도 개발 쉽게 도입하기

PHP 프로그래밍을 위한 Zend Studio 사용하기


제공 : 한빛 네트워크
저자 : Michael J. Ross
역자 : 진영학
원문 : Using Zend Studio for PHP Programming

Java, C++ 또는 이와 비슷한 언어를 사용하는 데스크톱 응용 소프트웨어 개발자들은 다양하고 강력한 통합 개발 환경(IDEs: Integrated Development Environments)을 선택할 수 있는 것에 익숙하다. 각 IDE는 에디터의 여러 가지 기능, 소스 레벨 디버거, 소스 코드 관리, 그리고 내장 FTP 클라이언트 등을 함께 제공한다. 여러 가지 유용한 기능을 제공하는 IDE들의 모든 특징과 기능을 완전히 익히는 데에는  약간의 시간이 걸릴 수도 있다. 그러나 대부분의 프로그래머는 시간과 노력을 잘 투자함으로써 더 견고한 많은 코드를 더 빨리 개발할 수 있다.

반면, 웹 개발자들은 프로젝트와 자신의 건강을 챙길 수 있는 IDE를 긴 세월동안 경험하지 못하고 있다. 그러나 지난 몇 년 동안 시대는 변했고 현재 많은 소프트웨어 회사는 PHP와 같은 웹 언어에 많은 관심을 가지고 있다.

이러한 명백한 예의 한 가지가 캘리포니아 Cupertino에 본사를 둔 Zend사의 Zend Studio이다. Zend사는 자신을 “The PHP Company"라고 광고하는데, 이것은 회사가 1997년부터 현재까지 PHP 실행 엔진인 Zend 엔진의 개발과 공헌을 포함해서 PHP를 계속해서 지원하는 역사를 가지기 때문이다.

Zend사가 제공하는 PHP IDE용 Zend Studio for Eclipse의 최신 업데이트는 6.0버전이다. 처음 만들어질 때부터 이 제품은 매년 기능이 발달하고 널리 사용되는 오픈 소스 플랫폼인 Eclipse를 사용하고 있으며 또한 PHP Development Tools(PDT) 프레임워크를 사용한다.

Zend Studio 6.0은 2008년 1월에 5.5.1버전의 출시와 함께 계속해서 Zend사에 의해 유지 및 지원이 될 5.5버전의 모든 기능을 포함하며, 이 제품이 새로운 세대임을 나타낸다. Zend사에서 홍보를 담당하며 두 제품의 정보를 제공하는 Jeff Koo는 5.5버전의 유지를 계속할 것임과 동시에 고객들이 그들의 계획에 따라 제품을 바꾸도록 하는 Zend사의 계획을 언급했다. 5.5버전은 Zend Studio의 마지막 non-eclipse 제품이 될 것이다.

제품군, 요구사항, 가격

Zend Studio는 Standard와 Professional의 두 가지 에디션이 있다. Standard는 완전한 소스 코드 에디터(PHP4와 5를 지원함)와 로컬 PHP 스크립트를 위한 상호작용이 가능한 디버거를 제공한다. Professional은 아래에 자세하게 설명한 코드 분석, 최적화, 버전 컨트롤, 그리고 소스 관리를 포함하는 다양한 기능을 제공한다.

이 리뷰에서는, 두 가지 제품군을 모두 검토할 것이지만 Professional에 초점을 둘 것이다.

취향에 따라 Eclipse 자체는 현재 63MB부터 153MB까지 다양한 설치 옵션을 제공하고 있어 크기에 관해서는 이것은 분명 작은 제품이 아니다. Zend Studio의 새로운 버전이 Eclipse와 PDT를 포함한 것이 5.5보다 설치 파일이 더 커지게 된 주된 이유인 것 같다. 즉, 290MB 이상 대 약 68MB이다. 디스크에 설치될 때, 5.5는 157MB를 차지하는 반면에 6.0은 433MB를 차지한다. 대부분의 응용 소프트웨어가  시스템 요구사항에서 밝히는 것과 달리, Zend사에서는 디스크 사용 용량에 관해서 어떠한 언급을 하지 않는다.

그러나 시스템 요구사항 페이지는 Zend Studio가 Intel x86 또는 PowerPC G4, G5 프로세서와 함께 Windows 2000, XP, 2003, 그리고 Vista(32bit에서만), Linux x86 and x86-64, 그리고 Mac Os X 10.4에서 사용이 가능함을 명시한다. Zend 플랫폼을 위한 시스템 요구사항 또한 제공이 된다.

1년간 지원하는 가입 조건으로 Professional의 가격은 399달러이고 3년간의 지원에는 717달러이다. 2008년 1월 22일 이후 첫 30일간은 가격이 299달러와 498달러이다. Standard는 99달러로 책정이 될 것이며 기술 지원은 포함이 되지 않는다. 하지만 제품 구입자는 항상 Professional로 업그레이드가 가능하다. 사용자가 Eclipse를 사용하는 것에 관심이 있는가에 따라 5.5 또는 6.0버전을 선택할 수 있다.

설치와 시작하기

특정 운영체제에 해당하는 Zend Studio 설치 파일을 다운로드한 후, 제품을 인스톨하는 데 여러 가지 단계가 있다. 설정과 설치가 두 가지 주요한 것들이다. 설정에서, 브라우저에 Zend Firefox와 Internet Explorer 툴바를 설치할 수 있도록 선택할 수 있다. 또한 설치 디렉터리와 Zend Studio와 연결되는 파일 확장자를 명시할 수 있다. Zend Studio의 최신 버전에서는 13단계의 과정을 거치는 5.5보다 설치가 더 간단하다. 게다가 전체 PHP 매뉴얼의 설치가 더 이상 옵션이 아니다. 그러나 매우 쉽게 이용 가능한 매뉴얼을 설치하는 것은 확실히 그것이 차지하는 작은 공간을 생각해 보면 가치가 있다. 마지막으로 5.5에서는 Zend Core(추가 확장, 라이브러리, 원거리 디버깅 등 포함)와 Zend Platform(PHP 응용소프트웨어 서버)을 선택할 수 있다.

Eclipse는 시작시 4321포트를 이용해서 IP주소 192.168.255.255에 접속하려고 한다. 이것은 제품의 라이선스 보호를 위한 일부분일 수 있다. 적어도 30일 간의 평가 기간 동안은 접속하지 않아도 제품의 기능을 사용하는 데 문제가 없다. 또한, 처음 시작할 때, Zend Studio의 두 가지 버전 모두 사용 팁을 제공한다. 원한다면 비활성화 가능하다. 5.5버전은 처음에 제품의 이전 버전이 있는지 확인한다. 6.0버전은 그런 것 같지 않다.

만약 로컬 PHP 스크립트를 디버깅하려고 할 때, 대부분의 사용자는 Zend Studio에서 어떤 작업을 하기 전에 서버가 살아있는지 확인하는데, 때때로 이유가 무엇이든 간에 로컬 웹 서버를 다운시킨다. 반면 “The selection cannot be launched, and there are no recent launches."와 같은 이해하기 어려운 에러 메시지를 받을 수 있다. 더 많은 것을 설명해주는 "Web server not running."와 같은 메시지는 덜 혼돈스럽다(특히 만약 사용자가 강조된 몇 줄의 코드만을 선택했을 경우).

사용자 인터페이스와 환경설정

대부분의 통합개발도구에서 인터페이스가 명쾌함과 적절한 구조를 가지는 것이 아주 유용하며 프로그래머가 새로운 도구를 사용할 것인지 아닌지를 판단하고 이전 개발 환경으로 다시 되돌아가려 하지 않도록 하는데 중요한 사항이다.

먼저 Zend Studio 5.5의 인터페이스를 검토해 보고 Eclipse버전(6.0버전)과 함께 그것이 어떻게 변화되었는지 간단히 알아보자. 두 가지 버전에서 사용자 인터페이스는 패널, 여러 개의 창, 메뉴와 도구 모음을 구성하는 여러 가지 컴포넌트를 가진다. 창들은 크기와 위치가 조정되어질 수 있으나 기본적으로 중앙에 위치한 편집 창은 다른 창들이 주위에 위치하고 현재 디버깅되어지는 PHP 스크립트를 포함한다.


[그림 1] Zend Studio 5.5 - 사용자 인터페이스

5.5버전에서는 non-Editor 창([그림 1]의 왼쪽 상단에서 시작해서 시계 반대 방향으로 설명함)들이 다음과 같이 디폴트로 설정된다. 파일 관리자(File Manager)는 사용자가 파일, 프로젝트 SQL 서버를 처리할 수 있도록 한다. 파일 관리자는 많은 컴포넌트의 정보를 끊임없이 알아내어 프로젝트 관리를 쉽게 할 수 있어 대규모 프로젝트에 필수적이다. 그 아래 패널은 파일, 프로젝트, PHP inspector를 위한 inspectors 창이다. 왼쪽 아래에는 디버그 메시지 창(Debug Messages window)이 있다. 그 오른쪽에는 변수, 감시점(watchpoint) 등을 감시하는 디버그 창이 있다. 좋은 IDE에서와 같이, 코드를 쉽게 만들고 변수의 변화 값을 감시할 수 있는 것은 엔트리 값을 만드는 데 가치가 있다. 코드 창의 오른쪽에서는 앞에서 이야기한 디버그 출력 창이 있다.

나는 부주의하게 몇 개의 창들을 조정하고 어지럽혀 놓은 후에 기본 레이아웃을 저장하는 방법을 찾았다. 프로젝트로 현재 작업창을 저장하지 않은 채 Zend Studio를 다시 시작하였지만 통하지 않았다. View > Restore Default Layout는 그러한 상황에 맞는 편리한 기능이다. 분명히 창들은 각각의 왼쪽 상단에 있는 조절점을 이용해서 새로운 위치로 드래그 될 수 있지만 꽤 다루기 힘들어서 초기 레이아웃을 저장할 수 없었다.

[그림 2]에서 보는 바와 같이 내장된 디버그 데모를 실행할 때 이러한 여러 가지의 창들을 볼 수 있다.


[그림 2] Zend Studio 5.5 - 디버그 데모

6.0버전에서는 처음에 아래 [그림 3]에서 보는 바와 같이 환영 화면을 볼 수 있다. 새로운 프로젝트를 시작하기 위해 링크 중의 하나를 선택함으로써 디버그 데모를 실행하는 [그림 4]와 같이 주 개발 창으로 갈 수 있다.


[그림 3] Zend Studio 6.0 - 환영 화면


[그림 4] Zend Studio 6.0 - 디버그 데모

새로운 Eclipse 버전에서 사용자 인터페이스는 경험 많은 사용자들이 초기에 전보다 6개 더 적은 도구모음 아이콘으로 어쩌면 더 깔끔하고 덜 번잡하다고 생각하는 외관을 가진다(하지만 메뉴 수는 1개 더 많다.). 현재 색상은 더 밝아졌으며 인터페이스는 전체적으로 더 우아한 분위기가 난다. 특정 도구모음 아이콘을 같은 리본에 위치시킴으로써 공간이 절약되어 메뉴바 아래에 있는 아이콘들이 난잡해지지 않도록 한다.

프로젝트를 생성하기 전에 또는 만들어진 파일로 작업하려면 환경 설정을 해야 한다. 이것은 항상 제품의 가능성과 사용자가 제품을 어떻게 가장 잘 이용할 수 있는지에 대해 더 많이 학습함에 따라 미래에 조정되어질 수 있다. 5.5버전에서는, 이것은 Tools > Preferences를 통해 실행한다. 그림5에서 보는 바와 같이, Zend Studio의 desktop, editor, code completion, colors and fonts, debugger, Zend Platform, keymaps, file types, templates, source control, dialog boxes, 그리고 SQL을 설정할 수 있다. 예를 들어, 프로그래머가 이미 가장 좋아하는 편집기 내에서 그들이 수행하는 많은 동작을 위한 키 배열의 많은 목록을 내면화한 프로그래머들은 Zend Studio의 에디터 내에서 같은 키 배열을 설정 및 저장할 수 있다. 불행히도, 몇 개의 에디터와는 달리, Zend Studio는 다중 키 배열을 지원하지 않는다(예를 들어, “Ctrl+G L" : 라인으로 이동하라.).

Preference > Dialog panel에서, 사용자는 보기 원하는 Zend Studio 대화상자가 무엇인지를 지정할 수 있다. 마지막으로, 사용자는 SQL 패널에서 LIMIT 키워드, 페이지당 최대 엔트리 등을 사용하는지의 여부를 명확하게 할 수 있다.


[그림 5] Zend Studio 5.5 - 환경 설정

6.0버전에서는 환경설정은 “Windows" 메뉴에서 할 수 있다. 이 Eclipse 버전에서는 여기서 논의되는 것보다 더 많은 환경 설정 옵션을 제공한다. 일반적으로 5.5버전의 옵션들이 더 간단하고 생각한다. 옵션들이 많이 생겨난 까닭은 의심할 여지없이 제품이 Eclipse에 기반을 둔 결과이다.


[그림 6] Zend Studio 6.0 - 환경 설정

다행히도 6.0버전은 옵션 트리의 상단부의 엔트리 필드에 사용자가 텍스트를 기입하고 이것을 옵션의 문자열과 맞는지 비교하여 옵션을 제한하는 방법을 가지고 있다. [그림 6]에서 “type filter text"를 보라. 예를 들어, 여러분이 어디에서 코드의 형식을 변경하는지를 몰라 어려움을 겪을 때, 간단히 "format"을 입력해 보면 [그림 7]에서 보는 것과 같이 제한된 결과를 얻을 수 있다.


[그림 7] Zend Studio 6.0 - 환경 설정 필터링

편집기

Zend Studio의 내장 편집기는 베테랑 코드 작성자들이 현대 프로그래머가 사용하는 편집기에서 제공하는 모든 기능을 가지고 있다(다중 문서 편집, 문단 텍스트 선택, 다중 되돌리기 및 다시 실행, 다중 행 탭 들여쓰기 및 내어 쓰기, 자동 매칭 브레이스 생성과 색지정, 스마트 들여쓰기와 내어 쓰기, 코드 폴딩, 그리고 코드 블록 커멘팅).

찾기 및 바꾸기는 Edit > Find/Replace를 통해 여러 파일, 지역 또는 원격으로, 텍스트에 대해 실행할 수 있다. 찾기 및 바꾸기는 정규 표현식을 지원한다. 또한 PHP 파일에서 문자열 찾기는 Search > Search를 통해 클래스, 함수 또는 상수 심지어 특정 작업창에서 제한되어질 수 있다. 이것은 여러분이 특정 파일에서 PHP 엘리먼트를 제거하거나 재명명하는 것을 가능하게 하며 문맥에 민감하여(context sensitive) 실수로 바꾸기 하는 것과 같은 문제를 피하도록 한다. 예를 들어, 주석에서 몇 개의 문자열과 매치하는 클래스 이름과 같은 것이다. 이러한 정제 작업은 코드 리팩토링을 수행할 때 특히 가치가 있을 수 있다. 또한 미리보기 기능은 하나 혹은 그 이상의 파일에서 안전하게 엘리먼트 발생을 변경하도록 한다. 와일드카드 *와 ?는 지원되나 분명 정규 표현식은 아니다.

편집기의 구문 강조와 기능 확인은 뛰어나고 모두 사용자 맞춤이 가능하다. 그러나 6.0버전에서 처음에 환경설정 트리(PHP > Editor > Syntax Coloring)내 어디에서 변경할 수 있는지 찾기가 어렵다. 여러분은 선호하는 공백 스타일(PHP > Editor > Formatter)을 명시할 수조차 있다. 코드 완성하기는 대부분의 프로그램에서 주로 발견되는 템플릿이라고 하는 코드 조각들의 형태에서 한 단계 더 나아간다. 여러분이 코드에 템플릿을 추가할 때 값과 함께 치환되어 템플릿은 “${name}”과 같은 저장소를 포함할 수 있다. 예를 들어, 기본적으로, 키 “cls”는 다음의 클래스 문장을 생성하는 템플릿을 추가하도록 한다. “class ${name} { function ${name}() { ${END} } }". 여러분은 자신의 템플릿을 생성할 수도 있으며 그것을 가용한 키에 할당할 수도 있다.

Zend Studio 편집기는 정말 멋지다. 보통 더 진보된 편집기와 통합개발도구에서 빠진 기능 - 기록 가능한 매크로, 키스트로크 반복, 사각 블록 문자열 선택, 그리고 문자열 결합과 환류 - 들이 몇 가지 있었다. 하지만, 단지 첫 번째 이유에 의해 프로그래머는 더 많은 제품을 사용할 것이다.

디버거

만약 이전에 논의된 편집 기능들이 Zend Studio가 제공하는 모든 것이라면, jEdit과 같은 최고의 프로그래머를 위한 편집기면 충분할 것이다. 그러나 Zend Studio는 새로운 사용자가 통합개발도구를 전환하는데 충분할 정도의 그래픽 기반의 디버거이며 지금은 불필요한 ‘echo' 문장을 제거하도록 한다.

Zend Studio의 디버거는 step control과 중단점을 포함하는 비슷한 제품에서 보이는 강력한 기능을 제공한다. 특히 프로그래머로 하여금 항상 변수 이름을 일치하도록 요구하는 종류의 통합개발도구에 의한 접근에 반하거나 또는 개개의 엘리먼트를 보여주는 배열을 확장하거나, 범위 내에서 모든 변수의 자동화된 목록을 얻을 수 있어 고맙다. 또한, 더 많은 시간을 아낄 수 있는 문자열 길이가 보일 수 있다(특히 텍스트 처리와 비교를 하는 많은 양의 코드를 디버깅할 때).

또한 Zend Studio의 5.5와 6.0버전 모두는 내부 디버깅 그리고 원격 디버깅을 지원한다. 원격 기능은 원격 머신에 배치된 후에 하나 혹은 그 이상의 버그를 나타내는 로컬 환경에서 실행되는 상황일 때 유용하다.

만약 여러분이 Zend Studio 디버거를 처음 사용한다면 HTML 테이블에서 예시 자료를 나타내는 디버거 데모를 실행해 봄으로써 쉽게 사용할 수 있다. 편집 창에서 예시 PHP 코드를 실행해 보면서 여러분은 대응하는 결과를 보게 된다. 단계적으로 디버그 출력 창에서 두 가지 보기를 제공한다. 5.5버전에서는 “Text"(HTML 코드를 보여줌)와 “HTML"(웹 브라우저에서 어떻게 변환되는가?)이 있다. 더 좋은 이름은 첫 번째 보기의 경우 “HTML" 그리고 두 번째는 "Web"이었을 것이다. 6.0버전에서 "Debug Output"과 “Browser Output”으로 개선되었다.

디버거는 일반적으로 부드럽게 작동한다. 그러나 5.5버전에서 데모를 실행하는 동안, 나는 “Go to Cursor" 명령이 예상한 대로 완전히 동작하지 않는 것을 발견했다. 함수 호출 후에 오는 코드 라인 상의 편집 커서와 함께, “Go to Cursor” 명령을 선택하는 것은 디버거를 제대로 동작시키지 않았지만 대신 이전 함수로 가도록 하였다. 이것의 원인은 명백하지 않다. “Go to Cursor" 명령은 6.0버전에서는 보이지 않는다.

파일과 버전 관리

코드의 양과 프로그래머의 수에 비례하여 소프트웨어 개발에 있어 가장 치명적인 함정의 하나는 소스 코드를 관리하는 것이다. 이것은 소스 코드를 구성하는 것을 포함하며 만들어진 컴포넌트는 빨리 발견되어질 수 있다. 그리고 새로운 컴포넌트는 최적의 위치에 두는 것이 좋다. 게다가, 코드에 저장하고 개정된 것을 추적해야만 한다.

Zend Studio는 환경에 관계없이 프로젝트를 생성하고 관리하는 도구(프로젝트 기반의 코드 찾기, 내장된 프로젝트, 코드, 오브젝트 브라우징)를 이용해서 이러한 것을 가능하게 하며, 이러한 것은 버전 관리 시스템과 관계되는 것이다. 프로젝트의 소스 코드는 CVS나 Subversion을 이용해서 추적이 가능하다. 두 버전 관리 시스템 모두 다른 색상을 이용하여 경로, 요구 메시지, 파일 상태의 텍스트 스타일을 명시할 수 있다.

Zend Studio의 두 버전 모두 두 파일 간의 색이 들어간 코드 차이를 표시할 수 있다. 갈래진 코드를 처리할 때, 똑같은 코드의 두 개 혹은 더 많은 버전 사이에 기능적인 차이를 결정하도록 시도할 때, 가능한 하나의 파일로 병합하는 것이 아주 유용하다.

로컬 혹인 원격 서버 사이의 파일 전송에는 5.5버전은 내장된 FTP 클라이언트(Files > Add FTP Server)가 사용되며 이것은 FTP와 SFTP 모두를 지원하고, 나중에 쓰이게 될 것을 대비하여 설정을 모두 저장합니다. 6.0버전은 Remote System Explorer(RSE) plugin을 통해 FTP와 SFTP를 제공한다(아직 테스트 해 보지는 않았다.).

코드 생성과 샘플

바쁜 프로그래머는 적은 노력과 시간으로 코드 그 자체가 코드를 생성하는 것을 포함하여 더 많은 것을 얻기 위한 방법을 항상 찾고 있다. Zend Studio는 여러 가지 형태(코드 생성 마법사, 코드 조각, 코드 확장, 그리고 템플릿)로 이러한 칭찬받을 만한 원칙을 고수한다. 두 가지는 앞에서 살펴보았다.

Zend Studio의 마법사는 자동적으로 클래스, 인터페이스, 그리고 그들의 메서드를 위한 소스 코드를 자동적으로 생성시키기 위해 사용되어질 수 있다. 예를 들어, 여러분이 Zend Studio로 하여금 새로운 클래스나 인터페이스를 생성하도록 요청할 때, Zend Studio는 아이템의 특정 형태의 초기 구조를 즉시 삽입할 것이다. 간단히 코드의 어느 곳에서나 right-click하고 메뉴로부터 New > Class를 선택하라. 인스턴스 변수가 정의되는 클래스 내에서, getter and setter 메서드([그림 8]에서 보는 바와 같이)를 삽입할 것이다. 이와 같이 객체 지향 개발에서 지루한 단계를 자동화하는 것이다. Zend Studio의 제품 매니저인 Yossi Leon은 전화 통화에서 제품의 사용자들이 Zend Studio의 코드 생성 기능을 칭찬하고 있다고 밝혔다.


[그림 8] Zend Studio 6.0 - getters and setters 만들기

Zend Studio는 여러분 자신의 스크립트에 쉽게 삽입되도록 고안된 미리 작성된 코드 조각의 그룹들인 “Code Galleries"를 제공한다. Zend Studio는 기본으로 여러분 자신의 코드 조각을 추가할 수 있는 사용자 코드 갤러리를 제공하며, Zend 코드 갤러리는 Zend Network에 등록을 요구한다. 6.0버전에서 코드 조각은 코드 갤러리 보기(Window > Show View > Other > PHP Tools > Code Gallery)로부터 접근되어질 수 있다.

테스팅과 최적화하기

애자일 소프트웨어 개발론에서 커지고 있는 관심과 함께 Zend Studio for Eclipse는 테스트 주도 개발 - 엄밀히 말하면 PHP 코드의 단위 테스트 - 을 더욱 쉽게 하고 있다. Zend Studio for Eclipse는 또한 Zend Studio의 사용자 인터페이스에서 PHPUnit으로 더 훌륭한 통합을 제공한다. 게다가, 마법사는 여러분이 작업하는 특정 클래스를 위한 뼈대를 생성할 수 있다. 결국 모든 테스트를 요약하여 볼 수 있으며 정확히 어디에서 문제가 발생하였는지에 대한 표시와 함께 어떠한 실패의 요약을 제공할 것이다.


[그림 9] Zend Studio 6.0 - 단위 테스팅

PHP 코드를 최적화하도록 시도할 때, 가장 가치 있는 도구중 하나는 코드의 각 부분에 의해 얼마만큼의 시간이 소모되고 있는가를 밝히는 어떤 종류의 프로파일러(profiler)이다. Zend Studio는 [그림 10]과 같은 내장된 프로파일러가 있다.


[그림 10] Zend Studio 6.0 - 프로파일러

브라우저 툴바

Zend Studio의 설치 과정 동안 웹 브라우저에 Zend Studio 툴바가 설치되도록 선택할 수 있었다. 이 때 두 가지의 지원되는 브라우저는 파이어폭스와 인터넷 익스플로러이다(그림 11).


[그림 11] Zend Studio 6.0 - 파이어폭스 툴바

첫 번째 아이콘은 Zend Studio를 시작한다. 두 번째는 현재 브라우저에서 열린 페이지의 디버깅을 시작한다. 만약 Zend Studio가 아직 실행되고 있지 않다면 Zend Studio를 시작하도록 한다. 불행히도 제품이 C:Program FilesZendZendStudioClient-5.0.0bin.에 설치되었다.


[그림 12] Zend Studio 6.0 - 브라우저 툴바 에러 메시지

“Extra Stuff > Preferences"는 Zend Studio가 아니라 브라우저 툴바 그 자체에 있는 메뉴 아이템을 참조한다. 환경 설정을 수정하기를 원하며 프로그램에서 찾는 사용자는 찾을 수가 없을 것인데 분명 온라인 도움 정보(online help information)에서 조차 언급되어 있지 않다.

세 번째 아이콘은 현재 페이지, 다음 페이지, 현재 사이트상의 모든 폼들을 디버깅하기 위한 드롭다운 메뉴이다. 처음에 툴바에서 모든 다섯 개의 아이콘 중에서 세 번째 아이콘만 이름이 없어서 이상해 보였다. 그러나 세 번째 아이콘의 논리적 이름은 이미 두 번째 아이콘에 의해 사용되어진 “Debug"가 될 것이다. 이것은 두 개의 메뉴가 아마 하나로 합쳐져야 한다는 것을 말한다.

네 번째 아이콘은 현재 페이지를 프로파일하는 것이다. Zend Studio의 환경 설정을 수정하고 난 후조차도 이것과 두 번째 아이콘은 예상한대로 작동하지 않았다.

마지막 아이콘인 “Extra Stuff"는 Zend와 비(非)Zend PHP 사이트의 링크와 툴바 설정을 포함한다. 그래서 메뉴의 더 좋은 이름은 “Resources"가 될 것이다.

파이어폭스 그 자체와 같이 툴바는 또한 Zend.com 사이트, Zend Knowledge base, PHP.net, 그리고 구글을 통한 전체 웹 검색과 같은 내장된 검색 기능을 가진다.

Zend Framework

PHP 프로젝트들은 점점 더 Zend 프레임워크를 포함하여 오픈 소스 프레임워크를 기반으로 만들어지고 있다. Zend Studio는 Zend 프레임워크 프로젝트 디렉터리의 생성을 쉽게 하는 등 Zend 프레임워크를 위한 지원을 넓히고 있다. 그것은 제품의 Eclipse 버전에 내장되어 있으며 5.5.1의 출시와 더불어 5.5버전에도 추가될 것이다.


[그림 13] Zend Studio 6.0 - Zend 프레임워크

지원

대부분의 오픈 소스 통합개발도구들은 보통 쓸모없는 문서들을 긁어모은 것을 사용자에게 보라고 하거나 아주 적은 트래픽을 가진 포럼을 운영하는 등 적절치 못한 지원으로 사용자가 고통을 겪게 한다. 반면에 Zend Studio는 도움이 될 만한 적절하고 충분한 양의 여러 가지 자원에 의해 지원이 되고 있다. 내장된 도움 정보는 주제가 넓고 완전히 인덱스화 되어 있으며 검색어의 하이라이팅과 함께 full text 검색을 제공한다. 도움 정보는 또한 이전에 논의된 환경 설정 옵션을 제한하는 것에 대해 필터링 기능을 가지고 있다. 도움말을 필터 하는 기능은 새로운 사용자가 빠르게 제품에 적응하는데 큰 도움이 될 것 같다.

Zend의 지원과 관련된 웹 페이지는 knowledge base, 포럼, FAQ를 제공한다. Resource 페이지는 출시 정보, 사용자 가이드, 설치 가이드, 데이터시트, 빠른 시작 가이드, 그리고 공식 Keymap으로 가는 링크를 가지고 있다. 여러 가지 도움이 되는 6.0버전의 비디오 자료는 Zend의 데모 비디오 페이지에서 찾을 수 있다.

게다가 인증 받은 사용자는 Zend사의 Technical Support Team에 구입 정보를 제출함으로써 전문기술 지원을 온라인으로 받을 수 있다.

결론

Zend Studio, 특히 Eclipse 버전은 이 기사에서 살펴본 것보다 아주 많은 기능을 가지고 있다. 여기서 논의되지 못한 것은 코드 리팩토링, 데이터베이스 도구, 작업 세트, Zend Guard와 같은 외부 Zend 도구와의 통합 등 내장된 도구이다. 관심 있는 독자들은 자신들이 테스트해 볼 수 있을 것이고 개발에 얼마나 가치를 더할 수 있을지 확인해 볼 수 있다.

Zend Studio가 가지는 한 가지 장점은 비슷한 PHP 통합개발도구에는 없는 내장된 PHP 인터프리터가 있는 것이다. 그 결과로, 여러분은 통합개발도구에게 컴퓨터상에 실행할 수 있는 PHP가 어디에 있는지 알리는 설치 장애물을 피할 수 있다. 이것은 사소해 보일 수도 있다. 그러나 내가 테스트한 메이저급 비(非)Zend 통합개발도구는 완벽하게 실행되는 PHP 파일을 실행하지 못하였고, 그 통합개발도구는 쓸모가 없어졌다. Zend Studio의 경우에는 내장된 Zend 엔진을 가지고 있으며 5.5와 6.0버전이 모두 PHP4와 PHP5를 지원한다. 6.0버전은 더 사용자 맞춤이 가능하며 원한다면 심지어 여러분이 자신이 사용하고 싶은 인터프리터를 할당할 수도 있다.

작은 문제들과 위에서 언급한 몇 가지를 제외하고, Zend Studio는 가능한 고통 없이 개발하는 것을 원하는 프로그래머와 얼마만큼 Zend Studio가 능력을 가졌는지 배우기 위해 시간과 노력을 기꺼이 투자할 PHP 프로그래머에게 강력하고 인상적이며 잠재력이 풍부한 가치 있는 통합개발도구이다. PHP 애플리케이션을 개발하는 개인과 팀에게 Zend Studio를 강력하게 추천한다.


저자 Michael J. Ross는 웹 컨설턴트, 프리랜서 작가이자 PristinePlanet.com의 뉴스레터 편집자입니다.

2009년 7월 20일 월요일

군자는 사람을 쓸 때에..

그러므로 군자는 사람을 쓸 때에

1. 먼 곳에 심부름을 시켜 그 충성을 보고
2. 가까이 두고써서 그 공경을 보며
3. 번거로운 일을 시켜 그 재능을 보고
4. 뜻밖의 질문을 던져 그 지혜를 보며
5. 급한 약속을 하여 그 신용을 보고
6. 재물을 맡겨 그 어짐을 보며
7. 위급한 일을 알리어 그 절개를 보고
8. 술에 취하게 하여 그 절도를 보며
9. 남녀를 섞여 있게 하여 그 이성에 대한 자세를 보는 것이니

이 아홉가지 결과를 종합해서 놓고 보면
사람을 알아볼 수 있게 되는 것이다.

2009년 6월 9일 화요일

스푸핑과 스니핑

네트워크 분석에 있어 스니핑(Sniffing)과 스푸핑(Spoofing)이라는 유명한 기법이 있다. 스니핑은 자기 컴퓨터에서 나가거나 들어오는 패킷을 분석해 그 결과를 출력하는 기법을 말하며, 스푸핑은 자기 컴퓨터로 오지 못하는 패킷을 의도적으로 자기 컴퓨터에 경유하게끔 하는 기법을 말한다.



스니핑(Sniffing)


Sniffing 이란 단어의 사전적 의미는 ‘코를 킁킁거리다’, ‘냄새를 맡다’ 등의 뜻이 있다. 사전적인 의미와 같이 해킹 기법으로서 스니핑은 네트워크 상에서 자신이 아닌 다른 상대방들의 패킷 교환을 엿듣는 것을 의미한다. 간단히 말하여 네트워크 트래픽을 도청(eavesdropping)하는 과정을 스니핑이라고 할 수 있다. 이런 스니핑을 할 수 있도록 하는 도구를 스니퍼(Sniffer)라고 하며 스니퍼를 설치하는 과정은 전화기 도청 장치를 설치하는 과정에 비유될 수 있다.


TCP/IP 프로토콜은 학술적인 용도로 인터넷이 시작되기 이전부터 설계된 프로토콜이기 때문에 보안은 크게 고려하지 않고 시작되었다. 대표적으로 패킷에 대한 암호화, 인증 등을 고려하지 않았기 때문에 데이터 통신의 보안의 기본 요소 중 기밀성, 무결성 등을 보장할 수 없었다. 특히 스니핑은 보안의 기본 요소 중 기밀성을 해치는 공격 방법이다.


이 러한 스니핑 공격은 웹호스팅, 인터넷데이터센터(IDC) 등과 같이 여러 업체가 같은 네트워크를 공유하는 환경에서는 매우 위협적인 공격이 될 수 있다. 하나의 시스템이 공격당하게 되면 그 시스템을 이용하는 네트워크를 도청하게 되고, 다른 시스템의 User ID/Password를 알아내게 된다. 비록 스위칭 환경의 네트워크를 구축하여 스니핑을 어렵게 할 수는 있지만 이를 우회할 수 있는 많은 공격방법이 존재하고 있다.


1. 허브 환경에서의 스니핑


허 브(Hub)는 기본적으로 들어온 패킷에 대해 패킷이 들어온 포트를 제외한 모든 포트에 대해 패킷을 보내는 리피터 장비이다. 만약 기업에서 허브를 사용하고 있고 기업의 시스템이 그 허브에 연결되어 있다면 원하던 원치 않던 간에 계속하여 다른 사람의 패킷들을 받아보고 있었던 것이다.



2. 스위치 환경에서의 스니핑


(1) Switch Jamming

  스위치는 원래 앞서 말한 바와 같이 실제 수신 대상으로만 패킷을 보내는 브리지 장비이다. 그러나 엉뚱한 MAC 주소를 가진 패킷을 계속하여 보냄으로써 스위치가 허브처럼 동작하도록 만들 수 있다. 많은 종류의 스위치가 주소 테이블이 가득 차게 되었을 때 패킷을 모든 포트로 브로드캐스팅 하는 성질을 이용한 것이다.


(2) ARP Redirect

  대표적인 툴로 Dsniff와 같은 툴이 이 방법에 의한 스니핑을 제공한다. 네트워크 상에서 패킷이 보내질 때 목적지의 IP 주소를 갖고 해당 목적지가 어떤 MAC 주소를 사용하는지를 요청하는데 이를 ARP request라고 한다.

   ARP request는 네트워크 상에 브로드캐스팅되어 모든 호스트가 그 패킷을 받게 되고 해당 IP를 가진 호스트는 그런 IP를 사용하는 것은 나라고 ARP reply를 주게 된다.


(3) ICMP Redirect

  ICMP 프로토콜은 네트워크 상의 오류 메시지 전송, 트러블슈팅 등을 위해 사용되는데 그 중 ICMP Redirect 메시지를 이용한 스니핑 방법이며 일단 기본적으로는 ARP Redirect의 경우와 마찬가지로 공격 대상 시스템으로 패킷이 오도록 만드는 것이다. 네트워크 상에 라우터가 여러 대 존재할 때 비효율적인 라우팅 경로가 존재한다면(즉 1 hop 만으로 보낼 수 있는데 3 hop으로 보내게 설정되었다든지) 라우터에 대해 이를 수정할 것을 권고하는 ICMP Redirect 메시지가 보내진다. 공격자는 이를 악용한 ICMP Redirect 메시지를 보냄으로써 패킷이 자신으로 보내지도록 한다.

(4) ICMP Router Advertisement

   특정 호스트가 자신이 라우터라고 다른 호스트들에 대해 알리는 메시지이다. 공격자는 이를 악용하여 다른 호스트들이 자신을 라우터로 생각하게 하여 패킷이 자신으로 보내지도록 한다.



스푸핑(Spoofing)


Spoof 란 단어의 사전적 의미는 'hoax; trick; swindle 골탕 먹이다.; 속여먹다.; 야바위(치다), 우롱, 사취'이다. 즉 해커가 악용하고자 하는 호스트의 IP 어드레스를 바꾸어서 이를 통해 해킹을 하는 것을 IP 스푸핑이다.

네 트워크 시스템에서 서로 신뢰관계에 있는 A, B 두 시스템간에는 A 시스템의 어카운트를 가지고 B 시스템을 액세스 할 수 있다. 이는 네트워크에서 신뢰관계를 형성하는 서비스가 네트워크 주소에 기반하여 이를 인증하기 때문이다. 이로 인해 IP 스푸핑이 가능해 진다. IP 스푸핑은 이 신뢰관계에 있는 두 시스템사이에서 해커의 호스트를 마치 하나의 신뢰관계에 있는 호스트인 것처럼 속이는 것이다. 또한 IP 스푸핑과 항상 연동돼 사용되는 공격법으로 TCP sequence number guessing attack을 들 수 있다.


1. 스푸핑의 종류


(1) IP 스푸핑

  IP 스프핑은 말 그대로 IP 정보를 속여서 다른 시스템을 공격하는 것이다. IP 스프핑을 통해 서비스 거부 공격(TCP Syn flooding, UDP flooding, ICMP flooding)을 수행할 수도 있으며, 공격대상 컴퓨터와 서버 사이의 연결된 세션에 대해서 세션 끊기도 가능하다.


(2) DNS 스푸핑

  DNS 프로토콜은 인터넷 연결시 도메인 주소를 실제 IP 주소로 대응시켜 주는 프로토콜이다. 인터넷 연결시 사용하는 DNS 서버가 IP 주소를 찾아달라는 요청을 받았을 때, 자기 자신의 도메인이 아닌 주소에 대해서는 보다 상위 단의 DNS 서버로부터 재귀적(recursive)인 방식으로 IP 주소를 찾아 알려준다. 만약 해커가 어떤 도메인의 DNS 컴퓨터를 장악하여 통제하고 있다면 최종적으로 얻어진 IP 주소는 원래 사용자가 찾아가고자 하였던 홈페이지가 아닌 다른 홈페이지로 연결되게 된다. 이는 요청을 발송했던 DNS와 응답을 주는 DNS 사이의 트래픽을 해커가 스니퍼링함으로써 Query ID라는 값을 통해 해커의 사이트 IP를 최종 응답으로 넘겨주도록 하는 것이다. 사용자가 쇼핑몰을 이용하고자 하였다면 해커에 의해 조작된 홈페이지 내에서 자신의 아이디와 필드, 신용 카드 정보를 기입함으로써 개인 정보를 탈취당할 수 있다. 위와 같은 스니핑 공격들은 실제로 인터넷 상의 툴로써 공개가 되어 있으며 여러가지 다른 복합적인 공격과 같이 사용될 수 있다.


(3) ARP 스푸핑

   공격 대상 컴퓨터와 서버 사이의 트래픽을 해커 자신의 컴퓨터로 우회시킬 수 있다. 우회된 트래픽 으로부터 해커는 패스워드 정보 등 유용한 정보를 마음껏 획득할 수 있다.


(4) E-mail 스푸핑

  이메일 발송시 송신자의 주소를 위조하는 것이다. 요즘 들어서 극성인 대량의 스팸 메일과 바이러스 감염 메일은 송신자의 주소가 아예 존재하지 않는 이메일 주소를 사용한다. 또한 이메일을 발송한 메일 서버 또한 직접적인 메일 발송 서버가 아닌 중계 서버이므로 메일을 발송한 자를 추적하기란 쉽지 않다.


2. 스푸핑을 막기 위한 대책


(1) 암호화된 Protocol을 사용 - 속도가 느려지고 사용이 아직 보편화되어 있지 않다.


(2) IP로 인증하는 서비스는 사용하지 않음 - 사용이 상당히 불편해 진다.


(3) Router에서 source routing을 허용하지 않음 - 내부 사용자끼리의 IP Spoofing은 막을 수 없다.


(4) Sequence number를 Random하게 발생시키도록 함 - Sequence number를 sniff할 수 있는 경우에는 막을 수 없다.


(5) DoS가 발생하지 않도록 함 - IP Spoofing의 시작은 DoS이다.

출처 : exerceo.egloos.com | linuxholic.tistory.com/74