Postgresql Partitioning

Posted at 2012. 1. 22. 17:23 | Posted in Database
반응형
Postgresql 파티션 테이블 생성 및 사용 방법입니다.

http://www.postgresql.org/docs/8.4/static/ddl-partitioning.html



Create Partition Table

먼저 파티션 테이블을 적용할 마스터 테이블을 하나 만듭니다.

  1. -- drop table log cascade;
  2.  
  3. -- master table
  4. create table log (
  5.     -- uuid
  6.     log_uuid UUID not null default uuid_generate_v4(),
  7.     -- 인증 아이디
  8.     athn_id text not null,
  9.     -- 서비스명
  10.     svc_nm text not null,
  11.     -- 오퍼레이션명
  12.     oprt_nm text not null,
  13.     -- 요청일시
  14.     log_rqst_dt timestamp not null,
  15.     -- 응답일시
  16.     log_rply_dt timestamp not null,
  17.     -- 상태 코드
  18.     log_stat_cd text not null,
  19.     -- 등록일시
  20.     log_crtn_dt timestamp not null
  21. );

이제 데이터를 월 단위로 나눠서 담게될 파티션 테이블 12개를 만들어줍니다.

  1. -- partition table
  2. create table log_m01 (
  3.     check (date_part('month', log_rqst_dt) = 1)
  4. ) inherits (log);
  5.  
  6. create table log_m02 (
  7.     check (date_part('month', log_rqst_dt) = 2)
  8. ) inherits (log);
  9.  
  10. create table log_m03 (
  11.     check (date_part('month', log_rqst_dt) = 3)
  12. ) inherits (log);
  13.  
  14. create table log_m04 (
  15.     check (date_part('month', log_rqst_dt) = 4)
  16. ) inherits (log);
  17.  
  18. create table log_m05 (
  19.     check (date_part('month', log_rqst_dt) = 5)
  20. ) inherits (log);
  21.  
  22. create table log_m06 (
  23.     check (date_part('month', log_rqst_dt) = 6)
  24. ) inherits (log);
  25.  
  26. create table log_m07 (
  27.     check (date_part('month', log_rqst_dt) = 7)
  28. ) inherits (log);
  29.  
  30. create table log_m08 (
  31.     check (date_part('month', log_rqst_dt) = 8)
  32. ) inherits (log);
  33.  
  34. create table log_m09 (
  35.     check (date_part('month', log_rqst_dt) = 9)
  36. ) inherits (log);
  37.  
  38. create table log_m10 (
  39.     check (date_part('month', log_rqst_dt) = 10)
  40. ) inherits (log);
  41.  
  42. create table log_m11 (
  43.     check (date_part('month', log_rqst_dt) = 11)
  44. ) inherits (log);
  45.  
  46. create table log_m12 (
  47.     check (date_part('month', log_rqst_dt) = 12)
  48. ) inherits (log);

기본키를 생성합니다.

  1. -- create primary key
  2. alter table log add constraint log_pk primary key (log_uuid);
  3. alter table log_m01 add constraint log_m01_pk primary key (log_uuid);
  4. alter table log_m02 add constraint log_m02_pk primary key (log_uuid);
  5. alter table log_m03 add constraint log_m03_pk primary key (log_uuid);
  6. alter table log_m04 add constraint log_m04_pk primary key (log_uuid);
  7. alter table log_m05 add constraint log_m05_pk primary key (log_uuid);
  8. alter table log_m06 add constraint log_m06_pk primary key (log_uuid);
  9. alter table log_m07 add constraint log_m07_pk primary key (log_uuid);
  10. alter table log_m08 add constraint log_m08_pk primary key (log_uuid);
  11. alter table log_m09 add constraint log_m09_pk primary key (log_uuid);
  12. alter table log_m10 add constraint log_m10_pk primary key (log_uuid);
  13. alter table log_m11 add constraint log_m11_pk primary key (log_uuid);
  14. alter table log_m12 add constraint log_m12_pk primary key (log_uuid);

