2010년 4월 27일 화요일

centos 5.4 에서 oracle 9i 설치하기

정말 많은 어려움이 있을 거라는 것을 그냥 제목만 봐도 딱~!....

 

centos 5.4를 설치할 때는 별반 큰 문제가 없을 것이다.

다만, 패키지를 설치할때, 반드시 regacy dev package와 개발 패키지들을 설치해야 한다.

추가적으로 java 패키지는 설치하지 않는다.

 

이때, seLinux는 disable 시키고,

방화벽은 사용하되, ssh와 http 포트는 체크해줘야 한다.

 

오라클 다운로드

http://edelivery.oracle.com/

 

에서 몇가지 정보를 입력하면 오라클 9i를 다운로드 받을 수 있다.

www.oracle.com 에서는 이미 오라클 9i는 찾아 볼수 없는 녀셕이다.

 

다운받은 오라클은 bXXXX-XX.zip 형태의 화일로 총 3개로 구성된다.

여기에서 XXX들은 모두 숫자이다.

 

unzip bXXX-XX.zip -d disk1

 

이런식으로 disk1부터 disk3번까지 압축화일을 모두 풀어준다.

세개의 zip 화일이므로, disk3번까지 폴더가 생성되어야 한다.

 

oracle 9i 는 jdk 1.3 버젼으로만 설치가 되므로,

 

http://java.sun.com/products/archive/j2se/1.3.1_19/index.html

 

여기에서 다운로드 받아서 설치를 진행하도록 한다.

(필자는 bin 타입으로 다운로드 받음. rpm 타입 아님.)

 

다운받은 화일에

 

chmod +x 화일이름

 

을 한후,

 

./다운받은화일이름

 

으로 실행을 시키면, 몇번 space로 잡다한 글이 지난후, yes 를 입력하면, 압축이 풀리면서,

현재 폴더에 j2sdk1.3 으로 시작하는 폴더가 생성된다.

 

실제 웹을 운영할때는, jdk 1.5이던 jdk 6이던 관계 없어야 되므로, 오라클의 jdk1.3과도 충돌이 있으면 안된다.

 

그러므로, oracle 계정에만 JAVA_HOME을 별도의 jdk1.3 버젼으로 지정해야 한다.

결국 /etc/profile 에 적용하면 모든 유저에 적용되기 때문에, 이것을 다시 오라클 유저에 해당 변수를 엎어 써도 path에는 이미 다른 버젼의 java_home이 들어 있기 때문에,

oracle변수 설정과 java 변수설정을 아예 oracle 계정용으로 별개로 만들어야 하며,

전역에는 그러한 변수를 넣지 말아야 한다.

개발용 계정에만 신버젼용 java_home 변수를 넣도록 하자.

 

오라클 계정 생성

su -
>groupadd dba
>useradd -g dba oracle

보통 이렇게 하는데, 필자는 그냥 dev (개발계정)으로 oracle 계정을 생성한다.
su -
>groupadd dev
>useradd -g dev oracle

그외 오라클의 요구하는 kernel 파라미터를 맞추어 줘야 하는데,
centos 5.4 에서는 이미 9i 가 요구하는 사양 이상으로 설정되어 있으므로 건너뛴다.

오라클 계정에 passwd 로 암호를 준후,
su - oracle

로 접속한다.
이후 아래의 설정 사항을 ~/.bashrc 에 추가한다.
ORACLE_BASE=/proj/oracle; export ORACLE_BASE;
ORACLE_HOME=$ORACLE_BASE/product/9.2.0.4; export ORACLE_HOME;
ORACLE_SID=ORA91; export ORACLE_SID;
LD_LIBRARY_PATH=$ORACLE_HOME/lib; export LD_LIBRARY_PATH;
ORACLE_OEM_JAVARUNTIME=/usr/local/jdk1.3.1_19; export ORACLE_OEM_JAVARUNTIME;
PATH=$PATH:$ORACLE_HOME/bin; export PATH;

