SlideShare a Scribd company logo
1 of 52
Download to read offline
를 사용한

대규모 글로벌(+중국) 서비스
2016/11/23

Flitto 강동한
발표자 소개
• Flitto에서 5년째 커피를
타고 있습니다.



Flitto?
언어 데이터
C O R P U S
번역 플랫폼
T R A N S L AT I O N P L AT F O R M
+
Flitto?
1 : 1 

전 문 번 역
S O C I A L
M E D I A & 

컨 텐 츠 번 역
집 단 지 성 

번 역
실 시 간 

번 역 추 천커 머 스
기술 스택 소개
node.js 사용 환경
• v6.9.1 LTS 버전 사용중 (’16/11/01 현재)

• A사 cloud 3개 리전, 약 20개의 인스턴스에서 사용중

• 스크립트들도 가급적 node.js 를 사용

• CPU, 메모리 적게 먹어서 참 좋음..

• 그런데… 버전업이 참 빠르네?
Node.js in Flitto
• v0.8.8 - ’12/09/07

• v0.10.x

• v0.12.x

• io.js test

• v4.2.1 - ’15/10/27 (v4.2.0 LTS ’15/10/12)

• v6.9.1 - ’16/11/01 (v6.9.0 LTS ’16/10/18)

• => 만 4년 넘게 node.js 로 서비스 중..
in
Node.js in Flitto
• 왜 node.js 로 시작했나요?

• 혼자 Front-end, Back-end 등 다해야 해서..

• Cloud service 무료 크레딧 최대한 이용하려고…

• 2012년에는 왠지 cool해 보여서..









주요 발표 내용
• node.js로 5년째 개발하면서 만났던 문제들

• 사실 별거 없었습니다만.. 그래도..

• node.js 버전 업데이트는 어떻게 하나요?

• 구조 개선을 통한 효율 증가

• 중국에서 서비스 하기

• 그 외..
node.js 버전 관리는 어떻게 하나요?
node.js 버전 관리는 어떻게 하나요?
• 또… 새버전 나왔어요…?

• 지난 주에 버전업 했는데…
node.js 버전 관리 원칙
• LTS 는 서버에서 얼른 업데이트

• Minor, Patch 업데이트는 Change Log를 보고 중요도에 따라 적용

• Major 버전 업데이트시 사내 Coding Convention도 업데이트

• Current 버전은 개발자의 재량으로 사용

• 아무도 안씀.. 내가 먼저 쓰자

• Open source maintaining 하는 repository 는

최대한 많은 버전을 지원하도록.. (travis ci 사용)
node.js 버전업 - 준비
• 각종 라이브러리가 지원하는지 확인

• n 패키지를 통해 틈틈히 작업하면서 테스트

• node-gyp 등으로 컴파일 하는 라이브러리는 점점 사용하지 않게 됨

• ex> geoip, node-xml2json 등

• 특별한 방법이 없이.. 하나씩 올리면서 테스트

• 이때 test case 가 큰 도움

• node 6.x 로 버전업 할때 주의점

• GLOBAL => global

• graceful-fs deprecate warning
node.js 버전업 - 작업
• 하루 날 잡고, 빌드 서버부터 update를 함..

• 새벽 작업은 1년에 두세번쯤 하는데 그 중 하나가 node.js 버전업

• 작업 순서(서버)

1.node.js 기존 패키지 삭제

2.node.js 신규 패키지 설치

3.npm cache clean ; rm -rf ~/.node-gyp

4.CI 등을 이용하여 다시 배포
node.js 버전업 - 작업후 코딩 컨벤션 업데이트
• v6.9.1 업데이트 후, 새로 추가된 사내 컨벤션 규칙 (예시)

• Arrow Functions





















node.js 버전업 - 작업후 코딩 컨벤션 업데이트
• Spreading operator









• Destructuring













push 구조 개선을 통한 효율 증가
push 구조 개선을 통한 효율 증가
• 어제까지는 잘 돌았는데..

• 오늘은 왜..?
• 플리토 서비스 내 푸시 로직

• 특정 이벤트 발생시, 푸시를 개인화 하여 보냄

• redis에 개인의 push id list와 push 내용을 저장

• 이 때 redis key에 TTL을 7일로 설정













