camel 이라는 이름은 들어봤어도 실제 다운로드 받아서 테스트해본것은 오늘이 처음입니다.
EIP (Enterprise Integration Patterns) 라고해서 Enterprise 라는 단어만봐도 어려울것 같아서
멀미증상이 있는저는 그저 딴나라이야기처럼 보였습니다.
spring 은 언제 해볼련지....
암튼 그렇게 어려운 개념도 아니고(물론 상세한 것까지 들어가면 정말어렵지만)
당장 어려가지 경우에 간단하게 적용해볼만한 재미있는 라이브러리였습니다.
정말 간단히 표현한 이미지가 있습니다.
(출처) http://barunmo.blogspot.kr/2013/10/apache-camel-hello-world.html
만일 FTP에 접속해서 파일을 가져온다음에 이것을 로컬디렉토리에 저장하고 그것을 다른 경로에 주기적으로 복사하고 파싱을 한다음에 DB에 저장후 저장 결과를 이메일로 관리자에게 저장하는 비지니스로직이 있다고 하면
가장 골치아픈부분은 각 인터페이스부분을 직접 설계하고 관리해야한다는 것입니다.
하지만 camel은 정말 사막의 낙타처럼 묵묵하게 데이터들을 여기저기로 싣어나릅니다.
애플리케이션은 camel에게
"이것은 어디서 어디로 옮겨라. 그리고 만일에 동일한 파일명의 파일이있다면 다른이름으로 저장을하고. 아맞다 이런이런 이름의 파일명을 제외하고 몇분마다 주기적으로 copy를 하고. 요런 이름의 파일은 니가 피싱을 해서 DB에다 넣어놔. 다 되면 나에게 말해줘."
이렇게 camel에게 시키기만 하면됩니다.
애플리케이션은 자기 할일만 하면 됩니다.
그럼 우리도 한번 시작해보시죠.
일단 가장좋은 start 방법은 camel 패키지에 있는 예제로 테스트 해보는것입니다.
블로그나 구글링하는것 보다는 패키지에 있는 예제소스가 정말 도움이 많이 됩니다.
http://camel.apache.org/download.html
각 OS에 맞는 바이러리 파일을 다운받습니다.
압축을 풀고나면 examples 디렉토리안에 보면 예제소스들이 있습니다.
camel-example-ftp 디렉토리로 이동해서 보면 중요파일이 아래와 같이 있습니다.
\examples\camel-example-ftp\src\main\java\org\apache\camel\example\ftp
MyFtpClient.java
MyFtpClientRouteBuilder.java
MyFtpServer.java
MyFtpServerRouteBuilder.java
\camel-example-ftp\src\main\resources
ftp.properties
아참 요즘 오픈소스를 컴파일하거나 테스트 해시려면 mvn(메이븐) 은 필수입니다.
구글링을 통해서 꼭 mvn는 꼭 설치하세요.
MyFtpClient* 는 로컬에 있는 파일을 FTP 서버에 upload 해보는것이고
MyFtpServer* 는 반대로 FTP 서버에 있는 파일을 로컬로 download 해보는 것입니다.
MyFtpServer 를 해봅시다.
만일 eclipse에서 테스트해보고 싶으시면
\examples\camel-example-ftp 에서
mvn eclipse:eclipse 라고 명령을 입력하시면
eclipse용 설정파일들이 생깁니다.
import하시면 됩니다.
일단
MyFtpServerRouteBuilder.java 파일과 ftp.properties 파일을 수정합니다.
MyFtpServerRouteBuilder.java
from("{{ftp.server}}")
.to("file:로컬다운로드위치")
.log("Downloaded file ${file:name} complete.");
ftp.properties
ftp.client=ftp:/여러분FTP주소:21/mypath?username=아이디&password=비번
ftp.server={{ftp.client}}&delay=5s&move=done
위와 같이 수정후에
\examples\camel-example-ftp 에서
mvn compile exec:java -Pserver
라고 명령을 입력하면 여러분의 FTP에서 파일을 로컬로 다운로드받고
FTP서버의 파일은 done 이라는 디렉토리로 이동되는것을 확인해 보실수 있습니다.
쉽죠?
sftp도 잘됩니다.
[참조]
http://en.wikipedia.org/wiki/Apache_Camel
http://barunmo.blogspot.kr/2013/10/apache-camel-hello-world.html