Whiteship's Note


The Domain Language of Batch - Spring Batch Chapter 2



배치 개념을 익히기 정말 좋은 챕터가 아닌가 생각됩니다. 스프링 배치의 도메인 언어인지, 일반적인 배치의 도메인 언어인지는 구분하기 힘들지만, 상당히 많이 정제되어 있다는 느낌을 받을 수 있었습니다. 분명, 수 많은 프로젝트의 배치 작업을 하면서 도출해낸 도메인 언어들이 아닐까 생각됩니다.

요즘은 귀찮아서 그림을 안 그렸었는데, 오랜만에 그려봐야겠습니다. 레퍼런스에 나와있는 그림에 표현하지 않은 도메인(JobParameters, ExecutionContext, Persistence 여부)도 있어서요.

사용자 삽입 이미지

후광이 있는 녀석들은 Persistent Domain입니다. 즉 (DB를 사용한다는 가정하에) Step이라는 테이블이 없다고 (즉, Step 정보를 유지하지 않는다고) 봐도 됩니다. 그래서 StepExecution 테이블에는 JobExecution의 주키를 참조하는 외례키 컬럼만 있고 Step_ID와 같은 컬럼은 없습니다.

연한색 박스는 인터페이스, 진한 색은 클래스입니다.

ExcutionContext는 StepExcuion 당 하나씩 생성됩니다.

재미있는 건 저 도메인들을 저장하는 책임을 지닌 JobRepository라는 인터페이스인데, 이 녀석의 구현이 어떻게 되어 있을까 궁금했는데, 구현체는 없었습니다. 어떻게 구현해야 할런지... JDBC 말고 애노테이션 기반 하이버네이트를 써서 구현하는 방법이 궁금해집니다. JobRepositoryHibernate 야.. 뭐 SessionFactory만 있으면 알아서 넣어줄테니 걱정되지 않는데, 저들 도메인의 맵핑 정보를 넘겨줘야 하는데 말이죠. 그걸 어떻게 애노테이션으로 할 방법은 없을까요. 흠... XML로만 해야 할까요. XML 로 해야 한다면, 맵핑 정보는 어떻게 만들면 될까요? 어느정도 고정적인 도메인이니까, 하나 만들어 두는게 좋을 것 같습니다.

흠.. Spring Batch + 하이버네이트를 기반으로 한 어떤 프레임워크가 되겠군요.

자세한 설명은 http://static.springframework.org/spring-batch/spring-batch-docs/reference/html/core.html 를 참조하세요.


'Spring Batch > Chapter 2' 카테고리의 다른 글

The Domain Language of Batch - Spring Batch Chapter 2  (4) 2008.07.28
top


혹시 "빠삐놈"을 모르시나요?



빠삐놈 원작(?)
http://gall.dcinside.com/list.php?id=composition_dc&no=63183&page=1

빠삐놈 8마일


그밖에도.. 참 많은 빠삐놈 노래들이 있더군요. 그 중에 짧고 재밌었던 건.. 빠삐밴드.

top


로컬에서는 무사히 빌드가 되는데, 왜 서버로 올라가서 CI가 돌리면 컴파일 에러가 날까

Build/Maven : 2008.07.28 14:45


이럴 때가 정말 황당하고 답답한데, 뭐 방법은 역시 에러 메시지를 잘~~ 살펴보면 됩니다. 아님, 사부님한테 물어보던지요.ㅋㅋ

문제 분석

일단 CI 서버에서 문제가 생기면, 로그 메시지를 보고 어느 Phase에서 에러가 난건지 확인 합니다. 컴파일 에러가 났으면 당연히 compile Phase에서 에러가 난거겠죠. 그럼 로컬에서는 어떤지 로컬에서 compile을 해봅니다. 즉 mvn compile 이라고 하면 되죠. 이 때 서버랑 똑같이 컴파일 문제가 생기면 아주 아주 좋은겁니다. 그런데 이 글의 제목처럼 로컬에서는 잘 돌아간다면, 약간 당황스러워 집니다. 이 때부턴 여태까지의 경험과 로그 분석으로 난국을 헤쳐나가야 합니다. mvn 로그를 보려면, -X를 추가해서 실행하면 됩니다. 서버로 가서 mvn -X compile 이라고 서버에서 실행하고 자세히 들여다 봅니다. 어떤 라이브러리들을 가져왔는지, 플러긴은 제대로 가져왔는지 등등..

