2015년 7월 5일 일요일

블로그 이전

블로그를 github로 이전합니다. 블로그를 좀 더 쉽게 올리고 코드와 연결시키기 위해서 블로그 서비스를 이용하기 보다는 직접 구축하는 것이 좋을 것 같아 github를 이용하기로 했습니다.

2015년 6월 7일 일요일

Javascript closure의 이해

다음의 Javascript 구현은 local 변수의 값을 return하는 것이다.
function testNoClosure(){
    var a = 100;
    return a;
}
console.log(testNoClosure()); //100을 출력

당연하게도 그 local변수에 직접 접근하는 방법은 없다.
예를 들어 다음과 같이 local변수를 접근하려 하면 'ReferenceError: a is not defined'가 발생한다.
console.log(a);

즉, local변수는 함수 scope내에서만 유효하고 다른 scope에서는 유효하지 않다.

Closure는 이런 제약을 없애는 것으로, 필요한 variable을 binding해서 다른 scope에서도 참조할 수 있도록 한 것이다.
다음의 구현을 보자.
function testClosure(){
    var a = 100;
    function f(){
        return a;
    }
    return f;
}
var checkLocalA = testClosure();
console.log(checkLocalA());

위에서 inner function인 f는 outer function의 변수인 a를 마치 'global' 변수처럼 access한다. parameter로 넘길 필요도 없고, 따로 함수내부의 다른 변수에 값을 저장할 필요도 없다. 그렇지만, inner function이 호출되는 시점(위에서는 console.log(checkLocalA()))에 outer function의 변수 a에 접근할 수 있는 것이다.


여기까지만 이야기 하면 어떻게 쓸지 잘 감이 안온다. 실제 사용예를 보자.
function makeTransport(kind){
    var count = 0;
    return function(brand) {
        count++;
        console.log("Kind: " + kind + ", brand: " + brand + " - " + count);
    }
}
var getCar = makeTransport("Car");
getCar("Bentz");
getCar("Hyundai");
var getAirplane = makeTransport("Airplane");
getAirplane("Boeing");

inner function(Closure)은 outerfunction의 변수(위에서는 kind, count)를 다른 scope에서도 참조할 수 있고, parameter(위에서는 brand)를 이용해 호출되는 시점에 입력을 받을 수도 있다.
이렇게 closure를 활용해서 유사한 함수를 효율적으로 만들 수 있다.

2015년 4월 12일 일요일

Visual Studio에서 console 프로그램 실행 시 command prompt 창이 바로 닫히지 않게 하기

Visual Studio로 개발할 때 개발한 프로젝트를 실행하고 결과를 보려고 하면 command prompt가 바로 닫혀버려서 난감할 때가 있다.  command prompt가 바로 닫히지 않고 결과를 확인하기 위해서는 다음과 같은 설정을 하면 된다.

솔루션 탐색기의 프로젝트 아이콘 위에서 오른쪽 마우스 버튼을 눌러
1. '프로젝트 속성' 선택
2. 속성 페이지의 왼편 창에서 '구성 속성' > '링커' > '시스템' 선택
3. 오른쪽 창에서 '하위 속성'의 drop-down 메뉴 선택
4. 콘솔(/SUBSYSTEM:CONSOLE) 선택
5. 확인하고 속성창에서 빠져나오기

* 위의 설정은 디버그 모드가 아닌 실행(RUN) 모드 일 때에만 적용이 된다는 것에 주의하자.

2015년 4월 5일 일요일

marvel installation on Windows for monitoring elasticSearch

Marvel is a management and monitoring tool for elasticSearch. This is installed with interactive console called as 'Sense' which is able to communicate with elasticSearch via Web browser. This tool is free while developing your project whereas it is charged while serving your service. 

Installation process
The installation procedures of Marvel is as follows:  
1. Run the command prompt.
2. Move to the elasticSearch folder
3. Execute the following command to install marvel
> .\bin\plugin -i elasticsearch/marvel/latest
4. Move to the elasticSearch\bin folder and then run the elasticSearch service.
> service stop
> service start
5. Access the following URL on Web browser
    http://{{any-server-in-cluster}}:9200/_plugin/marvel
6. Access the sense URL on Web browser
    http://{{any-server-in-cluster}}:9200/_plugin/marvel/sense/
    예) http://localhost:9200/_plugin/marvel/sense/

Alternative process
If you encounter any failure on the above steps, you can retry with the following procedures.  
1. Download the marvel-latest.zip' file on Web brower with the following URL
     http://download.elasticsearch.org/elasticsearch/marvel/marvel-latest.zip' 
2. Unzip marvel-latest.zip 
3. Rename the uncompressed folder(marvel-latest) to 'marvel'.
4. Move the marvel folder to elasticSearch\plugins 
5. Go to the elasticSearch\bin folder and then rerun the elasticSearch service.
> service stop
> service start
6. Access the following URL on Web browser
    http://{{any-server-in-cluster}}:9200/_plugin/marvel
7. Access the sense URL on Web browser
    http://{{any-server-in-cluster}}:9200/_plugin/marvel/sense/
    예) http://localhost:9200/_plugin/marvel/sense/

elasticSearch 모니터링툴인 marvel 설치하기 (Windows) [한글]

Marvel은 elasticSearch의 관리와 모니터링을 위한 툴이다.이것은 'Sense'라 불리는 interative console과 함께 설치되는데 'Sense'는 브라우저에서 elasticSearch와 직접 통신할 수 있게 해준다. 이 툴은 개발시에는 공짜이며 나중에 실제 서비스를 위해 사용될 때에는 돈을 지불해야만 한다.