인덱스를 생성합니다. 마스터 테이블은 인덱스를 생성하지 않습니다.

  1. -- create index
  2. create index log_m01_athn_id_idx on log_m01 (athn_id);
  3. create index log_m01_svc_nm on log_m01 (svc_nm);
  4. create index log_m01_oprt_nm on log_m01 (oprt_nm);
  5.  
  6. create index log_m02_athn_id_idx on log_m02 (athn_id);
  7. create index log_m02_svc_nm on log_m02 (svc_nm);
  8. create index log_m02_oprt_nm on log_m02 (oprt_nm);
  9.  
  10. create index log_m03_athn_id_idx on log_m03 (athn_id);
  11. create index log_m03_svc_nm on log_m03 (svc_nm);
  12. create index log_m03_oprt_nm on log_m03 (oprt_nm);
  13.  
  14. create index log_m04_athn_id_idx on log_m04 (athn_id);
  15. create index log_m04_svc_nm on log_m04 (svc_nm);
  16. create index log_m04_oprt_nm on log_m04 (oprt_nm);
  17.  
  18. create index log_m05_athn_id_idx on log_m05 (athn_id);
  19. create index log_m05_svc_nm on log_m05 (svc_nm);
  20. create index log_m05_oprt_nm on log_m05 (oprt_nm);
  21.  
  22. create index log_m06_athn_id_idx on log_m06 (athn_id);
  23. create index log_m06_svc_nm on log_m06 (svc_nm);
  24. create index log_m06_oprt_nm on log_m06 (oprt_nm);
  25.  
  26. create index log_m07_athn_id_idx on log_m07 (athn_id);
  27. create index log_m07_svc_nm on log_m07 (svc_nm);
  28. create index log_m07_oprt_nm on log_m07 (oprt_nm);
  29.  
  30. create index log_m08_athn_id_idx on log_m08 (athn_id);
  31. create index log_m08_svc_nm on log_m08 (svc_nm);
  32. create index log_m08_oprt_nm on log_m08 (oprt_nm);
  33.  
  34. create index log_m09_athn_id_idx on log_m09 (athn_id);
  35. create index log_m09_svc_nm on log_m09 (svc_nm);
  36. create index log_m09_oprt_nm on log_m09 (oprt_nm);
  37.  
  38. create index log_m10_athn_id_idx on log_m10 (athn_id);
  39. create index log_m10_svc_nm on log_m10 (svc_nm);
  40. create index log_m10_oprt_nm on log_m10 (oprt_nm);
  41.  
  42. create index log_m11_athn_id_idx on log_m11 (athn_id);
  43. create index log_m11_svc_nm on log_m11 (svc_nm);
  44. create index log_m11_oprt_nm on log_m11 (oprt_nm);
  45.  
  46. create index log_m12_athn_id_idx on log_m12 (athn_id);
  47. create index log_m12_svc_nm on log_m12 (svc_nm);
  48. create index log_m12_oprt_nm on log_m12 (oprt_nm);

마스터 테이블에 인서트가 될 때 각 파티션 테이블로 데이터를 인서트할 트리거를 만듭니다.

룰(RULE), 트리거(TRIGGER) 두가지 방법이 있는데 전 트리거를 사용하겠습니다.

  1. create language plpgsql;
  2.  
  3. create or replace function log_insert_trigger()
  4. returns trigger as $$
  5. begin
  6.     if ( date_part('month', new.log_rqst_dt) = 1 ) then
  7.         insert into log_m01 values (new.*);
  8.     elsif ( date_part('month', new.log_rqst_dt) = 2 ) then
  9.         insert into log_m02 values (new.*);
  10.     elsif ( date_part('month', new.log_rqst_dt) = 3 ) then
  11.         insert into log_m03 values (new.*);
  12.     elsif ( date_part('month', new.log_rqst_dt) = 4 ) then
  13.         insert into log_m04 values (new.*);
  14.     elsif ( date_part('month', new.log_rqst_dt) = 5 ) then
  15.         insert into log_m05 values (new.*);
  16.     elsif ( date_part('month', new.log_rqst_dt) = 6 ) then
  17.         insert into log_m06 values (new.*);
  18.     elsif ( date_part('month', new.log_rqst_dt) = 7 ) then
  19.         insert into log_m07 values (new.*);
  20.     elsif ( date_part('month', new.log_rqst_dt) = 8 ) then
  21.         insert into log_m08 values (new.*);
  22.     elsif ( date_part('month', new.log_rqst_dt) = 9 ) then
  23.         insert into log_m09 values (new.*);
  24.     elsif ( date_part('month', new.log_rqst_dt) = 10 ) then
  25.         insert into log_m10 values (new.*);
  26.     elsif ( date_part('month', new.log_rqst_dt) = 11 ) then
  27.         insert into log_m11 values (new.*);
  28.     elsif ( date_part('month', new.log_rqst_dt) = 12 ) then
  29.         insert into log_m12 values (new.*);
  30.     else
  31.         raise exception 'month out of range. fix the log_insert_trigger() function!';
  32.     end if;
  33.  
  34.     -- return null
  35.     return null;
  36. end;
  37. $$
  38. language plpgsql;
  39.  
  40. -- log 마스터 테이블에 트리거 적용
  41. create trigger log_insert_trigger
  42. before insert on log
  43. for each row execute procedure log_insert_trigger();



Select Partition Table

이제 파티션 테이블은 다 만들었습니다.

이렇게 만들어진 파티션 테이블을 관리용(월 단위 삭제라든가..)으로 사용할땐 상관이 없지만, 조회(select)시에 그냥 하면 파티션을 제대로 이용하지 못합니다.

파티션을 만들 때 CHECK 구문에 들어갔던 조건절이 반드시 들어가야 합니다.

이게 뭔 소리냐 하면...

  1. select
  2.     count(*)
  3. from
  4.     log
  5. where
  6.     log_rqst_dt between date '2011-04-11' and date '2011-05-02'

파티션의 기준이 됐던 "log_rqst_dt" 컬럼의 범위로 검색을 했씁니다.

어떻게 검색이 되는지 보면 아래와 같습니다..


월단위로 나눠서 저장했던 12개의 테이블을 다 스캔하게 됩니다. ㅠ_ㅠ

log_m04, log_m05 테이블만 조회 해야 하지요....