사실 여기까지는 보통 오라클 설치하는 수행단계이다.
하지만 운영체제가 최신 버젼이라서 각종 라이브러리가 다 최신이라서 많은 충돌이 난다.
하지만 이전에도 그랬다 시피 ln -s 로 신버젼이름을 구버젼이름으로 소프트링크를 만들면 해결이 된다.

추가적인 부분은 자바도 몇개를 그렇게 해야 된다는 것이다.

우선 centos가 한글화 되어 있다면,
disk1의 runInstaller 로 나타나는 오라클 설치화면의 한글이 깨진다.
(보통 ko_KR.eucKr 로 되어 있다.)

오라클계정에만 LANG=c; export LANG; 를 한다.

그리하여, 추가된 oracle 계정의 bashrc를 보면,

#JAVA
JAVA_HOME=/usr/local/jdk1.3.1_19; export JAVA_HOME;
PATH=$JAVA_HOME/bin:$PATH; export PATH;
#ORACLE
LANG=c; export LANG;
ORACLE_BASE=/proj/oracle; export ORACLE_BASE;
ORACLE_HOME=/proj/oracle/product/9.2.0.4; export ORACLE_HOME;
ORACLE_SID=ORA91; export ORACLE_SID;
ORACLE_OEM_JAVARUNTIME=/usr/local/jdk1.3.1_19; export ORACLE_OEM_JAVARUNTIME;
NLS_LANG=american_america.KO16KSC5601; export NLS_LANG;
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data; export ORA_NLS33;
PATH=$PATH:$ORACLE_HOME/bin; export PATH;
LD_LIBRARY_PATH=$ORACLE_HOME/lib; export LD_LIBRARY_PATH;

마지막 라인이 위와 같을 것이다.
설치하기 전에 /proj/oracle 폴더를 만들고, chown 으로 oracle 계정을 주인으로 바꾸어야 한다.
설정화일의 변경은 source ~/.bashrc 로 한다.(오라클계정으로)

몇개 설치 rpm 및 ln 링크가 있는데,
무턱대고 설치해서 정리가 안되었네요. OTL...

http://theone79.tistory.com/tag/9i%20install

위의 링크에 잘 나와 있으니 위의 링크를 참고하세요.

이제 오라클계정으로 disk1 폴더에서 runInstaller를 수행한다.
필요한 설정대로 오라클 설치를 계속 진행한다.
disk2가 어딨냐고 하면 잘 알려준다.
disk3도 물어본다.

하지만 마지막에 configuration 툴 동작하는 부분에서 에러가 나타난다.
libc.so.6 관련 에러가 많이 나온다.

에러난 상태로 그대로 두고 다른 콘솔창으로 위의 링크의 나머지 설정3 번 이후를 작업해 주고
retry를 하면 됩니다.

끝.











 

 

 

 

개발자에게는 블로그도 사치인가?

 

최근 필자의 상황이 웃기게 되었다.

 

A라는 프로젝트가 기간이 길어져서,

B라는 프로젝트와 기간이 겹치게 되었다.

 

두 프로젝트는 무려 3개월의 기간차이가 있었음에도 불구하고,

A라는 프로젝트는 무려 6개월의 기간연장을 하였다. 추후 더 연장할 수도 있었다.

 

낮에는 B 프로젝트에서 근무하고 밤에는 A 프로젝트에서 근무하라는 필자의 회사도 아무래도 제 정신은 아닌것 같다.

 

블로그 하나 유지할 시간도 안주나?

 

 

 

2010년 3월 29일 월요일

애플릿 개발 시작하기...

 

애플릿을 실제 개발해 보면서, 겪게 되는 문제점과 해결 방법들에 대해서 기술하면서,

진행을 해 보도록 하겠습니다.

 

이제까지의 글은 원론적인것과 디버깅 옵션 켜주는 정도가 거의 다 였지만,

실제적인 예제가 많은 도움이 될것이라고 예상해 봅니다.

 

저는 Jetbrains 사의 Intellij(94.633 MAP버젼, 9.01) 를 사용해서 예제를 돌려보고,

글을 작성하였습니다.

 

우선 이클립스나 Intellij나 만드는 방법이 좀 다를뿐, 결과적으로 자신이 편리한 툴을 사용하면 됩니다.

