저자 : 한호림
출판사 : 한국방송출판

'꼬리에 꼬리를 무는....'이라는 시리즈의 책을 다 잘 알것이다.
그 책들의 저자인 한호림씨께서 쓰신 서양 문화에 대한 책이다.

GMP 10월호 광고를 보고 알게 되었다. 서평을 찾아보니 서평도 나쁘지 않아 사보게 되었다.

생각보다 책도 약간 크도, 두꺼웠다. 저자가 직접 찍은 많은 사진들 덕분이 아닐까???
서양 문화에 대한 책인데, 평소에 쉽게 접하기 힘든 내용들을 재미있게 잘 풀어 쓴 글들이었다.
아직 다 보진 못했지만, 지루하지 않고 재미있게 잘 읽고 있다.

서양문화에 대해 전문적으로 공부하는 사람들이 보기엔 어떨런지 몰라도 나같은 문외한이 보기엔 충분한 책이 아닌가 싶다. 사진도 많아 더욱 더 좋은것 같다.

서양문화에 관심이 있는 분이라면 한번쯤 읽어볼 만한 책~
GMP(Good Morning Pops) 10월호 교재의 내용이다.

교재에는 크게 3가지 내용을 다뤘다.
1. 원래 영어 표현 중 일부를 생략 또는 변형하여 쓰는 경우
2. 원래 의미와 다른 영어 표현을 가져다 쓰는 경우
3. 비영어권에서 만들어진 경우

전체적으로 봤을 때 2번이 제일 생소하고, 중요하다는 생각에 몇가지 옮겨 정리해 보고자 한다.

잘못 쓰이는 표현 올바른 영어 표현 우리말 표헌
콘센트(concent)an outlet, a wall socket*콘센트
프린트(print)a handout유인물, 인쇄물
본드(bond)glue접착제
드라마(drama)a soap opera텔레비젼 연속극
츄리닝(training)a sweat suit운동복
핸들(handle)a steering wheel운전대
클락션(klaxon)a horn경적
샤프(sharp)a mechanical pencil*샤프 펜슬

* 외래어

외국 사람과 얘기할 때 우리 식으로 표현하면 의사 소통이 상당히 힘들 수 있을테니, 이러한 말들을 알아두는 것이 좋을 것 같다.

출처 : gmp 10월호

갑자기 예전에 써 놓은 글이 생각나서 찾아보다 여기에 다시 옮기게 됐네요.

예전에 써 놓은 글 입니다.

실제 글 주소는 트랙백으로 걸기로 하고...

다시 살펴보다보니 SQL Server 2005로 넘어오면서 병행 제어 방법이 변경되었네요. ^^''
이름은 그럴싸하게 만들었던데, 왠지 oracle쪽과 약간 유사해진 느낌이...
원문 주소는 여기
역시 원문 사라질 걸 대비해서 파일로 남깁니다.




간단하게 위 문서에 아래와 같은 부분이 있는데..

Historical Behavior

Historically, the concurrency control model in SQL Server at the server level has been pessimistic and based on locking. While locking is still the best concurrency control choice for most applications, it can introduce significant blocking problems for a small set of applications.

The biggest problem arises when locking causes the writer-block-reader or reader-block-writer problem. If a transaction changes a row, it holds exclusive locks on the changed data. The default behavior in SQL Server is that no other transactions can read the row until the writer commits. Alternatively, SQL Server supports ‘read uncommitted isolation’, which can be requested by the application either by setting the isolation level for the connection or by specifying the NOLOCK table hint. This nonlocking scan should always be carefully considered prior to use, because it is not guaranteed to return transactional consistent results.


간단히 정리해 보면...
"SQL Server는 병행제어 모델로 비관적 알고리즘인 locking을 사용해 왔다. locking은 아직까지 대부분의 application에서 병행제어 방법으로는 가장 좋은 방법이긴 하지만 작은 규모의 application에서 중요한 blocking 문제를 야기시킬 수 있다.
가장 큰 문제점은 locking이 writer-block-reader 혹은 reader-block-writer의 원인이 되는 것이다. 기본적으로 SQL Server에서는 writer가 commit하기 전까지 어떤 트랜잭션도 row를 읽을 수 없다. 대신 application에서 isolotion level을 지정하거나 NOLOCK 테이블 힌트를 이용해 요청할 수 있는 'read uncommitted isolation'을 지원한다. 일관성 있는 결과를 보장하지 않으므로 이런 방법으로 locking하지 않은 채 사용하는 것은 주의해야 한다."