문제 해결

0. 로컬에서 빌드가 제대로 돌았다는 사실을 의심해야 합니다.

"왜 서버에선 안 돌아갈까?" 전에.. "왜 로컬에서는 돌아가는거지?" 라는 생각을 먼저 해보는게 문제 해결의 지름길 입니다. '서버에서 돌린 스크립트를 그대로 돌렸나??' 라고 생각해본다거나, 이클립스에서 실행한건 아닌지.. 의심해야 합니다.

1. 인코딩 문제

로그를 보다가 UTF-8 뭐시기.. 인코딩 뭐시기 하는 메시지가 쭉~~~~~~~~~뜨는 경우가 있습니다. 이 때는 소스 파일 인코딩이랑 서버의 인코딩이 맞지 않아서 그런데, 리눅스의 경우 export LANG=ko_KR.eucKR 이런식으로 인코딩을 변경할 수 있으니, 인코딩을 변경한 다음에 다시 빌드를 해봅니다. 되면 귿!

2. 라이브러리 참조 문제

사용자 삽입 이미지

필요한 라이브러리들을 제대로 참조 했는지, 내가 원하던 버전을 참조하고 있는지 확인합니다. -X 옵션을 주면 볼 수 있으니까 잘 보면서 확인합니다.

2-1. 원하던 라이브러리가 없다.

<dependency> 엘리먼트 안 에 정의한 <scope>를 의심해보시기 바랍니다. <scope>에 test라고 입력했다면, 소스 코드 compile 시점이 아니라 테스트 코드 compile 시점에 참조하게 됩니다. 따라서 mvn compile 할 떄는 해당 라이브러리가 없겠죠.

2-2. deps 들이 꼬였다.

deps가 꼬일 일이 없으면 좋겠지만, 간혹... 정말 간혹.. 꼬일 수도 있습니다. managed deps 들이랑, transient deps들이 잘못해서 꼬이면 정말 찾기가 힘들지만, 어떻게 하겠습니까? 로그를 보면서 찾아야 합니다. 찾으면 그 담엔 제외 시키던지, 아니면 새로 deps를 정의해서 nearest first 전략을 활용하면 됩니다.

저의 에피소스

문제는 금요일 저녁에 발생했는데, 해결은 방금 전에 했습니다. 똑같은 컴파일 에러.. 똑같은 상황... 10번도 넘게 빌드를 해봤지만, 문제 원인은 쉽게 떠오르질 않고, 왜 자꾸 spring에 있는 mock 패키지를 못찾는 다고 하는 건지.. 로컬에선 잘 돌아갔는데.. mvn compile을 해도 돌아갔는데.. 대체 왜 이러니...

조금 전 연결이 된 사부님에게 문제 상황을 말씀 드렸더니, 저번에도 겪은 문제(deps가 꼬인 경우)가 아니겠냐고, -X 옵션으로 확인해보라는 대답을 들었습니다. 속으로는 '아.. 안 되는데.. 그 문제면 정말 귀찮은데...' 이러면서 확인해 봤더니, 컴파일에러에서 찾지 못한다는 그 클래스를 가진 라이브러리가 없었습니다. '뭐지.. 왜 spring-test.jar가 없지?' 제가 돌린 프로젝트는 스프링 테스트를 확장한 클래스(테스트 클래스가 아니라 그냥 일반 소스 코드로써의 클래스)를 가지고 있었기 때문에 spring-test.jar가 필요했습니다. '올커니... scope 때문이구나.' 아니나 다를까. pom.xml을 열어봤더니, 해당 라이브러리가 test 스콥으로 잡혀있었습니다. 해당 라인을 지워버리니까 빌드는 무사히 성공~
top


