47
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드 BLUE WIND 백정상

스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

스마트폰 앱 백-엔드 솔루션 개발을위한 Node.js 실전 가이드

BLUE WIND

백정상

Page 2: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

연사 소개

10년차 서버 프로그래머

주로 PC 온라인 게임을 개발

(2003) 크로니클스

(2005) 팀 레볼루션

(2006) 마비노기

(2009) 넥슨 클래식 RPG

(2011) 스틸독

(2011) 마법천자문 온라인

Page 3: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

연사 소개

현재는 BLUE WIND 기술이사

가로세로 온라인

가로세로 2013

B-TOWER

LINE QUIZ

Page 4: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

연사 소개

작년 발표 내용

Page 5: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

BLUE WIND

유서 깊은 모바일 게임 개발사

포트폴리오

Christmas Santa

도둑 루팡

가로세로 낱말맟추기

퀴즈 킹 for kakao

라인 퀴즈

Page 6: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

이런 분들에게 도움이 되길

1인 서버 개발자

앱 개발에 붙일 서버를 만들어야 하는 분

그 서버를 단기간에 만들어야 하는 분

라이브 서비스를 준비중인 Node.js 개발자

Page 7: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

Node.js는 무엇인가

Page 8: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

Node.js

Node.js is a platform built on Chrome's JavaScript runtimefor easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.

http://nodejs.org/

Page 9: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

왜 Node.js를 선택했나

Node.js

오픈 소스

libuv(IOCP) + V8(JIT)의 믿고 쓰는 조합

지속적인 업데이트

잘 작성된 레퍼런스

많은 미국 대기업에서 도입

http://nodejs.org/industry/

Page 10: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

첫 프로젝트 적용 사례

Page 11: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

첫 적용 프로젝트

B-TOWER

Page 12: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

프로젝트 요구사항

징가 스타일 소셜게임

http 프로토콜 베이스 서버

개발 인원 : 클라 1, 서버 1, 기획 1, 디자이너 1

초기 예상 개발 기간 : 3개월

전 세계 출시

안드로이드 아이폰 동시 출시

Page 13: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

첫 서버 구현

HTTP 프로토콜에 대해 잘 모르던 시절

HTTP 프로토콜 1.1 표준 보면서 공부

Node.js 의 http 모듈과 기본 라이브러리 사용하여 전부 구현

Server Push 가 안되쟎아!

Long polling 기법 사용

Page 14: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

server.js

기본 라이브러리로

웹 서비스 전부 다 구현

Page 15: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

필요한 부가 기능들은

기본 라이브러리 만으로도 원하는 기능 거의 다 구현

기능이 없는 경우 서드파티 모듈을 충분히 사용

