asbubam @ Flitto 빠른 웹 개발이 이루어지는 Node.js와 개발 스택 소개 photo by Jongho Jang
asbubam @ Flitto
빠른 웹 개발이 이루어지는 Node.js와
개발 스택 소개photo
by Jongho Jang
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
現�플리토�남성후디�전속모델�활동�중�
특기:�역동적인�포즈��특이사항:�촬영�후�다이어트로�체중감량에�성공�
스타트업�플리토의�개발자입니다.�
photo by Jongho Jang
www.flitto.com store
Flitto집단지성 번역 플랫폼 플리토
언어의장벽�⾔語の壁�
language�barrier
언어의장벽�⾔語の壁�
language�barrier
www.Flitto.com
�50개�Node.js�프로젝트���(20개�데몬형태)�
메인서버�약160�개�endpoint�*�CRUD�REST�API����
오늘은�주요�부분만�설명합니다.
Node.js�in�Flitto
사용�기술
서버�구조
main server
push
admin
crawler
task
api / front end
디렉터리 구조- app�- models�- services�- routes�- views�- utils�- test�- …�
-�public�
Node.js�4.2.1��production�전�서버에�적용�(2015/10/27)�
주의�기존에�설치된�node_modules�
npm�cache��node_gyp��
깔끔하게�지우고�재�설치�
https://github.com/nodesource/distributions�참고�
��
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회�렌더링�테스트
express�4.x.x
사용�패키지�aws-sdk�cron�geoip�gm�hiredis�kue�moment�nodemailer�qr-image�…
코드�컨벤션
db�schema�버전관리�flyway
step�/�async�/�promise
Callback�What?
tpl()�메소드를�통한��백엔드�/�프론트엔드��
그리기
pg_node��
pg�를�래핑��트랜잭션�처리�추가�
query�string�출력�log()�추가
공통으로�사용하는�코드�모듈화
프론트엔드�패키징�자동화�변경�전:�grunt�+�python�변경�후:�grunt�+�gulp
서비스가�18개�언어�지원�->�error�메시지도�18개�언어로�
서비스�내�모든�문구,�에러문구,�api에��자체�구현한�i18n�반영��싱크는�redis�pub/sub
getError(errCode,�사용자의�language�고유키);�
{���statusCode:�404,���body:�{�����code:�404,�����desc:�“Not�Found”,�����message:�“대상이�없습니다.”�����resource:�“url…”���}�}�
test��mocha,�should
forever�->�pm2
글로벌유저�대응��접속�위치�기준��
타임존�계산�및�서비스�
심야시간�푸쉬받지않기!�
우리의�심야시간�!=�유저의�심야시간�
dev�/�staging�/�real
배포�
Fabric
+
AWS�ELB�무중단�서비스�디플로이
logging�winston�/�morgan
웹�푸쉬�socket.io��
+�redis�pub/sub
실험적�admin�
변경�전:�backbone.js�변경�후:�angular.js,�sequelize
그밖에�노드로�하는�것�쉘스크립트,�크론잡
그밖에�노드로�하는�것�u+�xpay,�alipay,�paypal�giftishow,�happymoney�
Node.js�포팅�
그밖에�노드로�하는�것�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);
그밖에�노드로�하는�것�
형태소�분석�“내일�아침까지�첨부된�엑셀파일에�포함된�문장�중에서��3글자�이상이면서�2번이상�반복되는�명사,�형용사�뽑아주세요.”�“그리고�~이런�느낌적인�느낌의�문장들도�뽑아주세요.”
mecab-ffi�은전한닢(오픈소스�한국어�형태소�분석기�프로젝트)에서�사용하는��mecab-ko(오픈소스�형태소�분석�엔진인�MeCab를�한국어에�맞게�포팅)를�@xissy님이�Node.js�로�포팅�
그밖에�노드로�하는�것�
형태소�분석라네즈 파워 에센셜 스킨 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
시행착오
시행착오���
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
😃https://www.flitto.com/twitter/158
> var str = ‘안녕하세요반가워요\ud83d\ude03하이';> str‘안녕하세요반가워요😃하이’
> str.length
> var str = ‘안녕하세요반가워요\ud83d\ude03하이';> str‘안녕하세요반가워요😃하이’
> str.length13
> encodeURI(str.slice(0,10))URIError: URI malformed at encodeURI (native) …
> 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
시행착오��
forEach�안에�비동기코드�엄~~청�많이�동시�실행�시스템�콜스택에도�한계가..�
users.forEach(function(user)�{�����헨리를�팔로우한�전체�유저에게�비동기로�푸쉬�});
async.queue�등을�사용해서�동시�실행되는�비동기코드를�제어
시행착오�
�npm�install�했더니�동작이�달라요.�버전올라가면서�변경된�사항�요체크!�
ex)�"sequelize":�“latest”�sequelize�v2하고�v3는�달라도�너무달라요.
시행착오�서버는�3년으로�사지말고��
aws가�가격인하를�계속�하고�새로운�상품도�나오고�하니�1년단위로..
하고싶어요
하고싶어요�es6�
11/10�신규�feature에�사용�시작!!!�사용하고�있지만�좀더�적극적으로!!
하고싶어요�Node.js�production�적용�
좋은�예�되기
하고싶어요�NPM�package�등록�오픈소스�기여
geoip�PR
하고싶어요�평일�개발�세미나에��
1만원�내고�참여하는당신!��함께�하고�싶어요!
1
2
구인은�1번
구직은�2번
서버