<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7957652847725130505</id><updated>2012-02-16T20:43:46.493+09:00</updated><category term='jvmpi'/><category term='Queue'/><category term='제임스카메론'/><category term='InstanceOf'/><category term='모바일프로그래밍'/><category term='영화후기'/><category term='검색엔진'/><category term='IT'/><category term='예외처리'/><category term='Syntax Highlighter'/><category term='syntax'/><category term='검색엔진 ( 루씬 lucene )'/><category term='그외'/><category term='Programming'/><category term='영화이야기'/><category term='2.9'/><category term='Avatar'/><category term='개발자'/><category term='아바타'/><category term='scheduler'/><category term='스케쥴러'/><category term='highlighter'/><category term='알고리즘'/><category term='큐'/><category term='Apache'/><category term='쓰레드'/><category term='헤바온라인'/><category term='프로파일링'/><category term='Android'/><category term='모니터링'/><category term='겟엠프드'/><category term='재밌당'/><category term='루씬'/><category term='컴퓨터'/><category term='긴 하루'/><category term='lucene'/><category term='jvm'/><category term='Java'/><category term='thread'/><category term='안드로이드'/><category term='자바'/><category term='오픈소스'/><category term='프로그래머'/><category term='lucene in action'/><category term='exception'/><category term='안드로이드(Android)'/><category term='JVM옵션'/><category term='.NET'/><category term='프로그래밍'/><title type='text'>윌리엄 창조본능, 프로그래머!</title><subtitle type='html'>자바와 닷넷을 아우르며 RIA, APPS 에도 관심을 가지기 시작한 욕심 많은 프로그래머랍니다.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://programmer-textcube.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7957652847725130505/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://programmer-textcube.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>행복하자</name><uri>http://www.blogger.com/profile/14292076380941008554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7957652847725130505.post-3611356311676881166</id><published>2009-12-26T21:30:00.000+09:00</published><updated>2011-01-29T22:23:13.492+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='안드로이드'/><category scheme='http://www.blogger.com/atom/ns#' term='안드로이드(Android)'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='모바일프로그래밍'/><title type='text'>안드로이드 2.0.1 HelloWorld!</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/0/2689/attach/XDV0UbSZSh.jpg" style="width:580px;height:408px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/0/2689/attach/XDV0UbSZSh.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/0/2689/attach/XKa1itHUvl.jpg" style="width:580px;height:408px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/0/2689/attach/XKa1itHUvl.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;안드로이드 개발 환경 설정 및 HelloWorld를 띄워보았다.&lt;/P&gt;&lt;P&gt;첨엔 이 망할 것이 메뉴얼대로 했는데도&lt;/P&gt;&lt;P&gt;내가 찍고자 했던 텍스트가 나타나지 않아 날 헤메게 만들었다.&lt;/P&gt;&lt;P&gt;허나, 모든 개발 관련 포스팅의 말미에 있던 "시뮬레이터가 무지 오래 걸린다." 라는 말을 보고는&lt;/P&gt;&lt;P&gt;인내심을 갖고 화면이 넘어가기만을 기다려 보았다. &lt;/P&gt;&lt;P&gt;그랬더니 안드로이드 초기화면으로 사료되는 휴대폰 대기화면이 보였다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/0/2689/attach/XY73aK2caW.jpg" style="width:580px;height:408px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/0/2689/attach/XY73aK2caW.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;처음보는 안드로이드 폰의 기본화면에서 &lt;/P&gt;&lt;P&gt;대체 내가 만든 프로그램은 어디있는거야? 하고 투덜대다 아이팟터치를 쓸때의 느낌으로&lt;/P&gt;&lt;P&gt;하고 자물쇠를 오른쪽으로 끌어 보니&lt;/P&gt;&lt;P&gt;짜잔!! 드디어 내가 만든 프로그램(?)을 만나볼 수 있었다.&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/0/2689/attach/XZBbMDSaz6.jpg" style="width:580px;height:408px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/0/2689/attach/XZBbMDSaz6.jpg')" /&gt;&lt;p class="cap1"&gt;성공적으로 출력된 모습&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;느낌은&lt;/P&gt;&lt;P&gt;JAVA의 RCP나 SWING, JWT 프로그래밍을 해본 사람이라면&lt;/P&gt;&lt;P&gt;쉽게 접근 할 수 있으며,&lt;/P&gt;&lt;P&gt;.NET 의 GUI 개발환경을 하던 사람이라면&lt;/P&gt;&lt;P&gt;아! 다시 짜증나는 JAVA의 GUI 개발이구나 하고 욕을 뱉을 지 모르겠다.&lt;/P&gt;&lt;P&gt;저 조그만 시뮬레이터안에 기본으로 깔려있는 메시징이나 웹서핑 동작하는 모습이 신기했다.&lt;/P&gt;&lt;P&gt;이제 시작인가? ㅋㅋ 컴터랑 모니터를 바꾸고싶은데&lt;/P&gt;&lt;P&gt;돈이 없다 엉엉 ㅠㅠ&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7957652847725130505-3611356311676881166?l=programmer-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programmer-textcube.blogspot.com/feeds/3611356311676881166/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://programmer-textcube.blogspot.com/2009/12/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-201-helloworld.html#comment-form' title='2개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7957652847725130505/posts/default/3611356311676881166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7957652847725130505/posts/default/3611356311676881166'/><link rel='alternate' type='text/html' href='http://programmer-textcube.blogspot.com/2009/12/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-201-helloworld.html' title='안드로이드 2.0.1 HelloWorld!'/><author><name>행복하자</name><uri>http://www.blogger.com/profile/14292076380941008554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7957652847725130505.post-6905113632539214593</id><published>2009-12-23T21:30:00.000+09:00</published><updated>2011-01-29T22:23:13.224+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scheduler'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Queue'/><category scheme='http://www.blogger.com/atom/ns#' term='thread'/><category scheme='http://www.blogger.com/atom/ns#' term='큐'/><category scheme='http://www.blogger.com/atom/ns#' term='컴퓨터'/><category scheme='http://www.blogger.com/atom/ns#' term='IT'/><category scheme='http://www.blogger.com/atom/ns#' term='exception'/><category scheme='http://www.blogger.com/atom/ns#' term='InstanceOf'/><category scheme='http://www.blogger.com/atom/ns#' term='검색엔진'/><category scheme='http://www.blogger.com/atom/ns#' term='모니터링'/><category scheme='http://www.blogger.com/atom/ns#' term='쓰레드'/><category scheme='http://www.blogger.com/atom/ns#' term='프로그래머'/><category scheme='http://www.blogger.com/atom/ns#' term='검색엔진 ( 루씬 lucene )'/><category scheme='http://www.blogger.com/atom/ns#' term='예외처리'/><category scheme='http://www.blogger.com/atom/ns#' term='프로그래밍'/><category scheme='http://www.blogger.com/atom/ns#' term='스케쥴러'/><title type='text'>스케쥴러에 의한 대용량 처리</title><content type='html'>&lt;P&gt;&amp;nbsp;열심히 적었던 글이 소스코드를 옮겨 넣는 와중에 고향 친구로부터 전화가 모르고 저장. 그대로 날라가 버렸다. 슬프다. ㅠㅠ&lt;/P&gt;&lt;P&gt;같은 말을 반복하는걸 매우 싫어하는 성격이므로 기억을 더듬어 대략 다음의 내용들을 적어본다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1. 대용량 처리를 위해서는 작업 정보를 관리하고 정확 모니터링 할 수 있는 스케쥴러가 필요하다.&lt;/P&gt;&lt;P&gt;2. 스케쥴러 또한 하나 이상의 쓰레드로 구성되므로, 쓰레드의 특성에 대해 정확하게 알고 있어야 한다.&lt;/P&gt;&lt;P&gt;3. 쓰레드 사용시 야기되는 문제들 가운데 Race Condition에 따른 해결방법, 뮤텍스, 이벤트 세마포어, 크리티컬 섹션, 등을 이해하고 있어야 한다.&lt;/P&gt;&lt;P&gt;4. 자바의 최신 SDK에는 기존에 사용되던 suspand(), resume() 과 같은 메서드가 디프레취 되었고, 쓰레드를 중단하거나 재시작하는 것과 같은 생명주기를 개발자가 임의로 컨트롤하기 보다는 이전 생명주기를 완전히 종료시키고 다시 해당 쓰레드의 생명주기를 시작하는 방법을 더 권장하는것 같다.&lt;/P&gt;&lt;P&gt;5. 스케쥴러는 작업 도중 예기치 않은 오류를 복구하는 기능과, 실시간으로 서버 시스템의 자원(메모리 등)을 모니터링 할 수 있는 기능을 가져야 한다.&lt;/P&gt;&lt;P&gt;6. log4j와 같은 로그 툴을 통해 로그를 잘 남겨두어야 한다.&lt;/P&gt;&lt;P&gt;7. 작업 정보를 저장하는 데이터 구조인, Queue, Stack, List 등의 특성과 사용법을 잘 이해하고 있어야 한다.&lt;/P&gt;&lt;P&gt;8. 스케쥴러는 시스템에 과도한 부하를 주는것을 방지하고 시스템 성능등과 같은 이슈를 피하고 단위 작업에 대한 무결성을 위해 자신에게 할당된 작업을 분할 처리 할 수 있는 기능을 가져야 한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;[code java] /**&lt;br /&gt;&amp;nbsp;* &amp;lt;PRE&amp;gt;&lt;br /&gt;&amp;nbsp;* Class/Interface Name : WebSchedulerINI&lt;br /&gt;&amp;nbsp;* History&lt;br /&gt;&amp;nbsp;* &amp;nbsp; &amp;nbsp; 1. 이지홍(&lt;A href="mailto:hongsgo@gmail.com"&gt;hongsgo@gmail.com&lt;/A&gt;), 2009. 1. 8., 최초작성&lt;br /&gt;&amp;nbsp;* &amp;lt;/PRE&amp;gt;&lt;br /&gt;&amp;nbsp;* @brief 색인 서버의 전체 작업을 관리하는 핵심 클래스.&lt;br /&gt;&amp;nbsp;* @date 2009. 1. 8.&lt;br /&gt;&amp;nbsp;* @version 1.0.0&lt;br /&gt;&amp;nbsp;* @author 이지홍(&lt;A href="mailto:hongsgo@gmail.com"&gt;hongsgo@gmail.com&lt;/A&gt;)&lt;br /&gt;&amp;nbsp;* @warning&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;public class WebSchedulerINI extends BaseService implements Runnable {&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;//스케쥴러 쓰레드&lt;br /&gt;&amp;nbsp;private Thread webjobs = null;&lt;br /&gt;&amp;nbsp;//스케쥴러의 모니터링을&amp;nbsp; 담당하는 클래스&lt;br /&gt;&amp;nbsp;private MonitorService monitorService = null;&lt;br /&gt;&amp;nbsp;//실패한 작업을 복구하는 클래스 &lt;br /&gt;&amp;nbsp;private JobRecoveryManager jobRecoveryManager = null;&lt;br /&gt;&amp;nbsp;//스케쥴러의 작업을 비우는 플래그 클래스(최우선) &lt;br /&gt;&amp;nbsp;private boolean job_clear=false;&lt;br /&gt;&amp;nbsp;//서버 시작 간을 표시하기 위한 부분 .&lt;br /&gt;&amp;nbsp;public Date run_time = null; &amp;nbsp;/**&lt;br /&gt;&amp;nbsp; * &amp;lt;PRE&amp;gt;&lt;br /&gt;&amp;nbsp; * Method Name : setSchedulerJobClearFlag&lt;br /&gt;&amp;nbsp; * History&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 1. 이지홍(&lt;A href="mailto:hongsgo@gmail.com"&gt;hongsgo@gmail.com&lt;/A&gt;), 2009. 2. 18., 최초작성&lt;br /&gt;&amp;nbsp; * &amp;lt;/PRE&amp;gt;&lt;br /&gt;&amp;nbsp; * @brief 다음 작업에 스케쥴러를 비우는 플래그&lt;br /&gt;&amp;nbsp; * @date 2009. 2. 18.&lt;br /&gt;&amp;nbsp; * @version 1.0.0 void&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;public void setSchedulerJobClearFlag(){&lt;br /&gt;&amp;nbsp; this.job_clear=true;&lt;br /&gt;&amp;nbsp;} &amp;nbsp;/**&lt;br /&gt;&amp;nbsp; * &amp;lt;PRE&amp;gt;&lt;br /&gt;&amp;nbsp; * Method Name : setSchedulerJobClear&lt;br /&gt;&amp;nbsp; * History&lt;br /&gt;&amp;nbsp; *&amp;nbsp; 1. 이지홍(&lt;A href="mailto:hongsgo@gmail.com"&gt;hongsgo@gmail.com&lt;/A&gt;), 2009. 2. 18., 최초작성&lt;br /&gt;&amp;nbsp; * &amp;lt;/PRE&amp;gt;&lt;br /&gt;&amp;nbsp; * @brief&amp;nbsp; 플래그에 따라 큐를 비우는 메소드&lt;br /&gt;&amp;nbsp; * @date 2009. 2. 18.&lt;br /&gt;&amp;nbsp; * @version 1.0.0 void&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private void setSchedulerJobClear(){&lt;br /&gt;&amp;nbsp; this.monitorService.getSchedulerMonitorInfo().setSplit_job_count(0L);&lt;br /&gt;&amp;nbsp; this.que_webSchedulerJob.clear();&lt;br /&gt;&amp;nbsp; this.job_clear=false;&lt;br /&gt;&amp;nbsp;} &amp;nbsp;/**&lt;br /&gt;&amp;nbsp; * 임시 작업결과 정보&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private DBIndexJobInfo temp_dbjob = null;&lt;br /&gt;&amp;nbsp;private OperateJobInfo temp_operator_job = null;&lt;br /&gt;&amp;nbsp;private MemoryManager memoryManager = null;&lt;br /&gt;&amp;nbsp;private DBIndexService dbIndexService = null;&lt;br /&gt;&amp;nbsp;//색인을 처리하는 객체의 부모클래스 &lt;br /&gt;&amp;nbsp;private BaseIndexService baseIndexService = null;&lt;br /&gt;&amp;nbsp;private String[] temp_arr_heapinfo = null;&lt;br /&gt;&amp;nbsp;private boolean index_optimize = false;&lt;br /&gt;&amp;nbsp;private int now_SCHEDULER_INDEX_OPTIMIZE_COUNT = 0;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;//스케쥴러 작업의 최상위 부모 클래스&lt;br /&gt;&amp;nbsp;private BaseWebJobInfo temp_basejob= null;&lt;br /&gt;&amp;nbsp;private Queue&amp;lt;BaseWebJobInfo&amp;gt; que_webSchedulerJob = null;&lt;br /&gt;//&lt;br /&gt;&amp;nbsp;private ArrayList&amp;lt;String[]&amp;gt; arr_indexdata= null; &amp;nbsp;/* (non-Javadoc)&lt;br /&gt;&amp;nbsp; * @see com.jce.searchengine.common.service.BaseService#init()&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;public void init(){&lt;br /&gt;&amp;nbsp; this.webjobs= new Thread(this);&lt;br /&gt;&amp;nbsp; this.que_webSchedulerJob=new PriorityBlockingQueue&amp;lt;BaseWebJobInfo&amp;gt;(100,new JobtypeCompare());&lt;br /&gt;&amp;nbsp; this.run_time=new Date();&lt;br /&gt;&amp;nbsp; webjobs.start();&lt;br /&gt;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;public int getQue_Count(){&lt;br /&gt;&amp;nbsp; return this.que_webSchedulerJob.size();&lt;br /&gt;&amp;nbsp;} &amp;nbsp; &amp;nbsp; /**&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; * &amp;lt;PRE&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; * Class/Interface Name : JobtypeCompare&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; * History&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; * &amp;nbsp; &amp;nbsp; 1. 이지홍(&lt;A href="mailto:hongsgo@gmail.com"&gt;hongsgo@gmail.com&lt;/A&gt;), 2009. 2. 6., 최초작성&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; * &amp;lt;/PRE&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; * @brief 작업의 우선순위를 기준으로 비교하는 Sorter&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; * @date 2009. 2. 6.&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; * @version 1.0.0&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; * @author 이지홍(&lt;A href="mailto:hongsgo@gmail.com"&gt;hongsgo@gmail.com&lt;/A&gt;)&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; * @warning&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp; &amp;nbsp; class JobtypeCompare implements Comparator&amp;lt;BaseWebJobInfo&amp;gt; { &amp;nbsp; &amp;nbsp;&amp;nbsp; public int compare(BaseWebJobInfo o1, BaseWebJobInfo o2) {&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; if(o1 instanceof BaseWebJobInfo &amp;amp;&amp;amp; o2 instanceof BaseWebJobInfo){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; BaseWebJobInfo s1 = (BaseWebJobInfo)o1;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; BaseWebJobInfo s2 = (BaseWebJobInfo)o2;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return (s1.getPriority() &amp;lt; s2.getPriority())? 1 : (s1.getPriority() == s2.getPriority() ? 0 : -1);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return -1;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /** (non-Javadoc)&lt;br /&gt;&amp;nbsp; * @see java.lang.Runnable#run()&lt;br /&gt;&amp;nbsp; * 주기적으로 rss,atom,메인 플래쉬 상단 xml을 퍼블리싱 하는 메서드 (1분간격)&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;public void run(){&lt;br /&gt;&amp;nbsp; while(true)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; //꺼내기전에 현재 큐를 비우는 플래그나 특정 사이트의 작업을 지우라는 플래그가 있는지 확인한다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; //새 작업을 꺼낸다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; if(job_clear){&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; this.setSchedulerJobClear();&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; else&lt;br /&gt;&amp;nbsp; &amp;nbsp; { &amp;nbsp; &amp;nbsp;&amp;nbsp; this.temp_basejob=this.getNextJob(); &lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; if(this.temp_basejob!=null)&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; switch(this.temp_basejob.getWebSchedulerJobType()){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; case DBIndex: //디비인덱스 작업일 경우 수행&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //보다 명확한 작업객체의 유효성 검사.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(this.temp_basejob instanceof DBIndexJobInfo){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; temp_dbjob = (DBIndexJobInfo)this.temp_basejob;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; if(temp_dbjob != null)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //작업 처리 여부 플래그를 활성화 시켜두고&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //디비 인덱스 작업의 타입에 따라 디비기반 인덱싱 작업 수행&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //해당 색인경로에 락이 남아있다면 락을 제거하여 준다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //데이터베이스로 부터 데이터를 가져오기 전에 log4j를 통해 info레벨의 log를 남긴다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //메모리 매니저를 통해 현재 가용중인 메모리의 정보를 갱신한다. &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; else{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; throw new NullPointerException(super.glbConstant.getSCHEDULER_ERROR_6());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //instanceof가 null인지 아닌지 확인하는 로직.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //작업정보에는 데이터베이스 작업이라고 했지만, 실제 형변환을 해보니 아니더라. 그래서 예외 던짐.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; throw new ClassCastException(super.glbConstant.getSCHEDULER_ERROR_1());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (Exception e) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; this.monitorService.getSchedulerMonitorInfo().setIncFailJobCount(); //실패작업 카운팅&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; if(this.temp_dbjob.getJobtype().equals(DBIndexJobType.DBIndexMakeAll)){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //현재 처리중인 작업이 일괄색인이었다면 하위 분할된 작업값들을 초기화&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this.monitorService.getSchedulerMonitorInfo().setSplit_job_count(0);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; if(e instanceof SQLException){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(!(this.temp_dbjob.getJobtype().equals(DBIndexJobType.DBIndexMakeAll))){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; this.jobRecoveryManager.setReadyToFailedJobSave(temp_dbjob);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; logger.error(super.glbConstant.getSCHEDULER_ERROR_5()+ e.getMessage());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; else if(e instanceof IOException){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(e instanceof CorruptIndexException){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; logger.error(super.glbConstant.getSCHEDULER_ERROR_3()+ e.getMessage());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else if(e instanceof LockObtainFailedException){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; try {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this.dbIndexService.setDelLock(temp_dbjob.getService_site_info().getArr_list_index_location().get(0));&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; } catch (IOException e1) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; logger.error(e1.getMessage());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; logger.error(super.glbConstant.getSCHEDULER_ERROR_1()+ e.getMessage());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; logger.error(super.glbConstant.getSCHEDULER_ERROR_2()+ e.getMessage());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(!(temp_dbjob.getJobtype().equals(DBIndexJobType.DBIndexMakeAll))){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; this.jobRecoveryManager.setReadyToFailedJobSave(temp_dbjob);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; else if(e instanceof NullPointerException){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; logger.error(super.glbConstant.getSCHEDULER_ERROR_4()+e.getMessage());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; else if(e instanceof ClassCastException){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; logger.error(super.glbConstant.getSCHEDULER_ERROR_1()+ e.getMessage());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; else{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; logger.error(super.glbConstant.getSCHEDULER_ERROR_5()+ e.getMessage());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } finally{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; //플래그를 바꾼다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; temp_dbjob.getService_site_info().setJobflag(false);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; this.setIndex_optimize(false);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; this.monitorService.getSchedulerMonitorInfo().setIncMonitorCount(temp_dbjob.getJobtype());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; case Operate:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //운영 툴 작업과 관련된게 있으면 처리&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; try {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; if(this.temp_basejob instanceof OperateJobInfo){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this.temp_operator_job = (OperateJobInfo)this.temp_basejob;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; if(this.temp_operator_job != null)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; switch(this.temp_operator_job.getJobtype()){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; case Clear:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; //로케이션이 하나라고 생각하고 처리.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; this.baseIndexService.setClearIndex(super.getIndexInfoLoaderService().getIndexInfoXmlSaxHandler().getHash_table_content_service_site().get(this.temp_operator_job.getSitecode()).getArr_list_index_location().get(0));&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; case Optimize:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; this.baseIndexService.setOptimizeIndex(super.getIndexInfoLoaderService().getIndexInfoXmlSaxHandler().getHash_table_content_service_site().get(this.temp_operator_job.getSitecode()).getArr_list_index_location().get(0));&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; else{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //작업정보에는 데이터베이스 작업이라고 했지만, 실제 형변환을 해보니 아니더라. 그래서 예외 던짐.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; throw new ClassCastException(super.glbConstant.getSCHEDULER_ERROR_1());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; } catch (Exception e) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; logger.error(e.getMessage());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; } finally{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this.monitorService.getSchedulerMonitorInfo().setIncMonitorCount(this.temp_operator_job.getJobtype());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; case FieldInex:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //쿼리 인덱스 혹은 필드 인덱스 작업이 있으면 수행.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; default:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }//switch 문 끝 &amp;nbsp; &amp;nbsp; &amp;nbsp; //현재 끄집어 낸 작업을 지우고&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.que_webSchedulerJob.remove();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; //작업 처리 횟수를 올린다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.monitorService.getSchedulerMonitorInfo().setIncTotJobCount();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if(this.arr_indexdata!=null){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; this.arr_indexdata.clear();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.arr_indexdata=null;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.temp_arr_heapinfo = null;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.temp_dbjob = null;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.temp_basejob=null;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; else{// 작업이 없다면 다음 실행.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; try {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; //idle 횟수를 기억해 두었다가 최적화를 수행함&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; if(now_SCHEDULER_INDEX_OPTIMIZE_COUNT&amp;gt;Integer.parseInt(super.getGlbConstant().getSCHEDULER_INDEX_OPTIMIZE_COUNT()) &amp;amp;&amp;amp; this.isIndex_optimize()==false){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this.now_SCHEDULER_INDEX_OPTIMIZE_COUNT=0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this.index_optimize=true;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; else{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; now_SCHEDULER_INDEX_OPTIMIZE_COUNT++;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; } catch (Exception e) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; logger.error(this.glbConstant.getSCHEDULER_ERROR_8()+e.getMessage());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; } finally{ &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; this.temp_basejob = null;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; //if-else 문 끝&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; try {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if(this.que_webSchedulerJob.isEmpty()){ //작업 큐가 비었다면 idle &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; Thread.sleep(this.glbConstant.getSCHEDULER_RELOAD_TIME());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; } catch (InterruptedException e) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; e.printStackTrace();&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; } &amp;nbsp; } //while문 끝&lt;br /&gt;&amp;nbsp;} &amp;nbsp;public BaseWebJobInfo getNextJob(){ &amp;nbsp; return this.que_webSchedulerJob.peek();&lt;br /&gt;&amp;nbsp;} &amp;nbsp; [/code]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7957652847725130505-6905113632539214593?l=programmer-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programmer-textcube.blogspot.com/feeds/6905113632539214593/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://programmer-textcube.blogspot.com/2009/12/%EC%8A%A4%EC%BC%80%EC%A5%B4%EB%9F%AC%EC%97%90-%EC%9D%98%ED%95%9C-%EB%8C%80%EC%9A%A9%EB%9F%89-%EC%B2%98%EB%A6%AC.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7957652847725130505/posts/default/6905113632539214593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7957652847725130505/posts/default/6905113632539214593'/><link rel='alternate' type='text/html' href='http://programmer-textcube.blogspot.com/2009/12/%EC%8A%A4%EC%BC%80%EC%A5%B4%EB%9F%AC%EC%97%90-%EC%9D%98%ED%95%9C-%EB%8C%80%EC%9A%A9%EB%9F%89-%EC%B2%98%EB%A6%AC.html' title='스케쥴러에 의한 대용량 처리'/><author><name>행복하자</name><uri>http://www.blogger.com/profile/14292076380941008554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7957652847725130505.post-8016270584423204006</id><published>2009-12-20T02:57:00.000+09:00</published><updated>2011-01-29T22:23:12.760+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='아바타'/><category scheme='http://www.blogger.com/atom/ns#' term='영화이야기'/><category scheme='http://www.blogger.com/atom/ns#' term='제임스카메론'/><category scheme='http://www.blogger.com/atom/ns#' term='그외'/><category scheme='http://www.blogger.com/atom/ns#' term='영화후기'/><category scheme='http://www.blogger.com/atom/ns#' term='Avatar'/><title type='text'>AVATAR 감상 후기</title><content type='html'>&lt;P&gt;어제 강남에서 제임스카메론의 아바타(AVATAR)를 보고 왔다.&lt;/P&gt;&lt;P&gt;비록 디지털 3D 좌석은 아니었지만 긴 러닝타임 동안 집중 하고 볼 수 있었다.&lt;/P&gt;&lt;P&gt;가끔 여자친구가 앵겨서 마치 극 속에서 아바타 조종사의 링크가 강제로 끈기는 것 같은 경험을 &lt;/P&gt;&lt;P&gt;몇번씩 겪었지만.. 그것또한 행복했다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;아바타의 러닝타임은 충분했지만 영화가 던지는 메시지를 모두 다 이해하기엔 그렇게 긴 시간이 아니었다. 오히려 더 많은 것들을 준비했지만 그것들을 여유롭게 둘러 볼 시간은 부족한 느낌을 받았다.&lt;/P&gt;&lt;P&gt;아름다운 세계관과 메카닉, 그리고 판타지, 이러한 재료들을 잘 조합하여 작품성과 &amp;nbsp;흥행성을 모두 다 잡으려는 제임스 카메론 감독의 마음이 엿보였다.&lt;/P&gt;&lt;P&gt;그에게 또 한 번 감명 받았던 점은 이렇게 훌륭한 영화를 만들기 위해 각 분야의 최고의 사람들 혹은 최고가 되려고 한 사람들과 함께 작업 했을텐데, 어떻기 수년의 시간동안 그들을 이끌어 실패하지 않고 그들로부터 최고의 결과물을 뽑아 낼 수 있었을까 하는점이다.&lt;/P&gt;&lt;P&gt;정말 위대한 감독은 하늘이 정해주는 것 같다.&lt;/P&gt;&lt;P&gt;스태프들을 잘 관리한 그의 용병술은 열연을 펼친 배우들에게서도 찾아 볼 수있다. 흥행배우가 아닌, 터미네이터, 에어리언등을 통해 이미 검증된, 또 그와 함께 작업했던 배우들을 등장 시킴으로써 흥행배우의 이름으로 떠벌리는 영화가 아니어서 더 좋았던거 같다.&lt;/P&gt;&lt;P&gt;여자친구가 주인공 여자 외계종족이 흑인과 닮았다고 했었는데, 난 어딜봐서 흑인같은지 잘 몰랐다.&lt;/P&gt;&lt;P&gt;헌제 집에 돌아와 구글링을 해보니 여자 배우 및 외계 종족의 여자추장을 포함해 흑인 배우가 연기했음을 알았다. 여자추장 배우는 더 쉴드에서 자주 보였던 배우였고, 여자 주인공 배우는 잘 모르겠다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;재밌었던 포인트는 여자 주인공의 아버지가 죽어도 눈물이 흐르는 장면은 없었는데,&lt;/P&gt;&lt;P&gt;남자 주인공에 산소마스크를 씌워주고 슬퍼할때는 곧바로 눈물을 흘리는 점과&lt;/P&gt;&lt;P&gt;남자주인공이 배신을 해서 마을이 다 부서지자 여자주인공이 남자주인공에게 다시는 오지 말라고 했는데, 남자주인공이 막토가 되어 용한마리 타고 오니까 여자 주인공이 한 대사.." 난 내 가족을 지키고 싶었어"&amp;nbsp; 이건 뭥미?&lt;/P&gt;&lt;P&gt;역시 남자는 권력이고 여자는 거기에 반한다는건 전 우주를 통틀어 진리라는 것인가? 슬프다. ㅋㅋ&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;로이모와 줄리엣처럼 달콤했던 "I see you"&amp;nbsp; 난 당신을 봅니다. 라는 대사가 너무 좋았고.&lt;/P&gt;&lt;P&gt;두번 세번 가슴이 울컥 할 정도의 떨림을 느끼게 해준 스트레스가 확 풀리는 영화였다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7957652847725130505-8016270584423204006?l=programmer-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programmer-textcube.blogspot.com/feeds/8016270584423204006/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://programmer-textcube.blogspot.com/2009/12/avatar-%EA%B0%90%EC%83%81-%ED%9B%84%EA%B8%B0.html#comment-form' title='3개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7957652847725130505/posts/default/8016270584423204006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7957652847725130505/posts/default/8016270584423204006'/><link rel='alternate' type='text/html' href='http://programmer-textcube.blogspot.com/2009/12/avatar-%EA%B0%90%EC%83%81-%ED%9B%84%EA%B8%B0.html' title='AVATAR 감상 후기'/><author><name>행복하자</name><uri>http://www.blogger.com/profile/14292076380941008554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7957652847725130505.post-1840008242747951655</id><published>2009-12-12T18:14:00.000+09:00</published><updated>2011-01-29T22:23:12.577+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='겟엠프드'/><category scheme='http://www.blogger.com/atom/ns#' term='재밌당'/><category scheme='http://www.blogger.com/atom/ns#' term='그외'/><category scheme='http://www.blogger.com/atom/ns#' term='헤바온라인'/><title type='text'>헤바온라인 OBT 참가</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/0/2689/attach/Xb14jCWNIJ.jpg" style="width:580px;height:435px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/0/2689/attach/Xb14jCWNIJ.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/0/2689/attach/XPUx3CgUFu.jpg" style="width:580px;height:773px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/0/2689/attach/XPUx3CgUFu.jpg')" /&gt;&lt;/div&gt;아 겟 엠프드 만든 회사에서 만든 RPG 인데&lt;/P&gt;&lt;P&gt;첨엔 애들 게임이려니 했는데&lt;/P&gt;&lt;P&gt;몰입감이 엄청나다.&lt;/P&gt;&lt;P&gt;그.. 몬스터를 수집하고 키워나가면서 주 캐릭터도 전직을 하고..&lt;/P&gt;&lt;P&gt;머 대략 그런&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/0/2689/attach/XT4aIbwkD6.jpg" style="width:580px;height:773px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/0/2689/attach/XT4aIbwkD6.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;난 늘 그렇듯 마법사를 선택하고&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;회피율 버프 해주는 소환수를 데리고 다닌다능..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7957652847725130505-1840008242747951655?l=programmer-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programmer-textcube.blogspot.com/feeds/1840008242747951655/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://programmer-textcube.blogspot.com/2009/12/%ED%97%A4%EB%B0%94%EC%98%A8%EB%9D%BC%EC%9D%B8-obt-%EC%B0%B8%EA%B0%80.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7957652847725130505/posts/default/1840008242747951655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7957652847725130505/posts/default/1840008242747951655'/><link rel='alternate' type='text/html' href='http://programmer-textcube.blogspot.com/2009/12/%ED%97%A4%EB%B0%94%EC%98%A8%EB%9D%BC%EC%9D%B8-obt-%EC%B0%B8%EA%B0%80.html' title='헤바온라인 OBT 참가'/><author><name>행복하자</name><uri>http://www.blogger.com/profile/14292076380941008554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7957652847725130505.post-8461668464463193689</id><published>2009-12-10T23:13:00.000+09:00</published><updated>2011-01-29T22:23:12.367+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='개발자'/><category scheme='http://www.blogger.com/atom/ns#' term='프로그래머'/><category scheme='http://www.blogger.com/atom/ns#' term='검색엔진 ( 루씬 lucene )'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='루씬'/><category scheme='http://www.blogger.com/atom/ns#' term='lucene'/><category scheme='http://www.blogger.com/atom/ns#' term='2.9'/><category scheme='http://www.blogger.com/atom/ns#' term='highlighter'/><category scheme='http://www.blogger.com/atom/ns#' term='검색엔진'/><category scheme='http://www.blogger.com/atom/ns#' term='알고리즘'/><title type='text'>색인과 검색 그리고 하이라이팅</title><content type='html'>&lt;P&gt;무엇을 검색 해야 하는가에 대한 고민은&lt;/P&gt;&lt;P&gt;무엇을 색인해야 하는가로 이어진다.&lt;/P&gt;&lt;P&gt;색인 할 그 무언가가 정해진다면,&lt;/P&gt;&lt;P&gt;다시 어떻게 그 검색 결과를 하이라이팅 해서 보여 줄 것인가로 귀결된다.&lt;/P&gt;&lt;P&gt;참 아이러니 한 이야기다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;게시판의 글들을 색인하는 것을 예로 들어보자.&lt;/P&gt;&lt;P&gt;우리는 수 많은 게시글들을 검색 대상으로 하였기에,&lt;/P&gt;&lt;P&gt;다양한 성향의 유저들이 쓴 글을 색인엔진에 밀어 넣어야만 했다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;서로 다른 옵션과 코드들을 가진 에디터가 뱉어내는 &lt;/P&gt;&lt;P&gt;게시글들로부터 양질의 색인 데이터를 뽑아내는것이 목표였다.&lt;/P&gt;&lt;P&gt;또한 검색된 결과에 게시글들이 가지고 있던 혹은 악의적으로 입력된 내용이&lt;/P&gt;&lt;P&gt;결과 페이지의 레이아웃을 망치거나 사이트의 보안 요소를 헤쳐서는 안되었다.&lt;/P&gt;&lt;P&gt;에디터가 escapeHTML을 수행하는지 아닌지, 에디터에 html 태그를 허용하거나 embed,object를 허용 했는지의 여부에 따라 색인시 준비해야 할 전처리기의 명세는 달라지게 되지만,&lt;/P&gt;&lt;P&gt;너무 많은 전처리 작업을 수행하면 유지보수 비용이 높게 발생하거나,&lt;/P&gt;&lt;P&gt;한정된 시스템에 부담을 주거나 또는 신규 작성된 컨텐츠가 색인에 반영되기까지의 &lt;/P&gt;&lt;P&gt;시간 차가 커지는 원인이 되었다.&lt;/P&gt;&lt;P&gt;마지막으로 양질의 검색 결과에 HTML태그와 CSS를 이용한 하이라이팅 기능이&lt;/P&gt;&lt;P&gt;가능해야 했으므로, HTML 태그를 무조건 제거 할 수는 없는 상황이었다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;무작정 달려들었다간 수만건의 데이터를 쓸모없게 만들거나,&lt;/P&gt;&lt;P&gt;테스트 시간만도 상당한 작업을 계속 반복하는 시행착오를 겪을 판이었다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;차 한잔 마실 시간이 흘렀을까?&lt;/P&gt;&lt;P&gt;APACHE COMMONS LANG 패키지에 포함된 StringEscapeUtils 객체가 퍼뜩 떠올랐다.&lt;/P&gt;&lt;P&gt;내가 색인해야 할 원본 데이터가 결과를 출력 할 HTML 페이지의 내용을 가짐으로 해서&lt;/P&gt;&lt;P&gt;문제가 발생한다면, 헌데, 그 내용이 HTML ESCAPE 유무의 차가 있다면,&lt;/P&gt;&lt;P&gt;전처리기에서 색인 할 데이터를 HTML ESCAPE 처리하여 StringUtils에 &lt;/P&gt;&lt;P&gt;HTML REMOVE REGEXPRESSION을 사용하여 관계되는 태그를 모두 다(거의 다) 제거하면 어떨까 하는 생각이었다.&lt;/P&gt;&lt;P&gt;그 다음은, 그렇게 걸러진 게시글들안에 어쩔 수 없이 남아있는 새로운 태그들에 대한 처리( &amp;lt;!-- --&amp;gt; 나 &amp;lt; &amp;gt;, OBJECT, Embed 와 같은 것들 이 문제가 되었지만)를 하고 색인 파일을 만들어낸다.&lt;/P&gt;&lt;P&gt;그 뒤,&amp;nbsp; 검색서버가 색인파일로부터 검색한 결과를 추출해내면, 하이라이팅 작업을 더해 결과를 만들어 내도록 구현하면 되었다.&lt;/P&gt;&lt;P&gt;[code java] //데이터베이스로부터 가져온 게시물의 정보를 담은 ArrayList&amp;lt;String[]&amp;gt; 객체 arr_indexdata &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int counter=0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;for(String[] arr_string: arr_indexdata){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; doc[counter]=new Document();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//필드 정보를 바탕으로 문서를 작성한다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for(int j = 0 ; j &amp;lt; arr_fieldinfo.size();j++){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//html escape로 일괄 변환후 html 태그를 제거한 내용을 저장&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;doc[counter].add(new Field(arr_fieldinfo.get(j).getName()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ,StringEscapeUtils.escapeHtml(arr_string[j]).replaceAll("(?:&amp;lt;!--.*?(?:--.*?--\\s*)*.*?--&amp;gt;)|(?:&amp;lt;(?:[^&amp;gt;'\"]*|\".*?\"|'.*?')+&amp;gt;)","")&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ,arr_fieldinfo.get(j).getStoretype()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ,arr_fieldinfo.get(j).getIndextype()));&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; counter++;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;arr_indexdata.clear();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;arr_indexdata = null; [/code] &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7957652847725130505-8461668464463193689?l=programmer-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programmer-textcube.blogspot.com/feeds/8461668464463193689/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://programmer-textcube.blogspot.com/2009/12/%EC%83%89%EC%9D%B8%EA%B3%BC-%EA%B2%80%EC%83%89-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%ED%95%98%EC%9D%B4%EB%9D%BC%EC%9D%B4%ED%8C%85.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7957652847725130505/posts/default/8461668464463193689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7957652847725130505/posts/default/8461668464463193689'/><link rel='alternate' type='text/html' href='http://programmer-textcube.blogspot.com/2009/12/%EC%83%89%EC%9D%B8%EA%B3%BC-%EA%B2%80%EC%83%89-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%ED%95%98%EC%9D%B4%EB%9D%BC%EC%9D%B4%ED%8C%85.html' title='색인과 검색 그리고 하이라이팅'/><author><name>행복하자</name><uri>http://www.blogger.com/profile/14292076380941008554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7957652847725130505.post-2145864723550034944</id><published>2009-12-10T12:59:00.000+09:00</published><updated>2011-01-29T22:23:12.117+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='검색엔진 ( 루씬 lucene )'/><category scheme='http://www.blogger.com/atom/ns#' term='루씬'/><category scheme='http://www.blogger.com/atom/ns#' term='lucene'/><category scheme='http://www.blogger.com/atom/ns#' term='검색엔진'/><category scheme='http://www.blogger.com/atom/ns#' term='lucene in action'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><category scheme='http://www.blogger.com/atom/ns#' term='오픈소스'/><title type='text'>검색엔진 개발정리를 시작하다. lucene 2.9</title><content type='html'>&lt;P&gt;&lt;A style="HEIGHT: 1.4em; COLOR: #00c; TEXT-DECORATION: underline" href="http://lucene.apache.org/java/docs/" target=_blank&gt;Apache Lucene - Overview&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;오픈소스 검색엔진 루씬 2.9 버젼으로 개발을 진행하고 있다.&lt;/P&gt;&lt;P&gt;곧 오픈 할 예정,&lt;/P&gt;&lt;P&gt;이미 루씬을 사용해서 7개월 이상 개발해 왔으나,&lt;/P&gt;&lt;P&gt;이제서야 그것에 대한 이야기들을 이 공간에 남겨보고자 한다.&lt;br /&gt;당장은 루씬을 활용법이나 루씬을 실 업무에 적용했을때 발생하는 문제들이&lt;/P&gt;&lt;P&gt;주류를 이룰 것이고(내가 관심이 있는게 그쪽이니), 그 나머지는&lt;/P&gt;&lt;P&gt;루씬의 핵심 알고리즘들을 파헤치고 싶다.(욕심)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;여력이 남는다면 내가 만든 결과물을 정리해서 별도로 검색엔진 운용도 해보고싶다.&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7957652847725130505-2145864723550034944?l=programmer-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programmer-textcube.blogspot.com/feeds/2145864723550034944/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://programmer-textcube.blogspot.com/2009/12/%EA%B2%80%EC%83%89%EC%97%94%EC%A7%84-%EA%B0%9C%EB%B0%9C%EC%A0%95%EB%A6%AC%EB%A5%BC-%EC%8B%9C%EC%9E%91%ED%95%98%EB%8B%A4-lucene-29.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7957652847725130505/posts/default/2145864723550034944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7957652847725130505/posts/default/2145864723550034944'/><link rel='alternate' type='text/html' href='http://programmer-textcube.blogspot.com/2009/12/%EA%B2%80%EC%83%89%EC%97%94%EC%A7%84-%EA%B0%9C%EB%B0%9C%EC%A0%95%EB%A6%AC%EB%A5%BC-%EC%8B%9C%EC%9E%91%ED%95%98%EB%8B%A4-lucene-29.html' title='검색엔진 개발정리를 시작하다. lucene 2.9'/><author><name>행복하자</name><uri>http://www.blogger.com/profile/14292076380941008554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7957652847725130505.post-8153192770754100701</id><published>2009-12-10T11:18:00.000+09:00</published><updated>2011-01-29T22:23:11.929+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='그외'/><category scheme='http://www.blogger.com/atom/ns#' term='Syntax Highlighter'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax'/><title type='text'>블로그에 소스 코드 보이기 (Syntax Highlighter)</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/0/2689/attach/XQzt9GWjyI.jpg" style="width:600px;height:85px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/0/2689/attach/XQzt9GWjyI.jpg')" /&gt;&lt;p class="cap1"&gt;&amp;lt;Code Highlighter  사용 예&amp;gt;&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;P align=center&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;코드 냄새가 나는 블로그를 읽다보면&lt;/P&gt;&lt;P&gt;위와 같이 코드가 이쁘게 나오는 걸 볼 수 있다.&lt;/P&gt;&lt;P&gt;내 블로그에도 적용해보고싶어, 어떻게 하면 할 수 있을까? 하고 찾아보니&lt;/P&gt;&lt;P&gt;텍스트큐브 도움말 페이지에서 &lt;A href="http://alexgorbatchev.com/wiki/SyntaxHighlighter" target=_blank&gt;Syntax Highlighter&lt;/A&gt;를 찾을 수 있었다.&lt;/P&gt;&lt;P&gt;오오 이거 좋은데?&lt;/P&gt;&lt;P&gt;내가 친 소스 코드가 이렇게 이뿌게 바뀌다니..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code java]&lt;/P&gt;&lt;P&gt;super.Request_Status=super.setValidateParams(this.temp_dbindexjobinfo.getSitecode()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ,this.temp_dbindexjobinfo.getContentidx()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ,this.temp_dbindexjobinfo.getPriority()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ,this.temp_dbindexjobinfo.getJobtype().name()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ,this.temp_dbindexjobinfo.getService_site_info()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ,this.temp_dbindexjobinfo.getWebSchedulerJobType()&lt;br /&gt;&amp;nbsp; &amp;nbsp; );&lt;/P&gt;&lt;P&gt;[/code]&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7957652847725130505-8153192770754100701?l=programmer-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programmer-textcube.blogspot.com/feeds/8153192770754100701/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://programmer-textcube.blogspot.com/2009/12/%EB%B8%94%EB%A1%9C%EA%B7%B8%EC%97%90-%EC%86%8C%EC%8A%A4-%EC%BD%94%EB%93%9C-%EB%B3%B4%EC%9D%B4%EA%B8%B0-syntax-highlighter.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7957652847725130505/posts/default/8153192770754100701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7957652847725130505/posts/default/8153192770754100701'/><link rel='alternate' type='text/html' href='http://programmer-textcube.blogspot.com/2009/12/%EB%B8%94%EB%A1%9C%EA%B7%B8%EC%97%90-%EC%86%8C%EC%8A%A4-%EC%BD%94%EB%93%9C-%EB%B3%B4%EC%9D%B4%EA%B8%B0-syntax-highlighter.html' title='블로그에 소스 코드 보이기 (Syntax Highlighter)'/><author><name>행복하자</name><uri>http://www.blogger.com/profile/14292076380941008554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7957652847725130505.post-5955533147032867071</id><published>2009-12-09T20:24:00.000+09:00</published><updated>2011-01-29T22:23:11.666+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jvmpi'/><category scheme='http://www.blogger.com/atom/ns#' term='긴 하루'/><category scheme='http://www.blogger.com/atom/ns#' term='프로파일링'/><category scheme='http://www.blogger.com/atom/ns#' term='JVM옵션'/><category scheme='http://www.blogger.com/atom/ns#' term='자바'/><category scheme='http://www.blogger.com/atom/ns#' term='jvm'/><title type='text'>SunOS에 JVMPI를 통해 REMOTE DEBUGGING 하기</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/0/2689/attach/XA3bVIishB.gif" style="width:557px;height:172px;" alt=""  /&gt;&lt;/div&gt;회사의 개발서버를 모니터링 할 수 있는 방법이 없을까 고민하다&lt;/P&gt;&lt;P&gt;JVMPI를 알게되었다.&lt;/P&gt;&lt;P&gt;소스는 로컬에 있는걸로 개발서버 및 테스트 서버에 접속하여&lt;/P&gt;&lt;P&gt;이벤트를 기준으로 JVM의 상황을 모니터링 할 수 있다.&lt;/P&gt;&lt;P&gt;이벤트에 대한 CALLBACK 함수를 등록시켜놓고 쓰는..&lt;/P&gt;&lt;P&gt;JAVA SDK 1.4 많이 쓰였지만 JAVA에서는 표준이 아니라고 했는데&lt;/P&gt;&lt;P&gt;거의 표준 처럼 쓰이고 있다.&lt;/P&gt;&lt;P&gt;심지어 SUNOS의 디버거 비활성화된 옵션에 이미 선언되어있더라능..&lt;/P&gt;&lt;P&gt;모르던걸 알게되어 기분이 좋구만&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;관심 있으신분들은 다음 URL 참조 &lt;/P&gt;&lt;P&gt;&lt;A href="http://java.sun.com/j2se/1.4.2/docs/guide/jvmpi/jvmpi.html"&gt;http://java.sun.com/j2se/1.4.2/docs/guide/jvmpi/jvmpi.html&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="http://saltfactory.textcube.com/entry/eclipse-remote-debugging"&gt;http://saltfactory.textcube.com/entry/eclipse-remote-debugging&lt;/A&gt;-설정&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7957652847725130505-5955533147032867071?l=programmer-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programmer-textcube.blogspot.com/feeds/5955533147032867071/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://programmer-textcube.blogspot.com/2009/12/sunos%EC%97%90-jvmpi%EB%A5%BC-%ED%86%B5%ED%95%B4-remote-debugging-%ED%95%98%EA%B8%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7957652847725130505/posts/default/5955533147032867071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7957652847725130505/posts/default/5955533147032867071'/><link rel='alternate' type='text/html' href='http://programmer-textcube.blogspot.com/2009/12/sunos%EC%97%90-jvmpi%EB%A5%BC-%ED%86%B5%ED%95%B4-remote-debugging-%ED%95%98%EA%B8%B0.html' title='SunOS에 JVMPI를 통해 REMOTE DEBUGGING 하기'/><author><name>행복하자</name><uri>http://www.blogger.com/profile/14292076380941008554</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