아래와 같이 파티션 테이블 만들때의 CHECK 조건을 명시해줘야 합니다.

  1. select
  2.     count(*)
  3. from
  4.     log
  5. where
  6.     log_rqst_dt between date '2011-04-11' and date '2011-05-02'
  7.     and date_part('month', log_rqst_dt) in (4,5)

7번 라인처럼 하면 두개의 테이블만 스캔합니다.


이번에는 인덱스로 지정한 컬럼으로 검색 해봅시다.

  1. select
  2.     count(*)
  3. from
  4.     log
  5. where
  6.     date_part('month', log_rqst_dt) in (1,2,3)
  7.     and athn_id = 'athn_02'
  8.     and log_rqst_dt between date '2011-01-01' and date '2011-03-02'

마찬가지로 파티션을 검색에 적용하려면 조건을 넣어줘야 합니다.



물론 날짜 범위 검색이 필수가 아니게 되면 12개 테이블을 전부 스캔하게 되니 주의!!!

반응형
//

Eclipse + TPTP Remote

Posted at 2012. 1. 20. 21:23 | Posted in Tools/Eclipse
반응형
Eclipse + TPTP (Eclipse Test & Performance Tools Platform) 에 이어서 원격지에 있는 WAS 를 프로파일링 해봅시다.

Ubuntu 11.04 32bit 에서 테스트 하겠습니다.

$ uname -a
Linux nerv.kr 2.6.38-8-generic-pae #42-Ubuntu SMP Mon Apr 11 05:17:09 UTC 2011 i686 i686 i386 GNU/Linux

http://dev.eclipse.org/viewcvs/viewvc.cgi/platform/org.eclipse.tptp.platform.agentcontroller/src-native-new/packaging_md/linux/getting_started.html?root=TPTP_Project&view=co



Setting Up Agent Controller

서버에 심어둘 Agent Controller(AC)를 다운로드 합니다.

http://www.eclipse.org/tptp/home/downloads/


다운로드 받아서 압축을 풉니다. (전 "opt/tptpAC" 에 풀었습니다.)

bin 디렉토리의 SetConfig.sh 스크립트를 한번 실행해줍니다.

1. JVM 위치 : 디폴트 값이 맞다면 그냥 엔터로 넘기시면 됩니다.
2. 네트워크 엑세스 : ALL
3. 보안 사용 : 패스

/opt/tptpAC/bin# ./SetConfig.sh
Specify the fully qualified path of "java" (e.g. /usr/java1.4/jre/bin/java):
  Default>"/usr/lib/jvm/java-6-sun-1.6.0.26/jre/bin/java" (Press <ENTER> to accept the default value)
  New value>/usr/lib/jvm/java-6-sun/bin/java
Network access mode (ALL=allow any host, LOCAL=allow only this host, CUSTOM=list of hosts):
  Default>"LOCAL" (Press <ENTER> to accept the default value)
  New value>ALL
Security enabled. (true/false):
  Default>"FALSE" (Press <ENTER> to accept the default value)
  New value>

/opt/tptpAC/bin#

Agent Controller Server 를 실행합니다. (끄는건 ACStop.sh)

/opt/tptpAC/bin# ./ACStart.sh
Starting Agent Controller.
ACServer started successfully.


Checking Agent Controller Installation

한번 테스트 해봅시다.

/opt/tptpAC/bin# ./SampleClient

Connected to the Agent Controller on "localhost" at port number 10006

The Time Collector Agent ID: 103

Established a data channel with the agent.

Sending 5 Hello messages over data channel to TimeCollector ...

Start the TimeCollector ...

Incoming data: Hello from Time Collector Agent - Count 0
Incoming data: Hello from Time Collector Agent - Count 1
Incoming data: Hello from Time Collector Agent - Count 2
Incoming data: Hello from Time Collector Agent - Count 3
Incoming data: Hello from Time Collector Agent - Count 4
Incoming data: Hello from Time Collector Agent - Count 5

Stop the TimeCollector ...

Incoming data: Hello from Time Collector Agent - Count 6
Incoming data: Hello from Time Collector Agent - Count 7
Incoming data: Hello from Time Collector Agent - Count 8
Incoming data: Hello from Time Collector Agent - Count 9

All finished
Press enter key to exit...

/opt/tptpAC/bin#

포트가 열려 있는지 확인 해봅시다.

# netstat -n -a | grep 10002
tcp6       0      0 :::10002                :::*                    LISTEN
tcp6       0      0 ***.***.***.***:10002       ***.***.***.***:50412       ESTABLISHED

# netstat -n -a | grep 10005
tcp6       0      0 :::10005                :::*                    LISTEN

# netstat -n -a | grep 10006
tcp6       0      0 :::10006                :::*                    LISTEN
tcp6       0      0 ***.***.***.***:10006       ***.***.***.***:50414       ESTABLISHED



Profiling a Java Application

이제 톰켓을 프로파일링 모드로 구동시켜 봅시다.

시작 스크립트 부분에 아래와 같이 환경변수를 세팅해 줍니다.

# 임시 디렉토리 설정(옵션)
export TEMP="/tmp"
export TMP="/tmp"