대략 정리했는데, 큰 틀은 맞겠지만 소소하게 틀린 부분은 많을테니 잘못된 부분 지적해 주시면 감사하고 이해하고 보시거나 ㅋㅋ
나머지는 시간날 때 날 잡고...

그리고 Oracle 최신 버전에는 혹시 다른 변화가 있는지도 같이 한번...

Oracle 10i의 메뉴얼 중 Concurrency Control 관련 부분 메뉴얼은 여기
파일은

실제 이런 문제를 겪는 경우도 그리 흔치 않고, 아주 가끔 발생한다면 알아 채기도 힘들다.
그래서 그런지 해결책에 대한 논의를 많이 보지도 못했다.

추후 reference 용도로 링크를 하나 달고, 페이지가 삭제될 위험(?)에 대비해 내용을 파일로 저장해 둔다.


관련 글
- A Collection of JVM Options


--------------------------------------------------------------




'programming > Java' 카테고리의 다른 글

Java에서 XML관련 예외  (2) 2007.01.30
Lucene 검색 시 and Query와 Filter의 차이점  (2) 2006.09.29
lucene의 Highlighter를 한글에 적용...  (2) 2006.09.12
서비스형 위키를 찾을 일이 있어 찾아봤는데, 생각보다 많다.

찾아본 김에 정리를 해 보자면...

* http://pbwiki.com/        : 무료 + 유료
* http://atwiki.com/        : 무료 (beta), 용량 무제한
* http://www.wiki.com/       : 무료 (beta)
* http://www.stikipad.com/    : 무료 + 유료
* http://www.wetpaint.com/    : 무료 , 용량 무제한
* http://www.wikispaces.com/    : 무료 + 유료
* http://www.xwiki.com        : 무료
* http://www.ziwiki.com    : 무료



음... 쉽게 찾고 기능까지 비교해 볼 수 있는 좋은 곳을 발견.
사실 알고 있던 사이트인데 이런 기능이 있는지는 몰랐음 --;;

http://www.wikimatrix.org/

여기서 "Choice Wizard"를 통해 원하는 기능의 서비스 위키 혹은 위키 엔진을 고를 수 있다.


라디오 스타...
영화 잡지 광인 울 와이프가 영화평이 괜찮은 영화라고... 기억은 안나지만 하여간 무지 칭찬을 해서 약간의 기대를 가지고 본 영화.
얼마 전 타짜를 본 기억이 아직 채 가시기 전에 보게 되었다.

영화 중반부까지는 큰 재미는 없었다 간간히 터지는 웃음 외에는...
하지만 영화 중반부 이후는 영화 끝까지 재미있게 봤다.

영화에는 약간의 감동과
충분히 볼만한 영화인건 맞는데... 왜 내 머리 속에는 타짜의 기억이 계속 맴돌까...

참... 영화 음악 매우 맘에 드네요. 특히 노브레인의 노래.
그리고 박중훈씨 생각보다 노래 잘하는 듯 ^^''

이미지 출처 : http://www.radiostar2006.com/

'movie' 카테고리의 다른 글

캐리비안의 해적 3 - 세상의 끝에서  (1) 2007.05.24
타짜  (0) 2006.09.26
[2005. 7]씬시티 (SinCity)  (0) 2005.07.03

Lucene 검색을 할 때,

특정 조건을 AND로 추가해서 Query할 수도 있고,
특정 조건을 Filter로 추가해서 Query할 수도 있다.

