전체 글

전체 글

    Spring5 리액티브 스트림 정리 및 api 전달 방식 정리

    리액티브 또는 리액티브 스트림은 오늘날 spring framework에서 뜨거운 토픽으로 자리잡고 있다. 그래서 나도 이전 포스팅에서도 정리도 하고 했었는데 아직 확실히 개념이 서질 않아서 다시 정리해봤다. 리액티브 스트림 (Reactive Stream) 이란? 리액티브 스트림은 무엇인가? 정확하게 공식문서에는 다음과 같이 기록되어 있다. (https://www.reactive-streams.org/) Reactive Streams is an initiative to provide a standard for asynchronous stream processing with non-blocking back pressure.This encompasses efforts aimed at runtime enviro..

    Spring boot 모니터링 Actuator 소개 및 설치

    spring acturator를 통해서 스프링 애플리케이션의 작동여부등을 체크해보자. 설정 우선 gradle 라이브러리를 추가한다. compile 'org.springframework.boot:spring-boot-starter-actuator' 그리고 기존에는 application.properties나 yml에 아래 옵션을 설정해줘야 했지만 기본적으로 설정이 되어있다. endpoints.health.enabled=true 하지만 이는 Spring boot 2.0에서 다음으로 변경되었다. (https://stackoverflow.com/questions/48900892/how-to-enable-all-endpoints-in-actuator-spring-boot-2-0-0-rc1) How to enable..

    Elasticsearch node 종류와 기본 설정 옵션

    Elasticsearch의 노드 Elasticsearch의 인스턴스를 시작하는 동시에 노드도 같이 시작된다. 노드들을 연결해놓은 것을 클러스터라고 한다. 만약 하나의 엘라스틱 서치 노드만을 실행시킨 경우도 하나의 노드를 가진 클러스터라고 한다. 클러스터안에서 모든 노드는 HTTP와 Transport 트래픽을 기본적으로 다룬다. Transport 레이어는 오로지 노드들과 Java TransportClient와의 통신에만 사용된다. Http 레이어는 오직 외부 Rest Cliente들과 통신할 때 사용된다. 모든 노드는 클러스터 안에서 서로 다른 노드들에 대하여 알고 있고 client에 요청을 적적한 노드로 향하게 조절해준다. 기본적으로 노드는 master-eligible, data, ingest, mach..

    Github repository 위치 변경

    github에서 개인적으로 하고 있는 토이프로젝트 wedul_timeline을 친구와 함께 작업하기로 해서 그룹을 생성했다. 그룹 이름은 우리의 아이덴티티에 맞는 potato로 지정했다. ㅋㅋ 그런데 이렇게 지정하다보니 기존에 내 repository에 위치해있던 소스를 그룹으로 옮겨야 했다. 그 과정에서 삽질했던 내용을 다음에는 삽질 하지 않도록 기록해봤다. 현재 Git Repository 저장소 clone 우선 현재 있는 repository를 복사 해야한다. git clone --mirror https://github.com/weduls/wedul_timeline 복사가 완료되었다. 그럼 이제 새로 이전할 레포지토리가 필요하다. 그룹에 들어가서새로운 레포지토리를 생성한다. 새로운 remote origi..

    Elasticsearch version conflict 에러

    배치를 이용해서 Elasticsearch에 데이터를 삽입하던 중 version conflict라는 오류가 자주 발생했다. 처음에는 Elasticsearch 버전이 동일한데 왜? 오류가 나는지 몰랐다. 그래서 검색해보니 인덱스안에 document에는 각자 관리하는 version이 존재한다. 이 version은 document가 수정될 때 하나씩 올라가게 되는데 version이 10인 상태에 document에 여러 서버 모듈에서 해당 document에 업데이트를 하려고 하니 문제가 발생하였다. 그 이유는 version 10인 상태에서 작업에 들어간 두 모듈은 한 모듈이 먼저 11로 업데이트를 시키고 다음 모듈이 작업을 진행하려고 할 때 자기가 알고 있던 마지막 version인 10이 아니라 11로 바껴있는것..

    드롱기 반자동 커피머신기와 그라인더 구매

    직장을 다니기 시작하면서 커피를 엄청 마셨다. 하루에 최소 아메리카노 3잔은 마셨고 지금도 항상 마시고 있다. 그런데 저번 직장에서는 커피머신기가 있었지만 지금 다니는 직장에서는 커피머신기가 없고 심지어 있던 카누조차 보급해주지 않는다 ㅜㅜ 매우 실망스럽다. 그래서 회사에서 싸게 파는 위메프오를 통해서 커피를 천오백원정도 주고 사먹었으나 생각보다 3잔정도 먹으면 지출이 크기에 아쉬웠다. 또한 집에서도 자주 집에서 커피를 마시기에 직접 원두를 갈아서 내려 마실 수 있는 커피머신기를 구매했다. 가격은 위메프에서 쿠폰 할인 받아서 그라인더 7만원 드롱기 반자동 머신기 17만원에 구매했다. 이탈리아 전자제품이라고 하는데 몬가 보기만해도 고급지다. 이게 25만원정도 하는거보면 고급져야지 그럼 ㅋㅋㅋ 그라인더는 자..

    Elasticsearch reindex시 alias를 사용하여 무중단으로 진행하기 & big index 리인덱싱 시 비동기 처리 방법

    Elasticsearch reindex를 진행할 때, 단순하게 새로운 인덱스를 만들고 reindex api를 진행하고 기존 인덱스를 지우고 새로 만들어서 다시 reindex를 해줬다. (이전글: https://wedul.site/611?category=680504) 하지만 그것은 해당 인덱스의 document의 수가 적어서 금방 진행이 되었었고 만약 document수가 10만가지만 넘어도 생각보다 오래걸려서 서비스의 흐름이 끊어지게 된다는걸 인지하지 못했다. 같은 회사 동료분께서 해당 부분에 대해서 말씀해주셨고, 그 분이 가이드 해주신대로 진행해서 reindex를 무중단하게 진행하는 방법을 찾아봤다. Alias를 이용하여 reindex하기 기존 index wedul의 매핑구조이다. PUT wedul { ..

    Elasticsearch nori 형태소 분석기에서 readingform filter를 이용해서 한자 내용을 한글로 변환하기

    Elasticsearch filter에서 한자로 검색했을 때 일치하는 한글 결과로 tokenizing하게 해주는 filter가 있다. 해당 filter는 nori-readingform이다. 적용 방법은 기존에 synonmys나 speech필터 적용과 동일하다. 인덱스 생성 위에서 부터 사용했던 인덱스에 nori_readingform 필터를 추가해서 생성만 해주면 된다. PUT wedul_anaylyzer { "settings": { "index" : { "analysis" : { "tokenizer": { "nori_user_dict": { "type": "nori_tokenizer", "decompound_mode": "none", "user_dictionary": "dic/nori_userdict_k..

    Elasticsearch 특정 형태소 종류를 제외하여 검색하는 필터 nori_part_of_speech 적용

    Elasticsearch를 사용하여 analyze를 사용하다가 조사, 형용사 등등을 제외하고 형태소 토크나이즈가 되어야 했다. 그래서 정식 문서를 찾아보더니 nori_part_of_speech라는 필터가 있었다. 우선 저번 시간에 만들었던 wedul_analyzer 인덱스를 이용해서 토크나이즈를 해보자. { "tokens": [ { "token": "바보", "start_offset": 0, "end_offset": 2, "type": "word", "position": 0 }, { "token": "위들", "start_offset": 3, "end_offset": 5, "type": "word", "position": 1 }, { "token": "이", "start_offset": 5, "end_o..

    Elasticsearch에서 Dictionary 변경 시 analyzer와 인덱싱된 Document 갱신 방법

    Elasticsearch에서 Dictionary를 사용하여 analyzer를 만들고 그를 사용해서 index에 Document를 인덱싱할 수 있다. 근데 Dictionary가 변경되면 analyzer를 변경하고 indexing된 document를 갱신하려면 어떻게 해야하는지 정리해보자. Background 지식 Analyzer는 character filter, tokenizer, token filter 순서대로 적용한다. 기본적으로 anaylyzer는 indexing time과 search time에 적용된다. index time 분석 대상은 source data(원본 데이터)이고 search time 분석 대상은 query string이다. 그러므로 사전을 변경하는 것은 indexing, serchin..

    백준 4673번 셀프 넘버

    1 ~ 10000까지의 숫자중에 셀프 넘버가 아닌 데이터를 noSelfNumber에 집어넣고 loop를 순회하면서 selfNumber 여부를 체크하면 된다. 간단한 문제이다. https://www.acmicpc.net/problem/4673 4673번: 셀프 넘버 문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다..

    [번역] Elasticsearch 퍼포먼스 튜닝 방법 - ebay

    Elasticsearch에 대해 검색하다가 ebay에 퍼포먼스 튜닝방법에 대해 좋은 글이 있어서 간단하게 정리해봤다. 새롭게 알게된 사실이 많아서 좋았다. 정리 잘된 기술 블로그를 보는것은 책을 읽는거보다 훨씬 유익한 경우가 많은 것 같다. Elasticsearch 엘라스틱 서치는 아파치 루씬을 기반으로한 검색과 분석 엔진으로 데이터를 실시간에 가깝게 보여주고 분석해 준다. 실시간성으로 분석과 검색을 위해서 많이 사용되는 엘라스틱 서치의 퍼포먼스는 무엇보다 중요한데 이를 위한 퍼포먼스 튜닝방법을 정리해보자. 높은 엘라스틱서치의 퍼포먼스를 위해서는 많은 처리량, 낮은 검색 지연시간등이 요구된다. 고효율성 Elasticsearch를 위한 솔루션 - 효율 적인 인덱스 디자인 인덱스를 설계하다보면 하나의 인덱스..

    Elasticsearch template를 일별 index 구성하기

    Elasticsearch를 이용해서 로그기록을 많이한다. 일별 로그성 인덱스를 자동으로 만들기 위해 template를 사용해서 구성하는 법을 정리해보자. 우선 매일 새롭게 생성될 index에 대한 template를 생성해보자. template 생성 PUT _template/wedul_log_* { "index_patterns": [ "wedul_log_*" ], "mappings": { "_doc": { "dynamic": false, "properties": { "id": { "type": "integer" } } } } } 생성한 템플릿이 잘 만들어졌는지 확인해보자. 확인 GET template/wedul_log* 그럼 이제 wedul_log라는 대표 인덱스를 생성해주고 template에 맞는 일자별..

    Elasticsearch에서 reindex를 이용해서 매핑정보 변경하기

    Elasticsearch에서 index를 구성하다보면 매핑정보를 추가하거나 수정하고 싶을때가 있다. 내가 아는 내에서는 한번 생성된 index의 매핑정보를 변경하는건 어렵다. 그래서 reindex를 통해 index의 매핑정보를 변경해줘야한다. 우선 wedul_mapping이라는 인덱스가 있다고 해보자. 매핑 정보는 다음과 같다. PUT wedul_mapping { "mappings": { "_doc": { "dynamic": "false", "properties": { "id": { "type": "integer" }, "name": { "type": "text", "fields": { "keyword": { "type": "keyword" } } } } } } } 이때 name에서 keyword필드를 ..

    ffmpeg로 동영상 정보 추출 및 썸네일 가져오기

    ffmpeg로 동영상 정보 추출과 썸네일을 가져올 수 있다. 간단하게 설치하고 cli를 통해 진행해보자. 설치 우선 mac os인경우 brew install ffmpeg로 설치하고 linux인 경우 sudo apt-get install ffmpeg로 설치하면 되다. 동영상 정보 가져오기 (ffprobe) ffmpeg에서 ffprobe를 이용해서 동영상 정보를 추출 할 수 있다. print_format옵션을 사용하여 json 형태로 출력이 가능하다. 만약 프로그램에서 사용 시 node에서는 child_process를 이용해서 실행 수 결과를 받아서 사용하면 된다. ffprobe -v quiet -print_format json -show_format -show_streams wedul.mp4 썸네일 만들기..

    DDD. 응용서비스 코드 규칙과 트랜잭션 관리

    도메인 응용서비스 관련 내용을 진행하기 전에 도메인에 대해 간단하게 정리해보자. 응용서비스에서 가장많이 사용하게 되는 부분은 도메인이다. 도메인에서 담당하는 역할은 도메인 내부에 있어야한다. 특히 도메인의 데이터를 조작하는 경우에는 도메인을 사용하는 응용서비스 영역에 배치되게 되면 응용서비스 영역에서 사용할 때마다 중복코드가 발생할 간으성이 크다. (도메인 관련 validation 체크도 도메인 내부에서 진행하는 것을 추천) 응용서비스 응용서비스는 표현영역과 도메인 영역을 연결하는 매개체 역할을 하는데 이는 디자인 패터의 파사드(Fasade)패턴과 같다. 응용서비스의 크기 응용서비스는 보통 다음 두가지 방법 중 한가지 방식으로 구현한다. 1. 한 응용서비스 클래스에 회원 도메인의 모든 기능을 구현한다. ..

    DDD. 애거리루트 정리

    애그리거트는 관련된 객체를 하나의 군으로 묶어주는 것 으로 상위수준에서 모델을 조망하는 방법 중 하나이다. 애그리거트는 비슷한 속성을 가진 객체를 묶어놓은 것을 의미한다. 예를 들어 주문 시스템에 주문 관련 애그리거트는 Order, Receiver, OrderLine.. 등이 있고 회원정보에는 Member, MemberInfo등으로 나눌 수 있다. 각 애그리거트에 연관된 객체를 담고 있으며 유사하고 동일한 라이프 사이클을 보유하고 있다. 애거리거트 루트 애그리거트에서 가장 핵심이 되는 주체 즉, 애그리거트 전체를 관리하고 책임지는 주체를 애그리거트의 루트 엔티티라고 한다. 애그리거트내에 존재하는 모든 엔티티는 루트 엔티티와 직간접적으로 연결되어있다. 애거리거트 루트의 핵심 역할은 애거리거트의 일관성을 유..

    Redis Cluster mode에서 mget, mset, pipeline과 같은 멀티 키 명령어 사용하기.

    redis에 만약 200 ~ 300개가 넘는 캐시 정보를 계속 request를 날리면 레이턴시가 발생할 가능성이 크기 때문에 이런경우에 mget, mset, pipeline 등 멀티키 명령어를 사용한다. 하지만 redis가 single mode일 때는 아무 상관이 없지만 cluster mode인경우에는 다음과 같은 오류를 발생 시킨다. "CROSSSLOT Keys in request don't hash to the same slot" 무슨 오류일까?? 처음에 redis가 싱글모드로 돌고 있던 stage에서 테스트를 해서 정상적으로 멀티키 명령어가 잘 되는줄 알고 배포 했다가 라이브에서 위와 같은 오류가 발생했다... 너무 당황해서 바로 수정했다. 무엇이 문제 였을까? 하면서 문서를 찾아보니 redis에는..

    DDD. DIP 의존 역전 원칙

    서비스가 특정 시스템에 의존성을 가지게 되면 서비스 자체만으로 테스트 수행이 어렵고 종속되는 시스템에 따라 서비스의 코드가 지속적으로 변경될 여지가 있다. 이를 해결하기 위해서 DIP개념을 사용할 수 있다. DIP 제품의 할인율을 구하는 서비스가 있다고 가정해보자. 이 서비스는 의미 있는 단일 기능을 제공하는 고수준 모듈이다. 그리고 이 고수준 모듈의 기능 구현을 위해서 현재 가격과 할인 %등을 구하는 여러 하위 기능이 필요하다. 이때 이 기능들은 하위 기능을 실제로 구현한 저수준 모듈이라고 한다. 고수준 모듈이 저수준 모듈 여러개의 의존성을 가지게 된다면 테스트와 여러 기능 수정 때마다 변경이 생긴다. 그럼 이를 해결하기위해서는 저수준 모듈이 고수준 모듈을 의존하게 만들어야 하는데 이를 위해서는 추상화..

    DFS로 미로 탈출하기

    최단거리 알고리즘을 공부하면서 예전해 만들었었던 미로 찾기를 다시한번 해봤다. 초년생때 이런문제가 어려웠는데 다시해보니 크게 어렵지는 않은것 같다. DTO package dto; /** * Maze 블록의 정보를 보관하는 DTO * * @author rokki * */ public class MazeBlock { private int x; // x 좌표 private int y; // y 좌표 private int count; // 카운트 public MazeBlock(int x, int y, int count) { this.x = x; this.y = y; this.count = count; } public int getX() { return x; } public void setX(int x) { th..

    스위스 여행 루체른 (빈사의 사자상, 리기산, 카펠교)

    스위스 마지막날은 취리히였지만 취리히는 크게 머리에 남는게 없어서 기록은 하지 않기로 했다. 대신 그 전날이었던 루체른에 간 후기를 마지막으로 써본다. 인터라켄 동역에서 루체른 인터라켄 동역에서 루체른으로 가기위해서는 마찬가지로 SBB 어플을 사용했다. 루체른까지 한번에 가는 기차는 한시간에 한번씩 밖에 없다. 그래서 시간때를 잘 보고 선택해서 가야한다. 놓치면 또 기다려야 한다 ㅜㅜ 아니면 베른을 거쳐서 가는 방법이 있는걸로 아는데 번거롭고 시간도 오래걸리니 패스 생각보다 기차가 오래가기 때문에 지친다. 그리고 중간에 가는 방향이 한번 바뀌기 때문에 타이밍 봐서 반대로 앉아야한다. 안그러면 멀미난다. 루체른에서 리기산 가기 루체른역에서 내리면 엄청 크다는걸 느낄 수 있다. 거기서 내려서 정문으로 나오면..

    스위스 여행 인터라켄 여행 후기 (융프라우, 뮤렌 murren, 하더쿨룸 방문)

    여행 3일차가 되면서 인터라켄을 가기로 했다. 스위스하면 가장 먼저 떠오르는 경치 융프라우를 보기위해서 신혼여행 일정중 총 3일을 인터라켄에서 잡았다. 베른에서 인터라켄 서역으로 베른에서 인터라켄 서역으로 가기 위해서 처음과 마찬가지로 SBB 어플을 켰다. 인터라켄은 베른에서 한시간? 정도 걸린다. 열차를 타고 가다보면 옆쪽에 호수가 나오는데 멋지다. 왼쪽에 앉아서 가야 정확하게 볼 수 있다. 그런데 열차의 창문이 조금 더러워서 사진이 잘 안나온다 ㅜ 인터라켄 동역이나 서역이나 걸어서 15분 정도 거리고 그 가운데 사이에는 가게도 많고 사람도 많아서 구경하기 좋다. 융프라우 가기 전에 가기에 딱 좋다. 호텔은 메트로폴 폴리스라는 4성급 호텔에서 보는 경치가 정말 좋다. 예약은 인터파크에서 했는데 가격은 ..

    DDD. 도메인 주도 개발 시작

    도메인 모델 도메인 모델은 특정 도메인을 개념적으로 표현하는 것 도메인을 이해하려면 도메인이 제공하는 기능과 도메인의 주요 데이터 구성을 파악해야 한다. 도메인을 표한하는 방법은 Order, Ship, Pay와 같이 객체로 구별하는 방식과 상태에 따르게 방식이 진행되도록 설계하는 상태 다이어그램을 통해 모델링을 구현할 수 있다. 도메인 모델은 기본적으로 도메인 자체를 이해하기 위한 모델이다. 도메인 모델 일반적인 애플리케이션 아키텍쳐는 4단계 계층으로 구성된다. Layer 설명 UI 사용자에게 보여주는 정보 Application 사용자가 요청한 기능이 실행됨 도메인 시스템이 제공할 도메인의 규칙을 구현 Infrastructure 데이터베이스나 메시징 시스템과 같은 외부 시스템과의 연동을 처리 도출한 모델..

    더글라스 케네디, 데드 하트 후기

    데드 하트 국내도서 저자 : 더글라스 케네디(Douglas Kennedy) / 조동섭역 출판 : 밝은세상 2017.05.17 상세보기 더글라스 케네디 책은 내가 다 좋아한다. 자기발전 책이나 따분한 책은 읽지 않기에 흥미진진한 구도로 책을 쓰는 케네디 책을 내가 좋아하는 것 같다. 그래서 가장 마지막으로 나온 책 데드하트를 이북 리더기 크레마 사운드 구매한 기념으로 사서 읽어보았다. 책 리뷰 데드하트에 나오는 주인공은 책에서 양키라고 불린다. (간단하게 아래에서도 양키라고 명칭하겠다.) 양키는 아무하고도 인연을 맺지 않고 인터넷 기사를 쓰면서 따분하게 살아가는 기자였다. 그는 이제 따분함을 느끼고 기자를 그만두고 오스트리아에 있는 작은 신문회사에 기사로 취업을 하기로 했고 모든 재산을 팔고 오스트리아로 ..

    스위스 여행 둘째날 베른 수도 여행 후기 (스위스 flex 티켓 개시)

    스위스 여행 둘 째날 베른으로 이동하기 위해서 숙소에서 새벽 6섯시에 나왔다. 숙소 바로 앞에 768번 버스가 있어서 4정거장 타고 종점인 공항으로 갔다. 스위스 패스가 있으면 무료인데 몰라서 호텔 카운터에서 버스 티켓을 구매했다 가격은 둘이해서 8.8프랑 한국돈으로 하면 만원정도 였다. ㅋㅋㅋ 완전 비싸다. 스위스 flex 패스를 사용하여 베른 가기 공항에 도착해서 스위스 패스를 이용하기 위해서 스위스 flex 패스를 개시했다. 패스는 위메프에서 구매했다. 딜이 있어서 여기서 구매하면 저렴하게 구매할 수 있다. http://www.wemakeprice.com/deal/adeal/4240974 일반적인 스위스 패스는 연속적인 날짜로 사용할 수 있고 flex는 비 연속적으로 사용하고자 하는 경우에 좋다. ..

    스위스 여행 첫째날 LOT 폴란드 항공타고 입국 후 dormero hotel zurich 숙박 후기

    결혼식이 끝나고 다음날 드디어 스위스로 신혼여행을 떠나게 되었다. 환전 금액은 190만원 정도 해서 1700프랑 했다. 그리고 비행기는 LOT 폴란드 항공을 이용하고 폴란드를 경유해서 스위스 취리히로 도착하는 항공권이었다. 폴란드 LOT 항공 체크인 처음으로 유럽을 가는데 잘 모르는 외국 항공사를 타야해서 떨렸다. 그래서 공항에 3시간전에 도착했다. 체크인 하는 곳은 매일 매일 바뀌는 거같은데 나는 1터미널 M쪽 카운터에 있었다. 웹 체크인을 통해서 자리를 먼저 정해놓았기 때문에 WEB-CHECKIN 영역으로 바로 갔다. 그래서 짐을 부치고 발권하는데 10분? 정도 밖에 걸리지 않았다. 좌석을 지정하지 않으면 여행중 동승자와 떨어져서 가야하는 문제가 생길수있어서 먼저 웹 체크인했다. LOT 항공은 boa..

    취리히 중앙역 애플스토어에서 에어팟2구매 후기 및 개봉기

    신혼여행중 여행 마지막날 생일이었다. 그래서 와이프가 가지고 싶은 물건을 물어봤고 나는 당당히 에어팟2를 이야기했다. 무리해서 환전을 많이해서 40만원정도 남은 상태여서 와이프가 승낙해줬다. 마침 취리히 여행중이었고 근처에 애플스토어가 있어서 방문했다. ​ 주소는 Apple Bahnhofstrasse 이고 취리히 중앙역 걸어서 5분거리에 위치해 있다. 제품을 고르고 있으면 친절하게 직원이 언어를 물어본다. 영어라고 이야기하면 영어로 설명을 해주고 제품을 고른뒤에 찾아가면 결재해준다. ​ 에어팟 2와 정품 실리콘 케이스와 가죽케이스를 구매했다. 다해서 한국돈으로 34만원정도 들었다. 마지막날 프랑을 다 소진했다. ​ 에어팟2의 외관은 크게 달라지지 않았다. 단지 무선충전 지원과 빠른 연결 그리고 아래 사진..

    크레마 사운드(sound) 개봉 및 사용기

    생일이 돌아왔다. 생일선물로 어떠한 것도 받고 싶은게 없었지만 그래도 하나 꼽자면 출퇴근시 가지고 다닐 이북 리더기를 가지고 싶었다. 휴대폰으로 이북을 자주보고 있었지만 아무래도 눈이 너무 피로해져서 금방 보지 않게되었다. 화면도 작고 자꾸 다른 메시지나 인터넷 유혹에 벗어나지 못해서도 있었다 ㅋㅋㅋ 그래서 여자친구와 같이 잠실에 알라딘을 방문하여 크레마 사운드를 샀다. 크레마 그랑데도 있었지만 굳이 10만원 더주고 비싼걸 사고 싶지 않았다. 두 개의 큰 차이도 없을 뿐더러 더 무겁다. 굉장히 고급진 포장을 하고 있다. 몬가 지식인이 된 기분 ㅋㅋ 알라딘에서 구매 시 친절하게 문제가 있을 시 다음과 같이 조치하라고 안내해주셨다. 기기가 조금 오래되서 그런지 안드로이드 업데이트와 내부에 있는 이북 리더 어..

    sony 액션캠 FDR-X3000 구매 개봉기

    결혼식 진행할때 특별하게 비디오를 찰영하지 않기로했다. 잘 보지 않을것 같고 가격도 30만원이 넘어서 안하기로 했는데 아쉬운 마음이 들었다. 그래서 고프로 같은 액션캠을 구매하여 웨딩촬영으로 사용하고 스위스 신혼여행 가서도 사용하기로 했다. 고프로를 사려고 스타필드를 방문했다. 스타필드에서 카메라 담당자분에게 설명을 들었는데 최근에 나온 고프로 히어로7도 sony fdr-x3000보다 손떨림이 더 나아지지는 않았다고 하였다. 그리고 고프로에 경우에 이쁘지 않다는 여자친구 피셜로 인해 구매가 보류되었다. 그래서 결정하게된 소니 액션캠 FDR-X3000 가격은 리모트, 방수 케이스, 정품 셀카봉, 여분 배터리까지해서 쿠팡에서 56만원에 주고 구매했다. 내 돈주고 카메라를 이렇게 비싸게 사다니 후회는 조금 들..

    Elasticsearch에서 synonyms.txt로 동의어 필터 만들어서 사용하기

    elasticsearch에서 검색기능을 넣다가 2080이라는 키워드를 검색 했을때와 이공팔공이라는 검색어를 입력했을 때 두개 모두 동일한 데이터를 출력하도록 지정하고 싶었다. 그래서 synonyms 필터를 만들기로 했다. 우선 synonyms 필터를 만들어서 사용하기 위해서는 동의어에 대한 정리가 되어있는 사전을 만들어야 한다. 사전 생성 방법은 다음과 같고 아래 링크를 참조해서 간단하게 사전을 만들었다. https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-synonym-tokenfilter.html 파일명은 synonyms.txt이고 내용은 다음과 같다. synonyms.txt 노레바,noreva,노래바 airpods,에어팟..