대학교 때 잠깐 들었던 UML 강의 하나로 근 10년을 버티려니 힘들다 싶어 강의를 신청하고 들었는데,
참 잘 했다는 생각이 든다.

학교 때 배웠던 UML Notation 같은 부분은 거의 유사 했으나 이를 작성해나가는 개발 방법론에서는 정말 많은 내용을 배울 수 있는 자리였다.

생각해보면 학교 졸업할 때 Java 언어가 1.2 정도에서 지금은 6.0 으로 갔는데 개발 방법론은 예전 그래도 라고하면 말이 안되기는 하다.

사실 회사에서는 Agile 방법론에 따른 개발을 진행하고 Global Project는 대부분의 업무 분석을 정팀장님이 하는 상황이고 보면 해당 강좌가 나아게 업무적인 도움이 될지는 조금 미지수 이기는 하다.

하지만 언제까지 코딩만 할 수 없는 것이고 내 스스로가 직위가 상승해 가면 그에 따른 프로젝트 운영 능력을 키워가려면 큰 도움이 된다고 생각한다.

요즘에는 각종 Framework이나 개발 관련 Issue를 따라 가다 보니 방법론 쪽엔 좀 등한시 하는 경향이 있었는데

그런 나에게 좋은 자극이 되는 그런 강의 였었던것 같다.

근데... 앞으로 2주동안 또 강의를 들어야 하는데 그건 또 어떻게 들을지...-.-

'개발자세상' 카테고리의 다른 글

Spring Security 와 Active Directory 연동 -2  (0) 2009.09.01
Spring Security 와 Active Directory 연동  (0) 2009.09.01
RPM 관련 명령  (0) 2009.08.18
kernel ARG_MAX 값  (0) 2009.05.08
Oracle , Sun 인수  (0) 2009.04.22
Posted by headiron
,

RPM 관련 명령

개발자세상 2009. 8. 18. 15:57
RPM 파일 리스트 보는 명령
shell>> rpm -pql <rpm파일명>

RPM 파일 압축을 푸는 명령
shell>> rpm2cpio <rpm파일명> | cpio -ivd

'개발자세상' 카테고리의 다른 글

Spring Security 와 Active Directory 연동  (0) 2009.09.01
UML 2.0 과 유스케이스 강의를 듣고  (0) 2009.08.28
kernel ARG_MAX 값  (0) 2009.05.08
Oracle , Sun 인수  (0) 2009.04.22
ZK 사용기  (0) 2009.04.05
Posted by headiron
,
본사에서 받은 dump file import 후 Report 화면에 데이터가 하나도 나오지 않아 확인해 보니 reporting 계정의 function / procedure들이 모두 invalid 상태이다.

EnterpriseManager에서 해당 function 을 일일이 compile을 시켜도 모두

PL/SQL: ORA-00942: 테이블 또는 뷰가 존재하지 않습니다

이런 오류만 떨어 진다..

헌데 해당 Table을 SQLPLUS를 통해 확인해 보면 정상적으로 Access 가능하다.

( 계정 별로 Table을 생성한 후 서로 다른 계정 테이블을 Synonym 으로 연결해서 쓰는 구조.. )

뭔가 본사에서 export를 잘 못 하거나 아님 내가 import를 잘 못하거나 두개 중 하나일텐데...

http://database.sarang.net/?inc=read&aid=30895&criteria=oracle&subcrit=&id=&limit=20&keyword=function+ORA-00942&page=1

이 글을 보다 보니 답이 나온다.

import하다가 문제가 좀 생겨서

primary 계정이랑 reporting 계정을 삭제하고 다시 생성했는데

primary 계정 import 시 grant 관련 처리가 끝난 후에 reporting 계정이 생성되어

grant 관련 option이 적용되지 않아서 생긴 문제 였다.

결국 두개 계정 다시 drop 후 ( 물론 primary만 drop 해도 되기는 했지만 )

다시 하나씩 계정 생성 후 import하니 잘 된다.

결국 결론은 SQLPLUS에서 접속이 되는 거랑

function 내에서 해당 테이블을 참조하는 권한은 조금씩 다르다는 결론을 내릴 수 있을 것 같다.


