[Elasticsearch] 엘라스틱 서치 6.1.1 한글패치 적용하기

Elasticsearch 설정하기

드디어!! AWS 에 있는 Elasticsearch 서비스에 은전한닢 플러그인이 추가 됐습니다. 예전에는 이런 기능이 없어서 제가 따로 elasko 라고 은전한닢에 패치된 형태의 엘라스틱서치의 도커 형태를 만들었습니다. 이제 시간이 지나서 elasticsearch 6.0 이 나오고 (제가 만든 elasko 는 5.5 기반) 문법도 많이 바뀌고 해서 다시금 정리할 필요가 있습니다.

Elasticsearch 편하게 쓰는걸 원하신다면

  1. AWS 에 있는 서비스 추천입니다.
    • 기업 서비스용이라면 100% 추천입니다.
    • kibana 까지 이용하실려면 vpc 가 아닌 ip 기반으로 관리를 선택하세요

그러나 가난한 개인 개발자라면 한달에 EC2 가격만 해도 부담이 되겠지요. 이 글은 가난한 개발자들 위주로 진행하겠습니다. EC2 한대만 허용되어 있다면 docker 에 elasticsearch 를 이용해서 적용하는것이 가성비가 훌륭한 선택입니다.


  1. Elasticsearch 6.1.1 설치하기
    $ docker run -dit --name elastic -p 9200:9200 -p 9300:9300 \
        docker.elastic.co/elasticsearch/elasticsearch:6.1.1
    

    편하게 elasticsearch 가 설치됩니다.  


  2. elastic 컨테이너에 접속하기
    $ docker exec -it elastic /bin/bash
    

    접속해서 root console이 뜹니다.


  3. zip 설치하기

    필요한 것만 설치되어 있는 docker 컨테이너 특성상 zip 이 없습니다.

    # yum install zip
    

    마지막에 물어보는 대답에 'y' 하시면 됩니다.


  4. 은전한닢 패치하기
    $ bash <(curl -s \
       https://bitbucket.org/eunjeon/seunjeon/raw/master/elasticsearch/scripts/downloader.sh)\
         -e 6.1.1 -p 6.1.1.1
    

    엘라스틱서치 6.1.1 버젼에 플러그인 대상 6.1.1.1 버젼을 설치한다는 것입니다.

    $ ./bin/elasticsearch-plugin install \
      file://`pwd`/elasticsearch-analysis-seunjeon-6.1.1.0.zip
    

  5. Elasticsearch 재시작

    꼭 해야 하는지는 모르겠지만 한번쯤 해주는 것도 나쁘지 않아 보입니다.

    $ ps -ef | grep elasticsearch
    

    로 찾은 process 번호를

    $ kill -SIGTERM [process id]
    

    로 죽이면. 컨테이너 밖으로 튕겨 나가게 됩니다.

    $ docker start elastic
    

    밖에서 이 명령으로 다시 띄우시고


  6. 테스트 하기

    제대로 패치된게 맞는지 확인합니다. 기존 은전한닢 사이트에서 제공하는 확인 스크립트를 새버젼 (6.1.1)에 맞게 바꾸어 줍니다.

    #!/usr/bin/env bash
    
    ES='http://localhost:9200'
    ESIDX='seunjeon-idx'
    
    curl -XDELETE "${ES}/${ESIDX}?pretty"
    sleep 1
    curl -XPUT "${ES}/${ESIDX}/?pretty" \-H 'Content-Type: application/json' -d '{
      "settings" : {
        "index":{
          "analysis":{
            "analyzer":{
              "korean":{
                "type":"custom",
                "tokenizer":"seunjeon_default_tokenizer"
              }
            },
            "tokenizer": {
              "seunjeon_default_tokenizer": {
                "type": "seunjeon_tokenizer",
                "index_eojeol": false,
                "user_words": ["낄끼+빠빠,-100", "c\\+\\+", "어그로", "버카충", "abc마트"]
              }
            }
          }
        }
      }
    }'
    
    sleep 1
    
    echo "# 삼성/N 전자/N"
    curl -XGET "${ES}/${ESIDX}/_analyze?&pretty" -H 'Content-Type: application/json' -d '
    {
      "analyzer": "korean",
      "text":  "삼성전자"
    }
    '
    
    echo "# 빠르/V 지/V"
    curl -XGET "${ES}/${ESIDX}/_analyze?&pretty" -H 'Content-Type: application/json' -d '
    {
      "analyzer": "korean",
      "text":  "빨라짐"
    }
    '
    
    echo "# 슬프/V"
    curl -XGET "${ES}/${ESIDX}/_analyze?&pretty" -H 'Content-Type: application/json' -d '
    {
      "analyzer": "korean",
      "text":  "슬픈"
    }
    '
    
    echo "# 새롭/V 사전/N 생성/N"
    curl -XGET "${ES}/${ESIDX}/_analyze?&pretty" -H 'Content-Type: application/json' -d '
    {
      "analyzer": "korean",
      "text":  "새로운사전생성"
    }
    '
    
    echo "# 낄끼/N 빠빠/N c++/N"
    curl -XGET "${ES}/${ESIDX}/_analyze?&pretty" -H 'Content-Type: application/json' -d '
    {
      "analyzer": "korean",
      "text": "낄끼빠빠 c++"
    }
    '
    


