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

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

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

[스프링 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 자. 이걸로 나의 모든 스프링 교육 자료 공개 끝.

[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에 세팅해놓고 쓰는게 좋을텐데 흠.. 어디없나. 모르겠다 패쓰!

[Groovy] 설치하기

http://groovy.codehaus.org/Download#Download-GVMtheGroovyenVironmentManager

오 이 설치 방법 좋네. 아주 깔끔하게 잘 되는구만!!

GVM 홈피는 잘 검색이 안되네. http://gvmtool.net/

git 도 좀 이런식으로 설치 하게 해주면 좋겠는데, 뭔 맨날 rpm 패키지 다운 받아서 어쩌고 저쩌고 아주 귀찮아~

설치 끝.

[생활코딩] 아침에 갑자기 생각난김에 yes24 api server 만들기

어제 저녁 이동국님과 토비님을 만나서 이런 저런 얘길 하다보니 자연스래 책 얘기에 빠졌다. 그러다가 서로의 판매지수와 순위를 이야기하며 이런 정보를 push 받고 싶다는 이야기가 나왔고, 토비님이 “생활코딩좀 해~”라고 하시길래.. 번뜩…

그래 예스24에서 API 서버 안만들어주면 그냥 HTML 긁어서 내가 서버를 만들어도 되겠구나… 이 서버 정보 조회해서 푸쉬하는건 따로 만들고.

아침에 일어났는데 다행히 어젯밤 대화가 기억났고, 12시반까지 광화문으로 가야하는 일정에 맞추려면 남은 시간은 대략 4시간. 그런데 이걸 어쩌나 서연이가 일어났다. 스프링 세팅하기는 귀찮고 play 처럼 명령어 하나만 치면 스캐폴딩을 다 만들어주는 뭔가가 있음 좋겠지만 플레이로 만들기는 죽어도 싫고.

그래서 그레일즈 선택! 했으나.. 지금와서 생각해보니 왜 노드.js를 기억하지 못했나 아쉽. 하지만 그레일즈 재밌었다. 짧은 시간이었지만 플레이보다 100배 좋다고 감히 말할 수 있다.

어쨌든 모니터 80%는 서연이한테 호비와 트니트니를 틀어주고 난 20% 구석에서 그레일즈 어떻게 쓰는지와 HTTP Client 찾기 시작해서 슬슬 대충 HTML 조회 끝. 이제 정규식으로 필요한 부분만 긁으면 되는데 기억이 잘 안나서 윤군한테 물어봤지만 왠지 복잡하게 푸는것 같아서. 그냥 자바 정규식 검색해서 글좀 봤더니 의외로 엄청 단순하게 해결.

이제 다 만들었으니 배포를 해야겠는데… 이제는 서은이가 일어났다.

서연이는 어린이집으로 데려다 주러 유진이가 데리고 나가고 나는 서은이 안고서 서버 세팅 시작. 자바는 다행히 지난번에 깔아놨고, 톰캣, 그레일즈, Git 설치 시작. Git 설치가 젤 힘들었다. yum 기본 저장소엔 왜 git이 없는거야.. 아 귀찮게 rpm 설치하고 어쩌고..

아무튼 서은이 안고서 서버 세팅 거의다 맞추니까 유진이가 돌아왔다.

서은이 얼른 안기고 배포까지 끝내고 구플에 자랑글 하나 올리고 난 이제 나가야겠다.

https://github.com/keesun/yes24-api-server

막 짠거라서 예외처리나 테스트 그런거 모르겠다.

아 재밌었다!!!

http://nullpe.com/yes24-api-server-0.1/book/info?id=8069226

yes24에서 관심있는 책 id만 바꿔가면서 조회해보면 된다.

끝!