설치 하는 방법은 다음과 같다.
1. command prompt를 실행한다.
2. elasticSearch가 설치된 폴더로 이동한다
3. 아래 command를 실행하여 marvel을 설치한다.
> .\bin\plugin -i elasticsearch/marvel/latest
4. elasticSearch 폴더의 bin 폴더로 가서 다음과 같이 elasticSearch 서비스를 재구동시킨다.
> service stop
> service start
5. 브라우저에서 다음 URL로 접근해본다.
    http://{{any-server-in-cluster}}:9200/_plugin/marvel


만약 다양한 이유로 위의 방법으로 marvel 설치가 실패할 경우 다음 방법을 통해 설치한다.
1. 웹 브라우저에서 'http://download.elasticsearch.org/elasticsearch/marvel/marvel-latest.zip'으로 접근해 marvel-latest.zip파일을 다운받는다.
2. 다운 받은 marvel-latest.zip 파일을 푼다.
3. 압축 풀린 폴더(marvel-latest)의 이름을 marvel이라고 바꾼다.
4. marvel 폴더를 elasticSearch 폴더아래의 plugins 폴더아래로 이동시킨다.
5. elasticSearch 폴더의 bin 폴더로 가서 다음과 같이 elasticSearch 서비스를 재구동시킨다.
> service stop
> service start
6. 브라우저에서 다음 URL로 접근해본다.
    http://{{any-server-in-cluster}}:9200/_plugin/marvel
    예) http://localhost:9200/_plugin/marvel
7. Browser를 통해 elasticSearch와 통신하는 'Sense'에 접근해 본다.
    http://{{any-server-in-cluster}}:9200/_plugin/marvel/sense/
    예) http://localhost:9200/_plugin/marvel/sense/

elasticSearch 초간단 소개

elasticSearch는 apache lucene를 기반으로 개발된 '오픈소스 서치엔진'이다. 즉, elasticSearch에 대해 이해하려면 apache lucene에 대한 이해가 필요하다.  apache lucene 홈페이지의 설명에 의하면 apache lucene는 다음과 같은 특징을 갖는다.

  • scalable, high-performance 
  • full-featured text search engine library
  • 100% java로 개발되어 cross-platform에 적합
elasticSearch는 위의 특징을 계승하면서 java library이기때문에 java application에만 활용되고, 사용이 복잡하다는 제약을 극복하고자 'engine'형태로 동작하며 REST API를 통해 손쉽게 사용될 수 있게 개발되었다. 그리고, 아래의 기능들이 추가되었다.
  • 모든 field가 index되거나 검색 가능
  • 실시간 분석이 가능한 분산 검색 엔진
  • 수 백대의 서버로 쉽게 확장 가능하며, petabyte의 structured와 unstructured data 지원 가능
쉽게 말해서, 쓰기 불편하고 Java application에만 사용될 수 있었던 Java기반 text 서치 오픈 소스 라이브러리인 apache lucene를 수정하여, 단독으로 동작하며 REST API로 접근 가능하고, 서버 확장을 쉽게 할 수 있게 만든 것이 elasticSearch이다.

Windows에 elasticSearch 설치하고 서비스로 구동하기

Windows 환경에서 elasticSearch를 서비스로 구동하면 향후 따로 설치하거나 명령을 실해할 필요없이 구동되는 elasticSearch에 접속하는 것만으로 개발을 진행할 수 있다. 이를 위해 설치하고 서비스로 구동하는 방법을 정리해 보았다.


1. Java 환경 설치 및 Java_Home 시스템 변수 설정

elasticSearch는 Java위에서 동작하는 서치엔진이다. 그러므로 반드시 Java가 설치되어 있어야 하며 시스템 환경변수에 Java_Home이 등록되어 있어야 한다.
A. Java 다운로드 사이트에서 최신 JDK 설치파일을 다운로드 받는다.이때 32비트(x86)인지 64비트(x64)인지 확인하여 진행한다.
B. 다운 받은 설치 파일을 실행한다.
C. 제어판>시스템> 고급 시스템 설정에서 환경 변수> 사용자 변수로 변수이름은 JAVA_HOME, 변수 값은 설치된 JDK 폴더(예: C:\program files\java\jre7)를 지정한다.
치치

2. elasticSearch 다운로드 및 설치

A. elasticSearch 다운로드 사이트에서 zip 파일을 다운로드해서 적당한 폴더에서 압축을 푼다.
B. 압축을 푼 폴더 아래의 bin 폴더로 이동한다.
C. elasticsearch.bat 파일을 실행한다.
D. command prompt를 실행하여 다음 명령을 실행하여 정상적으로 연결되는지 확인한다.
    (이때 windows용 curl이 설치되어 있다고 가정한다.)
   > curl -X get http://localhost:9200

3. elasticSearch를 서비스로 구동하기 

A. command promt를 실행한다.
B. elasticSearch 폴더의 bin폴더로 이동한다.
C. 서비스로 등록하는 명령을 실행한다.
> service install
D. 서비스를 시작하는 명령을 실행해 본다
> service start
E. 제어판 > 관리도구 > 서비스에서 elasticSearch를 찾아서 '시작 유형'을 자동으로 변경한다.
F. Windows를 재시작한 후 아래 명령을 실행하여 정상적으로 연결되는지 확인한다.
   > curl -X get http://localhost:9200