총 검색되는 갯수는 같지만, 간단하지만 보이지 않는 차이를 정리해 보면...
* AND로 검색을 하면 score에 해당 내용이 반영이 되어 정확도로 정렬할 경우 해당 내용이 반영된다.
* AND로 검색을 하면 별로도 추가로 검색을 하는 것이므로, 부하가 있는 쿼리의 경우는 AND조건 검색보다 Filter로 걸러내는 것이 속도가 빠르다. (검색된 것들 중에서 filtering을 하는 것이니 당연히 빠르겠죠? 전체 인덱스의 크기가 크면 클 수록 and query를 이용한 것 보다 훨씬 빠를테니까요.)

조금 더 자세히 몇 가지를 설명하자면...
Lucene in Action과 현재 licene 2.0 버젼이 filter 부분이 차이가 좀 있는데
DateFilter라는건 없어졌다.

그리고 내 경우는 기존에 사용하던 Filter도 있어서...
추가로 한가지 Filter를 추가한 case라서..

ChainedFilter에 두가지 filter를 추가해서 생성해서 사용했다.
참고 : http://lucene.apache.org/java/docs/api/index.html

Lucene에서는 numeric 범위 연산을 제공하지 않아, 숫자에 대해 범위 연산을 할 경우, 사용하는 자리수 많은 부족한 부분에 0을 채워줘야 한다.

간단하게 예를 들어 0~999까지의 숫자를 range검색하려면... 인덱싱할 때
1 -> 001
42 -> 042
999 -> 999

이렇게 인덱싱을 하고 검색할 때도 "032 TO 311" 이렇게 검색해 줘야만 제대로 검색이 가능하다.
그러므로 속도가 많이 느리다.

아래 출처에 보면, 음수를 포함하는 범위 검색을 하는 방법도 나와 있으니 필요한 분은 참고 하시길...

출처 : http://wiki.apache.org/jakarta-lucene/SearchNumericalFields

출처의 내용은 첨부 파일로 올려 놓는다.


SearchNumericalFields - Jakarta-lucene Wiki.mht



mysql을 사이트에 나온데로만 설치하고 아무 변경 없이 실행 후...

database와 table을 utf8로 만들고, stored procedure를 만들어 java에서 call하는데 한글이 깨지는 현상이 있었다.

db url에도 characterEncoding도 넣어보고, property에 charset을 utf-8로도 해 보고 하다가...
이것 저것 해 봐도 안됐었는데...

어디선가 보고 /etc밑에 my.cnf 파일이 없어서 mysql안에 있는 것 복사해서 넣고, 아래 내용을 추가해서 mysql을 재시작 하고나서 해결

[client]
character-set=utf8

[mysqld]
init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci

이 넘의 한글 문제... 머리아프다.. 어디 제대로 정리 된 곳 없을까?

회사에서 시사회 티켓을 얻어 타짜를 봤다.
원작 만화도 재미있게 봤던 기억도 있고해서, 꽤 기대를 했던 영화였는데...

역시나 정말 재미있게 봤다.
영화 초반엔 김혜수를 이용해 집중하게 만들더니, 영화 끝까지 한 장면도 지루하지 않게 끝까지 볼 수 있었다.

조연들 역시 딱 맞는 배역으로 영화를 더 완벽하게 만들어 준것이 아닌가 싶다.
오랫만에 정말 재미있는 영화 한편을 봤다.

포스터는 공식 홈에서...
아래 사진은 여기서 퍼 왔슴다.

'movie' 카테고리의 다른 글

라디오스타  (0) 2006.10.03
[2005. 7]씬시티 (SinCity)  (0) 2005.07.03
[2004. 10] 맨 온 파이어  (0) 2004.10.14
주로 MS-SQL에서 작업을 하다, mysql에서 처음으로 stored procedure(이하 sp)를 만들면서, 5분이면 될 것을 수십분은 걸린 것 같다 --;;
에러가 정확한 위치를 알려주질 않는다.

아래의 정리한 내용은 MS-SQL에 익숙하고 mysql을 사용해 보지 않은 분이 보면 무자게 도움이 될 것 같다.

- IF문을 쓸 때 END IF문이 있어야 하며, END IF문 뒤에는 ;를 붙여야 한다.
   ex> IF (test IS NULL) THEN
            SELSET 'ok';
         END IF;