유용한 서드파티 모듈은 NPM(https://npmjs.org/)을 이용해 탐색

NPM client을 이용해서 다운로드 및 업데이트

이젠 Windows에서도 잘 동작

Page 16: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

유용하게 사용한 기본 라이브러리

http, https

url, querystring

util

buffer, stream

fs

crypto

Page 17: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

유용하게 사용한 서드파티 라이브러리

node-tds (MSSQL)

node-vows (BDD)

node-xml2js (XML->json)

ya-csv (CSV), node-xlsx (XLSX)

node-memcache

node-twitter

node-mysql

node-apns (Apple Push Notification Service)

Page 18: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

라이브 이슈

Page 19: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

라이브 이슈

서버 벤치마크

초기 서비스 환경 설정

로드 밸런서

cluster.js 퍼포먼스

서버 에이전트

Page 20: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

서버 벤치마크

실제 구현한 서버의 성능이 어느 수준일지 미지수였음

컨텐츠가 다 구현 된 후에 사내 테스트 서버에서 측정

단순한 웹 서비스 퍼포먼스 말고, 다른 모듈과 연관된 퍼포먼스가 매우 중요한 이슈였음

Page 21: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

측정 방법

http 서버의 ‘request’이벤트 시점에서 이벤트 완료되어 리스펀스 주는 시점까지의 시간을 측정

밀리세컨드 단위

Page 22: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

테스트 환경

Windows 2008 R2

i5 2500

8GB

SATA HDD 1TB

Node.js + MSSQL + memcached

1 instance

Page 23: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

B-TOWER 벤치마크

6.18

6.35

6.79

6.79

7.07

7.35

22.26

28.39

30.33

82.73

166.26

0.00 20.00 40.00 60.00 80.00 100.00 120.00 140.00 160.00 180.00

/moveRoomToInven

/changebg

/importGameData

/visitFriendTower

/useCash

/exportGameData

/login

/findFriend

/construct

/loadFriends

/matchFriends

평균 응답속도(ms)

평균 응답속도(ms)

Page 24: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

B-TOWER 벤치마크

1.51

1.57

1.64

1.65

1.73

1.73

1.78

1.81

1.82

1.92

0.00 0.50 1.00 1.50 2.00 2.50

/getDailyBonus

/moveRoom

/helpFriend

/givePresent

/getPhoto

/loadHelpers

/playRouletteStaffRoom

/loadInventory

/playStaffRoom

/loadPropertyTable

평균 응답속도(ms)

평균 응답속도(ms)

Page 25: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

분석

상위 랭크는 대부분 DB 연동 리퀘스트

DB와 관련 없는 리퀘스트는 대부분 2ms 미만에 처리

백-엔드보다 DB 튜닝이 퍼포먼스 향상에 더 많은 도움

Page 26: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

초기 라이브 서비스 환경

Amazon Web Services EC2

US East(Northern Virginia)

Small instance * 1 (control server)

Small instance * 1~3 (game server)

Medium instance * 2 (DB server, replication server)

EC2 Load Balancer * 2

Page 27: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

서비스 환경

관리자 컴퓨터 컨트롤 서버

로드 밸런서

게임 서버

DB 서버

DB 리플리케이션

memcached

스마트폰 앱

Page 28: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

로드 밸런서

AWS 로드 밸런서는 Session Stickiness를 80포트만 지원

다른 포트를 사용하는데 Session Stickiness 는 지원해야 됨

서버 로컬 캐시데이터 참조

결제

간단하게 프록시를 Node.js로 제작

라운드 로빈 베이스

Session Stickiness 지원

100줄 미만의 코드로 동작

Page 29: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

프록시

각 서버에 아이디 부여

세션 아이디에 서버 아이디를

포함해 통신중인 서버 확인

Page 30: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

프록시

메시지 포워드는 http 모듈로

Page 31: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

cluster.js 퍼포먼스

Cluster모듈은 node.js의 병렬 처리를 강화하기 위해 만들어짐

근데 실제 멀티코어를 100프로 활용하진 못함

WCF로 구현한 서버와 쿼드코어 머신에서 3~4배 정도 성능 차이가발생

Page 32: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

내부를 보니

process fork 하는 구조

멀티스레드 형태의 구현보단 퍼포먼스가…

ec2 small 인스턴스를 다수 사용하는

방식으로 우회

cluster.js

Page 33: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

서버 에이전트

서버들의 상태를 지속적으로 체크해주는 서버가 필요해짐

100줄 남짓으로 구현

서버들의 상태를 지속적으로 체크하여 서버가 죽을 경우 담당자에게알림

서버 에이전트를 통해 서버 원격제어의 가능성이 열림

Page 34: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

서버 에이전트 구성

관리자 컴퓨터 컨트롤 서버

게임 서버서버 에이전트

1. 주기적으로 서버 상태를 체크

2. 수집한 정보를컨트롤 서버에 전달

3. 컨트롤 서버에서 각서버를 원격 제어

Page 35: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

서버 에이전트

기본 설정

Page 36: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

서버 에이전트

서버 시작, 종료, 재시작

Page 37: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

서버 에이전트

업데이트 / 상태 확인

Page 38: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

서버 에이전트

서버 실행은 스크립트로

Page 39: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

Node.js를 써보니

필요한 백-엔드 기능을 간단하게 만들기 좋음

필요한 게 생기면 일단 빨리 만들어 붙이고

이슈 발생시 적합한 다른 오픈 소스 솔루션으로 교체

퍼포먼스 괜찮음

종합적인 느낌은 잘 훈련한 복서

Page 40: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

추가자료 1. 다음 프로젝트

Page 41: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

다음 프로젝트 요구사항

2D 스테이지 퍼즐게임

한국 출시

유저간 실시간 대전 지원

소셜 기능

방대한 컨텐츠

Page 42: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

다음 프로젝트도

Node.js 를 사용

그래도 아직까진 여러 선택지중에 제일 쓸만함

실시간 대전은 CPP로

Page 43: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

새롭게 도입한 모듈

생산성을 높여준 코어 모듈

express

mongoose

Coffee-script는 사용하다 보류

Webstorm에서도 디버깅이 완벽 지원되지 않음

자바 스크립트의 bad part는 그대로 물려받음

버그 발생시 문제점을 찾기 어려움

Redis는 사용하다 보류

Mongodb만으로도 충분

Mocha는 좋은 테스트 프레임워크

Page 44: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

추가자료 2. B-TOWER 벤치마크 순 데이터

Page 45: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
Page 46: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
Page 47: 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드

감사합니다[email protected]