이글은 인텔리제이 기준으로 작성되어 있습니다.

 

새 자바 프로젝트를 작성하고, 마지막에 자동으로 모듈생성부분 체크하여, 빈 프로젝트를 하나 만듭니다.

프로젝트 이름은 NGApplet으로 하였습니다. 넥젠애플릿의 약자로 해 보았습니다.

저는 여기에서 각 글마다 새로운 모듈을 추가하여, 작성하는 형태로 진행해 보도록 하겠습니다.

만들어진 새 프로젝트의 프로퍼티 창이 나타나면, 제너레이트 되는 자바 버젼을 1.6(또는 6)으로 맞추어 주십시요. 아마 프로젝트를 리로드하라고 나올것입니다.

 

프로젝트가 바쁘다가 보니, 글이 정말 띄엄띄엄 올라오는군요.

우선 첫번째 경험을 해볼 내용은 애플릿의 기초인, 초기화 단계입니다.

 

새 모듈을 ch01 이라는 이름으로 추가하신 다음에

add new package 로 ng.applet 을 입력해서 패키지를 만든 후,

A1 이라는 클래스를 추가한 후, extends Applet 이라고 클래스 선언부를 수정해서

Applet 클래스가 되도록 합니다.

alt-insert 키로 나타나는 제너레이트 팝업메뉴에서 (마우스 오른쪽 버튼과 다름.) override methods

를 선택합니다.

 

Applet 클래스의 init(), start(), stop(), destory() 의 세개의 메서드를 선택합니다.

 

A1 애플릿에 네개의 메서드가 아무런 메서드 바디없이 떵그런히 오버라이드 되어 있습니다.

우선적으로 이제까지 한일만 봐도, 무엇을 하려는지 뻔~ 합니다.

init()와 destory()는 이름만 봐도 뭐하는 녀셕들인지 감이 팍팍 옵니다.

 

그리하여, 각 함수마다 각 함수 이름을 System.out에 찍도록 합니다.

 

@Override
    public void init() {
        super.init();           

        System.out.println("init()");
    }

    @Override
    public void start() {
        super.start();

        System.out.println("start()");
    }

    @Override
    public void stop() {
        super.stop();
        System.out.println("stop()");
    }

    @Override
    public void destroy() {
        super.destroy();

        System.out.println("destroy()");
    }

 

요런 식으로 되는 것이죠.

 

ctrl+alt+F10 을 클릭하면, 별다른 설정 없이 클래스를 보고 판단해서 인텔리제이가 알아서 실행해 줍니다.

애플릿은 대다수 툴들은 거의 다 애플릿 뷰어를 통해서 실행하고 화면에 표시해 줍니다.

 

우선 실행되면, 인텔리제이의 콘솔에 init(), start() 가 표시됩니다.

이후, 애플릿뷰어를 닫으시면, 추가적으로 stop(), destroy()가 출력됩니다.

 

그러므로 애플릿의 실행주기가 명확해 졌습니다.

 

init() -> start() - 실행상태 -> stop() -> destroy() 의 상태가 되는 것입니다.

자동으로 생성된 실행 설정을 다시 한번 실행시킵니다.(애플릿 재 실행)

다시 애플릿 뷰어가 나타나면, 콘솔에 init(), start()가 나타납니다.

애플릿 뷰어의 메뉴 중 stop(멈춤)을 클릭하면, 콘솔에 stop() 표시가 나타납니다.

 

즉, stop() 메서드는 반드시 destroy()될때만 수행되는 것이 아니라는 것을 알아야 합니다.

반면, start() 메서드는 init()이후 반드시 한번은 호출됩니다.

 

또한 애플릿 뷰어 메뉴에서 start(시작)메뉴를 클릭하면, 다시 start() 메서드가 수행됩니다.

 

init() -> start() -> 실행상태 -> stop() -> start() -> stop() -> destroy() 의 순서가 되었습니다.

즉, 생성된 애플릿은 init() 와 destory() 사이에서 start와 stop을 반복할 수 있습니다.

 

여기서 다시 애플릿 뷰어를 닫으면 stop()이 호출되고, 그후, destory가 호출됩니다.

