스프링에 태랜젹션 적용을 위해서

서블릿 설정파일에

<!-- transaction 설정 -->

<beans:bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

  <beans:property name="dataSource" ref="dataSource"/>

</beans:bean>


<tx:advice id="txAdvice" transaction-manager="txManager">

<tx:attributes>

<tx:method name="*" rollback-for="Exception"/>

</tx:attributes>

</tx:advice>


<aop:config>

<aop:pointcut id="requiredTx" expression="execution(* com.javalec.spring_mybatis.dao..*Dao.*(..)) or execution(* com.javalec.spring_mybatis..*Dao.*(..))"/>

<aop:advisor advice-ref="txAdvice" pointcut-ref="requiredTx" />

</aop:config>


설정과

pom.xml에

AOP 설정


<!-- AspectJ -->

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjrt</artifactId>

<version>${org.aspectj-version}</version>

</dependency>


을 하고 서버를 기동하니 아래와 같은 에러가 발생했다.



org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mvcContentNegotiationManager': BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0': Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException



에러 내용을 보니 결국 org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException  파일이 없다는 것이다.


뭐지 한참을 삽질을 하다가

AOP 메이블 설정을 잘못한 것이다.


위 설정이 아닌 아래 설정을 해야 하는데 실수한 것이다.



<!-- AspectJ Weaver -->

<dependency>

    <groupId>org.aspectj</groupId>

    <artifactId>aspectjweaver</artifactId>

    <version>${org.aspectj-version}</version>

</dependency>

로 설정을 해야 한다.


weaver가 AOP에서 advice를 핵심기능에 적용하는 설정 파일이라고 합니다.


톰캣 실행 시 java.util.zip.ZipException: invalid CEN header (bad signature) 와 같은 에러가 났다.


mybatis관련 디펜던시를 추가하고 서버 구동을 하니 에러가 발생했다.


메이븐 설정에 따라 가져오는 jar 파일에 오류가 발생하여 생기는 문제이다.


메이븐 기본 depository로 가서 해당 버전 폴더를 삭제 후


메이븐에서 프로젝트 업데이트를 실행하면 정상적인 파일이 다운로드 될 것이다.



에러내용




Window > Preferences > Maven > User Settings

에 가면 자신의 메이븐 디파지토리를 알 수 있다.

해당 Url 을 복사해서 탐색기에 붙여넣기 하면 쉽게 이동 할 수 있다.


위 오류 메세지와 pom.xml에 설정된 오류 jar를 알아서 찾는다.



메이븐 디파지토리로 이동하여 해당 버전 폴더를 삭제한다.



이후 프로젝트 우클릭 > 메이븐 > Update Project 를 클릭하면 정상적인 jar 파일이 다운로드 된다.


이후 톰캣을 재 실행하면 정상적으로 기동되는 것을 확인 할 수 있다.


단 인터넷 메이븐 디파지토리에서 다운로드 받을 수 없는 경우는 


로컬 디퍼지토리에 다시 메이븐 인스톨 해주면 된다.


로컬에 인스톨 하는 법은 아래 포스트를 참고한다.


스프링 메이븐 오라클 jdbc 드라이버 pom.xml에 dependency 설정


pom.xml 에 디펜던시로


<dependency>

   <groupId>com.oracle</groupId>

   <artifactId>ojdbc8</artifactId>

   <version>12.1</version>

</dependency>

아무리 설정해도 에러가 난다.


물론 소스를 실행해도 다음과 같은 에러가 날것이다.

Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'


메이븐에서 오라클 jdbc 드라이버를 찾지 못하는 것이다.

저작권 문제로 오라클 제품을 마음대로 배포하지 못하는 모양이다.


어떤 URL을 이용하는 repository 설정으로도 안되는게 원칙인거다.

근데 오라클에서는 제공을 안하고 있는지 모르겠다.


아무튼 오라클 사이트에서 직접 드라이버를 다운로드 받아서

메이븐을 이용해서 메이븐 로컬 레포지토리에 인스톨을 하고

인스톨된 버전으로 pom.xml에 디펜던시 설정을 해야 한다.


정리하면

