호주 이민 딜레마

일단 가장 최소한의 조건은 갖춘지 언 두달 됐다.

그동안 이민 준비는 놀았다. 이민 도와주는 업체 사람을 만나 미팅을 잠깐 해서 대충 견적을 뽑아봤지만 그것만으로는 이민 갈지 말지 안정적으로 살 수 있을지 없을지 알기 어려웠다.

일단 가장 걱정되는건 직장을 구할 수 있겠느냐인데 쉽지 않다. 직장을 구하려면 최소한 영주권이 있거나 시민권자여야 한다. 정말 정말 아주 아주 드물게 스폰서쉽까지 제공하며 채용하는 경우도 있긴하겠지만 사막에서 바늘 찾아서 거기로 낙타를 통과시키는 정도쯤 되려나. 현재 내가 가진 능력으로는 거의 불가능할듯하다. 그 사람들이 입장에서 난 그렇게 매력적인 인력이 아니니까. (그린팩토리에서 돈을 지불하면서까지 아프리카 출신 직원을 뽑아오는 것과 비슷한 수준이려나)

암튼 딜레마는 단순하다.

영주하려면 직장이 필요한데 직장을 구하려면 영주권이 필요하다.

이 고리를 끊을 방법은 돈과 능력이다.

돈으로 영주권을 사고 능력으로 직장을 구한다.

둘 다 안되면 한국에 잔류하거나 가서 거지된다.

스프링 비주류 기술

스프링소스가 띄운다고 열심히 띄웠지만 그다지 흥하지 못한 기술도 많다.

OSGi(Spring DM)가 대표적이고, 작년까진 PaaS(CloudFoundry), 제작년인가부터 지금까지 NoSQL + BigData(Spring Data + Spring XD)를 지원하고 있고, 작년부터 입질을 하고 올해 한창 Asynchronous Application (Vert.x + Reactor)를 띄우고 있지만..

이중에서 Spring Data 빼곤 딱히 어찌될지 모르겠구나..

Spring DM은 이클립스 재단에 줬다고 들은거 같고 클파는 2.0 개발 중이라는데 역시 모르겠고(GO로 만들고 있댔나?) Spring XD는 이제 막 시작이라서 좀 더 두고봐야겠고 Reactor역시 이제 시작이라 얼마나 어디에 잘 맞는지 좀 더 봐야겠다. 팀폭스는 열심히 Vert.x는 2.0 개발중인데 스프링소스에선 이제 관심끊었는지 어떤지 Reactor를밀고 있으니 그야말로 정신없구나..

물론 흥하지 못했다고 망한건 아니다.

OSGi(Spring DM)는 아틀라시안 제품의 플러그인 시스템으로 완전 자리잡았고 잘 쓰이고 있다.

클파는 S모사에서 열심히 연구중인거 같고 구현언어가 낯설어서 로우 레벨로 접근하긴 힘들겠지만 그냥 저냥 private paas를 공짜로 구성해서 쓸 수 있다면 그게 어딘가.. 가치 있는 일이다.

스프링 Data는 뭐 말할것도 없지. 이건 그냥 쓰면 좋은거니까 다 쓰면 되는거고.

스프링 XD는 대용량 데이터 수집 분석 통계 시스템을 만들 때 유용해 보이는데 아직 성장 단계라서 어떻게 클지 지켜봐야겠고.

Reactor를 어디다 써먹는냐가 문제인데.. 흠.. 잘 쓰려면 전용 런타임을 사용해야 하는 Vert.x에 비해서 기존 앱에다가 그냥 짚어넣고 쓰기 좋아 보이는데.. 어떤 로직을 리액터로 어떻게 처리하면 좋냐는거지…  그냥 스프링 XD용 이벤트버스가 아닌가 싶기도 하고.. 흠; 몰겠다.

마음 같아서야 다보고 싶지만… 체력과 시간과 의지력에도 한계가 있으니…

그냥 스프링 4 웹소켓이나 봐야겠다.

[스프링 3.0] 백기선의 스프링 3.0 교육 자료

updated 2014.10.19
죄송합니다. 블로그 서버를 옮기면서 예전에 올렸던 교육 자료와 소스 코드를 분실했습니다.
다시 만들수는 있지만 너무 수고로와서 ㅠ_ㅜ 다시 만들 엄두가 나질 않네요.
동영상은 다행히 남아있으니 그것만이라도 참고 부탁드려요.