- auto increment값을 얻어올 때는 LAST_INSERT_ID()을 이용한다.
   ex> SET serverId = LAST_INSERT_ID();

- CREATE PROCEDURE문 전에 delimeter문을 이용해 delimeter를 ';'가 아닌 다른 걸로 변경하고 뒤에 다시 변경할 것
   ex> delimiter //                  # delimeter를 //로 변경
         CREATE PROCEDURE xxx
                  .....
                  .....
         END;
         //                                # 실제 한 command가 종료됨을 의미

         delimeter ;                     # 다시 ;로 변경



일단 여기까지

'programming > MySQL' 카테고리의 다른 글

MySQL utf-8 글자 깨짐 해결  (0) 2006.09.26
java, mysql stored procedure 호출  (0) 2006.09.22
DBDesigner 4와 MySQL 4.1의 연결  (2) 2006.01.25
mysql에 stored procedure 만들기
delimiter //        

CREATE PROCEDURE getServerId(ip VARCHAR(15), OUT serverId tinyint)
BEGIN
SELECT id INTO serverId FROM tServer WHERE serverIp = ip;
END;
//

delimiter ;

- mysql에서는 ;가 command의 종료를 의미하는데 stored procedure의 경우 여러 query의 조합이라 중간에 ;가 들어갈 수 있는데, 그러면 문법 오류로 간주되므로 delimiter를 임시로 다른 걸로 바꾼 후 sp를 만들고 다시 예전 delimiter로 변경하는 것임.


java에서 call하는 코드
try {
   String CLASS_NAME = "com.mysql.jdbc.Driver";
   String DB_URL = "jdbc:mysql://localhost:3306/test";
   String USR = "id";
   String PASSWD = "pw";
  
   Class.forName(CLASS_NAME);
   Connection con = DriverManager.getConnection(DB_URL, USR, PASSWD);
             
   CallableStatement stat = conn.prepareCall("call getServerId(?, ?)");
   stat.setString(1, "127.0.0.1");
   stat.registerOutParameter(2, Types.TINYINT);
   stat.execute();
          
   System.out.println(stat.getByte(2));
} catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
} catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
}

'programming > MySQL' 카테고리의 다른 글

mysql에서 stored procedure 만들면서 주의 할 것  (2) 2006.09.22
DBDesigner 4와 MySQL 4.1의 연결  (2) 2006.01.25
DECLARE @var1 int  (5) 2006.01.20
http://www.jay.ne.kr/wp/post/248

위 포스트를 보고 함 해 봤는데...

방문했던 나라를 클릭하면 지도에 표시를 해 주는 사이트가 있네요~
아래 지도는 내가 방문했던 나라들...
동남아의 강세가 돋보이네요 ㅋㅋ



출처 : http://www.world66.com/myworld66/visitedCountries

잼나네요...
땅덩어리 큰 나라에 방문을 한 번이라도 하면, 무자게 넓어질 듯...

빨리 중국과 캐나다, 러시아에 한번 가야 할 것 같네요..
검색 결과에서 검색어를 highlight 시키는 기능을 구현하는데, lucene의 sandbox의 Highlighter를 이용해 봤다.


샘플 소스와 동일하게하고 analyzer만 CJKAnalyzer로 변경했는데... 결과는

"학교에서 우리 선생님께서 나에게 좋은 대학교를 골라 주셨다."에서 "학교"를 검색했다고 가정하면

변환한 결과는 아래와 같이 나온다.
"<B>학교에서</B> 우리 선생님께서 나에게 좋은 <B>대학교를</B> 골라 주셨다"

검색한 단어만이 아닌 조사까지 포함해서 처리가 된다.
혹시 단어만 하일라이팅 시키는 방법을 알고 계신분 있으신가요???


lucene을 이용해 검색을 구현할 때, 검색어에 lucene에서 사용하는 특수기호를 넣으면, 잘못 반영 될 소지가 있어, lucene에서 사용하는 특수 기호들에 대해서는 escape(기호 앞에 \를 추가)을 해 줘야 한다.

정규식을 이용해 간단하게 구현했는데, Lucene in Action 책을 보니 sandbox에 있는 js를 참고하라고 해서 홈페이지에 가 보니 없었다.