1. 오라클 홈페이지에서 jdbc드라이버를 다운로드 받는다.

2. 메이븐 인스톨러를 이용해서 메이븐 레포지토리에 설치한다.

3. pom.xml에 디펜던시를 설정한다.


그럼 하나씩 해보자


1. 오라클 홈페이지에 접속해서 jdbc 드라이버를 다운로드 받는다. 


https://www.oracle.com

오랜만에 접속했더니 사이트가 많이 바꼇다. 메뉴로 찾아가기 힘드니 검색창에 JDBC를 입력해서 서칭한다.

최신버전을 받으시거나 자기에게 필요한 버전을 받는다.


2. 메이븐으로 인스톨 하여 로컬 메이븐 레포지토리에 설치한다.


mvn install:install-file -Dfile="파일이름(위치까지)" -DgroupId=그룹아이디 -DartifactId=파일이름 -Dversion=버전 -Dpackaging=jar

위에명령을 cmd에서 실행한다.

자기버전에 맞게 해당항목을 변경한다음 실행한다.

mvn install:install-file -Dfile="ojdbc8.jar" -DgroupId=com.oracle -DartifactId=ojdbc8 -Dversion=12.1 -Dpackaging=jar



메이븐이 설치되지 않았다면 에러가 발생할 것이다.

메이븐을 다운받아 압축을 푼다음 bin 디렉토리로 이동하여 명령을 실행하면 된다.


https://maven.apache.org/download.cgi 에 접속하여 ~~~~-bin.zip 버전을 받아 압축을 풀고 해당 디렉토리의 bin 폴더로 이동한다.



인스톨 명령을 실행하면 메이븐 depository에 해당 드라이버가 설치된다.

위에서는 C:\Users\webnbiz01\.m2\repository\com\oracle\ojdbc8\12.1 에 설치된 것이다.

해당 디렉토리로 이동하면 jar 파일과 pom 파일이 있다.

pom파일의 groupId, artifactId, version을 pom.xml에 디팬던시로 설정하면 된다.


3. pom.xml에 디펜던시를 설정한다.


<dependency>

   <groupId>com.oracle</groupId>

   <artifactId>ojdbc8</artifactId>

   <version>12.1</version>

</dependency>


pom.xml에 추가한다.


이후 서버 재시작후 실행하면 DB에 연결되는것을 확인 할 수 있다.




토요일에 창경궁 야간 관람을 다녀왔습니다.


7시30분 부터 입장이지만 인터넷 예매를 입장권으로 바꾸는 줄이 이미 길게 늘어서 있습니다.


예매하신분의 신분증을 가져가면 쉽게 입장권으로 교환할 수 있습니다.




입장권을 교환하고 들어가니 날이 어두워지기 시작했습니다.

개와 늑대의 시간

제가 엄청 좋아하는 때죠

해질녘, 모든 사물이 붉게 물들고 저 언덕 너머로 다가오는 실루엣이 내가 기르던 개인지 나를 해치러 오는 늑대인지 분간할 수 없는 시간... 이땐 선도 악도 모두 붉을 뿐이다...

해질녘을 의미하는 프랑스어 표현인 L'heure entre chien et loup 이라고 합니다.

고즈넉한 궁의 모습을 만끽할 수 있습니다.



고궁음악회를 바로 시작한다고 하여

얼른 가서 한자리를 맡았습니다.

퓨전 국악과 클래식 연주가 있었습니다.



퓨전국악의 쑥대머리

노래를 너무 잘 하시더군요.



기타와 첼로 연주도 멋졌습니다.



공연을 다 보고 나니 완전히 어두워 졌습니다.




이곳에서 많은 분들이 사진을 찍더군요

그림자로 나오는게 잘 찍으면 멋진 작품이 되겠네요.



명전전 내부 모습입니다.

왕이 업무를 보시던 곳이죠.

다른 궁에 비해서 작다고 하는데 그건 원래 정치를 위한 궁이 아니기 때문이라고 합니다.


여길 구경하고 돌아서니 비와 많이 오기 시작해서

다음을 기약 할 수 밖에 없었습니다. ㅠㅠ





