본문 바로가기

Programing/Node.js

(21)
[AWS lambda] 데이터 클린징에서 배운 내용 팀 이동을 하면서 이전에 개인정보 정리를 위한 데이터 클린징 작업을 했다. 클린징 메인 로직은 Java로 구성을 하고 트리거는 AWS lambda에서 node.js 스크립트를 구성하여 동작하게 했다. 날짜 자바스크립트 진영에서는 이미 Moment.js 가 표준으로 자리잡은 것 같다. ( 2020-11-04 성준님이 요즘 대새는 Day.js 라고 한다. 참고로 footprint가 moment.js 대비 1/33 이다.) 하지만 아쉽게도 해당 서드파티라이브러리를 이용하려면 해당 패키지를 함수 코드에 추가를 해야한다. 의존성 관리(예. 의존성 모듈 업로드) 등의 부가적인 작업을 해주어야 해서 일단 빠르게 만들어야 해서 Vanilla JS 로만 작성을 하기로 결정했다. 클린징을 위해서는 몇 일전 날짜를 구하는 ..
[node] 코드리뷰를 통한 코드의 발전(falsy) 2020-04-28일에 작성한 http 모듈과 express에서 헤더과 관련된 글이다. 코드리뷰와 1차 피드백 외부에서 넘겨 받은 헤더를 이용한 request 객체에 프로퍼티 추가에 대한 작업은 아래와 같은 형태였다. Java를 주로 해서 그런지 타입에 대한 엄격한(strict)검사의 코드로 구성했다. const uuid = require('node-uuid'); const injectTransactionId = (req, res, next) => { const xTraceId = req.header('X-Trace-Id'); if (typeof xTraceId === 'string' && xTraceId.length > 0) { req.id = xTraceId; next(); } else { req.i..
[node] http 모듈과 express에서 헤더 RFC 스펙에서 HTTP 헤더의 이름은 대소문자를 구별하지 않는 것으로 되어 있다. 따라서 특정 헤더의 값을 가져올 때 구현체에 따라 주의를 기울여야 한다. 에를 들어 node.js의 http 모듈에서는 내부적으로 소문자로 바꾸어서 저장을 한다. 심지어 클라이언트가 대문자를 넣어서 보낸 경우에도 소문자로 저장을 한다. 만약 시스템간 Correlation ID의 연동을 위해 헤더에 X-Trace-Id 라는 값을 넣기도 한다. 만약 headers['X-Trace-Id']으로 조회를 했다면 undefined 를 얻을 가능성이 있다. express에서 내부적으로 node의 http 모듈을 사용하고 있기에 동일하다. 만약 request 객체의 headers를 이용한다면 아래와 같이 모든 소문자로 조회를 해야 한다..
일주일이 지난 로그파일 정리 하기 로그 파일 서버를 운영하다보면 로그파일이 지속적으로 쌓입니다. 트래픽이 많은 로그 파일이라면 로그파일 역시 용량이 클 것이고 Disk 자원에 부담이 될 것입니다. 로그 파일을 정리하는 수행하는 간단한 애플리케이션을 만들어보겠습니다. 만약 cron 등 스케쥴링을 할 수 있는 시스템을 같이 이용하면 배치처리에 범주로 볼 수 있을 것 같습니다. (우겨봅....세) 첫 번째 코드 스프링 배치 같은 것을 사용할 수 있겠지만 단순히 하기 위해 node.js 를 사용합니다. JavaScript의 date 라이브러리는 Java Date 처럼 악명이 높기 때문에 moment.js 라는 라이브러리를 사용하겠습니다. 앞으로 나오는 코드를 실행하려면 먼저 아래 명령으로 moment.js 를 추가가 필요합니다. npm inst..
[JavaScript] Promise와 예외 핸들러... 어제 자바스크립트 관련 코드 리뷰를 하게 되다가 알게된 것 정리.1. Promise로 구현된 함수를 await으로 호출 된 경우 reject가 된 경우 try ~ catch에 잡힌다.2.Promise로 구현된 함수를 그냥 호출 한 경우 함수 내부에서 reject가 된 경우 try ~ catch에 잡히지 않는다. 무슨 소리지 할 케이스가 다분해서 예제를 적어본다. await를 사용하여 호출아래와 같이 foo와 boo 함수가 있고 제일 끝에 boo 호출한다.var foo = req => new Promise((resolve, reject) => { console.log('req: ' + req); reject(new Error('wow'));}); async function boo(req, res) { tr..
블랙박스 영상 - 생성시간 파일명과 싱크하기 블랙박스 파일을 이리저리 복사하다 보니 생성일이 복사한 시간으로 바뀌어버렸다.구글 포토는 exif과 같은 메타 파일이 없는 경우에 파일의 생성일을 기준으로 날짜를 판단한다. 그래서 동영상 파일과 같은 경우에 생성 시간이 중요하다.블랙박스 파일의 경우 생성시간이 파일명으로 되어 있기 때문에 touch명령을 이용하여 생성일을 맞출 수가 있다.$ touch -a -m -t 201809241010.18 REC2_20180924_101018.avi다만 수작업으로 하기에 파일이 많으면 시간이 많이 걸리기 때문에 node.js로 스크립트를 만들었다. const fs = require('fs');const targetFileRegex = /.{4}_(\d{8})_(\d{4})(\d{2}).avi/;const exec ..
node.js 뼈대(skeleton) - 템플릿(template) C언어를 배우면 IDE가 기본적으로 만들어주는 골격이 있다.혹자는 템플릿(template)라고도 하는데 int main(int argc, char **argv) 같은 것을 말한다. node.js에서 스크립트 처리를 할 때, 표준입출력(stdio)를 이용한 처리를 하는 경우가 있어서 템플릿을 만들었다.자주 쓸 테니 바퀴의 발명을 할 필요는 없으므로... 라인에서 특정 값을 뽑아내는 샘플 프로그램이다. http://namocom.tistory.com/538 랑 유사하다. tokenize.jsconst readline = require('readline').createInterface({terminal: false, input: process.stdin}); readline.on('line', function..
python 뼈대(skeleton) C언어를 배우면 IDE가 기본적으로 만들어주는 골격이 있다.혹자는 템플릿(template)라고도 하는데 int main(int argc, char **argv) 같은 것을 말한다. node.js에서 스크립트 처리를 할 때, 표준입출력(stdio)를 이용한 처리를 하는 경우가 있어서 템플릿을 만들었다.자주 쓸 테니 바퀴의 발명을 할 필요는 없으므로... 라인에서 특정 값을 뽑아내는 샘플 프로그램이다. tokenize.pyimport sys token = 'my:value:'def extractMemberSrl(line):which = line.rfind(token) + len(token)return line[which:] line = sys.stdin.readline()while line: print ex..