유용한 링크

IT 2013. 1. 27. 00:56
반응형

토렌트 다운로드계의 구글

http://bitsnoop.com/

여기에 없는 토렌트파일은 태양계밖에 있다고 하는 토렌트 다운로드계의 구글 비트스눕

외국사이트이기 때문에 자막이 없는 경우도 있어 그 경우 따로 구해야함




사업/재테크를 통해 수익을 올리는 방법을 배우는 공간

http://cafe.naver.com/trendhunting

플랫폼 비즈니스, 클라우드 컴퓨팅등 미래의 비즈니스 트렌드를 공부하는 공간.

온라인 마케팅과 재테크, 사업 분야 등에 있어 실제적인 정보를 바탕으로 수익화 시키는 방법을 공부하는 공간입니다.




고화질 HDTV를 인터넷에서 무료로 보자!

http://thisr.com

집에 TV가 없는 분들에게 추천 하는 사이트 .

회원가입 필요 없이 무료로 볼수 있습니다.

KBS,SBS,MBC등 지상파는 물론 스포츠,EBS,게임,라디오 까지 볼 수 있습니다. 

뽐뿌분이 운영하고 있다고 합니다.



무료 음악 스트리밍 사이트

http://grooveshark.com/

말이필요없는 음악 스트리밍 사이트계의 최고봉.

로그인 하지 않아도 무제한으로 음악을 들을 수 있는 사이트입니다.

한국노래는 물론 해외의 많은 노래들도 무료로 들을 수 있습니다. 심지어 스마트폰에서도 가능

단 다운로드는 유료 



고화질 배경화면사이트

http://wallbase.cc/home



해상도, 화면비율 별로 배경화면 선택 할 수 있는 사이트

예쁜사진이 많고 최신사진도 많은 사이트.






그림 못그리는 사람도 화가로 만들어 주는 사이트

http://www.zefrank.com/scribbler/scribblertoo/ 

아무리 그림을 못그리는 사람이라도 있어! 보이는 그림으로 만들어 주는 사이트 입니다.

심심할때 아무거나 그려보기 좋아요. 




툰툰툰

http://glas.kr/app/toon/viewToonList?size=10&page=3 

다양한 웹툰들을 한자리에서 구독할 수 있는 사이트(링크 형식)

회원가입을 하면 원하는 웹툰만 볼 수 있습니다. 




공연,전시 관람료 지원해주는 

http://www.sati.or.kr/ 

공연의 경우 7000원, 전시의 경우 5000원의 관람료를 지원 받을 수 있는 사이트.

연간 총 10장의 사랑티켓이 부여 




yoUeFO (유에포)

http://www.youefo.com/film 

독립영화를 모아 온라인에서 상영해주는 사이트

양익준 감독, ,나홍진 감독들의 단편영화를 볼 수 있습니다. 




공모전

http://www.allstarcontest.co.kr 

각종 분야의 공모전 소식들이 있는 사이트. 가장 많은 공모전 정보가 있다해도 무방한 곳. 



















디자인

http://www.dafont.com/ 영문폰트 다운

http://www.ohlalamag.com 2D그래픽, 사진해외사이트

http://ffffound.com 분야에 관계없는 디자인 순수예술

http://www.designerjob.co.kr 디자인계열 사람들의 취업포털사이트

http://designsori.com 디자인쪽 공모전포털






패션 관련 사이트

http://www.polyvore.com/ 코디 정보

http://www.streetpeeper.com/ 스트리트 패션

http://coolspotters.com/ 스타가 입은 상품 정보 공유 사이트

http://thesartorialist.blogspot.com 사토리얼리스트 스트릿패션사진

http://jakandjil.com/blog/ 스트리트 패션 블로그

http://lookbook.nu/ 룩북

http://forums.thefashionspot.com/f50/when-stars-wear-runway-looks-read-post-1-before-posting-83630.html

페이머스 스타가 입은 제품 정보 알려줌

http://forums.thefashionspot.com/f50/celebs-caught-wearing-same-outfit-80923.html연예인 같은 옷 비교

http://blog.naver.com/gustosignore 남자 클래식 수트관련 블로그

http://fashion-mk.com/ 유럽스타일 패션자료인테리어, 건축

http://cafe.naver.com/digitalfactory 3D모델링 모음 사이트, 3D모델링창고(인체 조경모형, 가구 모델링 등등)

http://cafe.naver.com/remonterrace.cafe 레몬테라스 카페

http://www.dezeen.com 해외 건축 및 인테리어, 가구, 소품 모델링 파일은 http://cafe.naver.com/digitalfactory에서 다운로드 가능)

http://www.dailyicon.net 해외 건축 및 인테리어, 가구, 소품

http://blog.naver.com/jjhjjhjjh99

http://blog.naver.com/myy71

http://blog.naver.com/rx7girl

http://blog.naver.com/jeonghyunk?Redirect=Log&logNo=20028678546

http://blog.naver.com/pjg823?Redirect=Log&logNo=150016024608

http://blog.naver.com/vidro7/140058565242

http://blog.naver.com/gwineth/70040453910

http://unhappyhipsters.com 실내외 인테리어

http://www.archdaily.com 건축물

http://freshome.com 실내외 인테리어 및 아이템

http://prettyspace.tumblr.com 이쁜 인테리어




영어공부 사이트




영어 - 청취

http://read2me.net/ 내가 쓴 문장을 읽어주는 사이트

http://www.acapela-group.com/text-to-speech-interactive-demo.html 보이스 웨어(다른나라 언어도 많음)

http://www.dailyenglish.com 무료 청취학습 있음







영어 - 리딩

http://www.readingtc.com/reading/test.html 리딩능력 측정 사이트

http://www.twiztv.com/s/ 영화대본사이트

http://thestar.com.my/english/ 칼럼, 영어 사용 시 자주 헷갈리는 것, 틀리는 것에 대해

http://comics.com/ 외국 카툰

http://www.newsenglishlessons.com/ 영어뉴스(리스닝, 롸이팅액티비티 有)







영어 - 기타

http://www.wordbreak.net/ 깜박이 영어같은 단어암기 사이트

http://babel.altavista.com/translate.dyn 번역 사이트

http://kr.babelfish.yahoo.com/translate_txt 번역 사이트

http://www.gohackers.com/html/eng_edu/eng_edu.htm?idx=12 해커스 영어 학습 사이트

http://www.urbandictionary.com/ 영어 슬랭 사전

http://www.eoneo.com/lang/en/freezone/grammarChecker/ 영어 문법 검사

http://translate.google.com/ 구글 번역 사이트

http://www.sharedtalk.com/ 외국인 친구 사귀는 곳

http://www.keybr.com/welcome 영타연습, 속도측정

http://www.merriam-webster.com 영영 사전

http://www.uiowa.edu/~acadtech/phonetics/english/frameset.html발음교정사이트

http://www.elllo.org 혼자 영어공부하기 좋은 사이트