드디어 2회 순위가 발표됐습니다.


상위권 순위변동이 꽤 있었습니다.











새로운 1위가 탄생했네요

송하영 학생




요근래 프로젝트는 git을 이용한 형상관리가 이루어 지고 있는 추세..

우선 이클립스 프로젝트와 github의 연결 설정을 해보자


이클립스는 전자정부 3.6버전을 받아 수행한다.

프로젝트 생성 및 여러 설정들이 잘 되어 있으므로....


전자정부프레임워크를 설치했다면

우선 이클릭스에 git 정보를 입력해야 한다.


 

메뉴의 Window > Perspective > Open Perspective > Other > Git 또는 오른쪽 상단의 폴더모양클릭 후 Git 선택





오른쪽 상단에 GIT 탭 클릭 후

좌측 영역의 Clone a Git repository 클릭


깃허브의 해당 프로젝트 경로를 입력 

로그인 정보도 입력 후 다음


깃허브의 해당 프로젝트가 비어 있으므로 위와 같은 경고문 출력 다음 클릭


로컬 깃 저장소 정보 설정

workspace에 저장되던 소스가 해당 폴더로 이동하게 된다.

형상관리시 로컬저장소에 커밋을 하고

로컬저장소의 소스를 원격저장소인 깃허브에 푸쉬하게 된다.

깃 레포지토리 정보가 추가된것을 확인


새로운 프로젝트 생성



전자정부의 샘플 코드 같이 생성

배포시 소스 확인 위해서..



프로젝트가 생성됐으면 해당 프로젝트 오륵쪽 클릭하여

Team > Share Project 클릭



Git 선택



Repository 선택에서 위에 설정된 로컬 레포지토리 선택



배포를 위해서 Team > Commit  이나 싱크를 클릭



커밋에 대한 코멘트를 달아주고 

모든 파일 선택 후 Commit and Push 클릭

다시한번

Commit 은 로컬 저장소에 파일을 올리는것

push는 원격 저장소에 파일을 올리는 것



첫번째 커밋이므로 마스터 브랜치에 등록할것인지 확인



커밋엔 푸쉬가 완료돼었다는 안내



깃 허브 사이트 가서 해당하는 프로젝트에 소스가 올라왔는지 확인






드디어 엠넷에서 아이돌학교 첫방이 방영됐습니다.


올해에는 프로듀스101이 남자로 구성되어


여자 아이돌을 기다리는 묻 남성들을 안타깝게 했는데요.


그 갈증을 해소해줄 프로그램이 시작된 것이지요.


우선 첫 방송의 순위를 보겠습니다.



첫 방에서 1위를 한 이해인 학생

그리고 종합평가에서는 1위를 투표에서는 2위를 차지한 나띠

그리고 9위안에 든 이채영, 서혜린, 박지원, 김은결, 송하영, 조유리, 백지헌


시청자들에게 확실하게 눈도장을 찍어 두었습니다.


호랑나미 김흥국 딸 기주현 학생은 중하위권에 머므르게 되었네요.


그럼 투표하는 법을 알아볼까요


http://onair.mnet.com/idolschool/sub/prevote 


CJ ONE회원만 투표가능합니다.

1명에서 전체모두에게 투표가 가능합니다.


이번에 선발인원은 9명이므로 상단에 9명이 표시되고 나머지 학생들은 아래에 표시되네요


자기가 응원하는 학생이 아래에 있다면

빨리빨리 투표하셔야 합니다.






1. pom.xml 디펜던시 추가

    <dependency>

        <groupId>org.jasypt</groupId>

        <artifactId>jasypt-spring3</artifactId>

        <version>1.9.2</version>

    </dependency>


2. 암호화 클래스 파일 만들어서 암호화된 문자 보기



package encrypt;


import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;


public class Encrypt {

public static void main(String[] args) {

   StandardPBEStringEncryptor pbeEnc = new StandardPBEStringEncryptor();

   pbeEnc.setAlgorithm("PBEWithMD5AndDES");

   pbeEnc.setPassword("jasyptPass");

   String title = pbeEnc.encrypt("hello world title");

   System.out.println(" title = " + title);

   System.out.println(" title = " + pbeEnc.decrypt(title));

}

}