export TPTP_AC_HOME="/opt/tptpAC"
export JAVA_PROFILER_HOME="${TPTP_AC_HOME}/plugins/org.eclipse.tptp.javaprofiler"
export PATH="${JAVA_PROFILER_HOME}:${TPTP_AC_HOME}/bin:${PATH}"
export LD_LIBRARY_PATH="${JAVA_PROFILER_HOME}:${TPTP_AC_HOME}/lib:${LD_LIBRARY_PATH}"

그리고 자바 옵션에 아래와 같이 추가합니다.

프로파일링의 종류는 3가지가 있습니다.

- CGProf : Execution time analysis.
- HeapProf : Object allocation/heap analysis.
- Thread : Thread analysis.

-agentlib:JPIBootLoader=JPIAgent:server=controlled;CGProf

저의 구동 스크립트는 CATALINA_OPTS 변수를 사용하더군요 ㅎㅎ

export CATALINA_OPTS="$CATALINA_OPTS -agentlib:JPIBootLoader=JPIAgent:server=enabled;HeapProf"

※ 만약 JPIAgent 를 찾을 수 없다거나 에러가 난다면 앞뒤로 '(쿼터)를 추가해 봅시다.

OS 종류에 따라 좀 틀려서.. ㅠ_ㅠ

export CATALINA_OPTS="$CATALINA_OPTS '-agentlib:JPIBootLoader=JPIAgent:server=enabled;HeapProf'"

옵션이 제대로 박혀 들어가 있는지도 확인 해봅시다.

# ps -ef | grep tomcat6
tomcat6   5899     1  2 20:12 ?        00:01:15 /usr/lib/jvm/java-6-sun/bin/java -Djava.util.logging.config.file=/var/lib/tomcat6/conf/logging.properties -Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms256m -Xmx512m -agentlib:JPIBootLoader=JPIAgent:server=enabled;HeapProf -Djava.endorsed.dirs=/usr/share/tomcat6/endorsed -classpath /usr/share/tomcat6/bin/bootstrap.jar -Dcatalina.base=/var/lib/tomcat6 -Dcatalina.home=/usr/share/tomcat6 -Djava.io.tmpdir=/tmp/tomcat6-tmp org.apache.catalina.startup.Bootstrap start



이제 이클립스에서 원격으로 붙어서 상태를 확인 해봅시다.

물론 TPTP 플러그인은 깔려 있어야 합니다. ^^;;

Run - Profile Configurations...



Attach to Agent 를 추가하고 원격으로 볼 주소를 Default Hosts 에 추가합니다.



Agents 탭에 보면 떠있는 프로파일링이 보입니다. (바로 안보이면 Refresh 버튼 한번 클릭!)

선택 후 "Profile" 버튼을 클릭합니다.



"Profiling and Logging" 퍼스펙티브로 이동해서 보면 "Profiling Monitor" 탭에 등록한 호스트가 보일겁니다.

더블클릭해서 보면 프로파일링 결과가 나옵니다. ㅎㅎ




생각보다는 어렵지 않네요...

반응형

'Tools > Eclipse' 카테고리의 다른 글

Eclipse JVM 경로 지정하기  (0) 2016.09.13
Eclipse + SVN Plugin  (1) 2012.03.29
Maven Integration for Eclipse  (0) 2012.02.20
Eclipse + TPTP (Eclipse Test & Performance Tools Platform)  (4) 2012.01.01
Eclipse + MyBatis Generator  (1) 2011.07.04
installation Oracle Enterprise Pack for Eclipse  (2) 2011.05.22
Eclipse + STS (SpringSource Tool Suite)  (1) 2011.01.16
Eclipse Plugins for JBoss technology  (1) 2011.01.11
Properties Editor  (1) 2009.11.17
UTF-8 설정  (0) 2009.11.16
//
반응형
요즘들어 개발 자체보다는 프로파일링이나 APM 쪽에 관심이 생겼습니다.

프로파일링 툴중 하나로 TPTP 라는 것이 있길래 이것저것 해보았습니다. ^^;;

TPTP 를 이용하여 웹어플(Web Application)을 프로파일링 해보겠습니다!

http://www.eclipse.org/tptp/



http://www.eclipse.org/tptp/home/documents/tutorials/profileOnServer/TPTP-WTP.html

Eclipse 3.6 (Helios) SR2 에서 진행합니다.



Installing TPTP prerequisites

TPTP 설치 전에 필요로 하는 플러그인들이 있습니다.

1. WTP (Web Tools Platform) - http://eclipse.org/webtools/

이클립스를 J2EE 버전으로 설치했다면 포함되어 있습니다.


2. EMF (Eclipse Modeling Framework) - http://www.eclipse.org/modeling/emf/




3. GEF (Graphical Editing Frame work) - http://www.eclipse.org/gef/



Installing TPTP

이클립스를 이용하여 다운로드 하면 다운로드 진행이 안되서 전 플러그인을 다운로드 받아서 설치했습니다.

4.7.2 - http://www.eclipse.org/downloads/download.php?file=/tptp/4.7.2/TPTP-4.7.2/tptp.sdk-TPTP-4.7.2.zip



Downloading and installing the Agent Controller

TPTP 를 사용하기 위해선 AC(Agent Controller)라는 것을 심어놔야 하는데 로컬 서버는 필요 없습니다.


Setting up a Server

그냥 톰켓 7.0 으로 테스트 하겠습니다.

 



