2013년 7월 31일 수요일

하둡과 스프링 연결 - 링크



한글 설명 조대협의 블로그: http://bcho.tistory.com/726
스프링 설정 방법 : http://static.springsource.org/spring-hadoop/docs/current/reference/html/hadoop.html
자바 맵 클래스 : http://levin01.tistory.com/233
자바 가변 인자 : http://omen666.tistory.com/229

cron 사용법 - 링크

Cent OS 6.4 - cron 사용법 : http://webdir.tistory.com/174
Redhat - cron 사용법 : http://majesty76.tistory.com/48
cron 시스템 이해와 사용 pdf 파일 : https://www.linux.co.kr/lecture/lec_linux_01/lec-data/10data.pdf

SimpleJdbcTemplate - SQL 파라미터

SimpleJdbcTemplate에 작업을 요청할 때는 문자열의 SQL을 제공해야 한다.
String 연산으로 SQL을 직접 만들었을 때 SQL 주입 공격 등에 노출 될 수 있다.
보통 Insert into table(colum1,col2) values(?,?); 와 같이 위치 치환자를 두고 파라미터를 바인딩한다.
또, SimpleJdbcTemplate은 이름을 통한 치환자 기능도 제공한다.
위의 SQL은 Intert into table (col1,col2) values (:name1,:name2); 와 같이 작성할 수 있다.
이름을 이용해 바인딩하기 때문에 중간에 순서가 바뀌어도 파라미터 바인딩에는 영향을 주지 않는다. 그리고 맵이나 오브젝트에 담긴 내용을 키 값이나 프로퍼티 이름을 이용해 바인딩 할 수 있다는 것이다.

출처: 토비의 스프링3, 이일민, 에이콘 http://www.acornpub.co.kr/book/toby-spring3

출처: http://forum.springsource.org/showthread.php?79470-Best-way-to-do-data-file-load-into-DB-table

클래스를 만들어서 jdbc에 접근하는 예제는 아래 참조를 보면 된다. 나는 위의 출처에서 xml 파일로 jdbc에 접근하는 예제를 사용했다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:batch="http://www.springframework.org/schema/batch" 
 xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xmlns:p="http://www.springframework.org/schema/p"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:util="http://www.springframework.org/schema/util"
 xsi:schemaLocation="
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.0.xsd
  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
  http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">
  
 <batch:job id="fixedLengthFileDbDumpJob">
  <batch:step id="step1">
   <batch:tasklet>
    <batch:chunk reader="itemReader" writer="itemWriter" commit-interval="2"/>
   </batch:tasklet>
  </batch:step>
 </batch:job>
 <bean id="itemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
  <property name="resource" value="file:/#{jobParameters[FILEPATH]}"/>
  <property name="lineMapper">
   <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
    <property name="lineTokenizer">
     <bean
      class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
      <property name="names" value="컬럼1,컬럼2,컬럼3, 컬럼4" />
      <property name="delimiter">
       <util:constant static-field="org.springframework.batch.item.file.transform.DelimitedLineTokenizer.DELIMITER_TAB"/>
     </bean>
    </property>
    <property name="fieldSetMapper">
     <bean
      class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
      <property name="targetType"
       value="my.custom.data.type" />
     </bean>
    </property>
   </bean>
  </property>
 </bean>

 <bean id="itemWriter" class="org.springframework.batch.item.database.JdbcBatchItemWriter">
  <property name="itemSqlParameterSourceProvider">
   <bean class="org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider" />
  </property>
  <property name="sql" value="insert into 테이블이름 (칼럼1이름, 칼럼2이름, 칼럼3이름, 칼럼4이름) values (:컬럼1,:컬럼2,:컬럼3, :컬럼4)" />                            
  <property name="assertUpdates" value="true"/>
   <property name="dataSource" ref="dataSource"/>
 </bean>

</beans>


참조: http://stackoverflow.com/questions/751400/how-to-xml-configure-spring-bean-for-constructor-injection-when-bean-has-varargs
http://static.springsource.org/spring-batch/apidocs/org/springframework/batch/item/file/mapping/BeanWrapperFieldSetMapper.html
http://www.example8.com/category/view/id/452
http://www.java2s.com/Code/Java/Spring/SimpleJdbcInsertWithBeanPropertySqlParameterSource.htm
http://winmargo.tistory.com/118

Ubuntu Remote Desktop 사용

Windows나 Mac OS에서 우분투로 리모트 데스크톱을 사용할 수 있는 방법들이다.

먼저 우분투에서 Desktop sharing (혹은 remote desktop)을 검색해서 실행한다.
Allow other users to view your desktop 항목을 체크한다. (필요하면 그 아래 use 항목도 체크)
비밀번호 설정 후 닫는다.

기본적으로 vnc를 지원하기 때문에 따로 설정할 것은 없다. 기본포트(5900/5902)를 사용한다.

1. Mac에서 'Go' 선택 -> 'Connect Server' 선택 -> text line에 vnc://255.255.255.255  (IP주소)를 입력
    출처: http://superuser.com/questions/253044/remote-desktop-from-mac-to-ubuntu
2. ssh -X 사용
    출처: http://superuser.com/questions/573807/difficulty-to-enable-a-remote-desktop-connection-to-ubuntu-from-mac
3. tightVNC (Windows용) / Chicken of the VNC (Mac용) 사용
    출처: http://www.makeuseof.com/tag/ubuntu-remote-desktop-builtin-vnc-compatible-dead-easy/
4. Hard coding
    출처: http://mauroandres.wordpress.com/2013/01/14/enabling-the-remote-on-a-macbook-pro-running-ubuntu-12-10/

2013년 7월 30일 화요일

오늘의 지적사항

오늘의 지적사항


  1. 여러 번 반복적으로 사용되는 것은 상수로 지정하는 것이 효율적
  2. 스레드 1개에서만 사용 된다면 StringBuffer보다 StringBuilder가 효율적
  3. 리펙토링 - 코드 복잡도를 생각하자

Spring Batch my note- 스프링 배치 노트

Book : Pro Spring3  http://www.apress.com/java/spring/9781430241072
          It's source code http://www.apress.com/downloadable/download/sample/sample_id/1282/


Spring Batch version 1 은 item-oriented, version 2 는 chunk-oriented 이다.
그래서 version2 에서는 chunk size가 차면 reading/processing 한 것을 write step에 보낸다.

Spring Batch Infrastructure Components
1. JobRepository : Spring Batch metadata 하에서 Data 접근을 제공한다.
2. JobLauncher : 주어진 job과 parameter에 의거 job을 실행 한다.
3. JobOperator : version2에 새로 추가. job의 operation을 지원 - 실행중인 job 정지, 재시작 등
4. JobExplorer: version2에 새로 추가. Metadata에서 job 실행 정보를 확인 할 수 있다.

Spring Batch Infrastructure Configuration
Spring Batch에서 medatada 구조를 만들기 위한 DDL은 'spring-batch-core' module에 저장되어 있다. (org.springframework.batch.core 패키지에 있다)

참고
Spring Batch 관련 개념 및 예제 : http://ksug.org/61
Tutorial : http://keyholesoftware.com/2012/11/12/generating-large-excel-files-using-spring-batch-part-three/
Spring-JDBC : http://blog.outsider.ne.kr/882
Spring Concept : http://www.javajigi.net/pages/viewpage.action?pageId=5614
Job, Step, Tasklet, Flow : http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:brte:batch_core:flow_control
                                         http://springsource.tistory.com/93
                                         http://static.springsource.org/spring-batch/reference/html/configureStep.html