[Python] 간단한 블록체인 구현하기

요즘 바빠서 글을 잘 못 남기지만 정말 추천할 만한 포스트가 있어서 추천합니다. 간단한 파이썬 코드만 알면 요즘 유행하는 블록체인의 기본 원리를 알고 응용이 가능합니다. 쭈욱 따라하시면 됩니다. 


http://ecomunsing.com/build-your-own-blockchain



끝으로 요즘 여러 이야기가 있지만, 저는 블록체인을 흠잡을 이유가 없습니다. 분산 저장은 시대에 맞는 트렌드라고 봅니다. 다만 거래소가 안전하냐는 이야기는 절대 반대입니다. 돈이 오고 가는 서비스를 그리 허술하게 만들면 안된다고 봅니다. 



[Linux] Crontab 이용해서 스케쥴 관리하기

crontab 으로 스케쥴 잡 등록 시키기

python 과 crontab 을 잘 연결시키면 스케쥴 작업을 완벽하게 만들 수가 있습니다. 간단한 배치 작업들은 굳이 다른 시스템을 사용할 이유가 없습니다.

기본 editor 를 emacs 로 변경하기

$ export EDITOR=emacsclient

아무 설정을 하지 않으면 vi 로 설정되어 있습니다.

기본적인 기능

CRUD 에서 U 는 C 와 동일하니 기능을 살펴보기로 합니다.

입력 (Create)

$ crontab -e

보기 (Read)

$ crontab -l

지우기 (Delete)

$ crontab -d

주기 결정

*          *        *        *       *
분(0-59)  시간(0-23)  일(1-31)  월(1-12)   요일(0-7)

실제 예

* * * * * ls -la

인코딩 관련

crontab 으로 파이썬 스케쥴을 돌릴때 특히나 console 에 한글을 출력하는 경우에 에러가 자주 발생합니다. Unicode 에러 인데요. crontab 은 shell 환경을 가져오지 않기 때문에 발생합니다. 해결 방법은 의외로 간단합니다. crontab 에서 입력 할때 마치 쉘 환경 처럼 적어주면 끝입니다.

   PYTHONENCODING=utf-8
   LANG=ko_KR.UTF-8          
   0 * * * 1-5 source /Users/crazia/miniconda3/bin/activate /Users/crazia/miniconda3/envs/cr-mon/ && 
   /Users/crazia/miniconda3/envs/cr-mon/bin/python /Users/\
crazia/work/python-projects/cr_mon/manage.py stats >> /Users/crazia/work/stats.log 2>&1

miniconda 상에서 cr-mon 이라는 환경을 만들고 django style console 로 만들어서 실행시키고 로그를 남기는 예제 입니다.

FinTech UX day

일정 때문에 끝까지 듣지는 못했지만 공유할 만한 사항이라 생각해서 정리합니다.

핀테크 업체들중에서 흔히 잘 나간다고 인식되는 업체에서 발표자가 나와서 마인드셋, 사고방식 어떻게 해야 빠르게 만들어 낼 수 있는지에 관해서 설명했습니다. UX 에 관한 발표라고 알고 있었지만 실제로 들어보면 벤쳐 정신에 대한 강의에 더 가깝더군요. (적어도 토스 디자이너 분은 그랬습니다.)

