Serverless + AWS Lambda + AWS CloudWatch + Slack 를 활용한 Web crawler 만들기

Summary 우리는 매일 각 웹사이트를 확인하여 뉴스를 취합한다. 별다른 요구사항 없이 직접 업무를 진행하시지만 이건 자동화해야된다는 생각이 들었다. 하루에 한 번 이뤄지는 일이니 주기적으로 슬랙에 최신 뉴스를 보내도록 자동화한다면 업무의 작은 시간도 아낄 수 있을 것이다. 그래서 이번에 크롤링 자동화 방법에 대해서 정리하려고 한다. Serverless framework를 활용하면 빠른 배포 및 관리가 가능하니 기술 스택을 다음과 같이 정했다. AWS Lambda: javascript로 작성. got, cheerio를 사용하여 crawler 설계 got: Request 모듈. 우리나라에는 많이 알려져있지 않지만 해외에서는 주로 got을 사용. npm에서 download 수가 압도적으로 많다. 사용법이 간단하다. cheerio: jQuery형식으로 서버에서 사용하는 모듈 AWS CloudWatch: 주기적으로 Lambda 함수를 실행하기 위함 Serverless framework: 내부적으로 Serverless Application Model 파일을 생성하여 CloudFormation으로 배포하는 것을 자동화 Slack bot: 정해진 시간이 지나고 다시 뉴스정보를 불러오고 싶을 때 사용한다. Lambda를 trigger하는 방법으로 사용 개발 환경 설정 이 과정은 npm version 5 이상을 사용하고 있다고 가정하고 시작한다. 만일 사용하고 있지 않다면 npm install -g npx 를 실행한다. npx는 해당 패키지 내에서 node_modules/.bin에 있는 명령어를 바로 사용할 수 있게 해준다. ...

December 31, 2017 3 min

Node js 라이브러리 및 유용한 자료

Summary Node JS의 라이브러리가 워낙 많다보니 자주쓰는 라이브러리를 정리해야될 필요성을 느꼈다. 그리고 재밌는 라이브러리를 리스트로 관리하지 않다보니 잊게 되었다. 발견할 때마다 정리하고 라이브러리의 용도에 맞게 분류하여 나중에 필요할 경우 바로 사용할 수 있도록 한다. 자주 쓰는 패키지 JavaScript utility library underscore lodash Year, month, date, time moment.js MarkDown highlight.js prismjs Ajax request request-promise superagent axios got Test mocha supertest chai should enzyme Logger morgan Task Runner & Bundler gulp grunt webpack webpack-dashboard Database ...

November 5, 2017 2 min

TypeScript로 Node.js Express 서버 개발하기

Summary 최근에 직방의 AWS Lambda 코드를 세미나에서 스쳐지나가는 것을 보았다. TypeScript로 짜여져 있었고 나중에 지속적인 프로젝트 관리적인 이점이 있을 것으로 생각이 되기 때문에 TypeScript로 프로젝트를 구성해보는 것을 정리해보기로 결심했다. node.js 프로젝트 생성하기 먼저 프로젝트를 생성한다. 기존에 npm과 nodejs가 설치되어 있다는 전제하에 시작한다. 만약 설치되어 있지 않다면 다음의 링크를 참고한다. https://nodejs.org/ko/download/package-manager/ $ mkdir node_typescript $ npm init -y 그리고 편의를 위해 사전에 설치되어 있어야 하는 패키지들이 있다. npx: global로 패키지를 설치하지 않더라도 프로젝트 내에서 사용할 수 있게 해준다. nodemon: 파일이 변화될 때마다 재실행해준다. typescript: typescript로 구성한 코드를 javascript로 트랜스파일링 해준다. npm-run-all: 여러 npm 실행 명령을 병렬로 실행할 수 있게 해준다. webpack: 요즘 각광받는 모듈 번들러 webpack-cli: webpack 명령을 사용하기 위한 CLI도구 source-map-support: typescript로 개발시 source-map을 지원해준다. @types/express: express 모듈에 대한 type을 지원해준다. $ npm install -g npx $ npm install --save-dev typescript ts-loader npm-run-all webpack @types/express nodemon webpack-cli $ npm install --save express source-map-support 기본 설정하기 다음과 같이 typescript에 대한 기본 설정을 한다. ...

October 22, 2017 4 min

Node 서버를 바탕으로 Dockerfile로 만들기

Summary Dockerfile로 이미지로 관리하면 배포 및 관리가 간편하게 가능하다. 여기서는 node를 베이스 이미지로하여 노드 서버를 배포할 수 있도록 준비한다. 순서 Amazon web service에 Ubuntu OS를 사용하는 EC2 인스턴스 생성하기 접속 포트를 열어주고 별도의 Ubuntu 유저를 생성하기 EC2에 Docker를 설치하고 Ubuntu 유저에게 권한주기 Bitbucket을 사용하여 git repository 생성하기 Express JS를 사용하여 Node 서버 구축하기 PM2를 사용하여 EC2에 Node 서버 배포하기 Node 서버를 바탕으로 Dockerfile로 만들기 Docker Hub의 automated build를 사용하여 Docker image를 만들기 만들어진 Docker image를 EC2 인스턴스에 배포하기 Dockerfile 이란? Docker image의 설정 정보를 담고 있는 파일이다. 실제 운영 소프트웨어를 배포할 경우 node 베이스 이미지를 올린 다음 패키지를 설치하고 volume을 할당할 수도 있다. 현재 이미지를 주기적으로 commit하여 백업하고 직접 docker exec를 하여 컨테이너 내에 실행명령어를 보내야하는 단점이 있었다. 하지만 Dockerfile은 docker image를 생성할 때 source file을 가져와서 컨테이너 구동과 동시에 서버를 가동시킬 수 있다. 이러한 docker container를 관리하는 방법으로는 docker-compose가 있는데 추후에 살펴볼 것이다. ...

April 2, 2017 2 min

Docker로 EC2에 Node 배포하기

소개 Node JS 서버를 배포하려고 한다. 매일 같이 하던 방식이지만 방법을 잊을 수도 있다는 생각이 들었다. 이것을 보고 사람들이 노드 서버를 간결하게 배포하였으면 한다. 순서 Amazon web service에 Ubuntu OS를 사용하는 EC2 인스턴스 생성하기 접속 포트를 열어주고 별도의 Ubuntu 유저를 생성하기 EC2에 Docker를 설치하고 Ubuntu 유저에게 권한주기 Bitbucket을 사용하여 git repository 생성하기 Express JS를 사용하여 Node 서버 구축하기 테스트로 PM2를 사용하여 EC2에 Node 서버 배포하기 Node 서버를 바탕으로 Dockerfile로 만들기 Docker Hub의 automated build를 사용하여 Docker image를 만들기 만들어진 Docker image를 EC2 인스턴스에 배포하기

March 31, 2017 1 min