소프트웨어개발 이야기
-
Logstash Date Filter와 Timezone소프트웨어개발 이야기 2020. 5. 7. 10:37
Logstash에서 ElasticSearch로 데이터를 저장할 때 날짜 필드의 Timezone이 항상 헷갈린다. 특히 저장된 데이터를 Kibana를 통해 시각화할 때 이 부분이 제대로 정리 안되어 있으면 골치 아픈 상황이 발생하기 때문에 명확히 정리하고 넘어가자. Logstash에는 날짜 필드를 설정해주는 Date 필터가 존재한다. Date 필터는 원본 날짜 데이터를 파싱하기 위해 Timezone, Locale 속성을 제공한다. Date 필터는 원본 날짜 데이터를 Timezone, Locale 파라미터를 사용하여 분석하고 이를 ElasticSearch에 전달하면 UTC 기준으로 날짜 데이터가 저장된다. Kibana에서는 UTC 기준으로 저장된 데이터를 어떤 타임존으로 변환해서 보여줄지 설정(설정-고급설정..
-
Logstash에서 REST API 연동하기소프트웨어개발 이야기 2020. 4. 28. 16:35
Logstash에서 REST API를 연동하여 데이터를 수집하는 방법을 정리한다. Logstash에서 REST API를 연동하기 위해서는 http_poller 플러그인을 사용한다. 라고 되어있지만... 막상 사용해 보면 생각보다 제약조건이 많기 때문에 제대로 된 REST API 데이터 수집이 불가하다. 이는 input 플러그인에서 특정 정보를 동적으로 변경하는 것이 어렵기 때문이다.(불가한 건 아니지만 배보다 배꼽이 더 크다;;) 가령, 일자별로 미세먼지 정보를 제공하는 API가 있다고 가정하자. http_poller에서 해당 API를 사용하기 위해서는 파라미터로 일자 정보를 설정해줘야 한다. 고정된 날짜 정보를 설정해주는 건 가능하지만 오늘 날짜를 가져와서 파라미터로 설정하는 건 현재 버전의 logst..
-
Logstash에서 DB(MySQL, Maria) 연동하기소프트웨어개발 이야기 2020. 4. 24. 10:08
Logstash에서 DB(MySQL, Maria)를 연동하여 데이터를 수집하는 방법을 정리한다. Logstash에서 DB를 연동하기 위해서는 jdbc input 플러그인을 사용한다. 플러그인 속성은 다음과 같다. input { jdbc { jdbc_driver_library => "/elasticstack/logstash-7.6.1/lib/mysql-connector-java-8.0.19.jar" jdbc_driver_class => "com.mysql.cj.jdbc.Driver" jdbc_connection_string => "jdbc:mysql://192.0.0.1:3306/db" jdbc_user => "userid" jdbc_password => "userpass" tracking_column =..
-
Maria DB (MySQL 포함) 이모지 입력 버그 해결소프트웨어개발 이야기 2020. 4. 21. 16:27
최근 커뮤니티 데이터 수집 프로젝트를 진행 중인데, 사용자가 작성한 내용을 DB에 입력하는 부분에서 에러가 종종 발생했다. 원인을 파악해 보니, 이모지(emoji) 문자열을 DB에 입력하면서 문자셋(Charset)이 맞지 않아 발생하는 이슈였다. 2000년대 초반, PC 통신에서 인터넷으로 넘어가던 시대의 "한글 깨짐"을 경험한 개발자에겐 데자뷰같은 기분이다. 로그 파일에서는 아래와 같은 에러 메세지를 확인할 수 있다. mysql> ERROR 1366 (HY000) : incorrect string value : ''\xED\x95\xB0...' for column 'content' at row 1 필드에 적합하지 않은 데이터의 입력 때문에 발생하며, 1366 에러 코드를 출력한다. 4바이트로 구성된 이..
-
유튜브(Youtube) API - 12. 할당량 최적화소프트웨어개발 이야기 2020. 4. 17. 11:25
오늘은 할당량(Quota) 이야기를 해 볼까 한다. 유튜브(Youtube) API - 3.API 살펴보기 글에서 할당량과 최적화의 필요에 대해 간단히 다룬 바 있다. 할당량이란 API 남용을 막고 자원을 관리하기 위해 구글에서 제시하고 있는 제약조건이다. 초기 학습단계에서는 크게 문제가 되지 않지만, 본격적으로 개발을 하고 실서비스를 하기 시작하면 꽤나 골칫거리가 된다. (C언어 시절부터 메모리를 관리하던 시니어 개발자에게는 너무나 당연한 일 같이 느껴 지질지도. -_ -) 당장 구글에서 "유튜브 API 할당량"으로 검색해보면 "할당량 어떻게 늘리느냐"라는 글을 많이 볼 수 있다. 글에서 개발자의 고충이 느껴지지 않는가?! 필자가 작성한 글을 포함해서 대부분의 글에서는 할당량 한도 향상을 신청받는 유튜브..
-
Kibana 실행 에러 해결방법 (elasticsearch all shards failed)소프트웨어개발 이야기 2020. 4. 16. 16:27
로컬에서 잘 돌아가던 Kibana가 구동 시 에러를 표시하면서 정상적으로 실행되지 않는 문제가 발생했다. "ElasticSearch All Shards Failed" 개발 워크스테이션이 비정상 동작하면서 강제 리부팅이 된 이후로 이런 문제가 발생했는데, 아무래도 강제 리부팅을 하면서 ElasticSearch 샤드에 문제가 생긴것 같았다. (설정 파일을 수정하거나 시스템 설정을 변경한 내역이 전혀 없었으니..) 무한 재실행으로 해결되지 않음을 깨닫고 -0-.. 원인을 파악해 보기로 했다. 1. ElasticSearch 확인 ElasticSearch가 모두 문제가 있는건 아니었다. http://localhost:9200 요청에는 정상적으로 정보를 반환했다. { "name": "PINKGOM-PC", "clu..
-
유튜브(Youtube) API - 11. Search소프트웨어개발 이야기 2020. 3. 11. 16:28
유튜브 데이터 API 뜯어보기 - 검색 본글에서는 Data API의 검색(Search) 기능을 시나리오 기반으로 사용해보고 결과를 확인해 보도록 하겠다. 검색 API 답게 지원하는 기능도 한 가지밖에 없다. Search > 검색 목록 조회 Search API를 통해서 동영상, 채널, 재생목록의 목록을 조회할 수 있다. 그런데 여기서 궁금한 점이 하나 생긴다. 지금까지 동영상 조회, 채널 조회, 재생목록 조회가 각각(Videos, Channels, Playlists)의 API를 통해서 가능하다고 설명했는데, 굳이 왜 Search API를 별도로 제공하는 걸까?! 정답부터 말하자면, Search API는 검색을 위한 별도의 파라미터를 제공하기 때문이다. 예를 들어, "MBCNEWS" 채널에서 조회수가 가장 ..
-
구글 AdSense 그리고 티스토리소프트웨어개발 이야기 2020. 3. 9. 18:49
티스토리로 블로그를 이사하면서, 해보고 싶었던 것 중 하나가 수익화였다. 시간을 들여 작성한 글들이 다양한 검색엔진을 통해 노출이 되고 가치를 인정받아 수익화로 연결되는 일련의 과정을 직접 경험해 보고 싶었다. 전문적인 블로거가 돼서 수익을 많이 올려보겠다가 아니라(블로그 소재의 특성상 그렇게 하고 싶어도 못한다. 뭐 그보다도 글 실력이 안 되는 게 더 문제이긴 하지만 -.-;) 이런 수익화 모델이 정말 현실적으로 가능한가에 대한 의구심이랄까?! 무튼, 그래서 티스토리로 이사하면서 가장 대중적인 구글 애드센스를 신청했다. 기존에 미디엄과 브런치에 있던 글들을 티스토리로 옮겼기 때문에 포스팅은 어느 정도 있는 상태였고, 내용도 꽤나 긴 글이 여럿 있었기 때문에 승인에 큰 문제는 없을 거라 생각했다. "거절..