http://lingual.net/ 영화로 영어공부

http://www.breakingnewsenglish.com/ 브레이킹뉴스잉글리쉬, 뉴스, 스크립트, 연습문제등

http://englishcube.net/ 영어공부 할 수 있는 온갖 사이트 망라

http://www.interpals.net/ 외국인 펜팔사이트

http://www.bbc.co.uk/worldservice/learningenglish/ 비비씨 러닝 잉글리시

반응형

'IT' 카테고리의 다른 글

게임 용어  (0) 2017.09.05
[팀블로그] 구글 에드센스 핀 등록  (0) 2013.01.20
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형

 ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET', 'NLS_LANGUAGE');

NAMEVALUE$COMMENT$
NLS_NCHAR_CHARACTERSETAL16UTF16NCHAR Character set
NLS_LANGUAGEAMERICANLanguage
NLS_CHARACTERSETKO16KSC5601Character set

UTF8: 공통 size*3byte
AL16UTF16: 공통 size*2byte
KO16KSC5601: 한글 size*2byte, 영문 size*1byte

VARCHAR2 vs NVARCHAR2 : VARCHAR2는 LENGTH 계산시 byte 수로 계산, NVARCHAR2는 캐릭터셋에 맞게 논리적인 글자수로 계산 (개별 캐릭터셋 지정 가능)

LENGTH, LENGTHB 에 따른 차이가 나는 이유는 캐릭터셋 때문

SELECT  NC, LENGTH(NC) NC_LEN, LENGTHB(NC) NC_BLEN,

        LENGTHB(C) C_LEN, LENGTHB(C) C_BLEN,
        lengthb('각'),lengthb('A'),
        lengthb(TO_NCHAR('각')),lengthb(TO_NCHAR('A'))
FROM    CHAR_TEST
WHERE LENGTHB(C) = 17;

NCNC_LENNC_BLENC_LENC_BLENLENGTHB('각')LENGTHB('A')LENGTHB(TO_NCHAR('각'))LENGTHB(TO_NCHAR('A'))
안녕하세요.HI中國102017172122

반응형

'코드자료실 > database' 카테고리의 다른 글

[oracle] 리눅스에서 덤프파일 사용  (0) 2013.03.12
[oracle] 문자 조작 함수  (0) 2013.02.20
[oracle] delete data 복구  (0) 2013.02.12
[Oracle] 페이징 쿼리  (0) 2012.12.23
[Oracle] DATE 포맷 변경  (0) 2012.12.23
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형

<table border="1" width="539">
      <tr>
        <td colspan="2" width="529" bgcolor="#0000FF">
          <b>
            <font color="#FFFFFF" size="4">HTTP
            Session(pageContext.session.)</font>
          </b>
        </td>
      </tr>

      <tr>
        <td width="210">Creation Time</td>

        <td width="313">&#160
        <c:out value="${pageContext.session.creationTime}" />
        </td>
      </tr>

      <tr>
        <td width="210">Session ID</td>

        <td width="313">&#160
        <c:out value="${pageContext.session.id}" />
        </td>
      </tr>

      <tr>
        <td width="210">Last Accessed Time</td>

        <td width="313">&#160
        <c:out value="${pageContext.session.lastAccessedTime}" />
        </td>
      </tr>

      <tr>
        <td width="210">Max Inactive Interval</td>

        <td width="313">&#160
        <c:out
        value="${pageContext.session.maxInactiveInterval}" />

        seconds</td>
      </tr>

      <tr>
        <td width="210">You have been on-line for</td>

        <td width="313">&#160
        <c:out
        value="${(pageContext.session.lastAccessedTime-pageContext.session.creationTime)/1000}" />

        seconds</td>
      </tr>
    </table>

반응형

'코드자료실 > java / jsp' 카테고리의 다른 글

getSession 사용법  (0) 2013.07.02
[jsp] 브라우저 캐쉬 설정  (0) 2012.12.23
[java] 개행문자 제거하기  (0) 2012.11.29
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형

jQuery의 JSONP 지원

jQuery 버전 1.2부터는 JSONP 호출에 대한 네이티브 지원이 제공되고 있다. JSONP 콜백을 지정한 경우 다른 도메인에 있는 JSON 데이터를 로드할 수 있으며 JSONP 콜백은 url?callback=?라는 구문을 사용하여 지정할 수 있다.

jQuery에서는 ?가 호출할 생성된 함수 이름으로 자동 변환된다. Listing 4에서는 이 코드를 보여 준다.


Listing 4. JSONP 콜백 사용하기
jQuery.getJSON(url+"&callback=?", function(data) {
    alert("Symbol: " + data.symbol + ", Price: " + data.price);
});

이를 위해 jQuery는 스크립트가 삽입될 때 호출되는 전역 함수를 창 오브젝트에 추가한다. 이 함수는 완료 후에 제거된다. jQuery는 도메인 내 호출에 대해서도 최적화 기능을 제공한다. 동일한 도메인에 대한 요청이 발생할 경우 jQuery는 해당 요청을 일반적인 Ajax 요청으로 변환한다.

JSONP 지원을 사용하는 예제 서비스

앞의 예제에서는 정적 파일(ticker.js)을 사용하여 JavaScript를 웹 페이지에 동적으로 삽입했다. JSONP 응답을 리턴하기는 하지만 URL에 콜백 함수 이름을 정의할 수 없었기 때문에 JSONP 서비스가 아니었다. 그렇다면 실제 JSONP 서비스로 변환하려면 어떻게 해야 할까? 이 기사에서는 여러 가지 방법 중에서 PHP와 Java를 사용하는 두 가지 예제를 설명한다.

먼저 서비스에서 요청 URL에 포함된 callback 매개변수를 허용한다고 가정하자. (매개변수 이름 자체는 중요하지 않지만 클라이언트와 서버에서 동일한 이름을 사용해야 한다.) 그리고 서비스에 대한 요청이 다음과 같다고 가정하자.

http://www.yourdomain.com/jsonp/ticker?symbol=IBM&callback=showPrice

여기에서 symbol은 요청된 티커 기호를 나타내는 요청 매개변수이며, callback은 웹 애플리케이션에서 사용하는 콜백 함수의 이름이다. Listing 5의 코드를 사용하여 jQuery의 JSONP 지원이 포함된 이 서비스를 호출할 수 있다.


Listing 5. 콜백 서비스 호출
jQuery.getJSON("http://www.yourdomain.com/jsonp/ticker?symbol=IBM&callback=?", 
function(data) {
    alert("Symbol: " + data.symbol + ", Price: " + data.price);
});

이 코드에서는 실제 함수 이름 대신 ? 기호를 콜백 함수 이름으로 입력했다. 이는 jQuery가 ? 기호를 인라인 함수를 호출하는 생성된 함수 이름(예: jsonp1232617941775)으로 바꾸기 때문이다. 이 기능을 활용하면 showPrice()와 같은 함수를 자유롭게 정의할 수 있다.

