2009년 11월 10일 화요일

구글 크롬 chromeplus + Daum 영어사전

최근에 브라우저를 파이어폭스를 주로 사용하는데, 메모리를 너무 많이 먹는다.
그리고 처음 나왔을 때는 빠르다고 느꼈었는데, 요즘은 빠르다고 느끼지 못한다.
아무래도 그때는 인터넷 익스프로러 6.0 을 기준으로 비교해서 그런 듯 하고.. 최근에는 크롬이 나오면서 파이어폭스도 느리다고 느껴질 때가 많다.

게다가 회사에서 Eclipse, 사내메신저, Outlook, IE7.0 을 기본으로 사용하는데다가 Firefox까지 띄우면 컴퓨터가 아주 느려진다.

그래서 발견한 것이
구글 크롬의 장점 + 마우스 제스쳐 + javascript 셀렉션 등의 많은 장점을 가지고 있다.

다만 구글 툴바 및 플러그인등을 설치할 수가 없어서.. 사전 기능을 사용하지 못한다는 점.

그래서, 셀렉션 영역을 다음 사전으로 검색하는 Javascript북마크릿을 만들었다.
사전은 다음 사전이 좋다.


위 링크를 즐겨찾기 영역에 드래그 해서 북마크릿으로 사용하면 편리하다.

2009년 11월 7일 토요일

Apache Lucene + Solr (아파치 루씬 + 솔라) 오픈소스 텍스트 검색 엔진 사용

ApacheLucene
오픈소스 검색엔진인 Lucene


Solr
엔터프라이즈 검색서버인 Solr


오픈소스 검색엔진인 Lucene 과 그의 서브 프로젝트로서 엔터프라이즈 검색서버인 Solr 를 활용하여,
Twicco 서비스의 검색 기능을 개선하게 되었다.



처음에는 Twicco를 오픈 하였을 때는 트위터 글이 적어서 데이터베이스의 like 검색으로 가능 할 줄 알았다.
그런데, 몇만건 이상의 트위팅 글이 쌓이면서, DB like 검색은 수십초가 넘게 걸리는 문제가 발생했다.

이뿐만 아니라, 쇼핑몰을 만들어도 쇼핑 아이템 수가 늘어나면 검색 기능이 필요해 지고,
Stackoverflow와 같은 Q&A 커뮤니티 서비스를 만들어도 검색 기능은 빠질 수 없는 필수 기능이다.
그리고, DB like검색으로는 해결이 안되는 용량의 수준은 어느 서비스에서나 겪을 수 있는 문제라고 생각된다.

그래서, 이번 기회에 기존에 들어봤던 오픈소스 검색엔진인 Lucene 을 적용해 보기로 했다.
(회사에서 검색 부서 옆에서 일하면서도, 검색을 잘 모르지만... )

예전에 검색 교육을 받았던 문서도 뒤져보고, 웹서핑을 하면서 검색의 기초 개념을 조금 익혔다.

예전부터 거론된 Lucene을 사용하기에 가장 문제가 되는 점은..
한글 형태소 분석기가 없다는 것이다.

이 말은 쉽게 표현하자면,
"톱스타 장동건이 연인 고소영을 위해 담배를 끊었다고 일간스포츠가 7일 보도했다."
라는 문장을 검색 할 때,
Lucene에 기본으로 포함되어 있는 형태소 분석기를 이용하게 되면 스페이스 기준으로
Term을 구분하고 indexing하게 되어,
"장동건이" 를 치면 검색이 되지만, "장동건" 을 치면 검색이 되지 않는 치명적인 문제가 있다.
"담배를" 을 검색하면 검색이 되고, "담배" 를 검색하면 검색이 되지 않는..
얼마나 치명적인 문제점인가!