4일치 교육 자료 PDF 1-4 http://whiteship.me/file/spring30/pdfs.zip 4일치 교육 자료 소스 코드 1-4 http://whiteship.me/file/spring30/sources.zip 이전에 교육 할 때 사용했던 동영상도 유투브에 다 올려놨었죠. http://whiteship.me/?p=13685 자. 이걸로 나의 모든 스프링 교육 자료 공개 끝.

하아… 긴장되는군…

영어 점수가 나올라면 아직 일주일도 더 남은듯하다. 오늘 확인해 봤을 때 4월 17일 시험 결과가 나왔다는 공지가 떴으니까 27일 시험 결과가 나오려면 대충 5월 중순은 되야 알 수 있으려나보다.

과연 내가 원하는 점수가 나왔을지… 그보다 못한 점수가 나왔을지… 전혀 감이 잡히지 않는다. 리스닝이나 리딩은 넘겼으리라 어느정도 확신하지만 나머지 롸이팅과 스피킹이 문제다. 롸이팅은 시간이 정말 촉박해서 마지막 1분까지도 문법이 이상하거나 지나치게 길게 쓴 부분은 지우고 고치기 바빴다.

롸이팅은 괜히 길게 써봤자 감점 대상만 늘어나니까 되도록이면 150자 250자에 맞춰 쓰는게 좋다. 문법도 중요한 체점 사항중 하나기 때문에 사소해 보이는 단/복수, 관사, 관계대명사 같은걸 제대로 썼는지 살펴보는것도 중요하다.

스피킹은 꽤 정신없게 많은 말을 하고 나오긴 했지만, 그다지 넓은 영역대의 언휘력을 구사하지 못한것 같고, 문법은 신경쓸 틈도 없어서 말하는 중간에도 아.. 이렇게 말하는게 아닌데 싶은 문장도 있었고, 나중에 집에와서 곰곰히 생각해봤더니 질문자가 의도한 대답이 그게 아니였던것 같은 부분까지도 생각나서 괴롭다.

롸이팅 문제는 잘 기억도 안나고(잘 생각하면 생각나겠지만 귀찮다.) 그나마 스피킹 문제는 대충 기억나지만 여따가 적어두면 뭐하리. 누가 보고 뭔 도움이 되겠다고.

넘지 못하면 뛰어내릴 각오로 임했건만… 말뿐이었나보다. 하아… 내 자신이 한심하다…

[vert.x] Hello Vert.x Module

Vert.x는 Verticle이라는 클래스를 상속한 .Java 파일을 실행할 수도 있고 프로젝트를 모듈화한 모듈을 실행할 수도 있습니다.

http://vertx.io/manual.html#interacting-with-vertx

자세한 내용은 위 링크를 참조하시구요. .java를 실행하는 예제는 쉽기 때문에 별다른 설명은 필요없을 것 같고, 저는 모듈을 실행하는 방법을 설명하겠습니다.

그러려면 모듈 프로젝트를 만들어야 하는게 이게 좀 일이죠. 그래서 제가 기본 골격을 만들어 두었습니다.

https://github.com/keesun/mod-sample

이 프로젝트를 받아서 각자 자신의 모듈을 만드실 때 사용하시면 됩니다.

git clone git://github.com/keesun/mod-sample.git

Git 지우기

받으신 다음에 mod-sample 디렉토리로 이동해서 .git/ 디렉토리를 지워주시면 깔끔합니다. 요즘은 svn도 이렇게 한곳에만 파일을 둔다는데 이전에는 굉장히 지져분하게 디렉토리별로 .svn이 생겼었죠. 그래서 그걸 전부 지우는 스크립트도 사용하고 그랬었는데.. git은 안그래도 됩니다.

빌드하기

빌드툴은 gradle을 사용합니다. 이유는 잘 모르겠고, 아마 스프링소스에서 그루비를 밀어주려고 그래들을 사용하는게 아닐까 싶기도 하고 메이븐이 너무 복잡하니까 그래들을 사용하는 것 같기도 하고 여러가지 추정은 가지만 뭐.. 팀 폭스가 그래들을 쓰니깐.. 저도 그래들.

유닉스/리눅스 계열 유저는 ./mk 를 사용하시면 되고 윈도 유저는 ./wmk를 사용하시면 됩니다.

./mk tasks라고 입력하신 다음에 커피를 한잔 드세요. 처음 빌드 하신 분들은 인터넷과 컴터 사양에 따라 대략 10분 ~ 15분 정도 걸립니다.

