ECS & Fargate Demo

Summary “ECS와 Fargate"라는 주제로 2018년 1월 20일에 AWSKRUG re:Invent recap 행사에서 발표한 자료입니다. 발표자료 ECS/Fargate와 함께하는 간편한 Docker 사용법 - 트랙2, Community Day 2018 re:Invent 특집 from AWS Korea UserGroup (AWS한국사용자모임) 발표 영상 데모로 시연한 샘플코드는 아래와 같습니다. https://github.com/novemberde/aws-fargate-demo References https://www.slideshare.net/awskr/ecs-fargate-2018 https://www.meetup.com/ko-KR/awskrug/events/245940818/ https://github.com/novemberde/aws-fargate-demo

January 20, 2018 1 min

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

Android Webview에서 Javascript에러로 인해 뷰가 안나올 경우

Summary Javascript WebView로 특정 URL의 컨텐츠를 보여주는데 화면이 나오지 않았다. 현상은 배경색까지 나타나고 DOM이 뿌려지지 않는 문제였다. Webview에서 Unexpected token의 에러를 뿜었기 때문에 쉽게 Javascript 관련 오류라는 것을 알 수 있었고 Javascript error를 무시할 수 있도록 하는 메서드를 실행하였다. Webview의 Setting에 setDomStorageEnabled(true)를 추가하기 기존의 코드는 다음과 같다 public class MyWebView extends AppCompatActivity { private WebView webView; @Override protected void onCreate(Bundle savedStateInstance){ super.onCreate(savedStateInstance); setContentView(R.layout.webview); webView = ( WebView )findViewById( R.id.webview); webView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH); webView.setWebViewClient(new WebViewClient()); webView.setWebChromeClient(new WebChromeClient()); webView.setNetworkAvailable(true); webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl(url); } } 변경한 코드는 다음과 같다. ...

December 19, 2017 1 min

Docker와 DevOps에서 Serverless와 NoOps로의 여정

Summary “Docker와 DevOps에서 Serverless와 NoOps로의 여정"이라는 주제로 2017년 12월 06일에 W3C Conference에서 발표한 자료입니다. Docker와 DevOps에서 Serverless와 NoOps로의 여정 from Kyuhyun Byun 데모로 시연한 샘플코드는 아래와 같습니다. https://github.com/novemberde/serverless-webapp-demo References https://www.slideshare.net/KyuhyunByun1/docker-devops-serverless-noops https://onoffmix.com/event/119375 https://github.com/novemberde/serverless-webapp-demo

December 6, 2017 1 min

EC2 meta data에 대해 알아보기

Summary Amazon EC2의 설정을 자동으로 하기 위해선 인스턴스의 정보를 받아와서 설정할 수 있어야 한다. 예를 들어 특정 태그로 묶인 그룹에게 재가동시 소스코드 갱신과 서버 재가동의 명령어를 init.d에 등록했을 때 인스턴스 정보를 얻어온다면 개별적으로 인스턴스의 역할에 맞는 work load를 할당할 수 있을 것이다. meta-data 확인하기 Metadata에 대해서 찾아보니 위키백과에 아래와 같이 쓰여 있었다. 메타데이터(metadata)는 데이터(data)에 대한 데이터이다. 이렇게 흔히들 간단히 정의하지만 엄격하게는, Karen Coyle에 의하면 “어떤 목적을 가지고 만들어진 데이터 (Constructed data with a purpose)“라고도 정의한다. 가령 도서관에서 사용하는 서지기술용으로 만든 것이 그 대표적인 예이다. 지금은 온톨로지의 등장과 함께 기계가 읽고 이해할 수 있는 (Machine Actionable)한 형태의 메타데이터가 많이 사용되고 있다. 이 뜻을 인스턴스에 대입해보면, 인스턴스에 대한 데이터라고 생각해볼 수 있다. ...

December 6, 2017 2 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

유용한 OS 명령어 모음

Summary 개발을 하다가 명령어를 모두 기억하고 싶어도 잠깐 다른 업무를 하다가 다시하면 잊게되는 명령어들이 있다. 특히 OS 관련 명령어는 서버에 문제가 생겼을 때 사용하기 때문에 더욱 그렇다. 이번에는 자주 사용하지 않았으면 하는 명령어들을 정리해본다. OS 명령어 sar 리소스 사용 내역을 볼 수 있다. CPU 사용율 Idle 상태 상태 확인 I/O 의 사용율 메모리 사용율 $ sudo apt-get install sysstat $ sudo vi /etc/default/sysstat ENABLED="true" $ sar -u 1 5 Linux 4.4.0-1013-aws (ip-172-31-55-55) 10/22/2017 _x86_64_ (1 CPU) 05:52:57 AM CPU %user %nice %system %iowait %steal %idle 05:52:58 AM all 0.00 0.00 0.00 0.00 0.00 100.00 05:52:59 AM all 0.00 0.00 0.00 0.00 0.00 100.00 05:53:00 AM all 0.00 0.00 0.00 0.00 0.00 100.00 05:53:01 AM all 0.00 0.00 0.00 0.00 0.00 100.00 05:53:02 AM all 0.00 0.00 1.98 0.00 0.00 98.02 Average: all 0.00 0.00 0.40 0.00 0.00 99.60 top ...

October 22, 2017 7 min

Jenkins의 Blue ocean을 활용하여 배포 관리하기

Summary Jenkins는 CD/CI로 가장 알려진 도구이다. 이번에는 Jenkins 설정부터 시작하여 Pipeline으로 배포관리하는 과정을 정리해본다. Jenkins로 기본 설정하기 Jenkins를 Install Jenkins를 참고하여 설치한다. 설치하여 맨처음 접속하면 아래와 같은 화면이 나타난다. 다음의 명령어로 나온 텍스트를 입력한다. $ cat /var/jenkins_home/secrets/initialAdminPassword Customize Jenkins화면에서 여기서는 크게 설정할 필요없이 Install suggested plugins을 선택한다. 이후에 해당 플러그인을 설치하고 관리자 계정을 설정할 수 있다. 테스트를 위해 계정 정보는 다음과 같이 설정한다. 계정명: admin 암호: 1234 이름: admin 이메일 주소: 본인 이메일 주소 ...

October 21, 2017 2 min

EC2에서 Docker와 Docker-compose 사용하기

2017.06.08에 AWSKRUG에서 EC2에서 Docker와 Docker-compose 사용하기라는 주제로 발표했던 자료입니다.

October 20, 2017 1 min