user_id: 홍길동

id[0]: 1

id[1]: 11
push 구조 개선을 통한 효율 증가
id: 1

상태: 읽음

내용: 새로운 요청
id: 11

상태: 안읽음

내용: 새로운 컨텐츠
push 구조 개선을 통한 효율 증가 - 첫번째 코드
• 먼저, 이벤트 발생 시, 대상 user list 추출함.

• Step 라이브러리의 this.group() 을 사용하여

• 개인별 push 내용을 redis에 넣고, 개별 push를 전송
push 구조 개선을 통한 효율 증가 - 첫번째 코드
push 구조 개선을 통한 효율 증가 - 첫번째 코드
• 간단하게 개발했는데, 잘 동작하네..?

• TTL에 따라 push 내용 자동 삭제도 되니 좋은걸?

• 수만개가 되니 갑자기 서버가 응답 없음..









push 구조 개선을 통한 효율 증가 - 두번째 코드
• (이 시점엔 문제를 심각하게 생각하지 않았습니다)

• 요즘 대세는 Step이 아니고 async 이니,

• async를 이용해 볼까?
push 구조 개선을 통한 효율 증가 - 두번째 코드
push 구조 개선을 통한 효율 증가 - 두번째 코드
• 예상대로 서버는 또 죽었습니다..
push 구조 개선을 통한 효율 증가 - 세번째 코드
• 근본적인 문제를 생각하기 시작

• Maximum call stack size exceeded 를 막기 위하여

나누어 하기로 함

• 5,000개씩 쪼개서.. async.queue 사용

• queue concurrency 는 1로
push 구조 개선을 통한 효율 증가 - 세번째 코드
push 구조 개선을 통한 효율 증가 - 세번째 코드
• 다행히도 이제 죽지는 않음

• 하지만 전송 시간이 7분
push 구조 개선을 통한 효율 증가 - 네번째 코드
• push의 공통 요소 별로 묶되,

개인화 요소는 개인의 key에만 관리

• async.queue를 이용하되 한번에 push서버로 보냄









user_id: 홍길동

id[0]: 1:읽음

id[1]: 11:안읽음
id: 1

내용: 새로운 요청
id: 11

내용: 새로운 컨텐츠
user_id: 김길동

id[0]: 11:읽음
push 구조 개선을 통한 효율 증가 - 네번째 코드
user_id: 홍길동

id[0]: 1:읽음

id[1]: 11:안읽음
id: 1

내용: 새로운 요청
id: 11

내용: 새로운 컨텐츠
user_id: 김길동

id[0]: 11:읽음
user_id: 홍길동

id[0]: 1

id[1]: 11
id: 1

상태: 읽음

내용: 새로운 요청
id: 11

상태: 안읽음

내용: 새로운 컨텐츠
user_id: 김길동

id[0]: 12
id: 12

상태: 읽음

내용: 새로운 컨텐츠
push 구조 개선을 통한 효율 증가 - 네번째 코드
push 구조 개선을 통한 효율 증가 - 네번째 코드
• 기존 7분 걸리던 것에서 반만 줄여도 성공인데..

• 적용해 보니 20초 만에 수십만 push 처리











중국에서 서비스 하기
중국에서 서비스 하기
• 한국 인구의 1%는 50만

• 중국 인구의 1%는 1,350만

• 니…하오?
중국에서 node.js 서비스 하기
• 들어가기 전에

• 비즈니스, ICP 관련된 내용은 여기서 다루지 않음

• 제한 사항

• 서버가 중국에 존재해야 할 수 있음

• Frontend/Backend가 두벌이 필요할 수 있음
생각의 전환이 필요합니다
• 중국은 단지 하나의 국가가 아닌

• 또 하나의 global이라고 생각해야 합니다.







어느 cloud를 이용할 것인가
• 설마 서버를 직접 사서 넣진 않았겠죠?

• 각 cloud별 비교 테스트

• Aliyun

• AWS

• Qingcloud
중국의 network 환경
• GFW

• 참고: 만리장성(the Great Wall)

• 중국의 Great FireWall 을 뜻함

• 외부 ping test

• 중국 서버 => 해외 서버(singapore) 24시간 ping test

