일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 한글조사처리
- mac
- JCE
- Instrumentation
- AES
- xlet
- PKCS#8
- ORM
- 한글조사
- Runnable
- date
- Executor
- Postman
- Java
- Callable
- RSA
- PKCS
- DAMO
- Freemaker
- StringUtils
- 이클립스 플러그인 개발
- 암호학
- Log4J
- sha1
- ACAP
- 자바 암호화
- Executors
- String
- IPTV
- 자바
- Today
- Total
목록분류 전체보기 (133)
오늘은 어디로 갈까...
어떤 놈을 먼저 설명해볼까 고민을 한 끝에, PersistenceManager를 해부대에 올려버렸다. 그 이유는 시작과 끝이 이놈을 통해서 일어나기 때문이다. 예를 들어 등록을 실행할경우 아래 그림처럼 흘러간다. 그림이 정확한것은 아니기에 흐름만을 파악하면 될것이다. PersistenceManager의 insert(EntityObject) 메소드가 호출되되면, QueryProvider에가 해당 쿼리를 요청한 후 결과를 받는다. 그림에는 없지만 세션이 존재한다면, 기존에 존재하는 세션을 사용하고 없다면 새로운 세션을 생성하여 할당받는다. 그리고 세션이 새로운것이나 트랜잭션이 시작되지 않은 상태라면, 트랜잭션을 시작한다. 그런다음 QueryExecutor를 통해 해당 쿼리를 실행 시킨후 트랜잭션 관련 작업을..
프레임워크 개발에 있어서 가장 중요하다는 생각되어지는 것은, 구조를 설계하는 일이라고 생각한다. 잘 만들어진 구조를 가진 프레임워크가, 잘 못 만들어진 구조를 가진 프레임워크보다 좋다는것은 너무나 자명한 사실이다. 그렇다면 어떤것이 잘 만들어진 구조일까? 여러가지 요소가 있지만, 그 중에서 가장 중요한 것이라면 모듈화를 잘 하는것이다. 응집도(Cohesion)를 강하게 하고, 결합성(Coupliing)을 약하게 하는것을 의미한다. 그렇다면 어떻게 하면 좋은 구조를 설계할 수 있을까? 그것에 대한 정답은 없다고 본다. 많은 삽질과 노력에 의해서 얻어진 경험에 의해서 조금씩 좋아지는것뿐인것이다. 겁먹지 말고 대충 구조를 만들어보고, 이게 아니다 싶으면 다시 만들면 되는것이다. 이런 시행착오를 거치다 보면 조..
스태가노그래피는 일반 사진이나, 동영상, 음악 파일등 위장 자료 아래에 각종 문서, 이미지, 동영상등의 실제 정보를 숨기는 기술이다. 따라서 겉으로 보기에는 일반적인 사진이나 동영상처럼 보이지만, 해독용 소프트웨어를 사용하면, 원래의 숨겨진 정보를 볼 수 있는것이다. 일반적인 사람이라면 쓸모 없는 것이진 하지만, 지적유희를 즐기기엔 상당히 좋은 분야임에 틀림없다. openstego(http://openstego.sourceforge.net/)라는 자바로 만든 스태가노그래피 소트프웨어가 있다. 오픈소스이기에 마음껏 사용할 수있다. 아직까지는 이미지 위에 정보를 숨길 수만 있고, 대용량 파일 처리가 미숙하기는 하지만 맛보기에는 쓸만하다. 위의 그림은 윈도우에 샘플로 들어 있는 그림인데, 다른 그림이 숨어있다..
오늘은 지난 시간에 이어 DAMO의 기능적인 부분을 살펴보도록 하겠다. 지난 시간에는 EO(EntityObject)를 가지고 요리하는 방법을 배웠으니, 오늘은 SQL 맵핑을 이용한 요리방법을 배워보도록 하자. 8) SQLMap XML 만들기 damo.t02 패키지를 생성한 다음, emp.xml을 생성한다. 우선 간단한 select 문을 사용해보도록 하겠다. SELECT COUNT(*) FROM EMP DEPTNO = ${deptno} EMPNO = ${empno} SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO FROM EMP DEPTNO = ${deptno} EMPNO = ${empno} xml 생성이 완료되면, 만들 xml을 DAMO에서 사용가..
일단 DAMO를 만들어보기 앞서서, 어떤 기능을 제공하고 있는지, 실질적으로 살펴보도록 하자. 여기서는 오라클을 사용하도록 하겠다. 원래는 국내 DBMS의 보급을 위해 큐브리드를 사용하려고 했으나, 큐브리드 티셔츠를 못받은 관계로.... 마음이 삐뚫어져 버렸다. --; JDBC를 지원하기만 한다면 어떠한 DBMS를 사용해도 무방할것이다. 1) 테스트용 테이블 만들기 테스트할 테이블을 만들어보도록 하자. 오라클에서 널리 쓰이는 DEPT와 EMP 테이블을 생성한다. 그리고 테스트용 데이터도 알아서 넣어주자. ^^; CREATE TABLE DEPT ( DEPTNO NUMBER (2) NOT NULL, DNAME VARCHAR2 (14), LOC VARCHAR2 (13) ) ; CREATE TABLE EMP (..
현대 세계에서 개발을 함에 있어서, 꼭 빠지지 않는 부분이 있다면 데이터베이스 영역일것이다. 대부분 오라클, My-SQL, MS-SQL 등과 같은 관계형 데이터베이스를 사용해서 데이터 처리 부분을 위임하는 방식을 사용한다. 개발자들은 SQL을 직접 사용하여 데이터베이스에 접근한다. 그리고, CRUD를 처리하기 위해서 비생상적인 수많은 코드를 만들어낸다. DAMO는 이런 비생산적인 작업을 줄여보고자 탄생한것이다. 자바 진영에는 Hibernate와 iBatis라는 유명한 ORM 프레임워크가 존재하고 있다. Hibernate는 진정한 의미의 ORM 프레임워크라고 할 수 있다. 자바 객체와 관계형 데이터베이스를 맵핑하여, 데이터를 객체지향적으로 처리할 수 있게 도와준다. 도메인 설계가 잘 되어 있어야하고, 기술..
요즘은 현실과 단절된 생활을 하고 있기에 너무나 행복하다. 사랑스러운 아내의 비소가 비수로 변해 가슴을 콕콕 찌르기는 하지만 아직은 버틸만하다...... --; 바다가 보고 싶으면 가방 하나 메고 바로 떠나버리고, 별이 보고프면 알 수 없는 시골길 풀밭에서 이슬을 벗삼아 잠이 들곤 한다. 먼산에 안개비 바람에 흩날리는 모습을 보면, 삶이란게 그리 어려운게 아닌듯한데, 왜그리도 어려운 길을 가려고 하는건지 정말 알 수가 없다. 시원한 계곡물에 발을 담그고, 망중한을 즐기면 더이상 무엇이 필요하단 말인가... 이슬을 머금은 꽃잎은 아름다움을 더해주고, 유유히 흘러가는 계곡물은 시간조차 풍요롭게해준다. 이렇게 꿈만 같은 시간을 보내고 있다가, 케케묵은 도시로 돌아오니, 돌아가실거 같다... @_@ 에릭 감마(..
죽음 없는 실존 안에서 스스로 유폐되어 살아간다는것은, 단절이 아니라 화해의 분리로서 이해할 수 있는 것일지도 모르겠지만, 결국 새로운 여정으로서의 열림인것이겠지. 먼 훗날, 또다시 한숨짓는다 해도, 그렇게.. 그렇게 걸어갈뿐인것이겠지.
백수의 최대 미덕이라 함은, 언제나 여유로운 시간이 아니겠는가? 본인은 아직 진정할 백수가 되지 못해서인가? 왜이리 시간에 쫓기고 있는것일까..? 1) DAMO 주석 추가 및 소스 정리 작업을 하려고 열었는데.... 쿨럭.... 소스가 이해가 안간다. --; 배치(Batch) 처리하는 부분인데, 겨우 일주일 안봤다고 다 잊어버리다니... 음... 직관적으로 사용할 수 있도록 구현하지 않고, 얼렁뚱땅 구현해버린 댓가인것일까.... final int maxCount = 10000; PersistenceManager pm = PersistenceManager.getPersistenceManager(); pm.beginTransaction(); final RunnableQuery query = pm.getQue..
원래 쓸 말이 많았으나, 피곤한관계로 간단하게 요약한다.(내일이 되면 다 잊어버리겠지. --;) 오늘은 무식한 본인이 Pie Chart가 왜 Pie Chart인지 깨달은 날이다. --; 파이하면 생각나는게 3.14라서 왜 저걸 파이 챠트라고 부르는지 늘 궁금해왔었는데, 오늘 프리젠테이션에 나오는 파이 챠트를 보는순간, 왜 파이 챠트라 불리우는지 비리소 인지했다. --; 오늘은 정식(?) 세미나가 아닌 Pre-Seminar였다. 9-10월경 정식 세미나를 한다고 하는데, 그때 가 볼 수 있을려나... 그동안 개발자의 관점에서만 안드로이드를 봤는데, 통신사/단말기 업체 등의 관점에서 안드로이드를 볼 수 있었다는 것과 세상이 참 재미있게 돌아간다는게 좋았다. 총 6개의 강의가 있었는데, 본인이 맘에 든건 2번..
갈수록 잠드는 시간이 늦어지걸 보면, 어느덧 이 생활에 적응이 되어가나보다. 오늘은 어제 구입한 "시작하세요! 아이폰 프로그래밍" 책을 보았다. 원래 일정이라면 코코아 프로그래밍 책을 열심히 보고 있어야겠지만, 주말에 스리슬쩍 끝내버렸기에 아이폰 프로그래밍 책을 보게되었다. (후반부는 거의 눈으로만 읽어봤기에 머리속에 남아있는게 없다 --;) 이 책을 선택하게 된 이유는 검은색 바탕 가운데 있는, 오렌지인지 귤인지 분간이 안가는 과일이 먹음직스러웠기 때문이다. 아직 초입부분을 보고 있기때문에 좋은 책인지 나쁜책인지는 판단할 수 없겠지만, 지금까지 분위기로봐서는 뭐 쓸만한거 같다. 번역이 가끔 이상한것(본인이 이해를 못하는.. --;)빼고는 괜찮은것 같다. 단지, 기존 코코아 프로그래밍의 저자와 프로그래밍..
원래 일정이라면 코코아 프로그래밍의 중반부를 공부하면서, 오늘 하루를 알차게 보냈어야하지만, 뭐 인생이 그렇듯 오늘은 제꼈다. --; 오전엔 인력업체(?)에 면접을 보러 갔다가 기분만 상해서 돌아왔다.(처음엔 인력업체인지 몰라다. --;) 객관적으로 본다면 별일 아니지만, 왠지 모르게 기분이 팍팍~~ 나뻤다. 그쪽 업무 경력이 없는것은 본인도 인정하기에, "XXX쪽 경력이 부족한거 같네요." 이말은 90% 수긍한다. 그리고, "솔루션 경험도 없으시고, 어플리케이션 개발 경험도 없으시네요" 이말도 약간 심기에 거슬리긴 하지만, 이력서를 그 모양 그 꼴로 작성한한 본인 자신의 무지에 대한 소산물이기에, 감수할 수 있다.. 하지만... "많이 부족하지만, 일단 이력서는 제출해볼께요" 이건 뭐.... 나름 배려..
속이 울렁거린다... 무식하게 소화되지 않은 지식들을 마구잡이로 머리속에 집어넣었더니, 애꿎은 위장이 소화불량에 걸렸나 보다. 예상했던데로 첫날보다 진도가 나가지 않는다. 다행히 218 페이지에 도달했다는데 위안을 삼아야지. 어제 대충 무시하고 넘어갔던 키-밸류 코딩, 키-밸류 옵저버가 여기저기서 상당히 오묘하게 사용되고 있었다. 저놈들이 나와서 저런 코드가 만들어졌는데, 저런 코드가 만들어져서 저놈들이 나왔는지는 모르겠지만, 상당히 흥미로웠다고나 할까.. 코어 데이터란것도 개념은 색다른게 없지만, 그걸 저렇게 구현했다는게 너무 경이로웠다. 왠지 모르게 맥용 코코아 어플을 순식간에 만들어 버릴거 같은 무모한 자신감까지 생겨나고 말이다. 본인은 코코아 프로그래밍을 처음 해보기에, 현 시점에서의 최종적 결과..
하루 종일 비가 내렸다. 가끔 이렇게 비가 내리는것을 보면은, 세상이 온통 물에 잠겨버렸으면 하는 생각을 한다. 아마 본인이 세상을 별로 안좋아하는 모양이다 --; 간만에, 냄비 받침대로 전락한 코코아 프로그래밍 책을 꺼내보았다. 총 500 페이지니까, 하루에 100페이지씩 5일이면 끝낼 수 있겠구나라는 말도 안되는 생각을 하면서 달려보았는데... 결국은 두뇌 과부하로 잠이 들었다 --; 뭐 그래도 138페이지까 봤으니, 목적을 달성했지만, 머리속에 얼마나 남아있을까.... ^^;; 셀렉터와 무더기로 파라메터를 넘기는 부분이 잘 이해가 안가긴 하지만, 뭐 흉내낼 정도는 이해했으니, 그것으로 위안을 삼아야지.. 그나저나 책을 보면 볼수록 대단하다는 생각이 든다. 어떻게 저런식으로 만들어낼 생각을 했는지, ..
졸린다... 자고 싶다.. 겨우 7시에 일어났는데, 비몽사몽이라니. 어느덧 몸과 마음이 백수 생활에 적응해버린것일까...? 정신차리자~~!!! 앞으로 뭐하고 놀지... DAMO는 어려운부분을 다 끝냈터란, 정리하는 부분만 남아서 매력 상실~~이구... 흠... 원래 하고 싶어했던건 검색 엔진과, 모바일쪽인데, 어느쪽부터 하는게 좋을까...? 거기다가 모바일은 아이폰과 안드로이폰 중 하나를 선택해야만 하는데, 참 곤란하다. ^^; 마음에 드는건 아이폰이긴 하지만, 오브젝티브~~ 씨를 첨부터 다시 배워야한다는 중압감이 날 두려움에 떨게 한다. 거기에 반해 안드로이폰은 자바를 사용하기에 거의 날로 먹을수 있다는 이점이 있다. 더군다나 넷북, 셋톱박스등의 플랫폼에도 사용된다는 소문이 있으니 왠지 매력적으로 보이..
보도 블럭 사이에 피는 잡초... 아니 이름 모를 식물들을 보면, 인간은 이 지구상에서 없어져야만 하는 존재가 아닌가 하고 가끔 생각을 한다. 편의를 위해 자연을 파괴하고, 인공적인 것으로 대체하고 있는데, 과연 그 자리를 대신할 수 있는것일까? 어릴적에는 흙탕물이 튀는 동네길이 싫어, 온 세상을 시멘트로~ 도배하기를 바랬는데, 지금은 시멘트를 보면 왠지 모를 거부감이 생기는것을 보면, 나도, 자연으로 돌아갈때가 온게 아닌가 생각한다. 삭막한 회색도시에서 살면서, 예전에는 누리지 못한 물질의 풍요로움을 즐기고 있긴 하지만, 허망한 영혼의 울림은 멈추지 않는것이겠지... 그저 그렇게 살아갈뿐... 오늘 세미나에 가기전에 잠깐 시간이 남아서, 서점에 들렸다. 내가 소화하지 못한 수많은 책들을 보면서, "이 ..
즐거웠던 주말은 너무나 빨리 지나가고 어느덧 다가온 월요일. 사실 백수에게 있어서는 빨간날이나, 검은날이나 별 상관이 없는것이겠지만, 사회적 틀로부터 격리당하지 않기 위해서는 늘 자각해야만 하는 슬픈 현실. 오전에는 마음에 드는 구인 광고가 있어서, 열심히 이력서를 적어서 보냈지만, 될 확률은 거의 없지 않을까. 솔직히 내가 인사담당자라도, 내 이력서를 보면 별로~일것 같다. 조각난 이력들, 그럴싸한 프로젝트도 없고 내새울거도 없는, 흔하디 흔한 삼류 개발자~~~ 딱! 그런느낌~~~ ^^; 요즘 같은 시대를 살아가려면, 이력 관리도 잘하고, PR도 열심히 해야하는데, 게으름탓인지 성격탓인지 그런건 딱 싫다. 거기다가 중요한것은 이력이 아닌 실력이라는 허망된 생각까지 하고 있으니, 참 곤란한다. 그리고 혹..
현실에서 캐시(cash)가 문제더니, 나만의 세상에서는 캐시(cache)가 문제이다. 순수한 OR Mapping이라면 대상 객체에 의해서 추가/수정/삭제가 있어날 경우 캐시(cache)된 내용을 갱신 시키줄 연결고리가 있지만, 생뚱맞게 텍스트로 쿼리를 따로 작성해서 사용할 경우, 어떤 연관관계가 있는지 알아내기가 힘들다. 뭐, 쿼리를 분석하여 대상이 되는 테이블을 추출해내고, 그 테이블에 데이터 변경이 일어날 경우 처리하면 되기도 하지만, 노력에 비해 결과가 별로이다는 것이다. 쿼리 분석하기도 어렵고, 뷰(view)를 쓸 경우는 데이터베이스 종속(?)적인 구현을 할 수 밖에 없으니, 참 난감하다. 쿼리를 작성할때 이 쿼리는 어떤 테이블과 연관관계가 있다고 정의하도록 요구 할 수도 있지만, 그것은 개발자를..
오늘은 비가 오는 관계로, 작업을 중단하고, 멍하니~ 하늘만을 바라보고 있다. 마음같아서는 비를 맞으며, 거리를 걷고 싶지만, 뒷감당이 무서워서 그냥 참고 있다. 이름이 강우라서 비를 좋아하는것일까, 비를 좋아해서 강우가 된것일까... ^^; 오늘 예정 작업은 DAMO의 캐시(Cache)부분이었다. (그렇다. 비가 오는 관계로 내일로 미루어졌다. --;) 간단히 사용할것이면 메모리 캐시마냥 Map 하나 선언해놓고, 데이터를 마구 넣구, 마구 가져가기를 하면 되지만, 여러가지 제약사항과 다양한 기능을 사용하기 위해서 기존에 만들어진 것을 가져다 쓰기로 했다. 자바용 캐시는 의외로 많이 있지만 유명한 것들은 아래와 같다. OSCache(http://www.opensymphony.com/oscache/) Ja..
오늘부터 본격적인 백수의 길로 접어들었다. 생존하기 위해서는 하루 빨리 이 길을 벗어나야하겠지만, 뭐 가끔 쉬어가는것도 좋은 일이니, 열심히 놀아보도록 하자. DAMO에 EL을 추가한것은 무덤을 파는 일이었다. 너무 자유로운 표현이 가능해서 제어가 불가능한 사태에 빠져버린것이다. 할 수 없이, 여러 제약 조건을둬서 어찌 돌아가게는 했지만, 영 아니올시다. ^^; 그중에서 가장 큰 문제는 반복문이었다. SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO FROM EMP ${empNo} EL 도입후 forEach 문으로 사용을 하려 했는데, 문제는 var='empNo' 였다. 즉 forEach문 안에서만 유효한 변수가 필요하게 된것이다. 기존에는 파라메터..
DAMO 개발중 좌절 #2 동적 SQL을 만들때 기존에는 태그별로 기능을 정의해서 사용하였다. 이번에는 시간이 널널한 관계로 EL(Expression Language)을 사용해서 만들어 볼려고 했는데 흠흠 좌절중이다. 평소 컴파일러 공부를 등한시한 본인에게는 새로운 문법의 언어를 창조해내는것이 너무나 어려운일이다. 규칙만 정의하면 javacc를 이용해서 간단하게 만들 수 있음에도 불구하고, 규칙 정의하기가 불가능... 아니 제한된 시간내에서는 힘들어 보였다. 한 이틀동안 열심히 분석해서 아주 조금 감~을 잡긴 했지만, 만들어진것을 간단히 분석할 수 있는 정도랄까. 무(無)에서 새로운 것을 창조할만한 지식은 아직 형성되지 못하였다. 일단 컴파일러 다시 공부하고 javacc를 공부하고, 문법을 만들어낸다면...
어제(2009년 6월 27일) 강남 교보타워에서 IBM developerWorks에서 주관하는 세미나가 있었다. 첫째 시간에는 간단한(?) 자사 제품 소개가 있었고, 둘째 시간에는 여러 개발자분들이 자신의 주제로 멋진 발표를 해 주셨다. 첫째 시간에 소개한 자사 제품은 심포니(http://symphony.lotus.com/)라는 놈인데, RCP 기반의 오픈 오피스이다. 뭐, 이클립스 위에 Sun사의 오픈 오피스를 올려놓았다고 보면 된다. 잘만 만지면 돈이 좀 될거 같긴한데 흠흠흠.. 요즘 웹이 대세이긴 하지만, 인트라넷이나, 관리자쪽은 Rich Client가 훨씬 좋다고 본인은 생각하고 있다. 실제 관리쪽 일을 하는 사람들은 보면은, 엑셀 파일을 열심히 만들어서 그 안에 있는 데이터를 열심히 웹 화면으로..
어떤분(?)이 댓글로 AES를 이용한 파일 암/복호화 예제를 만들어달라고 요청을 해왔다. 그래서 간단히 만들어봤다. 하지만, 세상에 공짜는 없는법~~~ 언제가 될지 모르겠지만, 나중에 혹시 만난다면 차나 한잔 사주세요. ^^;; package cydar; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java..
회사에서 짤렸다. --; 정확히 얘기하자면, 계약기간 종료이지만, 뭐, 나 스스로는 짤렸다고 믿고싶다. ^^; 본인은 뭐 대충 살다가 아사(餓死) 하던, 객사(客死)하던, 삶을 마감하면 되지만, 처자식을 굶길수는 없는 노릇이어서, 새로운 일자리를 구해야한다~~고 믿고 싶지만, 아직 정신을 못차렸는지 허송세월만 보내고 있는것을 보면, 소중한 일상들을 도매가로 맛없이 건조해버리는 미식가임에 틀림없다. --; 컴이 좋아서 프로그래머가 되었고, 그덕에 몇년동안 잘 먹고 잘 살았는데, 앞으로 이 길을 계속 가야할지 의문이다. 세상사에 지쳐서일까, 아니면 욕심이 많아서 일까. 그저 그렇게 살아가면 될터인데, 왜이리도 따지는게 많은지... ^^; 칙칙한 얘기는 그만두고... 상금에 눈이 멀어서 2009 공개SW 공모..
요즘 프로그래밍 삼매경에 빠져있다 보니, 블로그를 소홀히 하는것같아서 의무적(?)으로 몇글자 적어보겠다. 사실 삼매경이라기 보다는, 능력 부족으로 인해서 허우적거리고 있다는게 맞는거 같지만 말이다. ^^; JDBC를 이용해서 데이터를 처리할때, 실행 쿼리를 로그로 출력했으면 하는 마음을 가졌던 적이 있을것이다. Connection을 가져오고, Statement를 생성해서 실행하는 원초적(?)인 방법을 사용하는곳에서는, 로그 출력하는 부분을 매 코드마다 추가해 줄수도 있지만, 너무 귀찮지 아니한가. 그래서 좀더 쉬운 방법을 연구해보자. 본인같은 무식한 성격의 소유자는 java.sql.Connection, java.sql.PreparedStatement 등을 상속 받아 구현한 Wrapper Class를 만든..
요즘 예전에 만들어 놓았던 DAMO 라는 프로그램을 리뉴얼(renewal)하고 있는데, 생각보다 쉽지가 않다. (javassist를 적응할겸해서, 쿼리 실행 부분을 동적으로 클래스로 생성하여 사용할려고하는데, 구조를 약간 손봐야해서 힘이든다.) 이놈은 persistent framework인데, 간단히 설명하자면 Class를 가지고 쿼리를 생성해서 실행, 결과 맵핑을 해준다. 요즘은 워낙 좋은게 많아서 본인도 잘 사용을 안하지만, 아주 간단한(?) 프로그램을 짜기에는 편하다는(?) 장점을 제공해준다. 그 장점은 사실 별거 아니다. xml을 작성할 필요가 없다는 것이다. 쿨럭 ^^; 눈치 빠른분들은 이미 아셨겠지만, 이놈이 만들어지던때에 다모(茶母)라는 드라마가 방영되고 있어서.... 이름을 DAMO라고 지..
삽질하다가 전혀 엉뚱한것을 발견(?) ^^; 그놈의 정체는 JPDA(Java Platform Debugger Architecture) http://java.sun.com/javase/technologies/core/toolsapis/jpda/ 이클립스의 디버그 모드는 가끔 사용하기는 하지만, 이게 API로 제공되고 있을줄이야... ^^; com.sun.jdi 패키지인데, tools.jar에 포함되어 있다. 본론(?)으로 돌아가서, Javarebel은 어떻게 돌아가는지 파악하는데 또다시 실패했으나, Instrumentation의 redefineClasses() 메소드를 이용해서, 아주 간단하게 클래스를 변경하는 방법을 테스트해본것에 대해서 만족을..... ^^; 여러가지 제약사항이 존재하기는 하나, 추가/..
JavaRebel은 변경 사항들을 "on-the-fly" 방식으로 재로딩가능하게 한다~~~고 한다. ^^; 어떤 원리로 작동하는지 궁금해서 그 비밀을 파헤쳐보려고 했으나, 내공 부족으로 실패... 다음을 기약하며, 그 흔적을 남긴다. 1.4는 무시해버리고, 1.5를 기준으로 파보았다. 일단 시작은, JDK 1.5부터 지원하는 java.lang.instrument 패키지를 이용해서 Agent를 실행시킨다. 자바를 실행할때 -javaagent를 옵션을 줘서 실행하면, 해당 Agent를 실행시킬 수 있다. java -javaagent:agent.jar=args TestMain 이 Agent Class는 일반적인 어플리케이션의 진입 포인트(Entry Point)인 main() 메소드처럼, premain()이란 ..
한마디로 표현한다면 Non-Stop Java development 을 가능하게 해주는 놈이다. 변경된 클래스를 디플로이(deploy)할 필요없이 바로 반영시켜주는 아주 친절한 놈인데, 기술(?)이 상당히 탐이 난다. 현재 제우스(JEUS 5.0)에서 사용하고 있는데, 작업시간(?)을 많이 줄여줘서 좋다. 여기 프로젝트는 클래스로더 구조가 개판이라서 전체(?)를 대상으로 하면 이상한 에러를 뱉어내서 죽어비리는 현상이 있어, 웹 어플쪽만 대상으로 잡아서 사용중이다. 아래놈(?)이 발생한 에러인데, 1.5.0.16 버그(?)라는 소문이 있어서 1.5.0.18로 업데이트 했더나 다른 에러를 뱉어내고 죽어버린다. 아마 현 프로젝트의 되먹지 못한 구조와 제우스의 네임밸류(?)로 인한 오류가 아닐까 조심스레 생각해보..
요즘 되먹지도 않은 블로깅을 한다고, 뇌를 혹사 시키는바람에 반뇌사(腦死) 상태에 빠져있는지라, 휴식을 취하기로 했다. 마침 찾아온 간만의 연휴를 기회삼아 뇌휴식 프로젝트를 실행에 옮겼다. 프로젝트명은 "뒹굴거리면 애니보기" --; 역시 쉬는데는 뒹굴거리면서 애니보는게 최고이다. 아무 생각없이 흐릿한~ 눈동자로, 모니터를 바라보면서, 여과없이 정보를 주입받고, 주저없이 정보를 날려버리는 반사회적 행위야 말로, 이 시대가 낳은 최대의 즐거움이 아닐까 생각한다. 물론 재미있는 애니를 선택해야한다는 강한 압박감과, 가족의 방해공작을 사전에 방지해야한다는 어려운 전제조건이 있긴하지만, 큰 즐거움을 위한 작은(?) 희생쯤, 당연히 각오해야하는게 아닌가!!! 이번에 선택한 애니는 Tales of The Abyss(..