반응형

nodejs 17

Nodejs 로 현재 환율 정보 확인 코드 만들기

유료 API 사이트에서 무료 플랜을 이용한 방법과 웹 사이트에서 크롤링하는 두 가지 방법을 정리해 보았습니다. 웹 사이트에서 크롤링 하기 우리은행 사이트 spot.wooribank.com/pot/Dream?withyou=FXXRT0021 에 USD, JPY, EUR 정보가 공유되어 있습니다. 사용자들의 웹 사이트에 무료로 공개할 수 있게 지원해주는 정보인데, 여기서 필요한 정보만 추출해 보았습니다. 저의 주 거래은행은 우리은행입니다. ^^ (환율 변동이 일반적인 상황에서는 크지 않으므로 해당 사이트에 부하를 주지 않기 위해 하루에 한번만 검색해서 저장 후 사용하실 것을 적극 권장드립니다.) 해당 사이트의 html 코드를 가져오기 위해 axios를, DOM Selector로 Cheerio를 사용합니다. h..

AWS SDK(cpp/c#/js) - Kinesis에 데이터 전송하고 Logstash로 받기

이전에 SQS로 데이터를 보내는 방법을 기록해 보았는데, 이번에는 유사한 kinesis로 데이터를 보내는 과정을 살펴보겠습니다. SQS는 Queue 서비스로 Application 통합, 분산 시스템 연계에 적합하며, Kinesis는 로그, 스트림 데이터 등의 실시간 분석, 전송 목적에 적합합니다. Kinesis Data Streams 생성 데이터 스트림 중 Kinesis Data Streams를 선택 후 생성을 합니다. 저는 어플리케이션의 로그를 전송하고 추후 이를 logstash로 가져와 별도 구축된 Elasticsearch에 저장하기 위해 사용하기 때문에 Kinesis Data Streams를 사용합니다. 생성할 스트림 이름은 "test_stream"으로 명명합니다. 데이터 스트림 용량을 설정할 때 ..

NodeJS에서 Google SpreadSheet에 접속하기

json, 별도 포멧의 파일에 데이터를 입력하고 사용하려면 데이터 가공 및 배포에 대한 허들이 발생합니다. 트래픽이 많이 발생하지 않는다면 spreadsheet에서 데이터를 일괄 관리하고, 필요한 곳에서 spreadsheet 접속하여 갱신된 최신 데이터를 가져와 사용한다면 데이터 가공/배포에 대한 비용을 극적으로 줄일 수 있습니다. 모듈은 google-spreadsheet를 사용하여 Google Spread Sheet API를 사용하며, document는 theoephraim.github.io/node-google-spreadsheet/#/ 를 참고하시면 됩니다. API 사용을 위해서는 console.developers.google.com/에서 API 사용 허가를 설정해야 합니다. sheet 사용을 위한..

pm2 모듈을 부트 스크립트에 등록하는 방법

일반적으로 시스템 부팅 후 자동으로 시작되도록 서비스를 등록할 때 systemctl 혹은 init.d 스크립트 등록하여 사용합니다. systemctl 혹은 init.d 스크립트를 등록하는 방법이 쉽지많은 않으며, 혹시 해당 서비스에 문제가 발생할 경우 서비스가 다운되면 다시 시작되지 않는 문제도 있습니다. 이를 해결하기 위해 upstart 같은 프로그램을 사용하여 간단히 해결할 수 있습니다. 하지만 이마저도 각 서비스 별로 별도 등록, 관리해야 합니다. 만약 당신이 pm2를 사용하여 Node.js로 제작된 서비스를 관리하고 있다면 위의 모든 문제를 손쉽게 해결할 수 있습니다. pm2에 서비스를 등록, 중단, 삭제하는 방법은 아래와 같이 간단합니다. pm2 start your_app.js >> 서비스 등록..

서버리스 서비스 예제 - 02 [ API Gateway - Lambda-DynamoDB ]

DynamoDB에 대해서 내용은 이 링크를 꼭 한번 읽어보시길 권유 드립니다. 이 예제에서는 1:1 모델링에 적합한, 전달될 유저 ID를 분할키로 사용하고, info라는 키에 name과 phone 정보를 담아보겠습니다. DynamoDB에서 "test_db"라는 이름으로 테이블을 먼저 생성해 보겠습니다. 그리고 분할키의 이름은 "key"로 지정하겠습니다. 분할키에는 전달될 유저 ID를 지정하겠습니다. 정렬키도 별도로 추가하지 않겠습니다. 생성이 완료되었으면 바로 람다 함수를 추가해 보겠습니다. 함수명을 "save"라는 이름으로 생성합니다. aws-sdk 모듈은 바로 사용 가능해서, 아래 코드를 붙여서 바로 테스트 가능합니다. var AWS = require("aws-sdk"); AWS.config.upda..

logstash tcp로 데이터 전송 시 손실없는 데이터 전달 흐름 설계

비지니스 로직에서 logstash로 tcp를 바로 데이터를 전송한다면 아래와 같은 흐름으로 설계가 될 것입니다. 이 경우 logstash 혹은 elasticsearch에 문제가 있을 경우 바로 데이터 손실이 발생할 수 있습니다. logstash와 elasticsearch의 문제 발생 혹은 점검 중 데이터 손실이 발생하지 않도록 전송할 데이터를 일시적으로 혹은 일정 기간 동안 보관했다가 logstash와 elasticsearch가 정상화 되었을 때 다시 전달할 수 있도록 아래와 같이 만들어 보겠습니다. 임시 저장소로는 Redis를 사용하고, 데이터 전송 흐름을 제어하기 위해 nodejs로 간단한 agent를 만들어 사용해 보겠습니다. 전달받은 로그는 모두 JSON 포멧의 텍스트로 가정합니다. const h..

Collo - slideshare 링크 공유

Collo를 좀 더 알기쉽게 전달하기 위해 개요 및 샘플들을 제작하여 SlideShare에 공유 중입니다. 이 글에서도 링크를 추가하여 계속 업데이트 하도록 하겠습니다. https://www.slideshare.net/winninghabit/collo-01-kr Collo -01 , kr Collo를 소개합니다! https://github.com/blackwitch/Collo www.slideshare.net https://www.slideshare.net/winninghabit/collo-02-kr 불러오는 중입니다...

Collo - 실시간 마이그레이션 툴

한동안 회사에서 진행한 Data Warehouse(이하 DW) 및 통계시스템 구축이 최근 완료되었습니다. 그리고 데이타를 저장한 Database(이하 DB) 종류, 저장된 로그의 파일 포멧 그리고 서버 위치도 다른 데이터들을 한 곳으로 손쉽게 모으기 위해 만들었던 천 줄 내외의 Javascript 코드를 정리해서 Collo라는 이름으로 github에 며칠 전 공개하게 되었습니다. Collo의 주 목표는 실시간으로 누적되는 데이터를 해당 시스템의 부하없이 DW로 가져오는 것이었으며, 마이그레이션에 대한 모든 기능을 포함한 솔루션이 아닌 손쉽게 수정, 조작 가능한 작은 유틸리티 제작을 목표로 한 프로젝트였습니다. 그리고 데이타를 가져오는 성능 보다는 안정성에 더 중점을 두어 제작하였습니다. 그리고 유지보수를..

자주 사용하는 시간 관련 코드들

자주 사용하는 기능들 모아서 정리한 코드입니다. 필요하신 분들은 가져다 그대로 사용하시면 됩니다. Date.prototype.mmddyyyy = function() { return (this.getMonth() + 1) + "/" + this.padZero(this.getDate()) + "/" + this.padZero(this.getFullYear());};Date.prototype.yyyymmdd = function() { return this.getFullYear() + "/" + this.padZero((this.getMonth() + 1)) + "/" + this.padZero(this.getDate());};Date.prototype.mmddyyyytime = function(){ retur..

Elasticsearch를 Node.js에 통합하기

다음과 같은 순서로 작성되어 있습니다. 1. 개요 2. 준비 3. 쿼리 알아보기 4. nodejs와 통합 5. chart로 표현하기 1. 개요 최근 회사에 Elasticsearch(이하 ES)로 통계 시스템을 구축했습니다. Mysql MyISAM 엔진으로 구축하던 것과 비교해보면 엄청나게 편리해졌네요. Kibana로 쿼리하고 결과를 손쉽게 출력하여 담당자가 아닌 컨텐츠 개발자도 자신이 보고 싶은 결과를 바로 추가하여 볼 수 있을 정도니, 작은 개발사에는 이보다 더 좋은 솔루션이 있을까 싶네요. 그런데 ES에서 나온 다른 두 결과의 비교가 필요한 경우 불가능한 경우가 있어서 조금 아쉽더군요. 그래서 이를 직접 만들어 보기로 했습니다. 시간을 기준으로 데이터를 비교하는 경우는 timelion을 사용하면 되나..

반응형