결국 알고보니 api에 추가가 되었다.
QueryParse.escape();

나 처럼 뻘짓하는 분 없기를...  

but....

http://lucene.apache.org/java/docs/queryparsersyntax.html
여기 가 보면 lucene에서 사용하는 특수기호들에 대한 설명이 나와 있다.
'+ - && || ! ( ) { } [ ] ^ " ~ * ? : \'

그런데 lucene의 escape 코드를 보면 '&&'와 '||'은 빠져 있다.
(2007년 6월 19일 발표된 2.2.0버젼에서 bugfix 되었습니다.)

직관적으로 이해 하겠지만 search value에  &&는 and로 ||는 or로 변환되어 처리되므로,
실제  &&나 ||를 검색해야 하는 경우 코드를 따다 수정해서 사용해야 할 듯.



실제 lucene 코드

url이 해당 사이트의 서비스를 매우 직관적으로 나타낸다.

QuickRef.org

현재 아래의 언어들에 대한 reference를 제공한다.
C, C++, CSS, HTML, HTML DOM, Java, JavaScript, MySQL, Perl, PHP, and Ruby
더 좋은 점은 실제 doc문서를 바로 보여준다. ajax를 이용해 해당 사이트의 내용을 바로 보여주는 듯...
프로그래밍 할 때 이용할 수 있는 자동 완성 기능이 구현되어 정확히 모르고 찾을 때도 매우 유용할 듯.

오늘 알게 됐으니, 낼 부터 함 써봐야겠다 ^^
 
각 DB들이 Standard SQL을 각각 어떻게 구현했는지를 비교해 놓은 페이지
공부하면서 하나씩 정리해 볼까 했는데, 여기 다 정리되어 있네요 --;;
혹시 몰라 파일로 첨부해 놓았습니다.

출처 : http://troels.arvin.dk/db/rdbms/


MS SQL만 하다가 MySQL, Oracle을 조금은 알아야만 할 입장이 되어 버렸네요...
이것 저것 비교해 보면 재미있던데, 기본적으로 datatype 부터...
알아 가면서 하나씩 정리해 보면 재미있을 것 같네요.


Oracle 10g Release 2
http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements001.htm#i54330

SQL Server 2005
http://msdn2.microsoft.com/en-us/library/ms187594.aspx

MySQL
http://dev.mysql.com/doc/refman/5.1/en/data-types.html



드디어 Dell의 새 모니터와 새 시스템을 받아 기분 좋게 시스템 세팅 중에...
새로 3.2를 설치하고 테스트 하는데 ant build시 제목 표시줄과 같은 에러가 발생

원인은 eclipse 내에 ANT_HOME path가 잘못 걸려 있어서 발생했던 것.

'Window->Preferences->Ant->Runtime' 여기서 ANT_HOME 버튼 눌러 맞는 위치로 설정해 주면 해결~

참고 : http://www.herrodius.com/blog/?p=42

'programming > Java' 카테고리의 다른 글

[갱신]lucene의 검색 값 escape  (0) 2006.09.11
java Date 관련 Quick reference  (0) 2006.07.27
Hibernate Quick Reference  (0) 2006.07.27
회사 동료가 알려준 dos용 unixcmd util입니다.
압축풀고 path만 걸어놓으면 준비 끝..

linux를 사용하지 않을 때 알고 있던 유일한 명령어인 ls도 물론 들어 있고~~

사실 개발 환경이 linux가 아닌 분들은 별로 쓸 일이 없을 수도 있지만...
써 보면 무자게 편해서...

방금 windows로 text파일 안에 abc라는 스트링 들어간 걸 찾다가.. 제대로 안 찾아져서..

해당 폴더에서 grep "^abC$ *" 해서 간단하게 찾을 수 있었습니다.

함 도전해 보시죠~


처음 psp를 살 때 아머케이스를 입혀줬다.
사이트에는 이리 저리 휘어 보이며, 유연한 척 해 놓고...
막상 만져보니 생각보다는 딱딱했다.