• 패킷 loss 평균 7%

• 평균 27X ms
구축 초기
• npm이 왜 이렇게 느리지…

• npm loves you, but doesn’t love China?

• npm install 실행하고 오랜 시간이 걸릴 때가 종종 있음

• 긴급 배포시 문제가 될 가능성 

• npm이 지금은 많이 빨라졌으나, cnpm도 사용 고려



cnpm이란?
• cnpm이란?

• china…npm?

• https://npm.taobao.org

• npm을 중국내 CDN에 주기적으로 동기화

• sync 등의 명령어를 통한 수동 동기화도 지원

• cnpm을 이용한 패키지 인스톨시,

내부적으로는 npminstall package를 이용합니다.

• GitHub private repo 사용 시 문제 발생할 수 있음: --by=npm 옵션 고려
구축 초기
• OS package 업데이트도 오래 걸림

• 즉, node.js 버전업도 오래 걸림

• 가끔 github도 많이 느림

• 긴급 상황에 bug fix 배포가 안될 수도 있음

• 빌드/배포는 중국 서버에서

• 중국내에서 해외로, 해외에서 중국으로 API 호출시
timeout 이 종종 발생
서비스 속도 향상
• 중국내 CDN 사용

• 해외 CDN vs 중국 CDN

• 118kb file D/L test: 7.8초 vs 100ms

• 글로벌 서버와 전용망 구축 고려

• 하지만 비용이 많이 비쌈
회원 가입 부터가 문제
• 휴대폰 번호 가입을 지원해야 함

• SMS 발송 기능 추가시 abuser 주의

• CAPCHA - ccap

• WeChat, Weibo, QQ 등의 중국 SNS 로그인

• passport를 이용

• 중국 외 서버에서 중국 SNS API호출시 느릴 수 있음
결제는 어떻게?
• 중국인은 신용카드 사용하지 않음

• iOS: 인앱결제가 가능은 함

• android: 100여개의 앱스토어..

• 현지 PG이용해야 함

• Alipay

• Wechatpay
결제는 어떻게?
• 대부분 중국어 문서 밖에 없음

• 개발자 문서 번역은?

• 번역은 플리토!

• 플리토를 이용한 번역 후 작업

• github.com/flitto/wechatpay
개발 문서 번역 예시
除被扫支付场景以外,商户系统先调用该接口
在微信支付服务后台生成预支付交易单,返回正
确的预支付交易回话标识后再按扫码、JSAPI、
APP等不同场景生成交易串调起支付。
vs
G사 번역
Flitto 번역
App Push 는?
• iOS 는 apn을 그대로 사용

• android 는 baidu push를 사용

• node.js 용 공식 라이브러리는 없어서, 직접 개발..

• app SDK 업데이트를 꾸준히 해줘야 함
그 외..
그 외..
• node.js 특성상 서버 리소스가 비교적 적게 필요함

• 대부분의 인스턴스를 A사의 t2시리즈 사용 중

• 수십만개 push를 보내는 서버도 t2.small 인스턴스 사용중

• 비동기 처리는 사내에 Rule이 있으면 좋음
앞으로 해결해야 하는 문제들
• 더 좋은 번역가 추천 알고리즘

• 지속적인 서비스 개선

• open API

• AR, AI, Machine Learning

• 쌓여 가고 있는 데이터를 활용한 무언가

• …
앞으로 해결해야 하는 문제들 - 해결책
• 해결하실 수 있는 분은 바로 여러분!

• 세상에 없던 서비스를 만들어 나가며, 세상에 없던 문제를
같이 해결해 나갈 분을 찾고 있습니다.

• jobs@flitto.com
kang@flitto.com

github.com/dankang
감사합니다.

More Related Content

What's hot

이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018devCAT Studio, NEXON
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀승명 양
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
Massive service basic
Massive service basicMassive service basic
Massive service basicDaeMyung Kang
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architectureJongwon Kim
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)YEONG-CHEON YOU
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3Heungsub Lee
 
AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3
AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3 AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3
AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3 Amazon Web Services Korea
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)Heungsub Lee
 
[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기NAVER D2
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012devCAT Studio, NEXON
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPSeungmo Koo
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직Hoyoung Choi
 
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)Suhyun Park
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceXionglong Jin
 