이 문제를 오픈소스로 해결해 주신 멋진, 존경스러운 분이 계셨다.
네이버에 루씬 한글 분석기 오픈소스 프로젝트 까페( http://cafe.naver.com/korlucene )
에 가면 KoreanAnalyzer 를 다운로드 받을 수 있다.

검색을 위한 형태소 분석 면에서 영어에 비해서 한글은 훨씬 어려운 점을 가지고 있다.
잘은 모르지만, 우리나라에서 한글 검색기술은 잘 오픈되지 않았던 것 같다.
그래서, 더 갑진 듯 하다. 이 한글 형태소 분석기를 개발해 주신분께 다시한번 감사의 말씀을 전한다.

KoreanAnalyzer를 활용하여 Lucene 커멘드 명령어로  한글 검색을 해 보니,
한글의 조사, 어미, 접두어, 접미어, 조합어 등의 사전을 기반으로 하기 때문에,
Lucene의 기본 형태소 분석기와는 차원이 다르게 훌륭한 결과를 얻을 수 있었다.
그리고, 기본 사전을 추가, 변경하면서 검색 성능을 향상 시킬 수도 있다.

위 문장에서 예를 들었던  "장동건", "담배" 등이 검색이 잘 된다.

2단계 Apache Solr.

검색 결과를 어플리케이션으로 전달하기 위해서는 많은 작업을 해 줘야 한다.
보통 아래와 같은 XML로 검색결과를 전달하는 방법이 많이 사용하는 것 같다.


















검색 대상 도큐먼트 추가, 색인 데이터 관리, 검색 결과를 전달 하는 등의 동작을
HTTP XML RESTful 방식으로 사용할 수 있게 해 주는 것이 Solr 이다.
아래와 같은 웹 인터페이스로 질의 테스트 및 색인어 보기 등의 많은 기능을 제공하여 편하게 사용할 수 있다.

































Solr를 사용하기 위해서는 위에서 언급했던 KoreanFilter, KoreanTokenizer 의 Factory 클래스를 아래와 같이 만들어 줘야 한다. 이것은 Solr의 설정을 통해 Lucene의 에서 사용된다.


package org.apache.lucene.analysis.kr;

import org.apache.lucene.analysis.TokenStream;
import org.apache.solr.analysis.BaseTokenFilterFactory;

public class KoreanFilterFactory extends BaseTokenFilterFactory {
    public TokenStream create(TokenStream input) {
        return new KoreanFilter(input);
    }
}


package org.apache.lucene.analysis.kr;

import java.io.Reader;
import org.apache.lucene.analysis.TokenStream;
import org.apache.solr.analysis.BaseTokenizerFactory;

public class KoreanTokenizerFactory extends BaseTokenizerFactory {
    public TokenStream create(Reader input) {
        return new KoreanTokenizer(input);
    }
}

그리고, Solr 홈페이지에 있는 Getting Started (Tutorial) http://lucene.apache.org/solr/tutorial.html 을 보고 설치하면 된다.
설정하는 과정에서 schema.xml 파일의 설정을 보면
<fieldType> 의 <analyzer>부분을 아래와 같이 수정한다.

...
      <analyzer type="index">
        <!-- modified by jaehyun
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        -->
        <tokenizer class="org.apache.lucene.analysis.kr.KoreanTokenizerFactory"/>
        <filter class="org.apache.lucene.analysis.kr.KoreanFilterFactory"/>
...
      <analyzer type="query">
        <!-- modified by jaehyun
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        -->
        <tokenizer class="org.apache.lucene.analysis.kr.KoreanTokenizerFactory"/>
        <filter class="org.apache.lucene.analysis.kr.KoreanFilterFactory"/>
...

그리고 검색할 데이터의 형태에 맞게 field를 정의해야 한다.
이것은 마치 DB설계를 할 때, 테이블 설계와 유사한 형태라고 생각하면 된다.

그리고 몇가지 설정해야 할 것들이 더 있는데, 아래 문서를 보면서 따라하면 쉽게 될 것으로
생각되어 모두 기술하지는 않겠다. 자세한 사항은
http://lucene.apache.org/solr/tutorial.html
http://www.ibm.com/developerworks/kr/library/tutorial/os-dw-os-apachelucene.html
http://wiki.apache.org/solr/
http://gurchin.tistory.com/153
등의 문서를 참고 하면 된다.
Tomcat을 같이 사용하려면 http://wiki.apache.org/solr/SolrTomcat 을 보면 된다.


끝으로..
지금까지는 검색엔진 기술은 전공자가 아니면 쉽게 따라할 수 없는 기술로 여겨져 왔으나,
훌륭한 오픈소스인 Apache Lucene, Solr, KoreanAnalyzer 등을 이용하면, 누구나 기초적인 텍스트 검색엔진 구축하여 활용 할 수 있게 되었다.
이제 막 기초적인 설정을 마무리 하였으니, 앞으로 Lucene, Solr 를 좀 더 공부해 봐야겠다.


2009년 11월 6일 금요일

Stackoverflow 사용하면서 또 하나 알게 된 것

짧은 나의 영어실력으로 오늘 간단한 질문을 하나 올려보려고, Stackoverflow에 갔다.

http://stackoverflow.com/users/174583/jaehyun

Tag를 ruby-on-rails, hudson, ci-server 로 달려고 했는데.. ci-server가 없다.
내가 보기엔 적당한 tag인것 같은데..

글쓰기를 누르니, reputation 250점 이하는 신규 tag생성을 못한다는 룰이 있다.
그래서 다시 tag를 입력하다보니, continuous-integration 라는 Tag로 글이 많더라는...
이것으로 Tagging했다.

생각하고 보니, 낮은 reputation 사용자에게 tag를 생성하게 하면,, 많이 난잡해 질 것 같다.
이것은 훌륭한 사용 제한.!

역시나,, 이 블로그글 쓰는 약 10분여 동안 답글이 두개나 달렸다..
이건 정말 훌륭한 시스템! Stackoverflow ..

2009년 10월 23일 금요일

구글리더의 Popular Items 목록 기능이 추가된 것에 대하여

구글 리더 블로그 원문:
http://googlereader.blogspot.com/2009/10/reading-gets-personal-with-popular.html


오늘 구글 리더에 Popular Items라는 항목이 생겼다. (한국어에는 아직 기능이 안보이는 듯 하고, 언어 인터페이스 설정을 영어로 변경해야만 이용할 수 있다.)

이 기능은 내가 구글 리더를 처음 사용할 때 필요하다고 느꼈던 기능중에 하나다.

1. 구글 리더 아이템을 공유 할 수 있고, 친구들과 코멘트를 교환 할 수 있는 것.
2. 많이 공유된 글을 코멘트와 함께 다른 사용자들과 커뮤니케이션 할 수 있는것.
3. 리더를 이용하는 이용자들끼리, 모르는 사람들이라도, 공유라는 관심 표현으로 관심사가 같은 사용자들을 친구로 추천해 주는 것.
4. 위와 같이 사용자 관심을 직접적으로 받은 글은 구글 검색 결과에도 상위 rank에 노출 될 수 있도록 높은 점수를 줘야 할 듯.
5. 이 다음에는 친구 목록으로 더 타이트 하게 엮이는 기능을 내 놓지 않을까? 지금은 친구들의 공유 댓글을 Item을 중심으로 모아서 볼 수가 없다. 이게 모아서 볼수 있게 되야 할 듯.
6. 점점 집단지성이 좋은 컨텐츠를 가려내는 힘을 발휘하면서 사람이 더 모이게 될 듯.

꼭 필요한 기능을 차근차근 천천히 추가해 가는 구글의 모습을 볼 수 있다.
이제 막 소셜의 시작 단계에서 꿈틀대고 있는 것 같다는 생각이 든다.
social web을 향해, 구글도 잘 하고 있고, facebook도 잘 하고 있는 듯 하다.

이런 상황에서 우리나라에서는 뭘 해야 할까.....


2009년 10월 22일 목요일

스택오버플로우의 태그 인기 순위 stackoverflow tag popular ranking

스택오버플로우 사이트는 개발자 QNA사이트로서 훌륭한 점들을 많이 가지고 있는 사이트다.

오늘은 tags의 질문 개수 순위를 보다 보니, 우리나라와 크게 다른 경향을 보이고 있는 듯 하여,
외국(영어권?)의 소프트웨어 개발 트랜드와 국내의 트랜드의 다른 점을 비교해 볼까 한다.


1. 왜 C#이 1위 일까?
스택오버플로우가 조엘이 MS플랫폼으로 만든 사이트라서 1등이 된것인지..
실제로 우리나라보다 외국에서 C#이 더 많이 쓰이든지 할 것 같다..

2. Java는 역시 상위권 3위.
우리나라의 개발 트랜드라면 Java가 1위 하지 않았을까?

3. PHP가 의외로 상위권으로 5위.
facebook이 사용중이고, 아직도 많은 웹사이트에서 사용중이다.
우리나라에서는 Java 를 선호하는 웹개발자들에게 무시받는(?) 경향이 있는 듯 한데, 외국에서는 많이 쓴다.
(물론 무시받는건 잘못된 것 같고..)

4. python > django 인데 ruby < ruby on rails
파이썬의 웹 프레임워크인 장고는 파이썬보다 하위권이고
루비는 특이하게,, 루비의 웹 프레임워크인 루비온레일즈가 루비보다 상위권이다.
이것은 RoR이 잘 만들어지고, 많이 사용되어지는 웹 프레임웍이라는 것을 짐작하게 한다.
우리나라였으면 이 4개 테그 모두 순위에 들지 못하지 않았을까.?

5. jquery
javascript framework으로서 jquery가 독보적이다.

6. iphone 약 10위권, 그리고 꽤 순위가 높은 objective-c
App Store에서 돈을 벌 수 있으니까,,
최근에 이슈가 된 것에도 불구하고, 시장 논리에 따라 순위가 막 올라가 있다.

7. eclipse
툴에 대한 문의가 이렇게 많나? 하는 생각을 해봄..

8. ibatis는 이 글을 쓰는 순간 46건으로..
순위와는 거리가 멀다.
우리나라였으면 꽤 상위권에 있지 않았을까..?
ibatis는 왜 우리나라만 쓰는 거 같다는 생각이 들까..?

9. spring, struts2, webwork 등의 우리나라에서 많이 사용되는
java웹 개발관련된 것은 찾아 볼 수 없다는 점.

10. 역시나 흐름대로..  웹 관련된 기술이 많이 보인다는 점.




2009년 10월 14일 수요일

Windows 7 런칭파티





파워블로거 응모 하는 곳이라 크게 기대하지 않았는데, 초청을 받았다. 와우~!

2009년 10월 11일 일요일

데스크탑 대용 저가형 노트북 구입 - Lenovo SL500




예전부터 집에 있는 데스크탑에 불만이 있었다.
CPU, 하드, 램 등의 스팩에 비해 성능이 안나오는 것.
베어본 shuttle이 조용하다고 해서 선택하게 되었는데, 성능도 약간 떨어지고, 소음도 약간 있는 편..
아무래도 소음 없고, 저전력인 노트북으로 교체를 하려고 벼루고 있었다.

Windows 7 이 나오면 Windows 7이 포함된 노트북을 구매하려고 기다려야 하나 고민도 해보고,
다나와에서 구경하면서 아래 제품들을 고려하고 있었다.

Lenovo T400s를 사고싶으나 300만원? 넘비싸..
맥북 Pro .. 맥도 소음이 있다. 더 좋아지면 사야지.
Lenovo T400 170만원 <= 램이 4G에 Windows 7 up 등등
Lenovo T400 140만원 <= 램 2G, Windows 7 up, 저가인 이유는 비디오카드, 메모리가 share형
Lenovo SL500 85만원 <= 가장 저가. 조금 마음에 걸리는 점은 CPU가 펜린이 아닌 메롬 이라는 점.
                                   그래서 최신 DDR3가 아닌 DDR2를 써야 한다는 점.
                                   해상도가 15인치에 비해 낮은 1280x800 해상도.

그런데 오늘 SL500 가격이 dnshop에서 더 싼게 나왔다.! 798,000원.
저렴한 가격에 100대 한정이라는 문구에 혹해서 그냥 질러버렸다.

[디앤샵 판매율1위 특가할인 100대한정!] 명품노트북 IBM ThinkPad SL500 2746-RP7
913,100  쿠폰가 798,000
http://www.dnshop.com/front/product/ProductDetail?PID=A195_RP7&CID=R2100129&Sid=0101_10070000_01_01&szSearchKeyword=sl500

Vista에서 XP로 다운그레이드 하고 사용하고 있는 중이다.

사용소감은,
우려했던 가장 큰 두가지인
메롬이 펜린에 비해서 많이 느린거 아닐까?
그렇지 않았다. 체감상으로는 큰 차이를 못느끼겠다. (X200 팬린 DDR3 2G와 비교하여..)
펜린이나 메롬이나 뭐.. 몇년 지나면 비슷한 고물 취급 당할 껀데 뭐.. 굳이 비싼 제품을 살 필요가 없다는 생각.

해상도가 15인치에 1280x800이 너무 떨어지지 않나?
보기 좋은 글자크기다. 데스크탑 대용으로 쓰기에는 딱 괜찮은 폰트 사이즈. 더 작았으면 데탑대용으로 쓰기 불편했을 듯.

이제 우리집에 Thinkpad 노트북만 3대. X31, X200, SL500
X31 2004년 초 210만원
X200 2009년 초 135만원
SL500 2009년 10월 80만원

조금 더 기다리면?? 30만원??

결론은 Lenovo SL500은 소음도 적은 편이어서 조용하고, 성능도 만족스러운 제품이다.
80만원으로 만족할만한 노트북을 살 수 있다니.. 세상 좋아졌다.