오늘로서 2009년도 마지막이다.

언제나 그렇지만 올 한해도 참 다사 다난 했다는 생각이 든다.

꿈에 그리던 한라산 정상도 가보고

또 월출산 산행으로 시작했던 남도여행도 기억에 남고.

준비 없이 갔던 지리산 산행에서 중도에 내려오는 일도 생기고..

새로운 직장 동료도 많이 생기고

10년 넘게 묵혀 두었던 플룻도 다시 시작하고.

2009년이 채 한시간도 남지 않은 시점에서 생각해보면

그래도 떠오르는 기억은 좋았던 기억이 많은 것 같다.

예전에는 새해라는 것이 그냥 그렇게 흘러가는 자연을 인간들이 자신의 잣대로 나누어서
기념하려 한다는 생각을 했었는데

한살씩 나이를 더 먹으니 또 생각이 바뀌어 진다.

올 한해 마무리 하는 시점에 그래도 행복했던 기억이 많았던 것 만큼이나

1년 뒤 이 시간에 2010을 회상할 떄도 좋았던 기억이 많이 생각 났으면 좋겠다.

황 부장님이 메일로 보냈었던 다사다난이 다사다행한 해가 되게 해보자는 말처럼

내년에는 나, 내 가족 , 내 주위 친구 , 동료 모두에게 다사다행한 한해가 됐으면 한다.



'사는이야기' 카테고리의 다른 글

집 나간 지갑을 찾다.  (0) 2010.01.17
사상 최대의 폭설  (0) 2010.01.05
스마트폰 사용기  (0) 2009.12.31
성룡형 재취업  (0) 2009.12.31
건강  (0) 2009.12.31
Posted by headiron
,
박차장님 추천으로 HTC 터치다이아몬드 폰으로 바꾼지 두달 가량 되어 간다.
처음에는 개통하는 것조차 몰라서 고생하고 터치 방식이 익숙하지 않아 많이 해맸는데
이제는 많이 익숙해지고 내가 원하는 프로그램 찾아 다니는 단계에 이르러 간다.
( 뭐 그래도 주위의 스마트 톤 사용자 분들의 추천을 아직도 받아야 한다는... )

쓰다보니 점차 스마트폰의 장점에 대해서 알게 되고 또 그러면서 앞으로 스마트폰이 대세를 차지 할 것 같은 생각이 많이 든다.
( 예전에 처음 WAP 이나 WML 처럼 냄비처럼 확 달아 올랐다가 식지는 않을 듯 하다. )

또 사용하면서 내 자신의 너무 정형화 되어 있는 생각에 대해서 너무 반성이 된다.

초반에 T-Store 광고에 나왔던 지하철 도착 알리미 프로그램 얘기를 우연히 박차장님과 얘기를 나누며 당연히 기지국 정보를 가져다가 도착 정보를 알려주려니 생각했는데 출발역과 도착역간의 소요시간을 가지고 알려준다고 한다.
( 법적인 제약때문에 개인이 기지국 정보를 이용할 수 없기 때문에 내가 생각했던 구현방식은 애초에 국내에서는 현재까지는 불가능한 서비스 방식이라 할 수 있다.)

광고를 보면서 저 프로그램 개발 해 내는 아이디어가 참 좋다고만 생각을 했는데
구동 방식을 들어보니 더 참신하다는 생각을 했다.

만약 내가 그런 프로그램을 구현하라는 명제가 떨어 졌다면
아마도 기지국 정보를 사용할 수 없다는 제약 하나만으로 포기하고 말았을텐데...

역간 소요시간 정보를 사용하는 그런 유연한 생각이 참 부럽기도 하고
또 개발자로서 자꾸 그런 유연한 생각을 잃어 가는 내 자신이 한심스럽기도 하다.

'사는이야기' 카테고리의 다른 글

사상 최대의 폭설  (0) 2010.01.05
가는 해 오는해...  (0) 2009.12.31
성룡형 재취업  (0) 2009.12.31
건강  (0) 2009.12.31
자랑스런 후배  (0) 2009.12.23
Posted by headiron
,

성룡형 재취업

사는이야기 2009. 12. 31. 22:51
지난 일욜날 성룡형과 북한산 등반을 하며 LS전선에 최종 합격했다는 소식을 들었다.

티맥스 사태 터지면서 발령대기상태로 남아 계셨다고 하는데 그래도 이제는 비빌 언덕이 생겼다는 느낌이다.

특히 그동안 을 혹은 병으로 일을 많이 하셔서 그런지 갑 역활을 할 수 있다는 부분에 대해서 좋게 생각하고 계시는 것 같다.