게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여iFunFactory Inc.
 
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기AWSKRUG - AWS한국사용자모임
 

What's hot (20)

이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
Massive service basic
Massive service basicMassive service basic
Massive service basic
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architecture
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
 
AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3
AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3 AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3
AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
 
[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
 
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
 
게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여
 
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
Spark + S3 + R3를 이용한 데이터 분석 시스템 만들기
 

Similar to [Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스

Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...hoondong kim
 
Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기Changyeop Kim
 
Open infradays 2019_msa_k8s
Open infradays 2019_msa_k8sOpen infradays 2019_msa_k8s
Open infradays 2019_msa_k8sHyoungjun Kim
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발Jeongkyu Shin
 
멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면Byeongsu Kang
 
Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기
Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기
Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기Jongwon Han
 
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅Youngmin Koo
 
오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼Kenu, GwangNam Heo
 
알람몬으로 알아보는 Node.js 트러블 슈팅 케이스 스터디
알람몬으로 알아보는 Node.js 트러블 슈팅 케이스 스터디알람몬으로 알아보는 Node.js 트러블 슈팅 케이스 스터디
알람몬으로 알아보는 Node.js 트러블 슈팅 케이스 스터디Chiung Choi
 
Image Deep Learning 실무적용
Image Deep Learning 실무적용Image Deep Learning 실무적용
Image Deep Learning 실무적용Youngjae Kim
 
AngularJS In Production
AngularJS In ProductionAngularJS In Production
AngularJS In ProductionMooYeol Lee
 
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례Jeongsang Baek
 
Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos uEngine Solutions
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트Chanwoong Kim
 
Quic을 이용한 네트워크 성능 개선
 Quic을 이용한 네트워크 성능 개선 Quic을 이용한 네트워크 성능 개선
Quic을 이용한 네트워크 성능 개선NAVER D2
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 
NRISE 개발스택
NRISE 개발스택NRISE 개발스택
NRISE 개발스택Moon Soo Kim
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기Sumin Byeon
 
Slack과 Rust로 Amazon ECS에서 서비스 배포하기
Slack과 Rust로 Amazon ECS에서 서비스 배포하기Slack과 Rust로 Amazon ECS에서 서비스 배포하기
Slack과 Rust로 Amazon ECS에서 서비스 배포하기Eunchong Yu
 

Similar to [Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스 (20)

Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
 
Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기
 
Open infradays 2019_msa_k8s
Open infradays 2019_msa_k8sOpen infradays 2019_msa_k8s
Open infradays 2019_msa_k8s
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
 
멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면
 
Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기
Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기
Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기
 
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
 
오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼
 
알람몬으로 알아보는 Node.js 트러블 슈팅 케이스 스터디
알람몬으로 알아보는 Node.js 트러블 슈팅 케이스 스터디알람몬으로 알아보는 Node.js 트러블 슈팅 케이스 스터디
알람몬으로 알아보는 Node.js 트러블 슈팅 케이스 스터디
 
Image Deep Learning 실무적용
Image Deep Learning 실무적용Image Deep Learning 실무적용
Image Deep Learning 실무적용
 
AngularJS In Production
AngularJS In ProductionAngularJS In Production
AngularJS In Production
 
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
 
Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
 
Ansible과 CloudFormation을 이용한 배포 자동화
Ansible과 CloudFormation을 이용한 배포 자동화Ansible과 CloudFormation을 이용한 배포 자동화
Ansible과 CloudFormation을 이용한 배포 자동화
 
Quic을 이용한 네트워크 성능 개선
 Quic을 이용한 네트워크 성능 개선 Quic을 이용한 네트워크 성능 개선
Quic을 이용한 네트워크 성능 개선
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
NRISE 개발스택
NRISE 개발스택NRISE 개발스택
NRISE 개발스택
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
 
Slack과 Rust로 Amazon ECS에서 서비스 배포하기
Slack과 Rust로 Amazon ECS에서 서비스 배포하기Slack과 Rust로 Amazon ECS에서 서비스 배포하기
Slack과 Rust로 Amazon ECS에서 서비스 배포하기
 

Recently uploaded

Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 

Recently uploaded (6)

Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 

[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스

  • 1. 를 사용한
 대규모 글로벌(+중국) 서비스 2016/11/23 Flitto 강동한
  • 2. 발표자 소개 • Flitto에서 5년째 커피를 타고 있습니다.
 

  • 3. Flitto? 언어 데이터 C O R P U S 번역 플랫폼 T R A N S L AT I O N P L AT F O R M +
  • 4. Flitto? 1 : 1 전 문 번 역 S O C I A L M E D I A & 컨 텐 츠 번 역 집 단 지 성 번 역 실 시 간 
 번 역 추 천커 머 스
  • 6. node.js 사용 환경 • v6.9.1 LTS 버전 사용중 (’16/11/01 현재) • A사 cloud 3개 리전, 약 20개의 인스턴스에서 사용중 • 스크립트들도 가급적 node.js 를 사용 • CPU, 메모리 적게 먹어서 참 좋음.. • 그런데… 버전업이 참 빠르네?
  • 7. Node.js in Flitto • v0.8.8 - ’12/09/07 • v0.10.x • v0.12.x • io.js test • v4.2.1 - ’15/10/27 (v4.2.0 LTS ’15/10/12) • v6.9.1 - ’16/11/01 (v6.9.0 LTS ’16/10/18) • => 만 4년 넘게 node.js 로 서비스 중.. in
  • 8. Node.js in Flitto • 왜 node.js 로 시작했나요? • 혼자 Front-end, Back-end 등 다해야 해서.. • Cloud service 무료 크레딧 최대한 이용하려고… • 2012년에는 왠지 cool해 보여서..
 
 
 
 

  • 9. 주요 발표 내용 • node.js로 5년째 개발하면서 만났던 문제들 • 사실 별거 없었습니다만.. 그래도.. • node.js 버전 업데이트는 어떻게 하나요? • 구조 개선을 통한 효율 증가 • 중국에서 서비스 하기 • 그 외..
  • 10. node.js 버전 관리는 어떻게 하나요?
  • 11. node.js 버전 관리는 어떻게 하나요? • 또… 새버전 나왔어요…? • 지난 주에 버전업 했는데…
  • 12. node.js 버전 관리 원칙 • LTS 는 서버에서 얼른 업데이트 • Minor, Patch 업데이트는 Change Log를 보고 중요도에 따라 적용 • Major 버전 업데이트시 사내 Coding Convention도 업데이트 • Current 버전은 개발자의 재량으로 사용 • 아무도 안씀.. 내가 먼저 쓰자 • Open source maintaining 하는 repository 는
 최대한 많은 버전을 지원하도록.. (travis ci 사용)
  • 13. node.js 버전업 - 준비 • 각종 라이브러리가 지원하는지 확인 • n 패키지를 통해 틈틈히 작업하면서 테스트 • node-gyp 등으로 컴파일 하는 라이브러리는 점점 사용하지 않게 됨 • ex> geoip, node-xml2json 등 • 특별한 방법이 없이.. 하나씩 올리면서 테스트 • 이때 test case 가 큰 도움 • node 6.x 로 버전업 할때 주의점 • GLOBAL => global • graceful-fs deprecate warning
  • 14. node.js 버전업 - 작업 • 하루 날 잡고, 빌드 서버부터 update를 함.. • 새벽 작업은 1년에 두세번쯤 하는데 그 중 하나가 node.js 버전업 • 작업 순서(서버) 1.node.js 기존 패키지 삭제 2.node.js 신규 패키지 설치 3.npm cache clean ; rm -rf ~/.node-gyp 4.CI 등을 이용하여 다시 배포
  • 15. node.js 버전업 - 작업후 코딩 컨벤션 업데이트 • v6.9.1 업데이트 후, 새로 추가된 사내 컨벤션 규칙 (예시) • Arrow Functions
 
 
 
 
 
 
 
 
 
 

  • 16. node.js 버전업 - 작업후 코딩 컨벤션 업데이트 • Spreading operator
 
 
 
 
 • Destructuring
 
 
 
 
 
 

  • 17. push 구조 개선을 통한 효율 증가
  • 18. push 구조 개선을 통한 효율 증가 • 어제까지는 잘 돌았는데.. • 오늘은 왜..?
  • 19. • 플리토 서비스 내 푸시 로직 • 특정 이벤트 발생시, 푸시를 개인화 하여 보냄 • redis에 개인의 push id list와 push 내용을 저장 • 이 때 redis key에 TTL을 7일로 설정
 
 
 
 
 
 
 user_id: 홍길동 id[0]: 1 id[1]: 11 push 구조 개선을 통한 효율 증가 id: 1 상태: 읽음 내용: 새로운 요청 id: 11 상태: 안읽음 내용: 새로운 컨텐츠
  • 20. push 구조 개선을 통한 효율 증가 - 첫번째 코드 • 먼저, 이벤트 발생 시, 대상 user list 추출함. • Step 라이브러리의 this.group() 을 사용하여 • 개인별 push 내용을 redis에 넣고, 개별 push를 전송
  • 21. push 구조 개선을 통한 효율 증가 - 첫번째 코드
  • 22. push 구조 개선을 통한 효율 증가 - 첫번째 코드 • 간단하게 개발했는데, 잘 동작하네..? • TTL에 따라 push 내용 자동 삭제도 되니 좋은걸? • 수만개가 되니 갑자기 서버가 응답 없음..
 
 
 
 

  • 23. push 구조 개선을 통한 효율 증가 - 두번째 코드 • (이 시점엔 문제를 심각하게 생각하지 않았습니다) • 요즘 대세는 Step이 아니고 async 이니, • async를 이용해 볼까?
  • 24. push 구조 개선을 통한 효율 증가 - 두번째 코드
  • 25. push 구조 개선을 통한 효율 증가 - 두번째 코드 • 예상대로 서버는 또 죽었습니다..
  • 26. push 구조 개선을 통한 효율 증가 - 세번째 코드 • 근본적인 문제를 생각하기 시작 • Maximum call stack size exceeded 를 막기 위하여
 나누어 하기로 함 • 5,000개씩 쪼개서.. async.queue 사용 • queue concurrency 는 1로
  • 27. push 구조 개선을 통한 효율 증가 - 세번째 코드
  • 28. push 구조 개선을 통한 효율 증가 - 세번째 코드 • 다행히도 이제 죽지는 않음 • 하지만 전송 시간이 7분
  • 29. push 구조 개선을 통한 효율 증가 - 네번째 코드 • push의 공통 요소 별로 묶되,
 개인화 요소는 개인의 key에만 관리 • async.queue를 이용하되 한번에 push서버로 보냄
 
 
 
 
 user_id: 홍길동 id[0]: 1:읽음 id[1]: 11:안읽음 id: 1 내용: 새로운 요청 id: 11 내용: 새로운 컨텐츠 user_id: 김길동 id[0]: 11:읽음
  • 30. push 구조 개선을 통한 효율 증가 - 네번째 코드 user_id: 홍길동 id[0]: 1:읽음 id[1]: 11:안읽음 id: 1 내용: 새로운 요청 id: 11 내용: 새로운 컨텐츠 user_id: 김길동 id[0]: 11:읽음 user_id: 홍길동 id[0]: 1 id[1]: 11 id: 1 상태: 읽음 내용: 새로운 요청 id: 11 상태: 안읽음 내용: 새로운 컨텐츠 user_id: 김길동 id[0]: 12 id: 12 상태: 읽음 내용: 새로운 컨텐츠
  • 31. push 구조 개선을 통한 효율 증가 - 네번째 코드
  • 32. push 구조 개선을 통한 효율 증가 - 네번째 코드 • 기존 7분 걸리던 것에서 반만 줄여도 성공인데.. • 적용해 보니 20초 만에 수십만 push 처리
 
 
 
 
 

  • 34. 중국에서 서비스 하기 • 한국 인구의 1%는 50만 • 중국 인구의 1%는 1,350만 • 니…하오?
  • 35. 중국에서 node.js 서비스 하기 • 들어가기 전에 • 비즈니스, ICP 관련된 내용은 여기서 다루지 않음 • 제한 사항 • 서버가 중국에 존재해야 할 수 있음 • Frontend/Backend가 두벌이 필요할 수 있음
  • 36. 생각의 전환이 필요합니다 • 중국은 단지 하나의 국가가 아닌 • 또 하나의 global이라고 생각해야 합니다.
 
 
 

  • 37. 어느 cloud를 이용할 것인가 • 설마 서버를 직접 사서 넣진 않았겠죠? • 각 cloud별 비교 테스트 • Aliyun • AWS • Qingcloud
  • 38. 중국의 network 환경 • GFW • 참고: 만리장성(the Great Wall) • 중국의 Great FireWall 을 뜻함 • 외부 ping test • 중국 서버 => 해외 서버(singapore) 24시간 ping test • 패킷 loss 평균 7% • 평균 27X ms
  • 39. 구축 초기 • npm이 왜 이렇게 느리지… • npm loves you, but doesn’t love China? • npm install 실행하고 오랜 시간이 걸릴 때가 종종 있음 • 긴급 배포시 문제가 될 가능성 • npm이 지금은 많이 빨라졌으나, cnpm도 사용 고려
 

  • 40. cnpm이란? • cnpm이란? • china…npm? • https://npm.taobao.org • npm을 중국내 CDN에 주기적으로 동기화 • sync 등의 명령어를 통한 수동 동기화도 지원 • cnpm을 이용한 패키지 인스톨시,
 내부적으로는 npminstall package를 이용합니다. • GitHub private repo 사용 시 문제 발생할 수 있음: --by=npm 옵션 고려
  • 41. 구축 초기 • OS package 업데이트도 오래 걸림 • 즉, node.js 버전업도 오래 걸림 • 가끔 github도 많이 느림 • 긴급 상황에 bug fix 배포가 안될 수도 있음 • 빌드/배포는 중국 서버에서 • 중국내에서 해외로, 해외에서 중국으로 API 호출시 timeout 이 종종 발생
  • 42. 서비스 속도 향상 • 중국내 CDN 사용 • 해외 CDN vs 중국 CDN • 118kb file D/L test: 7.8초 vs 100ms • 글로벌 서버와 전용망 구축 고려 • 하지만 비용이 많이 비쌈
  • 43. 회원 가입 부터가 문제 • 휴대폰 번호 가입을 지원해야 함 • SMS 발송 기능 추가시 abuser 주의 • CAPCHA - ccap • WeChat, Weibo, QQ 등의 중국 SNS 로그인 • passport를 이용 • 중국 외 서버에서 중국 SNS API호출시 느릴 수 있음
  • 44. 결제는 어떻게? • 중국인은 신용카드 사용하지 않음 • iOS: 인앱결제가 가능은 함 • android: 100여개의 앱스토어.. • 현지 PG이용해야 함 • Alipay • Wechatpay
  • 45. 결제는 어떻게? • 대부분 중국어 문서 밖에 없음 • 개발자 문서 번역은? • 번역은 플리토! • 플리토를 이용한 번역 후 작업 • github.com/flitto/wechatpay
  • 46. 개발 문서 번역 예시 除被扫支付场景以外,商户系统先调用该接口 在微信支付服务后台生成预支付交易单,返回正 确的预支付交易回话标识后再按扫码、JSAPI、 APP等不同场景生成交易串调起支付。 vs G사 번역 Flitto 번역
  • 47. App Push 는? • iOS 는 apn을 그대로 사용 • android 는 baidu push를 사용 • node.js 용 공식 라이브러리는 없어서, 직접 개발.. • app SDK 업데이트를 꾸준히 해줘야 함
  • 49. 그 외.. • node.js 특성상 서버 리소스가 비교적 적게 필요함 • 대부분의 인스턴스를 A사의 t2시리즈 사용 중 • 수십만개 push를 보내는 서버도 t2.small 인스턴스 사용중 • 비동기 처리는 사내에 Rule이 있으면 좋음
  • 50. 앞으로 해결해야 하는 문제들 • 더 좋은 번역가 추천 알고리즘 • 지속적인 서비스 개선 • open API • AR, AI, Machine Learning • 쌓여 가고 있는 데이터를 활용한 무언가 • …
  • 51. 앞으로 해결해야 하는 문제들 - 해결책 • 해결하실 수 있는 분은 바로 여러분! • 세상에 없던 서비스를 만들어 나가며, 세상에 없던 문제를 같이 해결해 나갈 분을 찾고 있습니다. • jobs@flitto.com