'개발자세상 > Database관련' 카테고리의 다른 글

ORA-30557  (0) 2009.12.09
Oracle Table Column Rename  (0) 2009.10.28
impdp / expdp  (0) 2009.06.19
MYSQL에서 copy_t , copy_ymd 테이블 만들기  (0) 2009.03.13
MYSQL에서 Rownum 사용하기  (0) 2009.03.13
Posted by headiron
,
본사에서 샘플 데이터베이스를 받아서 import를 시킬려고 하는데 계속

IMP-00010: not a valid export file, header failed verification
IMP-00000: Import terminated unsuccessfully

오류가 발생한다.
FTP로 파일 다운 받을 때 ASCII TYPE으로 받아서 그런가 했더니

알고 보니 expdp tool을 이용해서 받은 파일이다.

인터넷으로 뒤져 보니 10g 부터 기존 exp/imp tool의 단점을 보안하기 위해 나온 tool이다.

기존 exp/imp는 client 중심의 tool이었는데 expdp/impdp는 server 중심의 tool이다.

뭐.. exp/imp 단점을 보안 했다고 하는데 솔직히 어떤 단점을 말하는 건지 모르겠다.
하긴 oracle에서 단점이라고 얘기하는 걸 보면 뭔가 문제가 있었나.^^

예제를 보면 exp/imp를 GUI 환경에서 사용할 수 있도록 해 주기 위해 새로 만들어낸 tool이 아닌가 싶다.

server 중심이다 보니 사용하는 방법이 조금 복잡하다.

exp/imp는 일단 command 한번으로 모든 작업을 처리 했으나

expdp/impdp는 일단 working 디렉토리를 db에 등록한 후 expdp/impdp를 사용해야 한다.

1. working directory를 database에 등록한다.
sqlplus>create directory datadir1 as '/home/oracle/wkdir';
2. expdp/impdp를 사용할 사용자 계정에 working directory에 대한 read, write 권한을 추가한다.
sqlplus>grant read,write on directory datadir1 to sh;
3. expdp를 실행한다.
shell>> expdp 계정/패스워드 directory=datadir1 schema=계정 dumpfile=XXX.dmp logfile=YYY.log
해당 계정의  데이터를 XXX.dmp 파일로 dump 수행한다.

imp 시...
1. working directory를 database에 등록한다.
   ( 위와 동일한 방법으로 working directory를 등록한다. )
2. working directory에 대한 read, write 권한을 추가한다.
3. impdp를 실행한다.
shell>> impdp 계정/패스워드 directory=datadir1 dumpfile=XXX.dmp logfile=CCC.log


참고 자료 : http://www.oracle.com/technology/obe/obe10gdb/storage/datapump/datapump.htm
Posted by headiron
,

AvScanning 관련 patch 작성 하던 중 shell에 입력할 수 있는 최대 line size 관련 issue가 있음을 알게 되었다.

Googling하여 보니 /usr/include/linux/limits.h 에 ARG_MAX 로 선언되어 있는 값이 shell에서 입력할 수 있는 최대 값이 었다.

근데 본사 Central Server를 보다 보니 해당 파일을 찾을 수 가 없어

shell command를 찾아 보니 "getconf" command로 찾을 수 가 있었다.

shell>getconf ARG_MAX

C Coding을 할 경우 라면

sysconf() 함수를 사용하면 되는데 Linux C coding할 날이 언제 올라는지....

'개발자세상' 카테고리의 다른 글

UML 2.0 과 유스케이스 강의를 듣고  (0) 2009.08.28
RPM 관련 명령  (0) 2009.08.18
Oracle , Sun 인수  (0) 2009.04.22
ZK 사용기  (0) 2009.04.05
본사 PVT 진행  (0) 2009.04.04
Posted by headiron
,
갑자기 나온 뉴스에 모든 사람이 다 놀라고 있다.

그동안 여러 회사를 계속 인수해온 Oracle 이지만..

여지껏 인수해왔던 어느 회사 보다도 인수의 영향이 큰 경우가 아닌가 싶다.

다들 이런 저런 얘기가 많은데..

개인적인 생각은...

