Top Banner
asbubam @ Flitto 빠른 개발이 이루어지는 Node.js개발 스택 소개 photo by Jongho Jang
58

Nodejs를 이용한 개발

Jan 19, 2017

Download

Software

WebFrameworks
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Nodejs를 이용한 개발

asbubam @ Flitto

빠른 웹 개발이 이루어지는 Node.js와

개발 스택 소개photo

by Jongho Jang

Page 2: Nodejs를 이용한 개발

C,�Java�in�여기저기

Ruby�on�Rails,�Node.js�in�News1

Node.js�in�Flitto

Punk�Band�bass

Fashion�Photography�in�Tokyo

Seungwoo�Lee�Engineer�[email protected]

dalsdoll

Page 3: Nodejs를 이용한 개발

現�플리토�남성후디�전속모델�활동�중�

특기:�역동적인�포즈��특이사항:�촬영�후�다이어트로�체중감량에�성공�

스타트업�플리토의�개발자입니다.�

photo by Jongho Jang

www.flitto.com store

Page 4: Nodejs를 이용한 개발

Flitto집단지성 번역 플랫폼 플리토

Page 5: Nodejs를 이용한 개발
Page 6: Nodejs를 이용한 개발

언어의장벽�⾔語の壁�

language�barrier

Page 7: Nodejs를 이용한 개발
Page 8: Nodejs를 이용한 개발

언어의장벽�⾔語の壁�

language�barrier

Page 9: Nodejs를 이용한 개발

www.Flitto.com

Page 10: Nodejs를 이용한 개발

�50개�Node.js�프로젝트���(20개�데몬형태)�

메인서버�약160�개�endpoint�*�CRUD�REST�API����

오늘은�주요�부분만�설명합니다.

Node.js�in�Flitto

Page 11: Nodejs를 이용한 개발

사용�기술

Page 12: Nodejs를 이용한 개발

서버�구조

main server

push

admin

crawler

task

api / front end

Page 13: Nodejs를 이용한 개발

디렉터리 구조- app�- models�- services�- routes�- views�- utils�- test�- …�

-�public�

Page 14: Nodejs를 이용한 개발

Node.js�4.2.1��production�전�서버에�적용�(2015/10/27)�

주의�기존에�설치된�node_modules�

npm�cache��node_gyp��

깔끔하게�지우고�재�설치�

https://github.com/nodesource/distributions�참고�

��

Page 15: Nodejs를 이용한 개발

v0.8.x��������=>��2012/10/17�AWS�t1.micro�서버�생성�

v0.10.x��v0.10.8����=>�2013/05/20�내가�입사한�날�v0.12.x��

v4.2.1�LTS�=>�2015/10/27�빨라진�것�같은�느낌적인느낌

Node.js�버전변화

v0.12.7:��(57.3+60.8+61.5+66.4+69.3)/5�=�63.06�건�/�sec���v4.2.1:��(57.1+73.9+74.8+75.4+78.4)/5�=�71.92�건�/�sec�

(71.92-63.06)/63.06*100�=�약�14.05�%�성능향상

랜딩�화면을�2000번씩�5회�렌더링�테스트

Page 16: Nodejs를 이용한 개발

express�4.x.x

Page 17: Nodejs를 이용한 개발

사용�패키지�aws-sdk�cron�geoip�gm�hiredis�kue�moment�nodemailer�qr-image�…

Page 18: Nodejs를 이용한 개발

개발환경 =�� +

https://www.jetbrains.com/webstorm

Page 19: Nodejs를 이용한 개발

코드�컨벤션

Page 20: Nodejs를 이용한 개발

db�schema�버전관리�flyway

Page 21: Nodejs를 이용한 개발

step�/�async�/�promise

Callback�What?

Page 22: Nodejs를 이용한 개발

tpl()�메소드를�통한��백엔드�/�프론트엔드��

그리기

Page 23: Nodejs를 이용한 개발

pg_node��

pg�를�래핑��트랜잭션�처리�추가�

query�string�출력�log()�추가

Page 24: Nodejs를 이용한 개발

공통으로�사용하는�코드�모듈화

Page 25: Nodejs를 이용한 개발

프론트엔드�패키징�자동화�변경�전:�grunt�+�python�변경�후:�grunt�+�gulp

Page 26: Nodejs를 이용한 개발