뭐... 그런것도 좋지만 그래도 어느정도 안정된 직장을 짧은 기간에 찾으시게 된게 특히 기쁘다.

다만 IT 전문 기업이 아니라서 회사내에서 어느 정도까지 본인의 자리를 가져가시고 인정 받으실 수 있으실지 걱정이기는 하지만..

뭐.. 본인도 그런 생각이 있기에 KTDS쪽도 면접 결과를 계속 기다리시는 거겠지..

'사는이야기' 카테고리의 다른 글

가는 해 오는해...  (0) 2009.12.31
스마트폰 사용기  (0) 2009.12.31
건강  (0) 2009.12.31
자랑스런 후배  (0) 2009.12.23
언론의 본분  (0) 2009.11.17
Posted by headiron
,

건강

사는이야기 2009. 12. 31. 22:46
지난 크리스마스때 고등학교 송년회를 했다.

타이틀은 송년회였지만 제일 큰 이슈는 석희의 뇌종양 소식이었다.

예전에 진호일도 있고 해서 걱정이 많이 되긴 했는데

악성은 아니라고 하고... 본인도 표정이 나쁘지는 않아 다행이다 싶기는 했다.

하지만 수술을 하게 되면 성격도 바뀔 가능 성이 있고 또 회복 되는 기간도 오래 걸린다 하니 ...

얼마전에 민규 갑상선암으로 수술하기도 하고 또 석희마저 큰 병에 걸리고 보니 내 자신의 건강에 대해서도 겁이 나기 시작한다.

나는 아직도 내가 젊다고 생각하고 있었는데 건강에 대해서 마냥 자신감을 가질만한 나이만은 아니구나 하는 걱정이 든다.


'사는이야기' 카테고리의 다른 글

스마트폰 사용기  (0) 2009.12.31
성룡형 재취업  (0) 2009.12.31
자랑스런 후배  (0) 2009.12.23
언론의 본분  (0) 2009.11.17
기아 V10  (0) 2009.10.26
Posted by headiron
,
WSDL2Java로 나온 Class들 전체를 javac로 실행하다 보니 out of memory가 발생한다.

구글링을 해보니 두가지 방법이 보인다.

1. javac Task에 fork="true" memoryMaximumSize="512M" 을 주는 방법
  ( fork를 기재 하지 않을 경우 memoryMaximumSize Option은 ignore 된다. )

2. javac Task에 compilerarg option을 준다.
    javac -help를 입력할 경우 javac 입력시 사용할 수 있는 Option이 나오게 되며 이 중 적절한 option을 입력하면 된다.
<javac srcdir="gen" destdir="gen-bin" debug="on" fork="true">
   
<compilerarg value="-J-Xmx512M" />
</javac>

   ( command prompt 내에서는 -J-Xmx를 입력할 경우 java stack size를 입력할 수 있는 걸로 나오는데 eclipse 의 ant plugin 에서는 해당 option이 먹지 않는걸로 나온다. )
참고 URL : http://stackoverflow.com/questions/16935/ants-javac-tasks-throws-stackoverflowexception
http://blog.paran.com/rabbitshin/6134979
Posted by headiron
,

자랑스런 후배

사는이야기 2009. 12. 23. 22:23
어제 매경에 전교 1등이 공고가다 라는 기사가 있어 보니 우리학교에 수석 입학한 친구 얘기다.

기사를 보니 건대부중 에서 1등 하는 친구가 우리학교에 진학을 했다는 내용이다.

흠.. 참 대견하고 자랑 스럽다는 생각을 하면서도...

솔직히 어떤 사연이 있는 건 아닐까 하는 생각도 좀 든다.

기사를 보고 오히려 선배로서 한 마디 해 주고 싶어서 오랜만에 학교 홈페이지 까지 들어가봤다. 덕 분에 이제는 전자과에 김준태 선생님만 남아 계신걸 보니 좀 씁쓸했다.-.-

어쨋든 훌륭한 성적을 가지고 있는 친구가 학교에 온걸 보니 자랑 스러웠지만

한편으로는 좀 걱정이 되기도 했다.

과연 이 친구가 잘 졸업을 할 수 있을까.

민규 처럼 어쩌면 3년간 힘들어 할 수도 있지 않을까 하는 생각도 들었다.

또 다른 한편으로는 정말 열심히 해서 우리학교의 또 다른 신화를 써 갔으면 하는 생각도 했다.

그런 생각을 하면서 또 찬혁이가 나에게