Sun에서 취하고 있던 Open Source 전략은 물건너 가지 않을까 싶다.

Netbean, JVM , GlassFish , Solaris, OpenOffice 등

생각해 보면 알게 모르게 Sun이 Open Source로 걸어가고 있던 그리고 만들어 냈던 제품들이 의외로 많다는 걸 알 수 있다.

개인적으로는 IBM이 Sun을 인수 했으면 좋았을 텐데 생각이 드는데...

하지만 Sun 입장에서 본다면 H/W , 자바 등 다양한 분야를 보면

결국 Cash Cow 역활을 하고있는 부서는 H/W가 아닐까...

IBM에 인수된다면 H/W 사업부분이 견디기 힘들겠지만..

Oracle로 간다면 그런 염려는 줄어 드니깐.. 내부적으로 Oracle에 drive 를 걸지 않았을 까 싶다.


어쨋든 ... 다른 여타회사와 다르게 Sun 만큼은 독자적인 법인으로서 지금까지 해 왔던 자바내에서의 위치와 위상을 유지해 줬으면 한다.

'개발자세상' 카테고리의 다른 글

RPM 관련 명령  (0) 2009.08.18
kernel ARG_MAX 값  (0) 2009.05.08
ZK 사용기  (0) 2009.04.05
본사 PVT 진행  (0) 2009.04.04
IPTV Business Insight를 다녀와서  (0) 2009.04.02
Posted by headiron
,

여지껏 singleton 이외에 다른 scope의 bean을 사용할 일이 없었는데

B3 Tool을 개발하며 필요하게 되었다.

ApiAdaptor의 생성 overhead를 줄이기 위해 spring에 singleton 으로 생성을 했는데

서로 다른 account에 대해 동시에 ApiAdaptor bean을 사용하게 될 경우에 문제가 생길 가능성이 있었다.

방법은 bean에 config 객체를 set 하는 순간 부터 해당 bean을 synchronize 시키는 방법이 있을 수 있었다.

하지만 언제나 synchonize를 시키는 방법은 여러 문제를 발생 시킬 수 있다.

다른 방법을 생각해 보았는데

민차장님이 회의 들어갔다 나온 사이에 session bean을 사용하는 방법을 찾아 주셨다.


spring 2.0 이상 부터 제공되는 session bean 객체를 이용하는데 

config 를 session scope로 선언하고 aop:proxy를 선언한 후 이를 adaptor의 property로 injection을 하게 되면 config 객체가 사용될 때 마다 proxy 기능에 의해 session scope의 객체가 사용되게 된다.

이를 위해서는


<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:p="http://www.springframework.org/schema/p"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:aop="http://www.springframework.org/schema/aop"  
  xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

 <!-- API Adaptor Object -->
 <bean id="loginConfig"
  class="com.tfsm.apis.oas.config.OasApiConfig" scope="session" >
  <aop:scoped-proxy/>
 </bean>
 <bean id="campaignProxy"
  class="com.tfsm.apis.oas.proxy.implementation.CampaignProxyBean" >
  <property name="oasConfig" ref="loginConfig"/>
 </bean>
</beans>

이를 위해서는 cglib library가 추가로 필요하며
loginConfig가 interface 기반으로 개발되었을 경우 
 <bean id="loginConfig"
  class="interface명" scope="session" >
  <aop:scoped-proxy proxy-target-class="false"/>
 </bean>
로 선언하게 되면 cglib를 사용하지 않게 된다.

이때 web.xml에는 

<listener>
                <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

이외에
<listener>
       <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>      
도 추가 되어야 한다.

http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-factory-scopes

추가로 spring만 사용했을 경우에는 session scope를 사용하는데 큰 문제가 생기지 않으나
zk framework에서 session  scope bean을 사용하게 될 경우

zk.xml 파일에

    <listener>
            <description>ThreadLocal Synchronization Listener</description>
            <listener-class>org.zkoss.zkplus.util.ThreadLocalListener</listener-class>
    </listener>

 <preference>
  <name>ThreadLocal</name>
  <value>
   org.springframework.web.context.request.RequestContextHolder=requestAttributesHolder,inheritableRequestAttributesHolder;
  </value>
 </preference>
를 추가 하여야 한다.