Listing 6에서는 PHP로 구현한 JSONP 서비스의 일부를 보여 준다.


Listing 6. PHP로 구현한 JSONP 서비스의 일부
$jsonData = getDataAsJson($_GET['symbol']);
echo $_GET['callback'] . '(' . $jsonData . ');';
// prints: jsonp1232617941775({"symbol" : "IBM", "price" : "91.42"});

Listing 7에서는 동일한 기능을 수행하는 Java™ Servlet 메소드를 보여 준다.


Listing 7. Java Servlet으로 구현한 JSONP 서비스
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
  throws ServletException, IOException {
	String jsonData = getDataAsJson(req.getParameter("symbol"));
	String output = req.getParameter("callback") + "(" + jsonData + ");";

	resp.setContentType("text/javascript");
          
	PrintWriter out = resp.getWriter();
	out.println(output);
	// prints: jsonp1232617941775({"symbol" : "IBM", "price" : "91.42"});
}

그렇다면 이제 단일 웹 페이지에 표시하기 위해 써드파티 서버의 컨텐츠를 통합하는 매시업을 빌드하려면 어떻게 해야할까? 간단하다. 써드파티 JSONP 서비스를 사용해야 한다. 이 기사에서는 이들 서비스 중 일부를 소개한다.

바로 사용할 수 있는 JSONP 서비스

이제 JSONP를 사용하는 방법을 알고 있으므로 바로 사용할 수 있는 몇몇 JSONP 웹 서비스로 애플리케이션과 매시업을 빌드해 볼 수 있다. 다음은 후속 개발 프로젝트를 위한 출발점이다. (힌트: 지정된 URL을 브라우저의 주소 필드에 붙여 넣으면 결과 JSONP 응답을 확인할 수 있다.)

Digg API: Digg의 최신 스토리

http://services.digg.com/stories/top?appkey=http%3A%2F%2Fmashup.com&type=javascript
&callback=?

Geonames API: 우편번호에 해당하는 위치 정보

http://www.geonames.org/postalCodeLookupJSON?postalcode=10504&country=US&callback=?

Flickr API: Flickr의 최신 고양이 사진

http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any
&format=json&jsoncallback=?
                

Yahoo Local Search API: 우편번호 10504 지역의 피자 검색

http://local.yahooapis.com/LocalSearchService/V3/localSearch?appid=YahooDemo&query=pizza
&zip=10504&results=2&output=json&callback=?

반응형
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형

HTML 특수문자코드표

 

표현문자

숫자표현

문자표현

설명

-

&#00;-&#08;

-

사용하지 않음

space

&#09;

-

수평탭

space

&#10;

-

줄 삽입

-

&#11;-&#31;

-

사용하지 않음

space

&#32;

-

여백

!

&#33;

-

느낌표

"

&#34;

&quot;

따옴표

#

&#35;

-

숫자기호

$

&#36;

-

달러

%

&#37;

-

백분율 기호

&

&#38;

&amp;

Ampersand

'

&#39;

-

작은 따옴표

(

&#40;

-

왼쪽 괄호

)

&#41;

-

오른쪽 괄호

*

&#42;

-

아스트릭

+

&#43;

-

더하기 기호

,

&#44;

-

쉼표

-

&#45;

-

Hyphen

.

&#46;

-

마침표

/

&#47;

-

Solidus (slash)

0 - 9

&#48;-&#57;

-

0부터 9까지

:

&#58;

-

콜론

;

&#59;

-

세미콜론

<

&#60;

&lt;

보다 작은

=

&#61;

-

등호

>

&#62;

&gt;

보다 큰

?

&#63;

-

물음표

@

&#64;

-

Commercial at

A - Z

&#65;-&#90;

-

A부터 Z까지

[

&#91;

-

왼쪽 대괄호

\

&#92;

-

역슬래쉬

]

&#93;

-

오른쪽 대괄호

^

&#94;

-

탈자부호

_

&#95;

-

수평선