stop() 역시 destory()되기전에 반드시 호출된다는 것을 기억하는 것이 좋습니다.

start()와 는 반대적인 시점입니다.

 

하지만 애플릿 클래스가 일반 클래스와 다르게 동작하느냐??

그렇지 않습니다. 작성한 A1 애플릿에 기본 생성자(인자가없는 public 생성자)를 추가합니다.

그리고는 A1() 이라고 System.out에 찍습니다.

 

실행을 시켜보면,

 

A1()
init()
start()
stop()
destroy()

 

의 순으로 나타납니다.

그러므로, 결국 init() 메서드도 초기화 작업을 수행한다고 쉽게 생각하겠지만,

자바 프로그래밍 레벨에서는 애플릿을 위한 초기화 수행일뿐, 실제 자바 클래스적 로직을 수행하려면, 생성자 클래스를 사용해야 합니다.

 

이것은 로직을 작성하는데, 매우 중요하게 사용되는 부분입니다.

init() 에서 사용하는 것 보다, 반드시 먼저 초기화 및 생성레벨에서 필요한 클래스들의 작성등에 매우 중요한 영향을 미칩니다.

 

애플릿 뷰어로 테스트하는 것은 여기까지 입니다.

다음에 작성할 글 부터는 애플릿 뷰어는 사용하지 않고, 실제 웹 서버를 이용하여 예제를 작성하도록 하

겠습니다. 왜냐하면 애플릿 뷰어는 JSObject라는 자바스크립트와 통신하는 기능이 없기 때문에, JSOBject를 사용하면, Exception이 발생합니다. unsupport 되는 것이죠.

 

그리하여, 다음 글 부터는 tomcat6과 인텔리제이, 그리고 넥젠애플릿의 환경에서 글을 작성해 보겠습니다.

 

 

 

 

 

 

 

 

 

 

 

2010년 2월 23일 화요일

oracle jDeveloper 11g에서 실행시 오류 해결하기

오라클의 jDeveloper 11g를 다운받고 설치하고, 실행해 보니 에러가 나더군요.

 

Unable to create an instance of the Java Virtual Machine
Located at path:
%JAVA_HOME%\jre\bin\client\jvm.dll

 

* %JAVA_HOME%은 jdk가 설치된 디렉토리입니다.

 

이러한 에러는 정말 자바 개발자들한테 매우 자주보는 그런 에러입니다.

이클립스나 인텔리제이나, 제이디벨로퍼나 마찬가지인 바로 그 에러이죠.

 

C:\Oracle\Middleware\jdeveloper\jdev\bin

 

jDeveloper 설치디렉토리중 위의 디렉토리에 가신후,

jdev.conf 에서 vmoption을 수정해야 됩니다. 수정해야 될 vmoption은 눈치채셨겠지만,

인텔리제이와, 이클립스와 마찬가지로, 메모리 부분입니다.

 

여기서 약간 시스템마다 다른데,

 

AddVMOption  -XX:MaxPermSize=256M
* AddVMOption  -Xmx768M

 

* 이부분을 추가하시면 일반적으로 될것입니다.

그러나 여러분의 윈도우 운영체제가 많은 프로그램을 실행했거나, 재부팅한지 매우 오래되었을 경우,

jvm은 연속적 메모리 할당을 받지 못할수 있습니다.

연속적메로리 할당에는 768M 라는 메모리가 중간 중간에 메모리 영역에 널리 퍼져있지 않고,

한 블럭으로 할당되어야 한다는 것을 의미합니다.

jvm이 알아서 그렇게는 못하고, 원도우가 알아서 해줘야 하는데, 그것도 그렇지 못합니다.

많은 양의 메모리 요청을 해서 윈도우가 강제적으로 수행하는 방법과, 메모리 관련 유틸리티를 수행하여, 메모리 defrag를 수행하도록 하는 수 밖에 없습니다.

 

만약 위처럼 해도 안되면 숫자를 줄이셔야 합니다.

 

* AddVMOption  -XX:MaxPermSize=128M
* AddVMOption  -Xmx768M

 