겨울이 지나면서 그런건지.. 언제 부터 케이스 이곳 저곳이 깨지기 시작했다.
이참에 psp에 새 옷을 입혀주려고 여기 저기 기웃 거리다 실리콘 형태의 옷을 발견했다.
dnshop 인지 gmarket 인지 어디서 샀는지 모르겠지만...



다른 곳에서 더 싸고(sale 중) 더 이쁜 옷을 발견...
색깔별로 다 있다. --;;

텐인텐
파랑, 보라, 검은색, 흰색, 분홍색 등등.. 색깔도 다양하다.

꼴랑 껍데기만 주문하면 배송비가 붙겠지만 그래도 내가 산 가격 정도...


먼저 발견했으면 좋았을 것을...

'stuff' 카테고리의 다른 글

gymboree.com에서 물건 싸게 사기  (0) 2006.11.12
5년만에 심장이식 받은 나의 iPaq  (0) 2006.07.29
psp를 가지고 암흑의 세계로...  (3) 2006.07.15


5년 전쯤 iPaq 3660 PDA를 구매했다.
지금은 왜 샀는지 잘 이해가 가질 않지만...

거금 50만원이나 들여서 구매를 했다.
시간이 흐르면서 활용을 안하게되다가 iNavi를 구매하면서 네비게이션으로 톡톡히 활용을 잘 해왔다.
그러나.. 시간이 흐르며 같이 줄어드는 배터리 성능...

이제는 10분 정도도 버티지 못하는 지경에...
큰 맘먹고 배터리를 교체해 주기로 했다.

PDA 관련해서 많이 알려진 남도시스템에 방문하여 교체받고자 space9에 있는 매장에 들러 배터리를 교체했다.

예전에도 액정을 깨먹어 거금을 주고 교체한 이력이 있었다.
배터리 교체하는김에 2200mh짜리로 교체를 해 더 긴 시간 활용할 수 있겠지만...
이미 나의 가방엔 PSP가 자리잡고 있어 뭐 아직 특별히 들고다닐 것 같진 않다.

* 오늘 날짜 구하기
- new Date();
- Calendar now = Calendar.getInstance();
  now.getTime();

* 어제 날짜 구하기
  Calendar now = Calendar.getInstance();
  now.add(Calendar.DAY_OF_MONTH, -1);
  now.getTime();

* 날짜 포맷을 원하는 형태로 바꾸기
       Calendar now = Calendar.getInstance();
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      sdf.format(now.getTime());    // 결과는 String

* 지 맘데로의 날짜를 담은 문자열을 다른 형태로 convert

        String dateStr = "200707211541122";
        SimpleDateFormat oldFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        SimpleDateFormat newFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       
        try {
            System.out.println(newFormat.format(oldFormat.parse(dateStr)));
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

* yyyy-MMM-dd 형태 parse 시 주의 할 점
      String regDt = "27/Jul/2006:00:00:00";
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MMM/dd:hh:mm:ss",
               Locale.US);

       try {
           System.out.println(sdf.parse(regDt).toString());
       } catch (ParseException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }

-> 위와 같이 Locale을 지정하지 않으면 한글 OS에서는 parse 오류가 난다.

* 특정날짜가 무슨 요일인지 알아보기
       String regDt1 = "2006-11-14";
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.US);

       Calendar cal = Calendar.getInstance();

       try {
           cal.setTime(sdf.parse(regDt1));
           System.out.println(cal.get(Calendar.DAY_OF_WEEK));
       } catch (ParseException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }

주의: cal.DAY_OF_WEEK라고 하면 처음 생성했던 instance의 값을 리턴한다.

 * 날짜 간의 비교
   
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Calendar now = Calendar.getInstance();
        now.add(Calendar.HOUR, -3);
        Date before3hour = now.getTime();
       
        try {
            if (before3hour.before(sdf.parse(regdttm))) {
                return true;
            } else {
                return false;
            }
        } catch (ParseException e) {
            return false;
        }
Hibernate 사용하기

1. 객체를 이용하여 저장하는 방법
           Transaction tx = session.beginTransaction();
           Cafe cafe = new Cafe();
           cafe = new Cafe();
           cafe.setId(Id);
           cafe.setName(name);
           session.save(cafe);
           tx.commit();