Profile a Server

이제 준비는 끝났습니다.

서버(WAS)를 시작할 때 프로파일 모드(?)로 실행하면 됩니다.



아래와 같이 팝업이 뜹니다.


실행시간(Execuion Time), 메모리(Memory), 쓰래드(Thread)를 분석Analysis할 수 있습니다.

3개중 하나를 선택 하고 "Finish" 버튼을 클릭 하면 WAS 가 기동됩니다.

기동된 후 아래와 같이 창이 뜹니다.


퍼스펙티브(Perspective)를 변경할 거냐고 물어보는데 어차피 상세내역을 보려면 변경해서 봐야하므로 아무거나 선택 ^^;;



웹어플을 이것저것 테스트한 후에 "Profilling Monitor" 뷰에서 더블클릭 하거나 "Profiling and Logging" 퍼스펙티브를 선택하여 이동합니다.




그러면 아래와 같이 각 메소드마다 처리 시간을 볼 수 있네요~

 


나머지 두가지(메모리, 쓰래드)는 각자 해보시면 되겠습니다. -_-;;

오른쪽 상단의 아이콘이나 컨텍스트 메뉴를 이용하면 이런저런 기능들이 많네요~



자기 로컬에서 하는 것은개발할 때 잠깐 켜놓는 것이기 때문에 아주 눈에 띄게 잘못된 부분이 아니면 찾아내기는 힘들 것 같습니다.

통합테스트나 할 때 개발(운영) 서버에 띄워놓고 장기간 관찰해야 진짜로 효과가 있을듯 합니다.

이제 원격지에 AC(Agent Controller)를 심어놓고 하는 방법을 공부해봐야 겠습니다. ㅠ_ㅠ

반응형

'Tools > Eclipse' 카테고리의 다른 글

Eclipse JVM 경로 지정하기  (0) 2016.09.13
Eclipse + SVN Plugin  (1) 2012.03.29
Maven Integration for Eclipse  (0) 2012.02.20
Eclipse + TPTP Remote  (1) 2012.01.20
Eclipse + MyBatis Generator  (1) 2011.07.04
installation Oracle Enterprise Pack for Eclipse  (2) 2011.05.22
Eclipse + STS (SpringSource Tool Suite)  (1) 2011.01.16
Eclipse Plugins for JBoss technology  (1) 2011.01.11
Properties Editor  (1) 2009.11.17
UTF-8 설정  (0) 2009.11.16
//

jQuery UI Datepicker IE 버그 해결...

Posted at 2011. 8. 26. 14:27 | Posted in JavaScript/jQuery
반응형
jquery ui 중 Datepicker 라는 것이 있습니다. 날짜를 선택할 수 있게 해주는 UI 입니다.

요게 잘 되는 것 같지만 IE(Internet Explorer)에서는 약간의 문제가 있습니다.

사용할 수 없을 정도는 아니고 날짜를 선택 했는데 달력이 또 나오게 됩니다.





1. 해당 텍스트 입력에 포커스가 가게 됩니다.

2. 달력(datepicker)창이 열립니다.

3. 날짜를 하나 선택합니다.

4. 창이 닫힙니다.

5. 해당 텍스트 입력으로 포커스가 다시 갑니다.

2. 달력(datepicker)창이 열립니다.

이와 같이 달력 밖 영역을 클릭해서 없애지 않는한 무한 날짜 선택이 됩니다. -_-;;

그냥 냅둬도 되지만... 찜찜해서 아예 포커스를 안주게 수정 하였습니다.

    /* Update the input field with the selected date. */
    _selectDate: function(id, dateStr) {
        var target = $(id);
        var inst = this._getInst(target[0]);
        dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
        if (inst.input)
            inst.input.val(dateStr);
        this._updateAlternate(inst);
        var onSelect = this._get(inst, 'onSelect');
        
        if (onSelect)
            onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
        else if (inst.input)
            inst.input.trigger('change'); // fire the change event
        if (inst.inline)
            this._updateDatepicker(inst);
        else {
            this._hideDatepicker();
            this._lastInput = inst.input[0];
            // 포커스를 주지 않는다.
            // inst.input.focus(); // restore focus
            // 포커스 해제
            inst.input.blur();
            this._lastInput = null;
        }
    },




반응형

'JavaScript > jQuery' 카테고리의 다른 글

Eclipse + Aptana : jQuery Code Assist 사용하기  (12) 2010.03.25
//

Eclipse + WebLogic 추가 설정 사항들...

Posted at 2011. 8. 23. 11:40 | Posted in Server/WebLogic
반응형
이클립스 콘솔에서 한글이 깨짐

Eclipse + WebLogic 연동해서 쓰고.....



Workspace 기본 인코딩(encoding)을 UTF-8로 설정하게 되면



서버를 띄운 후 콘솔(Console) 내용 중에 한글이 깨져서 나오게 됩니다.

<2010. 8. 22 ���� 12�� 46�� 49�� KST> <Info> <WebLogicServer> <BEA-000377> <Starting WebLogic Server with Java HotSpot(TM) Client VM Version 17.0-b16 from Sun Microsystems Inc.>
<2010. 8. 22 ���� 12�� 46�� 54�� KST> <Notice> <Se................