사용하는 IDE 파일 생성하기

이클립스나 IDEA 유저가 대부분일텐데요. 그러한 IDE 관련 파일은 절대로 버전 관리에 넣으시면 안 되는거 아시죠? 그거 개인 마다 다 달라지는 파일이라서 보통 버전 관리에 넣지 않아요. 그거 넣으면 뭔가… 이 사람 협업을 많이 안 해 봤나… 아님 초본가… 하는 생각이 드니까 조심하시기 바랍니다.

그래서 보통 로컬에서 생성해서 사용합니다. 그걸 직접할리는 없고 그래들 빌드를 돌리면 생성됩니다.

IDEA 유저는 ./mk idea 이클립스 유저는 ./mk eclipse 라고 하면 IDE 관련 파일들이 생겨서 IDE에서 프로젝트를 열거나 import 하실 수 있습니다.

IDE로 보면 대략 이런 모습인데요. 여기서 중요한 파일이 src/main/mod.json입니다. 이 파일이 모듈 설정 파일인데, 저도 정확히 어떤 속성들이 존재하는지 모르겠습니다.

아마도 Vert.x 코드를 까보면 보일텐데;; 제가 지금 아는 수준은 매뉴얼에서 설정하는 수준 뿐입니다.

http://vertx.io/mods_manual.html

모듈을 크게 둘로 나눠서 실행 가능한 모듈(실행 모듈)과 그렇지 않은 모듈(비실행 모듈)이 있는데 지금 제가 샘플로 제공하는 것은 실행 가능한 모듈입니다. 물론 이걸 조금 수정해서 비실행 모듈로 만들 수도 있습니다. 구분은 main이라는 속성으로 합니다.

{
“main”: “me.whiteship.HelloVertxModule”
}

지금 mod.json을 보면 이렇게 main 이라는 속성에 Verticle을 상속받은 클래스 전체 경로를 적어둔 것을 볼 수 있습니다.

Verticle을 상속받으면 start()라는 메서드를 구현해야 하는데 위와 같이 구현하면 아주 단순한 웹 서버를 만들 수 있습니다.

모듈 만들기

이제 다시 콘솔로 이동해서 이 프로젝트를 모듈로 빌드해보죠.

./mk clean dist

./mk dist라고만 해도 될듯한데 그냥 깨끗하게 빌드 하려고 저는 ./mk clean으로 빌드 디렉토리 다 지운담에 다시 dist로 빌드 하도록 ./mk clean dist를 주로 씁니다.

빌드가 되면 프로젝트홈/build/mod 라는 디렉토리에 모듈이 생깁니다.

아차;; 빌드 하기전에 build.gradle에서

compile “org.vert-x:vertx-core:$vertxVersion”
compile “org.vert-x:vertx-platform:$vertxVersion”

이걸

provided “org.vert-x:vertx-core:$vertxVersion”
provided “org.vert-x:vertx-platform:$vertxVersion”

이렇게 바꿔주세요. 코딩할 때 필요해서 compile 스코프로 넣어뒀는데 빌드하고 난 뒤에 실행할 때는 이 두개가 vert.x에서 제공해주는 라이브러리를 쓰도록 provided 스코프로 해주는게 맞습니다.

자 어쨌든 build/mod/로 가시면 모듈 디렉토리가 생긴걸 볼 수 있습니다.

/work/mod-sample/build/mod > ls
me.whiteship.mod-sample-v0.1

이렇게요.

모듈 실행하기

모듈 기본 디렉토리를 mods라는 디렉토리입니다. 즉 아까 생성된 모듈을 mods 라는 디렉토리 밑으로 옮겨야 하죠. 그런데 mods라는 디렉토리가 없죠? 프로젝트홈 디렉토리에 하나 마들어 주세요.

mkdir mods

그리고 그 밑으로 아까 생성된 모듈 디렉토리를 통쨰로 복사하거나 옮겨오세요.

/work/mod-sample/mods > ls
me.whiteship.mod-sample-v0.1

이렇게요.

이제 프로젝트홈에서 다음과 같이 모듈을 실행하시면 됩니다.

/work/mod-sample > vertx runmod me.whiteship.mod-sample-v0.1
server is running on http://localhost:9090/

브라우저에서 해보시거나 콘솔창을 하나 더 열고

~ > curl http://localhost:9090/
Hello Vert.x

끝.