`

&#96;

-

Acute accent

a - z

&#97;-&#122;

-

a부터 z까지

{

&#123;

-

왼쪽 중괄호

|

&#124;

-

수직선

}

&#125;

-

오른쪽 중괄호

~

&#126;

-

꼬리표

-

&#127;-&#159;

-

사용하지 않음

&#160;

&nbsp;

Non-breaking space

¡

&#161;

&iexcl;

거꾸로된 느낌표

&#162;

&cent;

센트 기호

&#163;

&pound;

파운드

¤

&#164;

&curren;

현재 환율

&#165;

&yen;

|

&#166;

&brvbar;

끊어진 수직선

§

&#167;

&sect;

섹션 기호

¨

&#168;

&uml;

움라우트

&#169;

&copy;

저작권

ª

&#170;

&ordf;

Feminine ordinal

&#171;

&laquo;

왼쪽 꺾인 괄호

&#172;

&not;

부정

&#173;

&shy;

Soft hyphen

?

&#174;

&reg;

등록상표

&hibar;

&#175;

&macr;

Macron accent

°

&#176;

&deg;

Degree sign

±

&#177;

&plusmn;

Plus or minus

²

&#178;

&sup2;

Superscript two

³

&#179;

&sup3;

Superscript three

´

&#180;

&acute;

Acute accent

μ

&#181;

&micro;

Micro sign (Mu)

&#182;

&para;

문단기호

·

&#183;

&middot;

Middle dot

¸

&#184;

&cedil;

Cedilla

¹

&#185;

&sup1;

Superscript one

º

&#186;

&ordm;

Masculine ordinal

&#187;

&raquo;

오른쪽 꺾인 괄호

¼

&#188;

&frac14;

4분의 1

½

&#189;

&frac12;

2분의 1

¾

&#190;

&frac34;

4분의 3

¿

&#191;

&iquest;

거꾸로된 물음표

A

&#192;

&Agrave;

Capital A, grave accent

A

&#193;

&Aacute;

Capital A, acute accent

A

&#194;

&Acirc;

Capital A, circumflex accent

A

&#195;

&Atilde;

Capital A, tilde

A

&#196;

&Auml;

Capital A, dieresis or umlaut mark

A

&#197;

&Aring;

Capital A, ring (Angstrom)

Æ

&#198;

&AElig;

Capital AE diphthong (ligature)

C

&#199;

&Ccedil;

Capital C, cedilla

E

&#200;

&Egrave;

Capital E, grave accent

E

&#201;

&Eacute;

Capital E, acute accent

E

&#202;

&Ecirc;

Capital E, circumflex accent

E

&#203;

&Euml;

Capital E, dieresis or umlaut mark

I

&#204;

&Igrave;

Capital I, grave accent

I

&#205;

&Iacute;

Capital I, acute accent

I

&#206;

&Icirc;

Capital I, circumflex accent

I

&#207;

&Iuml;

Capital I, dieresis or umlaut mark

Ð

&#208;

&ETH;

Capital Eth, Icelandic

N

&#209;

&Ntilde;

Capital N, tilde

O

&#210;

&Ograve;

Capital O, grave accent

O

&#211;

&Oacute;

Capital O, acute accent

O

&#212;

&Ocirc;

Capital O, circumflex accent

O

&#213;

&Otilde;

Capital O, tilde

O

&#214;

&Ouml;

Capital O, dieresis or umlaut mark

×

&#215;

&times;

Multiply sign

Ø

&#216;

&Oslash;

width="130"Capital O, slash

U

&#217;

&Ugrave;

Capital U, grave accent

U

&#218;

&Uacute;

Capital U, acute accent

U

&#219;

&Ucirc;

Capital U, circumflex accent

U

&#220;

&Uuml;

Capital U, dieresis or umlaut mark

Y

&#221;

&Yacute;

Capital Y, acute accent

Þ

&#222;

&THORN;

Capital Thorn, Icelandic

ß

&#223;

&szlig;

Small sharp s, German (sz ligature)

a

&#224;

&agrave;

Small a, grave accent

a

&#225;

&aacute;

Small a, acute accent

a

&#226;

&acirc;

Small a, circumflex accent

a

&#227;

&atilde;

Small a, tilde

a

&#228;

&auml;

Small a, dieresis or umlaut mark

a

&#229;

&aring;

Small a, ring

æ

&#230;

&aelig;

Small ae diphthong (ligature)

c

&#231;

&ccedil;

Small c, cedilla

e

&#232;

&egrave;

Small e, grave accent

e

&#233;

&eacute;

Small e, acute accent

e

&#234;

&ecirc;

Small e, circumflex accent

e

&#235;

&euml;

Small e, dieresis or umlaut mark

i

&#236;

&igrave;

Small i, grave accent

i

&#237;

&iacute;

Small i, acute accent

i

&#238;

&icirc;

Small i, circumflex accent

i

&#239;

&iuml;

Small i, dieresis or umlaut mark

ð

&#240;

&eth;

Small eth, Icelandic

n

&#241;

&ntilde;

Small n, tilde

o

&#242;

&ograve;

Small o, grave accent

o

&#243;

&oacute;

Small o, acute accent

o

&#244;

&ocirc;

Small o, circumflex accent

o

&#245;

&otilde;

Small o, tilde

o

&#246;

&ouml;

Small o, dieresis or umlaut mark

÷

&#247;

&divide;

Division sign

ø

&#248;

&oslash;

Small o, slash

u

&#249;

&ugrave;

Small u, grave accent

u

&#250;

&uacute;

Small u, acute accent

u

&#251;

&ucirc;

Small u, circumflex accent

u

&#252;

&uuml;

Small u, dieresis or umlaut mark

y

&#253;

&yacute;

Small y, acute accent

þ

&#254;

&thorn;

Small thorn, Icelandic

y

&#255;

&yuml;

Small y, dieresis or umlaut mark

반응형

'코드자료실 > html' 카테고리의 다른 글

[meta 태그] meta태그 종류와 사용  (0) 2013.03.14
[링크] 홈페이지 템플릿  (0) 2012.12.14
Systax Highlighter 사용법  (0) 2012.12.10
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형

팀블로그(http://www.cusmaker.com/) 구글 에드센스 광고 수익이 100달러를 넘어서자, 

핀번호를 통해 주소인증을 하라고 경고가 들어왔다.


근데 이 핀번호가 무조건 오프라인으로 우편을 발송해 인증해야하는 탓에,

발송부터 내가 우편물을 받는데까지 무려 한달이 걸렸다.


미국 구글 본사에서 날아오기때문에 그정도 걸린다고는 했지만, 

이거뭐 잘 날라오고 있는지 확인할 방도가 없으니 답답하던차에

오랜만에 우편함을 확인해보니 왠 구글로고가 붙은 봉투하나가 들어있었다.





바로 그것임을 직감했고,

덕분에 한달간 수익없이 게제하지 못하고 있던 광고를 다시 달기위해 

구글 에드센스 페이지에 들어가 주소인증을 완료했다.


근데 이건 또 왠걸, 기존에 달고있던 광고가 없어진게 아닌가...

귀찮지만 다시 또 광고를 생성하고 블로그 스킨을 변경하고...


돈 벌기 쉽지 않구만,,,



반응형

'IT' 카테고리의 다른 글

게임 용어  (0) 2017.09.05
유용한 링크  (0) 2013.01.27
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형

http://keith-wood.name/uiTabs.html

반응형
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형

이전에 살펴본 DynamicQuery부분에 사용한 옵션 외에 다양한 옵션이 제공 된다. 일반적으로 이런 옵션들을 이용할때 DAO에 쿼리가 박혀있을 경우 매우 복잡해진다. 따라서 스토어드 프로시저를 이용한다거나 하는 방식을 택하게 되는데, iBATIS에서 지원하는 옵션들을 살펴보자

  1. <!--property가 존재 하는지 검사(map의경우 property를 key로 검색실패) -->  
  2. <isPropertyAvailable property=""></isPropertyAvailable>  
  3. <!--property가 존재 하지 않는지 검사(map의경우 property를 key로 검색실패) -->  
  4. <isNotPropertyAvailable property=""></isNotPropertyAvailable>  
  5.   
  6. <!--property가 null인지 검사 -->  
  7. <isNotNull property=""></isNotNull>  
  8. <!--property가 null이 아닌지 검사 -->  
  9. <isNull property=""></isNull>  
  10.   
  11. <!-- property가 비어있는지 검사("".equals) 검사-->  
  12. <isEmpty prepend=""></isEmpty>  
  13. <!-- property가 비어있지 않은지 검사(!"".equals) 검사-->  
  14. <isNotEmpty prepend=""></isNotEmpty>  
  15.   
  16. <!-- property가 비교값과 같은지 검사-->  
  17. <isEqual property="" compareValue="" compareProperty=""></isEqual>  
  18. <!-- property가 비교값과 같지 않은지 검사-->  
  19. <isNotEqual property="" compareValue="" compareProperty=""></isNotEqual>  
  20.   
  21. <!-- property가 비교값보다 큰지 검사 -->  
  22. <isGreaterThan property="" [compareValue="" || compareProperty=""]></isGreaterThan>  
  23. <!-- property가 비교값보다 큰거나 같은지  검사 -->  
  24. <isGreaterEqual property="" [compareValue="" || compareProperty=""]></isGreaterEqual>  
  25. <!-- propety가 작은지 검사 -->  
  26. <isLessThan property="" [compareValue="" || compareProperty=""]></isLessThan>  
  27. <!-- propety가 작거나 같은지  검사 -->  
  28. <isLessEqual property="" [compareValue="" || compareProperty=""]></isLessEqual>  
  29.   
  30.  <!-- property를 반복하며 추가. 반복시 값의 사이에 conjunction정의 문자 삽입 -->  
  31.  <iterate property="" open="(" close=")" conjunction=","></iterate>  

그냥 눈으로만 봐도 충분히 숙지할 수 있는 사항이므로 별도의 설명은 하지 않겠다. 조건에 property는 당연히 들어가는것이 원칙이다. 비교할 대상이나 검사할 대상이 없다면 뭐하러 이런 조건을 사용 하겠는가? 어렵지 않은 내용이지만 한가지 숙지해야 할 사항이 있다. 

바로 이항연산자 부분에서 compareValue와 compareProperty인데 다른 부분은 property를 이용해 비교했다. 같은 property가 들어가는걸로 보아 compareProperty는 프로퍼티 중에서 비교하는 것을알수 있다.즉 '같이 넘어온 객체의 프로퍼티와 비교'하여 구문을 추가할지 선택하는것이다.

compareValue는 정적인 값이다. 예를들어 조건이 '성적이 100점 이하'일 경우 100은 정적인 값이다. 만약 이것을 compareProperty로 이용한다면 사용할때마다 '100'의 값을 셋팅해야할 것이다. 이럴때  compareValue를 이용하면 프로그램 코드에 별도로 관리할 필요가 없으므로 유용하게 사용할수 있다. 그럼 예제를 살펴보자.


boardManager.xml

  1. <typeAlias alias="boardbean" type="pupustory.ibatis.beans.BoardBean"/>  
  2.   
  3.  <resultMap class="boardbean" id="boardbean">  
  4.     <result property="postId" column="post_Id"/>  
  5.     <result property="postTitle" column="post_Title"/>  
  6.     <result property="postWriter" column="post_Writer"/>  
  7.     <result property="postBody" column="post_Body"/>  
  8.  </resultMap>  
  9.     
  10.  <parameterMap class="boardbean" id="boardbean">  
  11.     <parameter property="postId" />  
  12.     <parameter property="postTitle"/>  
  13.     <parameter property="postWriter"/>  
  14.     <parameter property="postBody"/>  
  15.  </parameterMap>  
  16.     
  17.  <select id="select.board" resultMap="boardbean"    
  18.     parameterClass="boardbean" >  
  19.   SELECT    
  20.     A.POST_ID AS POST_ID   
  21.     ,A.POST_TITLE AS POST_TITLE   
  22.     ,A.POST_WRITER AS POST_WRITER   
  23.     ,B.POST_BODY AS POST_BODY   
  24.   FROM TB_MAIN_BOARD A, TB_SUB_BOARD B   
  25.   WHERE A.POST_ID = B.POST_ID   
  26.   <dynamic open="" close="">  
  27.     <isNull  prepend=" AND " property="postId">  
  28.         11=1   
  29.     </isNull>    
  30.    <isNotNull prepend=" AND "  property="postId">  
  31.         a.post_id = #postId#   
  32.    </isNotNull>  
  33.        
  34.     <isNotNull prepend=" AND " property="postTitle">  
  35.         post_title like '%' || #postTitle# || '%'    
  36.     </isNotNull>  
  37.        
  38.     <isNotNull prepend=" AND " property="postWriter">  
  39.         post_Writer like '%' || #postWriter# || '%'    
  40.     </isNotNull>  
  41.        
  42.     <isNotNull prepend=" AND " property="postBody">  
  43.         post_body like '%' || #postBody# || '%'    
  44.     </isNotNull>  
  45.   
  46.   
  47.   </dynamic>  
  48.  </select>  
  49.     
  50. <insert id="insert.main.board" parameterClass="boardbean">  
  51.     insert into tb_main_board    
  52.     values(#postId#,#postTitle#,#postWriter#)   
  53. </insert>  
  54.   
  55. <insert id="insert.sub.board" parameterClass="boardbean">  
  56.     insert into tb_sub_board(post_id, post_body)   
  57.     values(#postId#,#postBody#)   
  58. </insert>  
  59.  </sqlMap>  


BoardBean.java

  1. package pupustory.ibatis.beans;   
  2.   
  3. public class BoardBean {   
  4.     String postId;   
  5.     String postTitle;   
  6.     String postWriter;   
  7.     String postBody;   
  8.     public String getPostBody() {   
  9.         return postBody;   
  10.     }   
  11.     public void setPostBody(String postBody) {   
  12.         this.postBody = postBody;   
  13.     }   
  14.     public String getPostId() {   
  15.         return postId;   
  16.     }   
  17.     public void setPostId(String postId) {   
  18.         this.postId = postId;   
  19.     }   
  20.     public String getPostTitle() {   
  21.         return postTitle;   
  22.     }   
  23.     public void setPostTitle(String postTItle) {   
  24.         this.postTitle = postTItle;   
  25.     }   
  26.     public String getPostWriter() {   
  27.         return postWriter;   
  28.     }   
  29.     public void setPostWriter(String postWriter) {   
  30.         this.postWriter = postWriter;   
  31.     }   
  32.     public String toString() {   
  33.         return "postId["+postId+"]"  
  34.         +"postTitle["+postTitle+"]"  
  35.         +"postWriter["+postWriter+"]"  
  36.         +"postBody["+postBody+"]";   
  37.     }   
  38. }  


 BoardBiz.java

  1. package pupustory.ibatis.board;   
  2.   
  3. import pupustory.ibatis.manager.DBManager;   
  4. import pupustory.ibatis.beans.BoardBean;   
  5. import java.sql.SQLException;   
  6. public class BoardBiz {   
  7.     DBManager manager = DBManager.getInstance();   
  8.     // 가상 데이터 삽입   
  9.     public void insertVirData() throws SQLException{   
  10.         BoardBean bean = null;   
  11.         final int MAX_BOARD_DATA = 10;   
  12.            
  13.         manager.startTransaction();   
  14.         manager.startBatch();   
  15.            
  16.         for (int i=0;i<MAX_BOARD_DATA;i++) {   
  17.             bean = new BoardBean();   
  18.             bean.setPostId(i+"");   
  19.             bean.setPostTitle("제목! "+i);   
  20.             bean.setPostWriter("pupustory"+i);   
  21.             bean.setPostBody("본문 히히히히 헤헤"+i);   
  22.             manager.getMapper().insert("insert.main.board", bean);   
  23.             manager.getMapper().insert("insert.sub.board", bean);   
  24.         }   
  25.            
  26.         manager.executeBatch();   
  27.         manager.commitTransaction();   
  28.     }   
  29.   
  30.     // 게시물 조회   
  31.     public java.util.List getPost(BoardBean bean)    
  32.         throws SQLException {   
  33.         return    
  34.         (java.util.List)manager.getMapper().queryForList("select.board",bean);   
  35.     }      
  36. }  

 

StartApp.java

  1. package pupustory.ibatis.board;   
  2. import java.sql.SQLException;   
  3. import pupustory.ibatis.beans.BoardBean;   
  4.   
  5. public class StartApp {   
  6.     public static void main(String ar[]) throws SQLException{   
  7.         BoardBiz biz = new BoardBiz();   
  8.         //biz.insertVirData();   
  9.         BoardBean bean = null;   
  10.         java.util.List list = biz.getPost(bean);   
  11.         for (int i=0;i<list.size();i++) {   
  12.             System.out.println(list.get(i).toString());   
  13.         }   
  14.            
  15.         bean = new BoardBean();   
  16.         // id 3번 게시물 조회   
  17.         bean.setPostId("3");   
  18.         list = biz.getPost(bean);   
  19.         for (int i=0;i<list.size();i++) {   
  20.             System.out.println(list.get(i).toString());   
  21.         }   
  22.            
  23.         // 본문에 '4'문자 포함한 게시물 조회   
  24.         bean = new BoardBean();   
  25.         //bean.setPostId("2");   
  26.         bean.setPostBody("4");   
  27.         list = biz.getPost(bean);   
  28.         for (int i=0;i<list.size();i++) {   
  29.             System.out.println(list.get(i).toString());   
  30.         }   
  31.     }   
  32. }  


조회조건에 들어올 값을 확인하고, null이 아닐경우 검색해서 출력한다. equal같은 검색조건을 추가하려 했지만.. 귀찮기도해서 --; 어차피 사용법은 동일하다. 그리고 dynamic부분의 prepend는 삭제했다. 이유는 이미 join을 하기위해 where를 호출했고, 뒤에 올 조건이 있을지 없을지 미지수다. 따라서 삭제 했다. 1=1은 게시 전에 몇가지 만지작 거리다 남은 코드이므로 무시해도 무관하다.

단항,이항 검색조건은 위와 같이 수행하면 되므로 어려울 것이 없다. 그렇다면 이번엔 이터레이터에 대해 알아볼 것이다. 이전에 설명 했지만 만약 사용자가 ' where board_id in (....) '와 같이 몇건이 들어올지 모르는 경우에 유용 하다. 

이부분은 $$를 이용한 statment를 이용할 수도 있겠지만 이건 매우 위험하다. sql injection때문에 그렇다. 어플에서 .replace했다면 상관 없겠지만 그래도 프레임워크를 이용하니 .. 기능을 이용해 보도록 하자.

먼저 IN ( ...) 부분엔 정확히 얼마의 문자가 올지 모른다. 한가지 유추할 수 있는 것은 여기엔 배열이 적합한 것 이다. 새로운 예를 만드는 것 보다 위의 코드를 조금 변경해 작성하도록 하자. 먼저 빈즈에 POST_ID값이 저장될 배열 변수를 하나 추가한다.

  1. private String rePostId;   
  2. public String getRePostId() {   
  3.     return rePostId;   
  4. }   
  5. public void setRePostId(String rePostId) {   
  6.     this.rePostId = rePostId;   
  7. }   
  8.   
  9. public String toString() {//toString()는 값 확인을 위해 변경 함   
  10.     return "postId [" +rePostId+"]"  
  11.         +" postTitle [" +postTitle+"]"  
  12.         +" postWriter [" +postWriter+"]"  
  13.         +" postBody [" +postBody+"]"  
  14.         +" parentPostId [" +parentPostId+"]";   
  15. }  


이제 중요한 sqlmap부분이다.

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE sqlMap         
  3.     PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"         
  4.     "http://ibatis.apache.org/dtd/sql-map-2.dtd">  
  5.   
  6. <sqlMap namespace="UserManager">  
  7. <typeAlias alias="postreply" type="pupustory.ibatis.beans.PostReplyBean"/>  
  8.   
  9.  <resultMap class="postreply" id="postreply.result" >  
  10.   <result property="rePostId" column="POST_ID" />  
  11.   <result property="postTitle" column="POST_TITLE" />  
  12.   <result property="postWriter" column="POST_WRITER" />  
  13.   <result property="postBody" column="POST_BODY" />  
  14.   <result property="parentPostId" column="PARENT_POST_ID" />  
  15.  </resultMap>  
  16.   
  17.  <parameterMap class="postreply" id="postreply.param">  
  18.   <parameter property="postId" />  
  19.   <parameter property="postTitle"/>  
  20.   <parameter property="postWriter"/>  
  21.   <parameter property="postBody" />  
  22.   <parameter property="parentPostId"/>  
  23.  </parameterMap>  
  24.     
  25.  <select id="select.dynamic.query" resultMap="postreply.result"    
  26.     parameterClass="postreply" >  
  27.   SELECT * FROM TB_QNA_BOARD   
  28.   <dynamic prepend="WHERE">  
  29.     <iterate property="postId"    
  30.     conjunction="," open="post_id IN (" close=")" >  
  31.     #postId[]#   
  32.     </iterate>  
  33.   </dynamic>  
  34.  </select>  
  35.  </sqlMap>  


반복 부분을 iterator를 사용했다. 실행코드를 살펴보자.

  1. package pupustory.ibatis.dynamicquery;   
  2. import pupustory.ibatis.beans.PostReplyBean;   
  3. public class StartApp {   
  4.     public static void main(String ar[]) throws java.sql.SQLException {   
  5.         PostReplyBean bean = new PostReplyBean();   
  6.   
  7.         DynamicQueryBiz biz = new DynamicQueryBiz();   
  8.         String[] postIds = {"1","2","4","5","7","9"};   
  9.         bean.setPostId(postIds);   
  10.         java.util.List list = biz.getPostBoard(bean);   
  11.         if (list.get(0instanceof PostReplyBean) {   
  12.             System.out.println("true");   
  13.         }   
  14.         for (int i=0;i<list.size();i++) {   
  15.             bean = (PostReplyBean)list.get(i);   
  16.             System.out.println(bean.toString());   
  17.         }   
  18.     }   
  19. }  

어려운 구문은 없다. xml에서 open부분에 in ( 를 추가 했고, 배열마다 구분문자는 ','로 지정했다. 완료 후 ) 로 닫으니 

SELECT * FROM TB_QNA_BOARD WHERE POST_ID IN ('1','2','4','5','7','9');

 

와 같은 sql 구문이 생성 된다. resultMap에선 실제 우리가 가져와야 할 빈의 변수와 맵핑하면 된다.

 

[출처] http://pupustory.tistory.com/184

반응형
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형

1.   개  요

  검색 엔진 개발에 앞서 검색 엔진의 작동원리 및 Open Source인 Lucene의 기능을 검토하여 적용 가능성 여부와 기능을 파악하고 앞으로의 개발 방향에 대하여 정리한다.

 

2.   검색 엔진의 작동 원리

1)   Crawler의 정보 수집

-       스파이더(spider) 혹은 크롤러(crawler)라고 불리는 로봇이 웹에 있는 웹 페이지를 방문해서 모든 내용을 읽어온다. 이 때 그 페이지만 방문하고 마는 것이 아니라 그 페이지에 링크되어 있는 또 다른 페이지를 차례대로 방문한다.

사용자 삽입 이미지




-       DB에 수집해온 그대로 저장하는 것이 아니라 검색에 적합하도록 일정한 가공을 거친다. DB에 저장되는 내용에는 문서의 제목, 본문, 링크 그리고 문서가 웹에서 차지하는 중요도 등이 있다.

 

2)   수집한 문서 가공과 색인 작업

-       검색엔진에서 가장 중요한 부분으로써 좋은 검색엔진을 만들기 위해 핵심이 되는 부분이다.

-       한글문서를 색인하고자 할 경우 얼마나 좋은 형태소 분석기를 가지고 있느냐가 색인 DB의 품질을 결정하게 된다.

-       먼저 수집된 문서를 적절하게 형태소 분석을 통하여 단어로 쪼갠다.

-       검색어의 빈도수와 위치(제목, 본문)등을 고려하여 중요도를 계산하여 이를 반영한다.

 

3)   정보 검색기

-       사용자가 입력한 검색어를 색인기에 넣어 색인어를 추출하고 그것을 사용하여 검색을 한다.

사용자 삽입 이미지




3. Lucene

사용자 삽입 이미지

1)   Lucene 소개

-       아파치 최상위 Project중에 하나로 http://lucene.apache.org에서 접할 수 있다.

-       Lucene은 강력한 기능뿐만 아니라 간단하기 때문에 IT업계에서 많이 사용된다.

-       루씬은 확장 가능한 고성능 정보검색(IR, Information Retrieval) 라이브러리이다. 루씬은 소프트웨어 프로그램에 색인과 검색 기능을 간단하게 추가할 수 있도록 지원한다.

-       루씬을 사용할 때 검색에 대한 전문적인 지식을 반드시 알 필요는 없다. 꼭 필요한 몇 가지 기본 클래스들을 사용하는 방법만 익히면 색인과 검색 기능을 직접 추가할 수 있다.

-       루씬은 독립 프로그램이 아닌 단순한 소프트웨어 라이브러리이다.

-       루씬은 프로그램에 텍스트 색인과 검색 기능을 추가할 수 있도록 지원한다.

 

2)   Doug Cutting(루씬의 창시자)이 제시한 lucene의 인덱싱과 검색을 적용 가능한 사례들

-       이메일 검색 : 저장된 메시지를 검색할 수 있고 새로 도착한 메시지를 색인에 추가할 수 있는 이메일 어플리 케이션

-       온라인 문서 검색 : 온라인 문서 또는 저장된 출판물을 검색할 수 있는 CD기반이나 웹 기반 또는 어플리케이션에 포함된 문서 판독기

-       웹 페이지 검색 : 사용자가 방문한 모든 웹 페이지를 색인화하기 위해 개인 검색 엔진을 만들 수 있는 웹 브라우저 또는 프록시 서버.

-       내용 검색 : 저장된 문서에서 특정 내용을 검색할 수 있는 애플리케이션.

-       버전 관리 및 컨텐트 관리 : 문서나 문서 버전을 색인화해서 쉽게 검색할 수 있는 문서 관리 시스템.

-       뉴스 및 유선(wire) 서비스 : 뉴스가 도착했을 때 기사를 색인할 수 있는 뉴스 서버나 릴레이 서버.

☞ Lucene을 사용하여 개발할 수 있다는 의미임. 각각에 대한 전용 라이브러리를 지원한다는 의미가 아님.


 

3)   Lucene을 사용했을 때의 모형도

 

사용자 삽입 이미지

-       빨간 점선을 기준으로 아래 부분이 루씬으로 할 수 있는 일들이고 위의 부분이 별도로 구연해야 할 부분이다.

 

4)   Lucene의 기능

-      색인을 저장할 수 있는 곳

n RAMDirectory : 컴퓨터의 메인 메모리를 색인 장소로 사용

n FSDirectory : 디스크의 파일 시스템에 색인을 저장 (가장 많이 사용)

n JDBCDirectory : DB를 색인 저장소로 사용하는 방법. 일반적으로 지원하지는 않지만 별도의 루씬 샌드박스라는 것을 통해 지원한다.

-      색인 기능 지원

-      검색 기능 지원

-       다양한 나라의 Full Text분석기(Analyzer) 지원(한글x)

-       Hadoop을 분산 파일 시스템으로 사용할 수 있음. (Nutch에서 사용중, Yahoo에서도 사용)

5)   Lucene은 Full Text 검색 엔진

-       실전에서는 단순한 문자열을 색인하는 것 보다는 다양한 문서를 색인화 하고 검색하는 작업이 더 빈번 할 것이다.

-       루씬을 이용해서 임의의 바이너리 파일을 직접 색인하고 검색할 수 없으며, 모두 문자열 형태로 변경된 이후에야 루씬으로 색인하고 검색할 수 있다.

-       XML, PDF, HTML, MS WORD와 같이 다양한 문서들을 색인화 하기 위해서는 각각의 문서를 Lucene의 Analyzer가 이해할 수 있도록 해석(parse)해서 텍스트로 추출해 내는 과정이 필요하다.

사용자 삽입 이미지

-       Parser를 지원하는 사이트

XML

Dom, Sax, JDom,

Piccolo (http://piccolo.sourceforge.net)

Apache Disester (http://jakarta.apache.org/commons/digester/)

PDF

PDFBox (http://www.pdfbox.org), IndexFiles (lucene built-in) ,

LucenePDFDocument (lucene built-in)

Xpdf (http://www.foolabs.com/xpdf)

JPedal (http://www.jpedal.org)

Etymon PJ( http://www.etymon.com)

Html

Jtidy (http://jtidy.sourceforge.net ), 
NekoHTML (
http://people.apache.org/~andyc/neko/doc/index.html)

HTMLParser( http://htmlparser.sourceforge.net)

MS Word

POI (http://jakarta.apache.org/poi )

Text Extractors( http://textmining.org )

Antiword ( http://www.winfield.demon.nl)

OpenOffice SDK ( http://www.openoffice.org )

 

6)   사용 가능한 언어

-       원래 자바로 만들어진 루씬은 펄(Perl)에서 시작해 파이썬(Python), C++와 닷넷(.NET)등의 언어로 포팅돼있고, 루비(Ruby)로 포팅하기 위한 작업도 진행중이다.

-       루씬은 서로 다른 언어간에도 색인 데이터를 100% 호환해서 사용할 수 있도록 설계되어있다.

 

4.   Nutch

1)   Nutch 소개

-       광고로 뒤덮인 인터넷 검색 사이트에서 상업적인 요소를 배제하고 검색 그 자체로의 검색을 구성하고자 진행된 오픈 소스 인터넷 웹 검색엔진 프로젝트

-       루씬을 이용하여 색인과 검색을 한다.

-       너치는 수 억개 이상의 웹페이지를 긁어 모아 색인하고 검색해볼 수 있게 해준다.

-       너치 시스템은 웹에 존재하는 문서(대략 10억에서 100억 개 정도)를 처리할 수 있도록 만들어졌고, 물론 문서가 아주 많기 때문에 1대보다는 여러 대의 서버에서 색인과 검색을 동시에 가동해야 한다.

 

2)   Nutch의 검색 구조

-       웹 서버가 사용자의 검색 요청을 받는다.

-       질의 핸들러가 검색어를 가공해서 다수의 색인 검색 서버로 전달한다.

-       질의 핸들러가 넘긴 검색어에 대해 여러 개의 색인 서버에서 결과가 나오는데 이 결과를 가장 점수가 높은 순서로 정렬한다.

-       만약 1~2초가 지난 후에 결과를 알려주지 않는 새인 서버가 있다면 결과에 포함하지 않고 무시한다. (사용자가 느끼기에2초안에 결과가 나오도록 보장)

3)   Nutch테스트

사용자 삽입 이미지
사용자 삽입 이미지


-       Crawling : http://www.hufs.ac.kr

-       검색어 : hufs



5.   Lucene으로 할 수 있는 일

-       내용을 검색하는 모든 분야에 Lucene을 적용할 수 있다.(우리는 Text와 Analyzer를 Lucene에 제시하면 Lucene이Index를 구성해 준다. Lucene의 api를 사용해서 검색할 수 있다)

-       대표적으로 Desktop 검색, E-mail 검색, 웹 페이지 검색

-       문제점 : 내용을 단어로 쪼개는 방법을 구현 해야함(형태소 분석기). 간단한 형태소 분석기는 “루씬 인 액션” 책에서 소스를 공개하고 있음. 하지만 고급 형태소 분석기는 국어에 대한 이해를 기반으로 구현하는 것이 매우 어렵다고 한다.

 

6.   결론

-       Lucene은 Full Text를 검색하는데 효율적이다.

-       Full-Text(Contents)와 text를 단어로 쪼개는 방법(Analyzer)을 제시하면 알아서 Index를 구성해 주고 그것으로 빠른 검색 결과를 얻을 수 있다.

-       그러므로 내용검색을 위해서는 Lucene을 사용하면 효율적이지만 단지 Exact Match 검색을 한다면 Lucene은 불필요하다.


출처 - http://cherrykyun.tistory.com/148

반응형

'Reference > 스크랩' 카테고리의 다른 글

[스크랩] L4/L7 스위치 개요 (로드밸런서)  (0) 2014.06.18
ajaxplorer 사용법  (0) 2013.07.07
[스크랩]ajaxplorer  (1) 2013.07.04
HTTP 에러 정리  (0) 2013.03.11
[스크랩] 웹표준화 관련 Tip  (0) 2012.11.27
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,
반응형

1. 기본 쓰레드 함수

(1) pthreard_create

쓰레드 생성을 위해 사용(pthread_t)

첫번째 인자는 쓰레드 식별자

세번째 인자는 쓰레드 실행시 호출되는 함수

네번째 인자는 그 함수의 인자

리턴값은 쓰레드 ID

실행된 쓰레드에 대해서는 pthread_join 등의 함수를 이용해서 쓰레드 종료 때까지 기다려줘야 한다. pthread_join은 일종의 fork의 wait와 비슷하게 동작하며, 쓰레드 자원을 해제시켜 준다.

ex) thr_id = pthread_create(&p_thread[1], NULL, t_function, (void *)&a);


(2) pthread_join

첫번째 인자는 기다릴(join)할 쓰레드 식별자

두번째 인자는 쓰레드의 return값

두번째 인자가 NULL이 아닐 경우 해당 포인터로 쓰레드 return값을 받아올 수 있다.

ex) pthread_join(p_thread, (void *)&status);


(3) pthread_detach

detach는 "떼어내다"라는 뜻을 가지며, main 쓰레드에서 pthread_create를 이용해 생성된 쓰레드를 분리시킨다.

이 함수는 식별번호(첫번째 인자)인 쓰레드를 detach시키는데, detach 되었을 경우, 해당(detach)된 쓰레드가 종료될 경우 pthread_join을 호출하지 않더라도 즉시 모든 자원이 해제(free) 된다.

detach를 하지 않을 경우, 쓰레드 함수가 종료되더라도 자원이 해제되지 않는다.

pthread_create 호출 후 detach할 수 도 있고, pthread_create 호출시에 쓰레드가 detach 되도록 할 수도 있다.(pthread_attr_setdetachstate 참조)

ex) pthread_detach(p_thread);


(4) pthread_exit

현재 실행 중인 쓰레드를 종료시키고자 할 때 사용한다.

pthread_cleanup_push가 정의되어 있다면, pthread_exit가 호출될 경우 cleanup handler가 호출된다. 보통 이 cleanup handler는 메모리를 정리하는 등의 일을 하게 된다.

ex) pthread_exit(0);


(5) pthread_cleanup_push

cleanup handler를 인스톨하기 위해서 사용된다.

pthread_exit가 호출되어서 쓰레드가 종료될 때 pthread_cleanup_push에 의해서 인스톨된 함수가 호출된다.

첫번째 인자가 쓰레드가 종료될 때 호출되는 함수이다.

두번째 인자는 이 때의 아규먼트이다.

cleanup handler는 주로 자원을 돌려주거나, mutex 잠금등의 해제를 위한 용도로 사용된다. 만약 mutex 영역에서 pthread_exit가 호출되어 버릴 경우, 다른 쓰레드에서 영원히 block 될 수 있기 때문이다.

또, malloc 으로 할당받은 메모리, 열린 파일지정자를 닫기 위해서도 사용한다.

ex) phread_cleanup_push(cleanup, (void *)&a);


(6) pthread_cleanup_pop

pthread_cleanup_push와 함께 사용되며, cleanup handler를 제거하기 위해서 사용된다.

pthread_cleanup_push와 pthread_cleanup_pop은 반드시 같은 함수 내의 같은 레벨의 블럭에서 한 쌍으로 사용해야 한다.


(7) pthread_self

pthread_self를 호출하는 현재 쓰레드의 쓰레드 식별자를 리턴한다.

ex) ptread_t id;        id = pthread_self();


2. 쓰레드 동기화 함수


(1) pthread_mutex_init

(2) pthread_mutex_distroy

(3) pthread_mutex_lock

(4) pthread_mutex_unlock

(5) pthread_cond_init

(6) pthread_cond_signal

(7) pthread_cond_boradcast

(8) pthread_cond_wait

(9) pthread_cond_timewait

(10) pthread_cond_destroy

(11) 예제 코드


3. Thread Attribute 함수


(1) pthread_attr_init

(2) pthread_attr_distroy

(3) pthread_attr_getscope

(4) pthread_attr_setscope


4. 쓰레드 시그널 관련


(1) pthread_sigmask

(2) pthread_kill

(3) sigwait


5. 쓰레드 취소

(1) pthread_cancel

(2) pthread_setcancelstate

(3) pthread_getcancelstate


반응형
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,