자꾸 포스팅을 섞어서 하게 됩니다. 원래 계획은 집에서는 비트코인 코어를 회사 점심시간과 잠깐 잠깐의 휴식시간엔 다른 개발 포스팅을 그리고 문득문득 생각나는 일상 글들을... 이렇게 3개 테마를 가지고 쭈욱 가려고 했지요.
그런데 요즘 집에서는 거의 포스팅을 할수가 없네요. 오늘은 이 nodejs 프로젝트에 로깅처리 부분과 DB 연동 부분을 해보겠습니다. 빨리 만들고 싶나요?
원래 밥도 배고플때까지 기다렸다가 먹어야 맛있고, 응가도... ㅋㅋ 자 계속해서 설정을 시작해봅시다.
로깅을 적용해야만 특정 예외상황이나 프로그램의 실행중인 내용에 대해 로그를 남겨 나중에 문제가 생겼을 때 그 기록을 보고 추적하여 해결 할 수 있겠죠?
로깅 요구조건은 단순합니다.
첫번째. winston과 winston-daily-rotate-file를 설치합니다.
npm install winston --save
npm install winston-daily-rotate-file --save
두번째. app.js 내 첫 부분에 아래 내용 추가
// winston log init!
var winston = require('winston');
require('winston-daily-rotate-file');
const tsFormat = () => (new Date()).toLocaleTimeString();
var logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({ timestamp: tsFormat }),
new (winston.transports.DailyRotateFile)({
// filename property 지정
name : 'log'
, filename: '/log/log.log'
, datePattern: '.yyyy-MM-dd'
, prepend: false
, timestamp: tsFormat
, level: 'info'
, json:false
}),
new (winston.transports.DailyRotateFile)({
name : 'error_log'
, filename: '/log/error.log'
, datePattern: '.yyyy-MM-dd'
, prepend: false
, timestamp: tsFormat
, level : 'error'
, json:false
})
]
});
logger.log('info', 'log!!!');
logger.info('info');
logger.error('error logs');
// winston log init end.
이제 'console.log' 대신 logger.debug, info, error 등을 이용해서 로그를 남기면 파일에 기록되어 쉽게 이슈를 찾아 수정하거나 대응할 수 있게 되었습니다.
파일에 남겨진 로그.
DB연동을 많이 할것이라고 보이진 않지만 봇이 작동하는데 대해서 보팅을 해야할 계정에 대한 화이트리스트와 하지 말아야할 블랙 리스트를 관리한다거나 스팀 블럭체인을 읽어들였던 블록 ID값을 저장한다던지에 대한 몇몇의 기록을 하는데 아주 심플한 DB가 있으면 좋을 것 같습니다.
ludorum님이 leveldb를 추천해주셨지만 그냥 익숙하고 마니 쓰는 mysql로 해보겠습니다. ㅋㅋ
https://dev.mysql.com/downloads/
세계에서 가장 유명하다고 하잖습니까. ㅋㅋ
1. 다운로드부터 시작
여기서 다운로드를 클릭!
중간에 오라클 로그인이 있으니 회원가입을 하고 다운받읍시다. 64bit, 32bit 구분해서요. 저는 예시로 하는 PC가 32bit 이므로 mysql-5.7.21-win32.zip을 받았습니다.
2. Path를 등록!
용량이 생각보다 크네요. 다운로드가 완료되면 적당한 곳에 압축을 풉니다. 그 다음 경로를 등록해봅시다. 그 다음 mysql을 시작해봅시다. 편리하게 작업하기 위해 path에 등록해놓으면 편리합니다. Win key + Pause를 누르면 시스템 속성이 뜨고 고급 → 시스템 변수 → 새로 만들기
그리고 Path 값에 ;%MYSQL%; 을 추가합니다.
그리고 시작을 하면... 이렇게 에러가 나는데...
D:\develop\mysql-5.7.21-win32\bin>mysqld
mysqld: Can't change dir to 'D:\develop\mysql-5.7.21-win32\data\' (Errcode: 2 -
No such file or directory)
저 곳에 'data'폴더를 생성하고
3. mysql 초기화 작업
cmd 창을 통해 'mysqld --initialize --console' 를 먼저 시작해줍니다.여기서 초기화가 되면서 임시 패스워드가 나오니 꼭 다른곳에 저장해야합니다.
4. mysqld --install 로 mysql을 설치한다.
5. mysql 서비스 시작
그리고 관리도구의 서비스를 보면 mysql이 되어있으니 '시작'을 눌러 서비스를 시작해준다!
6. mysql 서비스 포트 확인
서비스를 시작했으니 cmd 창에서 netstat -an | more로 3306 포트가 열려있으면 서비스가 정상 시작되었다고 생각하면 될듯 하다.
7. mysql 접속 및 계정 생성과 권한 부여
이제 접속을 해보자. cmd 창에서 mysql -u root -p를 입력하고 아까 5번에서 튀어나온 임시 비번으로 로그인하면 된다.
Enter password: ************
그담 root 비번을 바꾸면 되는데. 아래 스크립트로 바꾸면 된다.
set password = password('변경할비밀번호');
언제나 mysql은 그렇듯... show databases;로 한번 날려본다.
그담은 nodejs에서 사용할 영역을 만들어줘야 합니다. 음... steem_nhj 로 하겠습니다. ㅋㅋㅋ create database steem_nhj
새로운 계정을 만들어봅니다.
create user 'steem_nhj'@'localhost' identified by '비번';
이제 계정에 권한을 주고...
grant all privileges on steem_nhj.* to 'steem_nhj'@'localhost' ;
새로운 계정으로 접속을 해봅니다. 아까 만든 비번으로 접속하면 되구요.
mysql -u steem_nhj -p
헠..헠... 역시나 환경 세팅이 가장 힘든것 같습니다. 여기까지 하고 다음에 마저 진행해보도록 하겠습니다. 다음시간엔 테스트 테이블을 만들고 nodejs에서 crud 작업(데이터 등록, 조회, 수정, 삭제)을 해보도록 하겠습니다. 물론 리눅스에서도 동일한 환경을 갖추도록 구성도 해야겠지요.
지난 회차 살펴보기
1편 - nodejs 개발환경을 구성해보자. 윈도우 개발 + Github 저장소 + 리눅스 운영
2편 - 콜백 지옥을 탈출해보자. - synchronize.js 편
ps. 스팀은 하락장에서도 정말 대단하네요. 이런 대하락장에서 4달러 수준이라니... 미래가 밝다고 생각합니다.