메이븐 플러그인 탐험기1 - UMLGraph

Build/Maven : 2008.07.28 13:18


소스코드를 보고 UML을 만들어 주는 UMLGraph라는 툴을 메이븐 빌드 과정 중에 플러긴으로 설치해서 리포트를 뽑아내는게 목적입니다. 물론 최종 목적은 코드와 모델을 항상 최신의 상태로 똑같은 상태로 유지하는 것입니다. 코드 보다 그림이 보기 좋은데, 그림이 실제 코드랑 다른 상태에서 어떤 결정을 하게되면.......

그래서 소스 코드에서 UML을 뽑아내는 툴을 사용해보기로 결정했습니다. 구글 검색을 통해서 잘 정리해둔, 불어로 된 블로그의 글 발견. 어차피 코드만 있으면 되기 때문에..ㅋㅋ

1. 먼저. Graphviz를 설치합니다. 이 녀석은 .dot 파일을 .png 파일로 만들어준 녀석입니다. 실제 그림을 들고 다니는 것 보다 그림을 그릴 정보들을 텍스트로 들고 다니는게 가볍기 때문일까요?

http://www.graphviz.org/Download..php

2. 환경 변수 path에 위에서 설치한 Graphciz의 bin 폴더를 설정해줍니다. 그 안에 있는 dot 이라는 명령어를 사용해야 하기 때문입니다.

3. 누가 doc 명령어를 사용하냐면, UMLGraph 메이븐 플러긴이 사용합니다. maven에 UMLGraph 플러그인 설정은 간단합니다.

    <reporting>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <configuration>
                    <doclet>
                        gr.spinellis.umlgraph.doclet.UmlGraphDoc
                    </doclet>
                    <docletArtifact>
                        <groupId>gr.spinellis</groupId>
                        <artifactId>UmlGraph</artifactId>
                        <version>4.6</version>
                    </docletArtifact>
                    <additionalparam>
                        -inferrel -inferdep -quiet -hide java.*
                        -collpackages java.util.* -qualify
                        -postfixpackage -nodefontsize 9
                        -nodefontpackagesize 7
                    </additionalparam>
                </configuration>
            </plugin>
        </plugins>
    </reporting>

자세한 설정 값은.. 나중에 살펴보구요.

4. mvn javadoc:javadoc 또는 mvn site를 실행하면, target/site 폴더가 생기고 그 아래에 apidocs 폴더가 생겼을 겁니다. 거기부터가 javadoc 문서입니다.

5. 구경하기

사용자 삽입 이미지

귿~

top


20080728 GMP

모하니?/GMPing : 2008.07.28 11:53


News

I recently visited California Silicon Vally and a new hightech startup. No not computers, it's a car company. And All they wanna do is change the world. "And an electronic sports car? That's right!"

Screen English

a.k.a(also known as): 또한 ~라고 알려진

Look. I'm not your parents. But I think you should know love is a dangerous feeling.
No Sir.
Are you arguing with me?
Love is not a feeling. It's an ability.

Pop's English

You look so dump right now.
Standing outside my house.
Trying to apology you are so ugly when you cry.
Please just cut it out.(=knock it off)

Talk Play Learn

I enjoied ~ing
I enjoied staying here.
I enjoied talking to you.
I enjoied studying history.
I enjoied working with you.
I enjoied walking with you.
I enjoied reading this book.
I enjoied watching the movie.

공공연한 비밀 = Open secret

'모하니? > GMPing' 카테고리의 다른 글

20080813 GMP  (0) 2008.08.13
20080807 GMP  (0) 2008.08.07
20080801 GMP  (0) 2008.08.01
20080731 GMP  (0) 2008.07.31
20080730 GMP  (0) 2008.07.30
20080728 GMP  (0) 2008.07.28
20080724 GMP  (0) 2008.07.24
20080721 GMP  (0) 2008.07.21
20080718 GMP  (0) 2008.07.18
20080717 GMP  (0) 2008.07.17
20080716 GMP  (0) 2008.07.16
top

TAG GMP