MaxPermSize를 줄여 봤습니다.

이것도 안된다면 -Xmx512M 등과 같이 최대메모리도 줄여 봅니다.

 

수행속도를 증가하기 위해서는 -Xmx와 같은 용량의 -Xms 도 넣어 주는것이 좋습니다.


 

 

 

2010년 2월 8일 월요일

cygwin 1.7 에서 한글 설정하기

 

바탕화면에 있는 cygwin 아이콘의 경로를 보면, cygwin.bat 화일을 가르키는데,

해당 bat 화일을 열면

 

@echo off

C:
chdir C:\cygwin\bin
bash --login -i

 

와 같은 내용이 있는데,

 

@echo off

C:
chdir C:\cygwin\bin
set LANG=ko_KR.eucKR
bash --login -i

위와 같이 수정한다.

추가적으로 1.7 버젼 부터는 windows 7 와 windows 2008 r2 버젼을 지원하는 것으로 릴리즈노트에 되어 있네요.

그래서 windows 2008 r2 64bit 에 설치해 봤습니다.

 

결과적으로 잘 됩니다. sshd를 서비스로 등록하는 것과 별도의 계정으로 생성하여 관리하는 것, 권한 설정등 그동안 몇가지 거쳐야 되었던 부분들이 알아서 잘 진행 되네요.

 

 

 

 

2010년 2월 4일 목요일

솔라리스에서 /dev/null 재 생성하기.

솔라리스에서 /dev/null 삭제시 재 생성 방법


# cd /dev
# ln -s ../devices/psuedo/mm at 0:null null
[반드시 /dev 폴더내에서 실행해야 합니다.]

# /usr/sbin/mknod /dev/null c 13 2
# chown root:sys /dev/null ; chmod 666 /dev/null

 

 

2010년 2월 2일 화요일

eclipse galileo 에 maven plugin 설치

 

이클립스는 자체적으로는 별반 일반적인 에디터와 자바 컴파일 도구이지만,

플러그인과 결합하여, 편리함을 발휘합니다.

 

maven 플러그인을 설치하여, maven 프로젝트와 연동작업을 수행할 수 있도록, maven 플러그인을 설치합니다.

 

http://m2eclipse.sonatype.org/update-dev/

 

이클립스를 수행후, Help -> install new softwares 를 클릭합니다.

 

새창이 나타나는데, 가장 상단의 텍스트 박스에 위의 주소를 입력하고 엔터를 누릅니다.

중간 리스트 박스에 설치 목록이 나타나는데, 맨 위에 체크박스를 체크 후, next 로 다음으로 진행하여, 라이센스를 수락하면, 설치가 이루어 집니다.

 

다 설치후, 재시작을 요구할 것입니다.

 

재시작을 하면, "오잉? 이게 뭐야?"라고 말할지도 모르겠습니다.

 

대다수 플러그인을 설치후 화면에 뭐가를 표시하지 않지만 maven 플러그인은 뜨우는것 부터 warning 창을 보여줍니다.

 

내용을 보면 maven 플러그인은 몇몇 jdk의 라이브러리를 직접 사용하기 때문에, 이클립스의 jdk 를 사용하지 말고, 직접 설치한 jdk 를 사용하도록 이클립스의 -vm 파라미터로 직접 설치한 jdk의 경로를 입력해 달라고 합니다.

 

http://www.matsim.org/book/export/html/273

 

자세한 내용은 위의 링크에서 찾아 볼수 있습니다.

 

그리하여, 이클립스가 설치된 디렉토리에 가셔셔 eclipse.ini 를 수정해 줘야 합니다.

-vmargs 라인 바로 윗 줄에

-vm

jdk가설치된경로\bin\javaw.exe

 

라고 적어 주시면 됩니다.

 

다시 이클립스를 실행하면, 경고창이 나타나지 않아야 제대로 수정한 것입니다.

만약 경고창이 나타난다면 위의 참고 링크를 보시고, help-> about -> installation detail 에 가셔셔 configuration 를 보시면, -vm 파라미터에 어떤 값이 들어가고 있는지를 확인 할 수 있습니다.