서비스가�18개�언어�지원�->�error�메시지도�18개�언어로�

서비스�내�모든�문구,�에러문구,�api에��자체�구현한�i18n�반영��싱크는�redis�pub/sub

Page 27: Nodejs를 이용한 개발

getError(errCode,�사용자의�language�고유키);�

{���statusCode:�404,���body:�{�����code:�404,�����desc:�“Not�Found”,�����message:�“대상이�없습니다.”�����resource:�“url…”���}�}�

Page 28: Nodejs를 이용한 개발

test��mocha,�should

Page 29: Nodejs를 이용한 개발

forever�->�pm2

Page 30: Nodejs를 이용한 개발

글로벌유저�대응��접속�위치�기준��

타임존�계산�및�서비스�

심야시간�푸쉬받지않기!�

우리의�심야시간�!=�유저의�심야시간�

Page 31: Nodejs를 이용한 개발

dev�/�staging�/�real

Page 32: Nodejs를 이용한 개발

배포�

Fabric

+

Page 33: Nodejs를 이용한 개발

AWS�ELB�무중단�서비스�디플로이

Page 34: Nodejs를 이용한 개발

logging�winston�/�morgan

Page 35: Nodejs를 이용한 개발

웹�푸쉬�socket.io��

+�redis�pub/sub

Page 36: Nodejs를 이용한 개발

실험적�admin�

변경�전:�backbone.js�변경�후:�angular.js,�sequelize

Page 37: Nodejs를 이용한 개발

그밖에�노드로�하는�것�쉘스크립트,�크론잡

Page 38: Nodejs를 이용한 개발

그밖에�노드로�하는�것�u+�xpay,�alipay,�paypal�giftishow,�happymoney�

Node.js�포팅�

Page 39: Nodejs를 이용한 개발

그밖에�노드로�하는�것�s3에서�파일�50만개�빨리��

다운받기

aws-sdk,�async(queue)

var�AWS�=�require(‘aws-sdk')���,�s3�=�new�AWS.S3()���,�fs�=�require(‘fs’)���,�targetFile�=�fs.createWriteStream(targetFilePath);�

var�read�=�s3.getObject({�Bucket:�bucket,�Key:�filePath�}).createReadStream();�read.pipe(targetFile);

Page 40: Nodejs를 이용한 개발

그밖에�노드로�하는�것�

형태소�분석�“내일�아침까지�첨부된�엑셀파일에�포함된�문장�중에서��3글자�이상이면서�2번이상�반복되는�명사,�형용사�뽑아주세요.”�“그리고�~이런�느낌적인�느낌의�문장들도�뽑아주세요.”

mecab-ffi�은전한닢(오픈소스�한국어�형태소�분석기�프로젝트)에서�사용하는��mecab-ko(오픈소스�형태소�분석�엔진인�MeCab를�한국어에�맞게�포팅)를�@xissy님이�Node.js�로�포팅�

Page 41: Nodejs를 이용한 개발

그밖에�노드로�하는�것�

형태소�분석라네즈 파워 에센셜 스킨 200ml 제조년월일 13년 06월10일/개봉전 제조일로부터 30개월/개봉후 12개월/제조일은 상품 입출고일에 따로 수시로 변동 될수 있으므로 반드시 판매자에 문의 바랍니다. 1. 세안 후 500우너 동전크기 (지름2.5cm)만큼 화장솜에 적셔 피부결에 따라 발라줍니다. 2.얼굴을 가볍게 닦아내는 기분으로 >사용하시면 투명케어에 더욱 효과적입니다. 1. 상처가 있는 부위 또는 습진 및 피부염 등의 이상이 있는 부위에는 사용하지 마십시오. 2. 화장품을 사용하여 다>음과 같은 이상이 있을 경우에는 사용을 중지할 것이며. 계속 사용하면 증상을 악화시키므로 피부과 전문의 등에게 상담하십시오. 1) 사용 중 붉은 반점. 부어오름. 가려움증. 자극 등의 이상이 있는 경우 2) 적용부위가 직사광선에 의하여 위와 같은 이상이 있을 경우 3. 보관 및 취급상의 주의사항 1) 사용 후에는 반드시 마개를 닫아 두십시오 2) 유소아의 손이 닿지 않는 곳에 보관하십시오 3) 고온 내지 저온의 장소. 직사광선이 닿는 곳에는 보관하지 마십시오 1.모이스쳐(중>건성)-200ml, 2.라이트(지복합성)-200ml, 3.센서티브(민감성)-200ml 아모레퍼시픽/아모레퍼시픽 1.모이스쳐(중건성),2.라이트(지복합성),3.센서티브(민감성) 제조사 홈페이지 및 제조사 고객센타로 문의 또는 동봉된 사용설명서 참조

