스프링 비주류 기술

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

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 웹소켓이나 봐야겠다.

[Play] 주석이 주석으로 안 보이냐? 지맘대로야 아주

이정도는 니가 알아서 무시하고 컴파일 지나가야지. 내가 조금 이따가 만들 URL인데 지웠다가 다시 적기 귀찮아서 주석처리하고 화면부터 제대로 isRejected()가 잘 적용되나 보려고 리프레시 한건데 꼭 이렇게까지 해야겠어?

주석은 주석으로 생각하고 넘어가야지. 융통성이 없어.

[Groovy] INDY(InvokeDynamic) 버전 사용하기

InvokeDynamic 자체가 좀 어렵다.

http://docs.oracle.com/javase/7/docs/technotes/guides/vm/multiple-language-support.html#invokedynamic

골자는 자바7에 이 기능이 추가됐고 이걸 잘 사용하면 JVM 기반의 동적 언어 시스템에 필요한 컴파일러와 런타임 구현체를 개선할 수 있다는데… 그냥 쓰면 좋다. 정도로 넘어가야겠다.

기존 JDK instruction 중에 invokevirtual에 상반되는 invokedynamic이라는 걸 추가했고 그걸로 동적 언어 구현체를 만들 수 있는 기능인가보다. 이걸 사용해서 구현하면 JVM 기반 동적 언어 컴파일러나 런타임 구현이 좀 더 간편하고 성능도 개선할 수 있고.

좀 더 깊게파려면 dynamic call site, bootstrap 등이 뭔 말인지 이해해야겠지만 뭔 말인지 모르겠다.

A dynamic call site is originally in an unlinked state, which means that there is no method specified for the call site to invoke

정의를 봐도 모르니 이해할 방법이 없다. 패쓰.

http://groovy.codehaus.org/InvokeDynamic+support

여기 잘 설명이 되어이는데 대충 이런 내용이다. 그루비 2.0 부터는 JVM의 invokedynamic 이라는 instruction을 지원하는 기능을 추가했단다. 그런데 이 instruction은 Java 7부터 지원되는 거라서 당근 JDK 1.7 이후부터 사용할 수 있다.

그렇다고 자바 7 쓰고 있으면 기본으로 쓰는건 아니고 groovy-x-y-x-indy.jar 처럼 맨 뒤에 indy가 붙은 jar 파일들을 사용해야지 invokedynamic으로 구현된 라이브러리를 사용할 수 있다.

indy 파일들은 그루비가 설치된 디렉토리/indy라는 곳에 들어있다. 그루비쉘 등에서 기본으로 사용하는 라이브러리는 그루비 홈/lib에 들어있는데 여기 들어있는건 당근.. 뭘까? indy가 아니라 normal이다.

그래서 이걸 굳이 indy 버전으로 쓰고 싶은 나같은 JDK 7 이상 버전 사용자들은 다음과 같은 쉘을 “그루비 홈”에서 실행해주면 한방에 lib 디렉토리에 들어있는 jar 들을 indy로 바꿔준다.

for f in `ls lib/groovy*.jar | cut -d/ -f2`;do k=`basename $f .jar`; mv lib/$k.jar lib/$k.jar.old; cp indy/$k-indy.jar lib/$k.jar ; done

파일이 한두개가 아니라서 수작업으로 indy에 있는걸 옮기지말고 그냥 위에 스크립트 복사해서 실행하는게 좋다.

그리고 사용자가 작성한 그루비 스크립트도 컴파일 할 대 invokedynamic을 사용하도록 컴파일 하려면 indy 옵션을 줘야 한다는데 옵션을 어떻게 줘야 하는지 예제가 없네.

http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.compile.GroovyCompileOptions.html#N1BA24

그래들로 그루비 컴파일 옵션 주는 방법은 여기있는데.. 보통 IDE에 세팅해놓고 쓰는게 좋을텐데 흠.. 어디없나. 모르겠다 패쓰!