2. key 값을 이용해 값이 존재하는지 확인한 후 저장하는 방법
       Session session = HibernateUtil.getCurrentSession();

       Cafe existCafe = (Cafe) session.get(Cafe.class, grpId);
       
       if (existCafe == null) {
           Transaction tx = session.beginTransaction();
           Cafe cafe = new Cafe();
           cafe = new Cafe();
           cafe.setId(id);
           cafe.setName(name);
           session.save(cafe);
           tx.commit();
           System.out.println("inserted");
       }
       else{
           System.out.println("already exist");
       }

       HibernateUtil.closeSession();

3. key가 아닌 값을 이용해 존재하는지 확인한 후 저장하는 방법
* createQuery 안의 문장은 SQL Query가 아니라 Hibernate에서 사용하는 HQL(Hibernate Query Language) 이다.
  * 자세한 문법은 http://www.hibernate.org/hib_docs/v3/reference/ko/html/queryhql.html

       Session session = HibernateUtil.getCurrentSession();

       Keyword k = (Keyword) session.createQuery(
               "select k from Keyword as k where keyword = ?").setString(0,
               keyword).uniqueResult();
       if (k == null) {
           Transaction tx = session.beginTransaction();
           Keyword kw = new Keyword();
           kw.setKeyword(keyword);
          
           session.save(kw);
           tx.commit();
           System.out.println("inserted");
       } else {
           System.out.println("already exist");
       }

       HibernateUtil.closeSession();

4. 자동 증가값 받기
* 걍 강제 casting
   int id = (Integer) session.save(kw);

5. DB의 identity 컬럼 관련 XML 설정
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="net.daum.cafe.search.weblog.entity">
   <class name="Keyword" table="tKeyword">
       <id name="id" column="id">
           <generator class="identity" />
       </id>
       <property name="keyword" type="string" column="keyword" />
   </class>
</hibernate-mapping>

6. 복합키 관련 XML 설정
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="net.daum.cafe.search.weblog.entity">
   <class name="DTBC" table="tableD">
       <composite-id>
           <key-property name="Id" type="int" column="Id" />
           <key-property name="keywordId" type="int" column="keywordId" />
       </composite-id>
       <property name="count" type="int" column="count" />
   </class>
</hibernate-mapping>
* 참고 : 복합키를 구현하려면 Serializable을 반드시 implements해 주어야 한다. 그렇지 않으면 'composite-id class must implement Serializable' 예외가 발생한다.

걍 5초가 걸리는 작업들 10개를 ThreadPool 5개에 넣고, 10개의 작업이 끝날 때까지 기다리는 코드

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class TestThread {

   private static ExecutorService indexLoadService = Executors
           .newFixedThreadPool(5);

   public static void main(String[] args) {
       for (int i = 1; i < 10; i++) {
           indexLoadService.execute(new TTest(i));
       }

       indexLoadService.shutdown();
       try {
            // 2초에 한번씩 check한다.
            // awaitTermination의 경우 작업이 종료되었으면 true를 그렇지 않고 timeout이 지났으면 false를 리턴한다.
           while(!indexLoadService.awaitTermination(2000, TimeUnit.MILLISECONDS)){
           }
       } catch (InterruptedException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }

       System.out.println("Done");
   }

   static class TTest implements Runnable {
       private int num;

       TTest(int num) {
           this.num = num;
       }

       public void run() {
           System.out.print(".");
           try {
               Thread.sleep(5000);
           } catch (InterruptedException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
           }
           System.out.println("finish " + num);
       }

   }
}

'programming > Java' 카테고리의 다른 글

Hibernate Quick Reference  (0) 2006.07.27
Java Puzzlers : 9. Tweedledum  (0) 2006.07.19
Javolution  (0) 2006.07.14
문제는 역시 간단...

x += i;

x = x + i;

와 같지 않다.

왜????

'programming > Java' 카테고리의 다른 글