웹로직 로그파일이 UTF-8이 아니라서 그런데 설정을 해줘야합니다.

"......\user_projects\domains\domain1(도메인명)\bin" 폴더에서 setDomainEnv.cmd 파일을 수정합니다.

227 라인 정도 부분에 JAVA_PROPERTIES 환경 변수에 추가해줍니다.

set JAVA_PROPERTIES=-Dplatform.home=%WL_HOME% -Dwls.home=%WLS_HOME% -Dweblogic.home=%WLS_HOME%
 -Dfile.encoding=UTF8 -Dfile.client.encoding=UTF8

다시 웹로직을 시작 시키면 한글이 제대로 나옵니다.

서버 시작시 윕에서 적용한 옵션이 나오는 것을 확인할 수 있습니다.

.
***************************************************
*  To start WebLogic Server, use a username and   *
*  password assigned to an admin-level user.  For *
*  server administration, use the WebLogic Server *
*  console at http:\\hostname:port\console        *
***************************************************
starting weblogic with Java version:
java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b07)
Java HotSpot(TM) Client VM (build 17.0-b17, mixed mode, sharing)
Starting WLS with line:
C:\PROGRA~1\Java\JDK16~1.0_2\bin\java -client   -Xms256m -Xmx512m -XX:CompileThreshold=8000 -XX:PermSize=48m  -XX:MaxPermSize=128m -Dweblogic.Name=AdminServer -Djava.security.policy=C:\oracle\MIDDLE~1\11112~1.X\WLSERV~1.3\server\lib\weblogic.policy  -Xverify:none  -da -Dplatform.home=C:\oracle\MIDDLE~1\11112~1.X\WLSERV~1.3 -Dwls.home=C:\oracle\MIDDLE~1\11112~1.X\WLSERV~1.3\server -Dweblogic.home=C:\oracle\MIDDLE~1\11112~1.X\WLSERV~1.3\server -Dfile.encoding=UTF8 -Dfile.client.encoding=UTF8  -Dweblogic.management.discover=true  -Dwlw.iterativeDev= -Dwlw.testConsole= -Dwlw.logErrorsToConsole= -Dweblogic.ext.dirs=C:\oracle\MIDDLE~1\11112~1.X\patch_wls1032\profiles\default\sysext_manifest_classpath;C:\oracle\MIDDLE~1\11112~1.X\patch_jdev1111\profiles\default\sysext_manifest_classpath  weblogic.Server
<2010. 8. 19 오후 4시 19분 03초 KST> <Info> <WebLogicServer> <BEA-000377> <Starting WebLogic Server with Java HotSpot(TM) Client VM Version 17.0-b17 from Sun Microsystems Inc.>
<2010. 8. 19 오후 4시 19분 04초 KST> <Info> <Management> <BEA-141107> <Version: WebLogic Server 10.3.2.0  Tue Oct 20 12:16:15 PDT 2009 1267925 >
<2010. 8. 19 오후 4시 19분 06초 KST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to STARTING>
<2010. 8. 19 오후 4시 19분 06초 KST> <Info> <WorkManager> <BEA-002900> <Initializing self-tuning thread pool>
<2010. 8. 19 오후 4시 19분 07초 KST> <Notice> <LoggingService> <BEA-320400> <The log file .....




PermGen space 에러.

잘 사용하다가 "java.lang.OutOfMemoryError" 에러가 나면서 서버가 뻣어 버리니는 경우가 많이 일어납니다...

이클립스가 뻣는게 아니라 웹로직 서버가 뻣는 것입니다.

이유는 여러가지가 있겠지만 어쨋든 메모리가 딸린겁니다... -_-;;

이때는  PerGen 사이즈를 늘려주면 좀 더 오래 버팁니다 ㅠㅠ

해결법 1)

웹로직을 직접 죽입니다. 작업관리자에서 웹로직을 띄우고 있는 java.exe 를 죽이면 됩니다.


해결법 2)

메모리 사이즈를 늘려서 좀 더 오래 버티게 하는 방법이 있습니다.

서버를 띄울때 로그를 잘 보면 처음에 아래와 같은 로그를 볼 수 있습니다.

Starting WLS with line:
C:\PROGRA~1\Java\JDK16~1.0_2\bin\java -client   -Xms256m -Xmx512m -XX:CompileThreshold=8000 -XX:PermSize=48m  -XX:MaxPermSize=128m ....

이 크기를 늘려주면 됩니다.

이클립스와 연결된 도메인 폴더로 이동합니다. (이하 %DOMAIN_HOME%)

%DOMAIN_HOME%\bin\setDomainEnv.cmd 파일을 수정합니다.

187 라인 쯤에 변경할 수 있는 부분이 있습니다.

아래의 값을 변경하면 됩니다. 자신의 OS 비트에 따라 변경하세요~

set MEM_MAX_PERM_SIZE_64BIT=-XX:MaxPermSize=256m

set MEM_MAX_PERM_SIZE_32BIT=-XX:MaxPermSize=128m

반응형
//

게시판 2.0

Posted at 2011. 7. 27. 20:32 | Posted in Mini Project
반응형
http://antop.nerv.kr/board_v2

