2014년 5월 29일 목요일

GIT 입문 (Git learning tool - Learn Git)

원본 : http://pcottle.github.io/learnGitBranching/
한글 : http://learnbranch.urigit.com/ (원본 대비 일부 내용 없음)

2014년 5월 20일 화요일

Spring 3 DefaultAdvisorAutoProxyCreator 와 자기 참조 이슈

신기하다.

자기참조(순환참조)가 있을 시 스프링 환경설정에서 DefaultAdvisorAutoProxyCreator 를 사용하게 되면 아래와 같은 오류가 나온다.

대충 검색해본 결과 DefaultAdvisorAutoProxyCreator가 ...

7.10.1.2. DefaultAdvisorAutoProxyCreator

좀더 일반적이고 굉장히 강력한 자동 프록시 생성자는 DefaultAdvisorAutoProxyCreator이다. 이것은 autoproxy advisor의 bean정의내 특정 bean이름을 포함할 필요없이 현재 컨텍스트에 적절한 advisor를 자동적으로 적용할것이다. 이것은 일관적인 설정의 장점과 BeanNameAutoProxyCreator처럼 중복의 회피를 제공한다.

한다고 한다. -_ -
출처 : http://openframework.or.kr/framework_reference/spring/ver2.0-M4/html/aop.html

공부 좀 더 해봐야겠다d



java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:157)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'sqlService': Bean with name 'sqlService' has been injected into other beans [sqlService] in its raw version as part of a circular reference, but has eventually been wrapped. This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using 'getBeanNamesOfType' with the 'allowEagerInit' flag turned off, for example.
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:546)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:607)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:925)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:472)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:103)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:1)
at org.springframework.test.context.support.DelegatingSmartContextLoader.loadContext(DelegatingSmartContextLoader.java:228)
at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:124)
at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:148)
... 24 more

2014년 5월 19일 월요일

JUnit 과 Maven test 에서 UTF-8 인코딩 이슈

이클립스를 기준으로 작성한다.

JUnit 테스트를 사용했을 경우 인코딩 이슈가 없으나,

이 JUnit 테스트를 Maven으로 돌릴경우  로그상 한글이 깨지는 경우가 있다.

JUnit의 경우에는
Windows > Run > Run Configurations > 해당 JUnit > Common 탭을 클릭하면

Encoding 항목을 UTF-8로 바꾸면 된다.

Maven test 골의 경우

Windows > Run > Run Configuration > 해당 메이븐실행 > Common 탭을 클릭
Encoding 항목을 UTF-8로 바꾸고

pom 파일에서
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

추가


<build>
<plugins>
<plugin>
                       <groupId>org.apache.maven.plugins</groupId>
                       <artifactId>maven-surefire-plugin</artifactId>
                       <version>2.14</version>
                       <configuration><argLine>-Dfile.encoding=UTF-8</argLine</configuration>
                 </plugin>

하면 됨

메이븐 콘솔아웃이 말그대로 stdio가 아니라 fileio 라서 해당 설정이 필요함

2014년 4월 24일 목요일

Oracle 에서 트리거(trigger)를 이용한 열 자동증분(auto increment) 기능 구현


CREATE TABLE T_API_AUTH
    (
     SEQ NUMBER (5)  NOT NULL ,
     KEY VARCHAR2 (20)  NOT NULL ,
     TITLE VARCHAR2 (200) ,
     IPS VARCHAR2 (2000) ,
     MEMO VARCHAR2 (4000)
    )
;

COMMENT ON TABLE T_API_AUTH IS 'API 인증 정보'
;

COMMENT ON COLUMN T_API_AUTH.SEQ IS '순번'
;
COMMENT ON COLUMN T_API_AUTH.KEY IS '인증키'
;
COMMENT ON COLUMN T_API_AUTH.TITLE IS '제목'
;
COMMENT ON COLUMN T_API_AUTH.IPS IS '인증IP들'
;
COMMENT ON COLUMN T_API_AUTH.MEMO IS '메모'
;
CREATE UNIQUE INDEX T_API_AUTH_KEY_INDEX ON T_API_AUTH
    (
     KEY ASC
    )
;
ALTER TABLE T_API_AUTH
    ADD CONSTRAINT T_API_AUTH_PK PRIMARY KEY ( SEQ ) ;

CREATE SEQUENCE T_API_AUTH_SEQ_SEQ
    NOCACHE
    ORDER ;
CREATE OR REPLACE TRIGGER T_API_AUTH_SEQ_TRG
BEFORE INSERT ON T_API_AUTH
FOR EACH ROW
WHEN (NEW.SEQ IS NULL)
BEGIN
    SELECT T_API_AUTH_SEQ_SEQ.NEXTVAL INTO :NEW.SEQ FROM DUAL;
END;

CentOS 6.X에 OpenLDAP 설치 매뉴얼


설치

아래의 명령어를 이용하여 OpenLDAP Server 를 설치합니다.

설정전 준비

root 패스워드 생성

아래의 명령을 이용하여 OpenLDAP 의 암호화된 root 패스워드를 생성한 후 해당 데이터를 임의의 공간에 저장해 놓습니다.
정상적을 실행시 아래와 같이 암호화된 패스워드가 출력이 됩니다.

LDIF 파일생성

LDAP 의 기본 구조를 생성하기 위하여 아래와 같이 LDIF (LDAP Data Interchange Format) 파일을 생성합니다.
아래와 같이 입력한 후 저장합니다.

설정

OpenLDAP

OpenLDAP Server 설정 정보파일을 복사하여 생성합니다.
설정파일을 편집합니다.
아래와 같이 설정정보를 변경합니다.
최초 설치시에 있는 설정파일을 삭제한 후 DB_CONFIG 파일을 복사합니다.
LDIF 파일을 통하여 LDAP 객체를 추가합니다.
정상적으로 LDIF 파일 추가시 아래와 같은 메시지가 나타납니다.
아래의 명령을 실행하여 설정 파일을 생성합니다.
정상적으로 명령수행시 아래와 같은 메시지가 나타납니다.
설정폴더의 권한을 변경합니다.

방화벽 (iptables)

방화벽 정책파일을 편집합니다.
LDAP 기본 Port 389 번을 추가시킨후 저장합니다.
iptables 서비스를 재시작합니다.
정상적으로 실행시 아래와 같이 메시지가 출력됩니다.

실행

OpenLDAP 를 시작합니다.
OpenLDAP 가 정상적으로 기동시 아래와 같은 메시지가 나타납니다.

실행확인

아래의 명령을 이용하여 등록된 LDAP 데이터를 조회합니다.
아래와 같이 등록된 데이터가 출력이 됩니다.

서비스 등록

아래의 명령을 이용하여 서버 기동시에 실행될 수 있도록 서비스로 등록합니다.
정상적으로 등록이 되었는지 아래의 명령을 이용하여 확인합니다.
아래와 같이 slapd 서비스에 대한 등록 정보가 출력됩니다.

출처

  • http://blog.beany.co.kr/archives/2743