concurrent 패키지를 이용 간단한 ThreadPool 돌리기  (3) 2006.07.24
Javolution  (0) 2006.07.14
Java Tuning White Paper  (0) 2006.07.13
처음 psp를 구입할 때 1.5에 목숨걸고 결국 1.5를 사서 조금 재미를 보다가...
요즘은 귀찮아서 걍 같이 산 '모두의골프'나 조금 하고, 영화(넘들이 인코딩 해 주신)나 담아서 보고...
음악이나 듣고 하다가...

가끔 와서는 구경하면서 맨날 똑같다고 한마디 던지고 가는 박모군의 한마디에 자극 받아 다시 암흑의 세계에 발을 들여놓기 위해 여기 저기 헤매이다가 정말 제대로 된 암흑의 세계를 발견할 수 있었다.

암흑의 세계

psp를 갖고 있는 분이라면 한번쯤 꼭 진지하게 생각해 보고 위 링크를 방문하기 바란다.
잘못 빠지면 다른 일을 할 수 없게 될 수도 있으니 --;;

난 간단히 GTA나 돌려봤음 싶다.
용량이 꽤나 되는지 psp로 복사 중인데 끝날 줄 모르네...

이번 황금 주말은 psp와 함께 암흑의 세계를 좀 누벼야겠다.

참... 울 psp 껍데기를 하나 새로 입혀줬는데... 깔쌈하다 고무 냄시가 좀 나는게 그렇긴 하지만.. 싸고 깔끔해서 맘에 든다. 나중에 시간나면 한컷!!


요즘 점점 XML을 많이 사용해 가는 추세에 맞춰 java 진영에도 다수의 XML 관련 라이브러리들이 존재한다.

나 역시도 어떤 결과 값을 XML로 만들 필요가 생겼는데, 결과 Object를 알아서 XML로 만들어주면 얼마나 좋을까라는 생각에 관련 라이브러리들을 찾다가 아래와 같은 사이트를 발견했다.

XML data to Java classes 를 위한 라이브러리들에 대한 벤치마크를 한 사이트...
https://bindmark.dev.java.net/

눈에 띄는 두개의 라이브러리가 있으니,
JIBX와 Javolution

둘 다 간략하게 리뷰를 해 본 결과 실제 사용하는 사람 입장에서 좀 편한 것을 택하게 되었으니,
그 놈이 Javolution이었다.

Javolution은 단순히 XML관련 라이브러리만이 아니고, 기타 다른 여러 개의 라이브러리 묶음 중 XML관련 기능도 제공하는 것이었다.

이 넘을 이용해 잘 사용하고 있는데... 문제가 발생했다. 서버가 뻗는 --;;
여러 모로 원인을 찾다가... 아무래도 Javolution에 문제가 있는게 아닐까 하는 생각에 만든 사람한테 미친척 오늘 새벽에 메일을 보내봤다. thread dump뜬 내용과 간단한 상황설명과 관련 소스 조금...

그런데... 아침에 와보니 답변이 와 있었다.~~

답장 메일


한편으로 무지 반가웠지만 한편으로는 좀 원망스럽기도 했다. (그 간의 맘 고생을 생각하면...)

엉망으로 보낼 질문 메일의 원문은 공개하기 꺼려져 공개하지 않는다...

뭐... 위 메일대로 수정해서 테스트 중인데, 정말 해결될 지는 잘 모르겠지만...
잘 되길 바라며..

혹시 Javolution을 사용하고 있는 분 특히 CDATA 출력을 위해 CharacterData를 사용하시는 분 참고하시기 바랍니다.

이상~~ 


'programming > Java' 카테고리의 다른 글

Java Puzzlers : 9. Tweedledum  (0) 2006.07.19
Java Tuning White Paper  (0) 2006.07.13
RMI 연결 시 timeout이 안나는 문제  (0) 2006.07.07
돌아댕기다 이런 문서도 발견했네요...

Java Tuning White Paper

'programming > Java' 카테고리의 다른 글

Javolution  (0) 2006.07.14
RMI 연결 시 timeout이 안나는 문제  (0) 2006.07.07
linux 서버 app를 local jconsole에서 monitoring하기  (0) 2006.07.07

+ Recent posts