"넌 이렇게 살면 안된다" 라고 했던 얘기도 생각난다.

난 지금 잘 살고 행복한데... 나를 나로만 보지 않는 시선도 있다는 거...

그런 시선을 아는 내가 그 친구에게 그런 기대를 한다는 것도 참..-.-

어쨋든 너무 자랑 스런 또 다른 후배가 생각다는 게 기쁘기도 하고

술 한잔 사주면서 ( 흑.. 얘는 미성년잔데.. ) 이런 저런 얘기를 해주고도 싶다.

기사 : http://news.nate.com/view/20091220n06289

'사는이야기' 카테고리의 다른 글

성룡형 재취업  (0) 2009.12.31
건강  (0) 2009.12.31
언론의 본분  (0) 2009.11.17
기아 V10  (0) 2009.10.26
소래 포구 원정기  (0) 2009.10.18
Posted by headiron
,

Spring Security

개발자세상 2009. 12. 21. 19:22

B3 진행하면서 Spring 의 Remoting 호출을 지원하면서 해당 호출을 Login Base로 진행하기 위해서 Spring Security를 두가지 방식으로 지원하게 되었다.

하나는 Config 설정에 의한 , 다른 하나는 LDAP Base.

어차피 Spring Security의 로그인이 Filter Chain을 적용하는 것이기에 Multiple Filter Chain을 확인해 봤더니 Login Path를 통해서 Multiple Filter Chain을 지원하고 있었다.

우선 web.xml 을 변경하여야 한다.

    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        <init-param>
            <param-name>targetBeanName</param-name>
            <param-value>springSecurityFilterChain</param-value>
        </init-param>
    </filter>

보통의 경우는 springSecurityFilterChain 만 선언하면 문제가 없는데
multiple 한 fileter chain을 명시적으로 Spring Security Config에 선언해 주어야 하기 때문에 반드시 targetBeanName을 선언하여 value에는 Spring Security 설정에서 사용한 FilterChain Bean Name을 선언해 주어야 한다.

Spring Security 내부의 Filter Chain이 아닌 명시적인 Filter Chain을 사용하여야 하기 때문에 사용하는 방식에 맞추어 Filter Chain Config를 선언하여야 한다.

    <bean id="springSecurityFilterChain" class="org.springframework.security.util.FilterChainProxy">
        <s:filter-chain-map path-type="ant">
            <s:filter-chain pattern="/batchProcessService/**" filters="httpSessionContextIntegrationFilter,digestProcessingFilter,exceptionTranslationFilter,filterSecurityInterceptor" />
            <s:filter-chain pattern="/approvalProcessService/**" filters="httpSessionContextIntegrationFilter,digestProcessingFilter,exceptionTranslationFilter,filterSecurityInterceptor" />
            <s:filter-chain pattern="/**" filters="ldapHttpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,anonymousProcessingFilter,ldapExceptionTranslationFilter,sessionFixationProtectionFilter,ldapFilterInvocationInterceptor"/>
        </s:filter-chain-map>
    </bean>

web.xml 에서 선언했던 filterChain을 위와 같이 설정한다.
filter-chain의 pattern attribute에 선언된 URL에 맞추어 각각 선언된 Filter Chain이 적용이 된다.