토스 디자이너


  • 돈 떨어지기 전에 시장에서 통하는 제품을 빠르게 만들자.
     스타트업은 돈이 떨어지면 그냥 끝이기 때문에 길게 생각하면서 만들 여유가 없다고 합니다. 빠르게 자주 만들면서 목표에 다가가는지 항상 체크하면서 개발하자. (본인 생각으로는 린 스타트업 정신과 일맥상통합니다)
  • 빠른 실행을 위한 마인드셋 
    '그거 안 넣으면 망해? 망하면 그거 때문이야?' 정말 처절하게 핵심만 남기기 위한 사고방식이라고 생각합니다. 의사결정자들을 거치면 거칠수록 늘어나는 기능 때문에 일정이 계속 늘어나는 경우 때문에 만들어 진 사고방식이라고 봅니다.
  • 가혹하게 줄여야 MVP (Minimum viable product) 다.
     '토스 초기에는 이체를 신청하면 대표가 공인 인증서로 송금을 했다.' 라는 식의 처절한 MVP 를 말한다. 실제 이랬는지…
  • 제품 개발의 목표는 '완성'이 아니라 '가설 검증'이다. 
    스프린트의 목표를 '이러면 이러할 것이다' 라는 가설을 세우고 그것을 검증하기 위해서 일정 계획을 세워야 한다는 것이다.
  • 데이타 수집과 분석은 절대 타협하지 않습니다. 
    다른 모든 것을 희생하더라도 데이타 수집과 분석은 상당한 공을 들여야 합니다.
  • 퍼널 리포트 (Funnel reports)를 만들어야 한다. 
    토스는 이메일 인증때문에 수 많은 사람들이 빠져나갔다는 것을 데이타 기반으로 알아냄, 퍼널 분석만으로 충분하다. (깔때기 분석)


구글 UAC 개요

내가 있는 곳이 구글 캠퍼스인 관계로 (구글 안다님 ㅋㅋ) 구글 관련 세미나를 종종 들을 때가 있다. 2년전부터 운영하는 광고 플랫폼에 관한 세미나라서 들어봄. 그래서 정리함 

뭔가 새로운 것을 들으면 정리해보는 습관을 들여야 나중에 편하다는 것을 깨달아서


구글 UAC 앱 마케팅 오피스아워

UAC 란?

Universal App Campaign , 구글의 통합형 광고 지원시스템이라고 볼 수 있다.

기존의 광고 체계

  • 플레이스토어내의 광고
  • 구글 검색내의 광고
  • 앱 내부의 광고
  • 쥐메일(Gmail) 의 광고
  • 유튜브의 광고

UAC 광고 플랫폼

전반적으로 페북의 광고 플랫폼을 많이 카피했다는 생각을 지울 수 없다. 아니면 통합 광고 플랫폼이 보통 저런 형식이던지.

  • 광고 소재
  • 타겟 지역
  • KPI
  • 입찰 단가
  • 예산

UAC 의 특징?

  • 유니버셜 앱 캠페인 + 머신러닝이 포함 된 형태 사람이 한 행동을 분석해서 그 사람과 비슷한 사람을 찾아서 정보를 기반으로 하여 광고 캠페인은 진행함 일반적인 알고리즘이긴 하다. 대표적인 추천 알고리즘
  • 2년전에 런칭, 알게된 클라이언트들이 모두 사용하고 있다고 한다. (확인할 길은 없다)
  • 이제 UAC 만 사용할 수 있다. 다른 개별 개별의 인벤토리(쥐메일이나 유튜브 등을 이리 말하는 것 같다)용 광고는 사용 못함
  • 통합형 광고이지만 개별 개별의 인벤토리 광고 단가보다 싸다. 최대 60% 까지 쌈 (1/3 가격)
  • 기존 캠페인의 생성은 10/15 까지 가능이고, 지금 운영되는 모든 단독 캠페인은 11/14 까지만 운영 가능하다. 이제 UAC 만 가능하다.

UAC 의 종류

UAC 인스톨

  • 가격이 싸다.
  • 충성도가 높지 않은 대량의 사용자를 유입시키고 싶을때 쓰는 옵션

UAC 액션

  • 사용자의 행동 행동을 분석해서 알맞은 광고를 진행
  • 가격이 비쌈
  • 대신 광고 대상 사용자의 리텐션이 높고, 퀄리티 (진행자의 표현)가 높다.

UAC 인스톨 어드밴스

  • UAC 인스톨과 UAC 액션의 중간 포지션
  • 가격도 중간 사용자의 리텐션과 퀄리티도 중간

UAC 밸류

  • 아직 런칭 전이다.

UAC 의 유의점

테스트가 좀 까다롭다. 최적화를 위해서는 사용자들도 '노력'을 많이 해야 하고, 구글의 베스트 프랙티스를 꼭 따라줘야 한다. (강하게 권고함)

사용자가 해야 할일

  • 본인들의 앱 환경을 데이타 기반으로 이해하는게 중요함.
  • 이를 위해서 분석툴 설치가 필수
  • 3rd 파티툴인 애드브릭스 (무료), 코차바(유료) 추천
  • 자사(구글)의 파이어베이스 추천 , 구글 어날리틱스는 웹에 특화되어 있다고 함
  • 결론적으로 파이어베이스 추천하는 것임