hello world title 

이 암호화할 단어

3. properties 파일 저장
hello.title=ENC(ldtcJv+14/xmF3RGs+3xzTlCRKZuaKzQe+vRrj92umI=)

위에서 출력된 값으로 properties 항목에 값을 설정 
ENC로 묶어주어야 주입될때 복호화가 되어서 들어감에 주의

4. 콘텍스트 xml 편집

    <bean id="environmentVariablesConfiguration"
      class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
        <property name="algorithm" value="PBEWithMD5AndDES" />
        <property name="passwordEnvName" value="APP_ENCRYPTION_PASSWORD" />
    </bean>
  
    <bean id="configurationEncryptor"
      class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
        <property name="config" ref="environmentVariablesConfiguration" />
        <property name="password" value="jasyptPass" />
    </bean>
    
    <bean id="propertyConfigurer" class="org.jasypt.spring3.properties.EncryptablePropertyPlaceholderConfigurer">
        <constructor-arg ref="configurationEncryptor" />
        <property name="locations">
            <list>
                <value>classpath:/props/helloWorld.properties</value>
            </list>
        </property>
    </bean>
<bean id="helloworld" name="helloworldname" class="egovframework.guide.helloworld.HelloWorldServiceImpl" >
<property name="name"><value>egov2 framework</value></property>
<property name="title"><value>${hello.title}</value></property>
</bean>

HelloWorldServiceImpl 클래스에 
name과 title 이 주입되는데 
name은 직접입력된 값
title은 properties에서 가져온 값이면서 암호화된것을 복호화 하면서 넣음.



일요일 낮잠을 진창 자고 일어나

갑자기 주먹밥이 먹고 싶다는 울님의 의견을 듣고

화정역에 주먹밥 파는데를 검색


화정역 근처에 왕순이주먹밥김밥이라는 분식집을 찾아서 입장



외부 사진이 없어 다음뷰에서 캡처

화정역 맛집중 하나인 압구정고로케집 옆옆집이네요.




내부 인테리어



메뉴판입니다.

야채김밥이 2500원에서 2000원으로 인하했다고 하네요.



물과 육수는 셀프입니다.


우선 

참치 주먹밥 하나 2000원

야치김밥하나 2000원

떡볶이세트(떡볶이+주먹밥) 5000천원

합이 9천원어치를 주문하고 잠시 기다리니 음식이 짜잔



주먹밥이 두개인 이유는 세트메뉴의 꼬마주먹밥을 큰거 하나로 교체해서 주신겁니다.


떡볶이는 조금 나중에 나왔는데 이미 먹는거에 빠져서 사진을 못찍었습니다.

이성을 찾았을때는 이미 떡볶이 그릇은 오링상태 ㅠ


대체로 무난하게 맛있는 집이였습니다.



우선 yamb를 다운로드 받습니다.


http://yamb.unite-video.com/download.html


위 사이트가서 인스톨 버전을 다운받습니다.



인스톨 버전이 아닌 첫번째를 다운받으면

작업할때 아래와 같이 

The Path of MP4Box is Missing...

Yamb cannot find MP4Box. Please, provide a correct path in the Settings.

에러 창이 뜹니다.



yamb는 동영상편집을 쉽게 하는 GUI만 제공하기 때문에 실제 프로그램이 있어야 합니다.


그래서 설치 버전을 다운받는게 쉽습니다.

설치버전을 설치하면 아래와 같이 MP4Box등을 같이 설치 할 수 있습니다.



꼭 무설치 버전을 이용하고 쉽다면

MP4BOX를 아래 사이트에서 다운받아 사용합니다.


https://www.videohelp.com/software/MP4Box



그럼 MP4파일을 합쳐볼까요.




왼쪽 메뉴에서 Editing 클릭

Join 클릭



Add 버튼을 클릭해서 합칠 파일을 선택합니다.

아웃풋에 할쳐진 파일의 이름을 선택하고 Next



실행한지 2-3초면 합치기 완료가 됩니다.





+ Recent posts