위의 경우
/approvalProcessService/** 및 /batchProcessService/** URL은는"httpSessionContextIntegrationFilter,digestProcessingFilter,exceptionTranslationFilter,filterSecurityInterceptor" Filter Chain이
그 이외의 URL들은
"ldapHttpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,anonymousProcessingFilter,ldapExceptionTranslationFilter,sessionFixationProtectionFilter,ldapFilterInvocationInterceptor"
Filter Chain이 적용되게 된다.

LDAP 을 위해서는 아래의 Bean을 명시적으로 선언하였다.
물론 다른 것에 대해서도 해야 겠지만.^^

    <bean id="ldapHttpSessionContextIntegrationFilter" class="org.springframework.security.context.HttpSessionContextIntegrationFilter" />

    <bean id="logoutFilter" class="org.springframework.security.ui.logout.LogoutFilter">
        <constructor-arg value="로그아웃 후 Redirect될 페이지 URL" />
            <constructor-arg>
                <list>
                    <bean class="org.springframework.security.ui.logout.SecurityContextLogoutHandler" />
                </list>
            </constructor-arg>
        <property name="filterProcessesUrl" value="/j_spring_security_logout" />
         ( Logout Process Path URL )
    </bean>

    <bean id="authenticationProcessingFilter"    class="org.springframework.security.ui.webapp.AuthenticationProcessingFilter">
        <property name="authenticationManager"         ref="ldapAuthenticationManager" />
        <property name="authenticationFailureUrl"     value="/ldapLogin.zul?error=1" />
        <property name="defaultTargetUrl"            value="로그인 시 기본 Redirect 페이지 URL" />
        <property name="filterProcessesUrl"            value="/j_spring_security_check" />
    </bean>

    <bean id="securityContextHolderAwareRequestFilter" class="org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter" />

    <bean id="anonymousProcessingFilter" class="org.springframework.security.providers.anonymous.AnonymousProcessingFilter">
        <property name="key" value="doesNotMatter" />
        <property name="userAttribute" value="roleAnonymous, ROLE_ANONYMOUS" />
    </bean>           

    <bean id="ldapExceptionTranslationFilter" class="org.springframework.security.ui.ExceptionTranslationFilter">
        <property name="authenticationEntryPoint">
            <bean class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint">
                <property name="loginFormUrl" value="로그인 입력화면 URL" />

            </bean>
        </property>
        <property name="accessDeniedHandler">
            <bean class="org.springframework.security.ui.AccessDeniedHandlerImpl">
            </bean>
        </property>
    </bean>

    <bean id="sessionFixationProtectionFilter" class="org.springframework.security.ui.SessionFixationProtectionFilter" />

    <bean id="ldapFilterInvocationInterceptor" class="org.springframework.security.intercept.web.FilterSecurityInterceptor">
        <property name="authenticationManager" ref="ldapAuthenticationManager" />
        <property name="accessDecisionManager" ref="ldapAccessDecisionManager" />
        <property name="objectDefinitionSource">
            <s:filter-invocation-definition-source>
                <s:intercept-url pattern="/siteList/**" access="IS_AUTHENTICATED_REMEMBERED"/>
                <s:intercept-url pattern="/**"             access="IS_AUTHENTICATED_ANONYMOUSLY"/>
            </s:filter-invocation-definition-source>                       
        </property>
    </bean>

    <bean id="secondLdapProvider"
        class="org.springframework.security.providers.ldap.LdapAuthenticationProvider">
        <s:custom-authentication-provider />
        <constructor-arg>
            <bean               class="org.springframework.security.providers.ldap.authenticator.BindAuthenticator">
                <constructor-arg ref="contextSource" />
                <property name="userSearch">
                    <bean id="userSearch"                        class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
                        <constructor-arg index="0" value="" />
                        <constructor-arg index="1" value="(&amp;(sAMAccountName={0})(objectclass=user))" />                       
                    </bean>
                </property>
            </bean>
        </constructor-arg>
        <constructor-arg>
            <bean class="org.springframework.security.ldap.populator.DefaultLdapAuthoritiesPopulator">
                <constructor-arg ref="contextSource" />
                <constructor-arg value="" />
                <property name="groupSearchFilter" value="(&amp;(member={0})(|(cn=B3 Reader)(cn=B3 Approval)))" />               
                <property name="rolePrefix" value="ROLE_" />
                <property name="searchSubtree" value="true" />
                <property name="convertToUpperCase" value="false" />
            </bean>
        </constructor-arg>
    </bean>

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

Long Term Plan?  (0) 2011.02.19
이젠 모바일인가...  (2) 2010.12.05
ASP.NET 크레튜 강의 수강 소감  (0) 2009.12.15
티맥스 소식  (0) 2009.11.10
강사의 조건  (1) 2009.10.22
Posted by headiron
,
지난 달에 C#을 들으려 했었는데 신청을 잘 못해서 ASP.NET 강의를 듣게 됐다.

뭐... C#다음 강좌로 ASP.NET도 들을려고 했었으니깐 순서만 한번 바뀌었다고나 할까.

들으면서 느낀것은 MS 진영이고 Java 진영이고 서로가 서로에게 긍정적인 영향을 준다고나 할까.

ADO.NET을 보면 JDBC적인 면이 보이고 반대로 JSF를 보면 ASP.NET의 객체 모델이 보이고,
서로에 대해서 자신이 우월성을 얘기하려 노력하지만
결국은 서로의 장점을 취해 가며 발전해 가는 모습을 보면
선의의 경쟁자라 불러도 좋을 듯 싶다.

별 경쟁 없이 있던 브라우저 시장도 Firefox가 힘을 받고 크롭 같은 브라우져가 등장하면서 다시 발전해 가는 것을 보면 독과점의 폐해는 실로 심각하다 할 수 있겠다.

뭐... 어쩃든 다음에 C# 강좌를 마무리로 들어주면 MS 관련 문제가 발생해도 어느정도는 대체할 수 있지 않을까 생각된다.

그리고 크레듀 강좌 들으면서 .... 테크빌에서 했떤 일들이 자꾸 떠올랐다.
그때 그래도 괜찮은 기능들을 많이 많들었다는 생각이 들고
또 한편으로는 내가 100% 소화 해 내지 못했던 것들에 대한 아쉬움도 들고 했다.
그리고 그쪽을 떠난 지도 6년 가까이 되는데 아직도 그떄 일을 생각하는 걸 보면
나에게 많은 아쉬움도 남아 있는 듯 하다.

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

이젠 모바일인가...  (2) 2010.12.05
Spring Security  (0) 2009.12.21
티맥스 소식  (0) 2009.11.10
강사의 조건  (1) 2009.10.22
Streaming Protocol  (0) 2009.10.06
Posted by headiron
,
오라클에서 Field 사이즈를 조정하려고 했더니 

"ORA-30556: functional index is defined on the column to be modified"
메시지가 뜬다.

인터넷 뒤져 보니 functional index를 삭제한 후 조정하면 된다고 하는데

Enterprise Manager 나 다른 Tool에서 Functional index를 찾을 수 있는 방법이 없다.

결국 염대리님이
"select * from USER_IND_EXPRESSIONS;" 쿼리를 알려 주셔서 functional index를 찾을 수 있었고 해당 index를 drop 한 후 원래 나오던 column_expression대로 다시 생성을 하니 정상적으로 동작한다.


SQLPLUS>select * from USER_IND_EXPRESSIONS where table_name = '테이블명';

출력 결과 )
INDEX_NAME        TABLE_NAME     COLUMN_EXPRESSION       COLUMN_POSITION
XXXX                    YYYY                NLSSORT("ID",'nls_sort=''BINARY_CI''')    1

SQLPLUS>drop index XXXX;

SQLPLUS>ALTER TABLE XXXX MODIFY ( CCCC VARCHAR2(256));

SQLPLUS> create index XXXX on YYYY(NLSSORT("ID",'nls_sort=''BINARY_CI'''));


참조 : USER_IND_EXPRESSIONS Functional index expressions in user's indexes and indexes on user's tables



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

오라클 실행계획 보기  (0) 2010.03.03
ORACLE 사용자 생성  (0) 2010.03.03
Oracle Table Column Rename  (0) 2009.10.28
오라클 Function Compile/ 생성시 Ora-00942 오류..  (1) 2009.06.22
impdp / expdp  (0) 2009.06.19
Posted by headiron
,
이번 여행의 시작은 월출산이었다.

월출산을 가려다 보니 산만 찍고 오면 너무 아쉬울 듯 하여

여행을 기획하게 되었다.

어차피 대중 교통을 이용해야 하니 많은 곳은 돌아 다니지 못하다 보니

일정을 월출산 -> 땅끝 마을 -> 보성 녹차밭 -> 순천만 -> 통영

이렇게 계획을 했다.

헌데 출발이 하루 늦어 지고 보성에서 벌교가 보성군내에 있을을 알게 되어

월출산 -> 땅끝 마을 -> 보성 녹차밭 -> 벌교 -> 순천만으로 변경을 하였다.

중간에 장흥쯤 지마면서 정남진 관측소도 보이고

강진도 지나치고 ..

순천만도 많이 보지 못해 아쉽지만.

남도의 아름다운 모습을 보게 되어 너무 즐거 웠다.

다음에 기회가 된다면 보다 긴 일정과 준비로 보다 더 알차게 보내리라.


---------------------------------------------------------------------

준비를 하며 어떤 블로그를 읽어 보니 남도의 금강산이라 표현했는데
그 말이 딱 맞는 듯 하다.

지금까지 겪어본 어느 산 보다도 험란하고 또 바위산의 웅장함을 보여 줬다.

얼마전 다친 다리도 있고 해서 종주는 하진 못했지만

그 중간까지의 모습 만으로도 정말 멋있는 곳을 또 알게 되었다는 생각을 할 수 있었다.


'사진,여행 > 2009가을남도여행' 카테고리의 다른 글

남도 여행기 - 땅끝 마을  (0) 2009.12.07
남도 여행기 - 보성 녹차밭  (0) 2009.12.07
남도 여행기 - 벌교  (0) 2009.12.02
남도 여행기 - 순천만  (0) 2009.12.02
Posted by headiron
,