http://forum.springsource.org/archive/index.php/t-50631.html
http://www.zkoss.org/javadoc/3.0.3/zkplus/org/zkoss/zkplus/util/ThreadLocalListener.html

Posted by headiron
,

ZUL 파일의 시작 부분에 아래의 문구를 일단 추가...

<?xml version="1.0" encoding="UTF-8"?>
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" ?>


아래와 같이 input component의 value에 연동할 객체 Handler를 기입
<textbox id="flightName" maxlength="10" value="@{win.flight.flightName}"/>

이렇게 하면 input component에서 작성하는 데이터 ( 지금의 경우 flightName )  의 수정 사항이 객체에 ( 이 경우 win.getFlight().getFlightName()) 자동으로 적용된다.

ZK Design한 사람들이 이 부분은 상당히 잘 생각한 듯 하다.
Posted by headiron
,
B3 Tool POC 하며 ZK SpreadSheet을 사용하게 되었다.

Web화면에 Excel U.I를 띄워 주니 입력 항목이 많은 경우에는 큰 도움이 될 듯 하다.

다만 U.I가 좀 느려서 빠른 화면 전환할 경우에 문제가 생길 수는 있을 것 같다.

ComboBox를 사용할 필요가 있어 ComboBox U.I를 체크해 보았는데

POI나 jExcel 내부에는 constraint를 이용하여 처리해 주고 있는데

SpreadSheet에서는 이 부분을 지원해 주지 않아 조금 아쉽다.


ZK의 다른 Component처럼 Cell에 객체를 mapping하여 Editing 결과를 자동으로 객체에 적용하려고 했는데 ,

객체 Mapping 정보를 Excel의 수식으로 적용하기 때문에 Editing시 해당 Mapping 정보가 날라 가는 현상이 있어 이 부분은 적용하기 어려웠다.

결국 POI 처럼 Cell 단위로 입력값 읽어 오도록 일단 처리 하였다.


필요 library를 보면 jExcel을 사용하는것 같은데.. ZK의 ext library에 이미 poi library가 있는데 굳이 jExcel을 사용하나 싶다.

어쩌면 POI 에서 처리못하는 부분을 jExcel에서는 지원하기 때문에 jExcel을 사용하는거 아닐까 하는 생각도 ....


예전에는 OCX로나 구현할 수 있었던 U.I를 library로 비교적 쉽게 구현할 수 있어 좋기는 한데..

우째 또 다른 짐을 지게 되는것 같아 가슴 한편이 좀 무겁기도 하다...-.-

Posted by headiron
,

ZK 사용기

개발자세상 2009. 4. 5. 19:00
작년에 AddOn Module 개발하면서 ZK 를 처음 사용했는데

그떄는 기존 U.I에 똑 같이 맞춰서 개발해야 한다는 issue로 완전 개고생...-.-

이번에는 B3 Report Tool 때문에 다시 사용했는데

솔직히 개발하기는 정말 편했다.

특히 예전에 ZKStudio가 있기는 했지만 기능이 너무 빈약 했는데

이제는 기능이 좋아 져서 제시어 기능도 생기고 해서 개발하기 편했다.

물론 사상적인 부분으로는 아직도 익숙하지는 않지만..

Intranet 개발 환경으로는 상당히 좋다는 생각이 들었다.

뭐... One Souce Multi Use ( 물론 Mobile 밖에(?) 지원하지는 않지만... )

라는 사상도 괜찮고.

U.I 화면도 나름 깔끔하고...

흠... 이번에 B3 Project 들어가게 되면 아마도 ZK 를 사용하지 않을 까 생각되는데

솔직히 Intranet 용 Application 개발하는 경우라면 적극 추천 할만 한것 같다...

슬슬 ZK 관련 Issue들도 정리 해야 할듯 >^^

'개발자세상' 카테고리의 다른 글

kernel ARG_MAX 값  (0) 2009.05.08
Oracle , Sun 인수  (0) 2009.04.22
본사 PVT 진행  (0) 2009.04.04
IPTV Business Insight를 다녀와서  (0) 2009.04.02
오랜만에 쳘야  (0) 2009.03.08
Posted by headiron
,