드디어! 1년 4개월만에 게시판 2.0이 나왔습니다!! ㅎㅎ

테이블 구조는 기존 테이블에서 몇개의 칼럼이 추가만 되었습니다. 게시판 1.0 그대로 이용 가능!!



화면(UI)는 거의 같은데 내부 프레임워크는 싸그리 바꿨습니다.

이 정도로 변경(추가) 되었습니다.

돌아가는 흐름은 1.0과 거의 비슷합니다. ^^;;

마이바티스의 맵퍼, 모델, xml 은 제네레이터로 돌려버렸습니다.



 



반응형

'Mini Project' 카테고리의 다른 글

Image Pyramid  (0) 2014.01.30
Proftpd Manager  (0) 2012.12.10
Sudoku  (0) 2011.06.09
간단한 JAVA 실행기(?)  (1) 2011.03.21
Forecast Repository  (8) 2010.11.30
Sales History API  (2) 2010.05.27
Order Entry API  (0) 2010.05.13
Human Resources API  (0) 2010.05.10
게시판 1.0  (1) 2010.03.11
비밀번호 생성기(Generate Password)  (1) 2010.02.10
//

웹로직 ZIP 배포판 설치 (윈도우)

Posted at 2011. 7. 14. 09:33 | Posted in Server/WebLogic
반응형
단순히 이클립스 + OEPE + 웹로직을 돌리기 위해서 웹로직을 따로 설치하는게 그래서...

ZIP 버젼으로 간단하게 설치하는 방법을 알아 봅시다.

http://www.oracle.com -> Downloads -> Weblogic Server



다운로드 받은 "wls1035_dev.zip" 파일을 적당한 곳에 받아서 압축을 풉니다.

전 이제부터 "D:\server\wls1035_dev" 폴더에 풀겠습니다.

이제 모든 작업은 프롬프트 창에서 이루어 집니다.

 



일단 경로를 이동합니다.

어디인가> d:

d:\> cd server\wls1035_dev

d:\server\wls1035_dev> _ 


환경변수를 설정합니다.

> set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_26
> set MW_HOME=d:\server\wls1035_dev

> echo %JAVA_HOME%
C:\Program Files\Java\jdk1.6.0_26

>echo %MW_HOME%
d:\server\wls1035_dev


설정 프로그램을 실행합니다.

> configure.cmd

"Setting up proper ACLs for d:\server\wls1035_dev ... (operation takes awhile)"

CLASSPATH=C:\PROGRA~1\Java\JDK16~1.0_2\lib\tools.jar;d:\server\WLS103~1\wlserver\server\lib\weblogic_sp.jar;d:\server\WLS103~1\wlserver\server\lib\weblogic.jar;d:\server\WLS103~1\modules\features\weblogic.server.modules_10.3.5.0.jar;d:\server\WLS103~1\wlserver\server\lib\webservices.jar;d:\server\WLS103~1\modules\ORGAPA~1.1/lib/ant-all.jar;d:\server\WLS103~1\modules\NETSFA~1.0_1/lib/ant-contrib.jar;

PATH=;d:\server\WLS103~1\wlserver\server\native\win\32;d:\server\WLS103~1\wlserver\server\bin;d:\server\WLS103~1\modules\ORGAPA~1.1\bin;C:\PROGRA~1\Java\JDK16~1.0_2\jre\bin;C:\PROGRA~1\Java\JDK16~1.0_2\bin;C:\Program Files\Common Files\NetSarang;D:\oracle\11.2.0\client_1;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;d:\server\WLS103~1\wlserver\server\native\win\32\oci920_8

Your environment has been set.
Buildfile: d:\server\WLS103~1\configure.xml

registry:
     [copy] Copying 1 file to d:\server\WLS103~1

detect.os:

product.property:

product.property.unix:

product.property.windows:

all:

BUILD SUCCESSFUL
Total time: 3 seconds

현재 프롬프트(cmd) 창에 웹로직 환경을 적용합니다.

> %MW_HOME%\wlserver\server\bin\setWLSEnv.cmd

CLASSPATH=C:\PROGRA~1\Java\JDK16~1.0_2\lib\tools.jar;d:\server\WLS103~1\wlserver\server\lib\weblogic_sp.jar;d:\server\WLS103~1\wlserver\server\lib\weblogic.jar;d:\server\WLS103~1\modules\features\weblogic.server.modules_10.3.5.0.jar;d:\server\WLS103~1\wlserver\server\lib\webservices.jar;d:\server\WLS103~1\modules\ORGAPA~1.1/lib/ant-all.jar;d:\server\WLS103~1\modules\NETSFA~1.0_1/lib/ant-contrib.jar;C:\PROGRA~1\Java\JDK16~1.0_2\lib\tools.jar;d:\server\WLS103~1\wlserver\server\lib\weblogic_sp.jar;d:\server\WLS103~1\wlserver\server\lib\weblogic.jar;d:\server\WLS103~1\modules\features\weblogic.server.modules_10.3.5.0.jar;d:\server\WLS103~1\wlserver\server\lib\webservices.jar;d:\server\WLS103~1\modules\ORGAPA~1.1/lib/ant-all.jar;d:\server\WLS103~1\modules\NETSFA~1.0_1/lib/ant-contrib.jar;

