본문 바로가기

내 시간 누가 훔쳐가나... 살아가면서 아직까지 답을 못찾고 있고 쉽게 찾아지지 않을 것 같은 주제가 있다. 그건.. "어떻게 시간을 도둑맞지 않을까?" 물론 나뿐만 아니라 전세계 많은 사람들이 고민하는 주제이기도 하겠지만.. 나의 하루가 너무 짧고, 언제 시간이 이렇게 흘렀지? 세월 참 빠르다...라는 말을 참 많이 하는 것 같다. 그말을 할 때마다 시간의 노예가 된듯 하고 시간이라는 녀석이 참.. 야속하기만 할 뿐이다. 요즘엔 해결책을 다른때보다 더 강구중이고, 그 시간이라는 녀석을 내것으로 만들기 위해 구애중이기도 하다. 언제까지 해야할지는 모르겠지만(아마 평생??) 그래도 매력적인 것 같아서 놓칠 수가 없다. 지난주에 도서관에서 여러책을 찔러보던 중 흔하디 흔하고 널리고 널린 시간관리에 대한 책을 속는 셈치고 집어들어봤다. ..
[Jersey] Representation and Java Types 참고 : Jersey 1.0.3 User Guide중의 내용 전에 올린 2009/06/02 - [나만의 작업] - JAX-RS @Produces와 @Consumes 에서 많이 본 Java type은 "String"인데, 거기서 본 String은 JAX-RS 구현을 지원하기 위해 필요한 많은 Java type들 중의 하나일뿐이다. Java type은 byte[], java.io.InputStream, java.io.Reader, java.io.File등이 있다. 게다가 JAXB beans도 지원해준다. 참고로 JAXB의 beans들은 JAXBElement나 @XmlRootElement 나 @XmlType라고 annotation 붙여진 클래스이다. Example 1.17. Using File with a s..
[CouchDB] HTTP Document API CouchDB wiki에 있는 내용을 보고 정리한 내용입니다. 제가 하고싶은걸 실습한 것이기 때문에 삭제된 내용도 있습니다. Naming/Addressing CouchDB에 저장된 Document들은 DocID를 가진다. DocID는 유니크한 아이디. 두개의 document는 같은 database안에 같은 identifier를 가질 수 없다. "test"라는 이름의 database안의 some_doc_id, another_doc_id, BA1F48C5418E4E68E5183D5BD1F06476 이름의 document가 있다. http://localhost:5984/test/some_doc_id http://localhost:5984/test/another_doc_id http://localhost:598..
아이폰 떡밥 만화 보기 좋은 날 서명덕 기자님의 ITViewPoint블로그를 보다가.. 완전 내 이야기이다.. 초 공감이다. 계속 된 떡밥에 이끌려 옴니아를 살까말까 고민하다가 지금은 아예 손을 놓아버렸다. 아이폰 내년에는 나올까? 나도 머리나 깎을까보다..
[CouchDB] Compaction CouchDB의 Reference중 Compaction CouchDB 공식 wiki에 적혀있는 내용을 간략히 정리해서 쓴 글입니다. Compaction Compaction은 database파일을 다시 쓰는 것. outdated document revision을 제거하고 document를 삭제한다. curl을 이용하여 테스트해보자! ~]curl http://localhost:5984/buri ('buri'라는 이름의 DB의 간략한 정보를 볼 수 있다.) {"db_name":"buri","doc_count":2,"doc_del_count":2,"update_seq":6,"purge_seq":0,"compact_running":false, "disk_size":16361,"instance_start_time"..
[CouchDB] HTTP database API CouchDB의 Reference중 HTTP database API CouchDB wiki에 있는 내용을 보고 실행해 본 과정을 올립니다. 제 나름의 정리이기에 생략된 것도 있습니다. 실행은 curl을 통해서 주로 하였습니다. Naming and Addressing database 이름은 모두 소문자 a-z, 숫자 0-9, _$()+-/ 문자로 이뤄져야 하고 slash(/)로 끝나야한다. http://couchserver/databasename/ http://couchserver/another/databasename/ http://couchserver/another/database_name(1)/ 주의! 대문자는 database 이름에 포함되어서는 안된다. http://couchserver/DBNAME/..
[CouchDB] API Cheatsheet CouchDB Reference중 API Cheatsheet 2009년 7월 현재 0.9.0버젼의 CouchDB 공식 wiki에 작성되어 있는 API Cheatsheet를 옮겨 적어놓습니다. CouchDB Server Level Requests info : GET / all_dbs : GET /_all_dbs config : GET /_config stats : GET /_stats UUIDs : GET /_uuids (takes a count parameter) replicate : POST /_replicate (see Replication)
제발 저 신문 좀 읽게 해주세요... 아침에는 집에서 출근준비를 하며 뉴스를 보고와서 그런지 회사에 와서 인터넷 뉴스는 잘 읽지 않는 편인데 오늘도 역시 네이버에서 무슨 검색을 하러 왔다가 뉴스에 낚여 클릭하는 순간! 짜증이 확~~~ 밀려오네요.. 도대체 기사를 읽으라는 건지... 참 네이버에서 커스텀하게 원하는 신문만 읽게 해주는데 요런덴 빼야겠군요 26살에 백만장자가 된 비결이 뭘까? 하고 클릭해서 왔더니 20줄 정도 되는 글을 읽기 위해 이렇게 화면 지저분한 광고와 배열로 가득한 화면을 보니 매우 산만합니다. 문제는 이뿐만이 아닙니다. 신문에서 중요한 수입원인 광고. 배치해 놓는거 어쩔수 없고 중요한 거 인정합니다. 글쓰기에서 가장 중요한 초반! 도입부를 저렇게 플래쉬 광고로 띄어놓고 아무리 기다려도 광고는 사라지지 않고, 답답한 마음..
[CouchDB] 초간단 Mac에서 CouchDB 실행하기 one-click으로 가장 간단하게 Mac에서 실행하는 방법! 이보다 더 간단할 수 없다. 링크 : http://janl.github.com/couchdbx/ 2009년 7월 현재 0.9.0-R13B 버젼을 받을 수 있다. 이 버젼엔 Erlang R13B, Spidermonkey 1.7 and ICU 3.8 가 포함되어 있다. 앞으로 계속 업데이트 될테니 저 링크에서 다운로드 받으세요~~ 다운로드 후 더블클릭 하면 실행된다.! 끝!
[CouchDB] 1. CouchDB가 뭐지? CouchDB???가 뭐지 하고 찾아보니 CouchDB는 아파치 오픈소스 프로젝트이고, DB이지만 Non-Relational Database이고 document-oriented기반이라고 합니다. 뭔가..새로운 포스가 느껴지는데.. 뭔가 개성이 강한 느낌..으로 조금 더 살펴보면, Couch를 사전에서 찾아보면 이런 뜻을 가지고 있는데.. 1a 긴 의자, 소파 《기댈 수 있는 등받이와 팔걸이가 있는》 2 《문어·시어》 침상, 잠자리 3 《일반적으로》 휴식처 《풀밭 등》;(야생 동물의) 은신처, 굴(lair) 딱 이름만 듣고는 이런 DB를 만들고 싶지 않았을까란 생각은 들지만, Cluster Of Unreliable Commodity Hardware의 약자라고 하네요.. 특징은 * RESTful API * ..
2연승이 눈앞을 가리는 군요.. 오랫동안 조용하다가 조용히 공군에 입대한 "홍진호"선수! 6월 20일에 있었던 홍진호-김택용 경기에서 황신으로 정말 짜임새 강한 경기로 735일만에 공식전 승리를 거뒀는데 그 경기를 보며 오랫만에 스타크래프트를 보며 눈물이 앞을 가릴때만 해도(gg쳤을때 눈물이 글썽이니깐 옆에서 같이 난생처음 저때문에 스타크래프트 경기를 같이 본 룸메이트가 절 이상하게 보더군요.) 그 감동만으로도 포스팅을 할 생각이 없었는데.. 오늘은 그만.. 김택용에게서 gg를 받아냈을때 환한 웃음ㅋㅋ (출처 : 포모스) 7월 4일 토요일에 있었던 김재훈과의 경기에서 초반에 김재훈 견제에 늦어진 멀티와 자꾸 흔드는 바람에 조마조마하며 설마설마 홍진호가 이길 수 있을까란 마음이... 다시 유리한 상황이 이끌다가 드랍 다크에 본진이 위험해..
6월 16일 딱~ 하루하는 행사가 있군요.... 우연히 RSS 리더를 읽다가 6월 16일 딱 하루만 하는 행사가 있어서 재미삼아 참여해 보았습니다. "6월 16일, 내가 담는 하루가 역사가 된다 - e하루616" 다음세대재단에서 주관하는 매일매일 다르게 변화하는 웹페이지를 하루동안 그 역사를 담는 타임캡슐처럼 담는 것입니다. 자신이 올리고 싶은 웹페이지를 캡쳐해서 전송하여 미래에 2009년 6월 16일엔 어떤 웹페이지가 존재했었나 어떤 내용이었나를 확인할 수 있는 뜻깊은 행사 같아서 저도 한번 제 블로그를 올려보았습니다. 전시관에서는 작년 이때, 제작년 이때를 둘러볼 수도 있습니다. 블로그를 가지고 계신분이나, 남기고 싶은 웹페이지가 있다면 한번 올려보시는것도.. 적긴 하지만 경품도 준다고 합니다.
Jersey의 JSON Support Jersey에서 JSON을 지원하는 방법은 두가지가 있다. * JAXB Based JSON support * Low-Level JSON support 일단, JAXB 기반의 JSON 지원하는 방법을 알아보면, JSON하고 XML data format을 쉽게 produce/consume하면 시간절약을 할 수 있다. 왜냐면 Java model, JAXB를 이용한 annotated된 POJO를 쓰기때문에 쉽게 핸들링할 수 있다. 자바 모델에 @XmlRootElement 어노테이션을 붙여주고 간단한 몇가지 작업을 해주면~ 큰 노력하지 않고 JSON을 지원할 수 있다. 단점은 매우 특별한 JSON format을 처리할 때 좀 어렵다는거.옵션을 줘야한다. 참고 : Jersey 1.0에서 RESTful 웹 서비스용 ..
Jersey의 Exception Handling Jersey에서는 WebApplicationException 클래스를 이용하여 Exception Handling한다. WebApplicationException을 잡아야 하고, 예외를 Response로 매핑한다. 예외를 위한 response가 null이 아니면 응답을 생성, null이면 서버 오류 응답을 생성 런타임 예외나 미리감지되는 예외(checked exception) 기호에 따라 사용 미리 감지되지 않는 예외나 오류는 컨테이너 안쪽까지 전파가 되도록 예외를 다시 던져야(re-thrown) 한다. 미리 감지되는 예외나 throwable 은 직접 예외를 던지지 말고, 서블릿인 경우은 ServletException으로, JAX-WS Provider 기반인 경우는 WebServiceException으로 ..
Jersey의 Return Type Jersey에서 사용할 수 있는 Return Type에는 void Response GenericEntity Java Type 네가지 타입이 있다. void : 204 status code (성공. message body가 empty) Response : null 리턴 값은 204 status code. GenericEntity / Other : 리턴값이 null이 아니면 200 status code를 사용하고 null이면 204 status code를 사용한다. Response의 instance에 어떤 metadata를 추가적으로 제공하고 싶으면 ResponseBuilder를 쓰면 된다. (ResponseBuilder는 빌더 패턴을 사용해 Response 인스턴스를 생성 한다.)
Jersey의 MessageBodyReader/Writer JAX-RS는 MessageBodyReader와 MessageBodyWriter를 통해 HTTP 메세지 바디와 자바 타입간의 마샬링과 언마샬링을 해준다. MessageBodyReader의 생긴 모습을 보면, (이 인터페이스를 구현하여 원하는 모습의 자바타입 객체로 변신시킬 수 있다.) public interface MessageBodyReader { boolean isReadable(Class type, Type genericType, Annotation annotations[], MediaType mediaType); T readFrom(Class type, Type genericType, Annotation annotations[], MediaType mediaType, MultivaluedMap h..
JAX-RS @Produces와 @Consumes * Content negotiation Representation을 서버에서 클라이언트로 받을 때 정보를 넘겨줄때 두가지 전략이 있다. (뷰를 판단하는 방법) 1. 하나는 다른 URI를 주는것. http://www.flyburi.com/user/buri.pdf http://www. flyburi.com/user/buri.xml 이렇게 다른 파일 확장자를 주는 방법 2. 다른 하나는 같은 URI를 주고 미디어타입의 리스트를 Accept HTTP request header에 주는 방법. http://www.flyburi.com/user/buri 라고 주고 Accept header에 application/pdf or text/xml이라고 주는 방법 이 방법을 content negotiation이라고 한다. A..
JAX-RS의 구성 1. Root Resource Classes * 웹 리소스을 구현하기 위해 JAX-RS 어노테이션을 사용하는 자바 클래스 적어도 하나의 메소드에 @Path을 사용한 POJO Root resource class들은 JAX-RS runtime에 인스턴스화된다. @Path 어노테이션이 달린 Resource 클래스 @Path("/hi") public class HiResource { @GET @Produces("text/plain") public String getAsText() { return "Hi! buri. Show Text."; } 2. Resource Methods @GET @POST @PUT @DELETE @HEAD * URI Templates @Path annotation의 값은 상대 경로 URI..
What is Jersey? 구글에서 "Jersey"를 치면 제일 처음으로 Map에서 저지섬이 나오고 두번째 링크로는 역시 위키피디아의 저지섬이 나온다. 세번째 링크가 되어서야 내가 원하는 jersey 공식 홈페이지가 나온다. Jersey는 SUN에서 개발하는 REST 방식의 웹 어플리케이션을 지원하는 JAX-RS의 구현체의 이름이다. Jersey is the open source (under dual CDDL+GPL license), production quality, JAX-RS (JSR 311) Reference Implementation for building RESTful Web services. But, it is also more than the Reference Implementation. Jersey provides..
What is JAX-RS? JAX-RS(Java™ API for RESTful Web Services)는 자바 플랫폼에서 경량화된 REST 방식의 웹 애플리케이션 구현을 지원하는 자바 API이다. SOAP기반의 SOA 연동은 자바 애플리케이션을 무겁게 한다는 비판과 함께, 최근 웹 애플리케이션의 경향인 AJAX기반으로 JSON이나 RSS와 같이 간결한 프로토콜을 사용한 연동이 보편화되면서 쉽게 구현할 수 있도록 Java EE에 JAX-RS 라는 사양이 포함되고 있다. (출처 : http://ko.wikipedia.org/wiki/JAX-RS) 2008년 10월에 JSR 311 1.0 released 되었고 2009년 5월 현재는 JSR 311 1.1 draft 상태이다. Open source 구현체로는 Jersey Restlets..