직사광선 | 2모이스쳐 | 2중건성 | 2라이트 | 2지복합성 | 2센서티브 | 2민감성 | 2

아모레퍼시픽 | 2

Page 42: Nodejs를 이용한 개발

시행착오

Page 43: Nodejs를 이용한 개발

시행착오���

surrogate�pairUTF-16(16-bit�Unicode�Transformation�Format)은�유니코드�문자�인코딩�방식의�하나이다.�주로�사용되는�기본�다국어�평면�(BMP,�Basic�multilingual�plane)에�속하는�문자들은�그대로�16비트�값으로�인코딩이�되고�그�이상의�문자는�특별히�정해진�방식으로�32비트로�인코딩이�된다.�

기본�다국어�평면에�포함되지�않는�문자들,�즉�16비트로�값을�표현할�수�없는�문자들은�서러게이트(Surrogate)�문자�영역에�해당하는�두�개의�16비트�문자로�변환되어�이�한�쌍(즉�32비트)이�그�문자를�나타내게�된다.

https://ko.wikipedia.org/wiki/UTF-16

Page 44: Nodejs를 이용한 개발

😃https://www.flitto.com/twitter/158

Page 45: Nodejs를 이용한 개발

> var str = ‘안녕하세요반가워요\ud83d\ude03하이';> str‘안녕하세요반가워요😃하이’

> str.length

Page 46: Nodejs를 이용한 개발

> var str = ‘안녕하세요반가워요\ud83d\ude03하이';> str‘안녕하세요반가워요😃하이’

> str.length13

> encodeURI(str.slice(0,10))URIError: URI malformed at encodeURI (native) …

Page 47: Nodejs를 이용한 개발

> var str = ‘안녕하세요반가워요\ud83d\ude03하이';> str‘안녕하세요반가워요😃하이’

> str.length13

> encodeURI(str.slice(0,10))URIError: URI malformed at encodeURI (native) …

> var decodedArr = punycode.ucs2.decode(str);> var slicedStr = punycode.ucs2.encode(decodedArr.slice(0,10));> slicedStr‘안녕하세요반가워요😃’

> encodeURI(slicedStr);에러안남.

https://goo.gl/uZIV7m

Page 48: Nodejs를 이용한 개발

시행착오��

forEach�안에�비동기코드�엄~~청�많이�동시�실행�시스템�콜스택에도�한계가..�

users.forEach(function(user)�{�����헨리를�팔로우한�전체�유저에게�비동기로�푸쉬�});

async.queue�등을�사용해서�동시�실행되는�비동기코드를�제어

Page 49: Nodejs를 이용한 개발

시행착오�

�npm�install�했더니�동작이�달라요.�버전올라가면서�변경된�사항�요체크!�

ex)�"sequelize":�“latest”�sequelize�v2하고�v3는�달라도�너무달라요.

Page 50: Nodejs를 이용한 개발

시행착오�서버는�3년으로�사지말고��

aws가�가격인하를�계속�하고�새로운�상품도�나오고�하니�1년단위로..

Page 51: Nodejs를 이용한 개발

하고싶어요

Page 52: Nodejs를 이용한 개발

하고싶어요�es6�

11/10�신규�feature에�사용�시작!!!�사용하고�있지만�좀더�적극적으로!!

Page 53: Nodejs를 이용한 개발

하고싶어요�Node.js�production�적용�

좋은�예�되기

Page 54: Nodejs를 이용한 개발

하고싶어요�NPM�package�등록�오픈소스�기여

Page 55: Nodejs를 이용한 개발

geoip�PR

Page 56: Nodejs를 이용한 개발

하고싶어요�평일�개발�세미나에��

1만원�내고�참여하는당신!��함께�하고�싶어요!

Page 57: Nodejs를 이용한 개발

1

2

구인은�1번

구직은�2번

서버

Page 58: Nodejs를 이용한 개발

asbubam

asbubam�@�Flitto.com

감사합니다.�:)