PATH=;d:\server\WLS103~1\wlserver\server\native\win\32;d:\server\WLS103~1\wlserver\server\bin;d:\server\WLS103~1\modules\ORGAPA~1.1\bin;C:\PROGRA~1\Java\JDK16~1.0_2\jre\bin;C:\PROGRA~1\Java\JDK16~1.0_2\bin;;d:\server\WLS103~1\wlserver\server\native\win\32;d:\server\WLS103~1\wlserver\server\bin;d:\server\WLS103~1\modules\ORGAPA~1.1\bin;C:\PROGRA~1\Java\JDK16~1.0_2\jre\bin;C:\PROGRA~1\Java\JDK16~1.0_2\bin;C:\Program Files\Common Files\NetSarang;D:\oracle\11.2.0\client_1;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;d:\server\WLS103~1\wlserver\server\native\win\32\oci920_8;d:\server\WLS103~1\wlserver\server\native\win\32\oci9
20_8

Your environment has been set.


도메인을 생성합니다.

> %MW_HOME%/wlserver/common/bin/config.cmd


뭐... 거의 Next 연타 수준입니다...


















이클립스와 연동하는 부분은 여기에서 "플러그인 설치"와 "서버 등록" 부분만 보면 되겠습니다.

이 링크에 거의 대부분 들어가 있지만 ZIP 파일 설치 부분을 좀 더 자세히 다뤘습니다.
반응형
//

Eclipse + MyBatis Generator

Posted at 2011. 7. 4. 16:49 | Posted in Tools/Eclipse
반응형
이번 프로젝트는 Spring + MyBatis 입니다.... ㄷㄷ(난 하이버네이트가 더 좋은데 ㅠㅠ)

뭐든 ORM이 마찬가지지만 설정을 열라 해줘야 합니다... 매핑 같은거 ㅠㅠ

하버네이트는 DB 긁어와서 파일 만들어줬는데 마이바티스는 없나.. 해서 찾아보니 역시나 있었습니다.!!

Eclipse Helios 사용.



Installation

이클립스에서 Help -> Install New Software..

사이트 주소 : http://mybatis.googlecode.com/svn/sub-projects/generator/trunk/eclipse/UpdateSite/




Create Config File

이클립스에서 File -> New -> Other 클릭.

플러그인을 정상적으로 설치했으면 아래와 같이 "MyBatis Generator Configuration File" 이 나올겁니다.


저장할 폴더 위치와 파일 이름을 설정합니다.



이제 이 파일을 열어서 편집합니다. 아래는 샘플 입니다. (ㄷㄷㄷ)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>
	<classPathEntry location="D:\dev\workspace\eclipse\board_v2\WebContent\WEB-INF\lib\mysql-connector-java-5.1.16-bin.jar" />

	<context id="context1">
		<jdbcConnection driverClass="com.mysql.jdbc.Driver"
			connectionURL="jdbc:mysql://hostname:3306/db" userId="antop"
			password="xxxxxxxx" />

		<javaModelGenerator targetPackage="kr.nerv.antop.entity.model"
			targetProject="board_v2" />

		<sqlMapGenerator targetPackage="kr.nerv.antop.entity.xml"
			targetProject="board_v2" />

		<javaClientGenerator targetPackage="kr.nerv.antop.entity.mapper"
			targetProject="board_v2" type="XMLMAPPER" />

		<table schema="antop" tableName="ab_board" />
		<table schema="antop" tableName="ab_board_comment" />
		<table schema="antop" tableName="ab_board_file" />	
	</context>
</generatorConfiguration>

모델, XML, 맵퍼 3가지를 생성합니다.

기존 아이바티스 사용하는 방법대로면 모델과 XML 만 있으면 사용 할 수 있을 것 같네요..



Generation

이제 이 설정파일(generatorConfig.xml)에서 마우스 오른쪽 버튼 클릭 후 "Generate MyBatis/iBATIS Artifacts" 클릭!!


파일들이 생성되어 있을 겁니다. ㅎㅎ


이제 진짜 쓸만하게 제대로 만들어 졌는지는 까봐야 알겠죠.. 후...

자기가 잘 쓸만하게 만드려면 설정 파일을 제대로 작성해야 할 듯..



http://code.google.com/p/mybatis/wiki/Generator

http://code.google.com/p/mybatis/source/browse/sub-projects/generator/trunk/core/mybatis-generator-systests-mybatis3/src/main/resources/generatorConfig.xml?r=2403


반응형

'Tools > Eclipse' 카테고리의 다른 글

Eclipse JVM 경로 지정하기  (0) 2016.09.13
Eclipse + SVN Plugin  (1) 2012.03.29
Maven Integration for Eclipse  (0) 2012.02.20
Eclipse + TPTP Remote  (1) 2012.01.20
Eclipse + TPTP (Eclipse Test & Performance Tools Platform)  (4) 2012.01.01
installation Oracle Enterprise Pack for Eclipse  (2) 2011.05.22
Eclipse + STS (SpringSource Tool Suite)  (1) 2011.01.16
Eclipse Plugins for JBoss technology  (1) 2011.01.11
Properties Editor  (1) 2009.11.17
UTF-8 설정  (0) 2009.11.16
//