SlideShare a Scribd company logo
스마트폰 앱 백-엔드 솔루션 개발을
위한 Node.js 실전 가이드
BLUE WIND
백정상
연사 소개


10년차 서버 프로그래머



주로 PC 온라인 게임을 개발


(2003) 크로니클스



(2005) 팀 레볼루션



(2006) 마비노기



(2009) 넥슨 클래식 RPG



(2011) 스틸독



(2011) 마법천자문 온라인
연사 소개


현재는 BLUE WIND 기술이사


가로세로 온라인



가로세로 2013



B-TOWER



LINE QUIZ
연사 소개


작년 발표 내용
BLUE WIND


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



포트폴리오


Christmas Santa



도둑 루팡



가로세로 낱말맟추기



퀴즈 킹 for kakao



라인 퀴즈
이런 분들에게 도움이 되길


1인 서버 개발자



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



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



라이브 서비스를 준비중인 Node.js 개발자
Node.js는 무엇인가
Node.js


Node.js is a platform built on Chrome's JavaScript runtime
for 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/
왜 Node.js를 선택했나


Node.js


오픈 소스



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



지속적인 업데이트



잘 작성된 레퍼런스



많은 미국 대기업에서 도입

http://nodejs.org/industry/
첫 프로젝트 적용 사례
첫 적용 프로젝트


B-TOWER
프로젝트 요구사항


징가 스타일 소셜게임



http 프로토콜 베이스 서버



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



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



전 세계 출시



안드로이드 아이폰 동시 출시
첫 서버 구현


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

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



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



Server Push 가 안되쟎아!


Long polling 기법 사용
server.js


기본 라이브러리로

웹 서비스 전부 다 구현
필요한 부가 기능들은


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



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



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



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

이젠 Windows에서도 잘 동작
유용하게 사용한 기본 라이브러리


http, https



url, querystring



util



buffer, stream



fs



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

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)
라이브 이슈
라이브 이슈


서버 벤치마크



초기 서비스 환경 설정



로드 밸런서



cluster.js 퍼포먼스



서버 에이전트
서버 벤치마크


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



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



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

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



밀리세컨드 단위
테스트 환경


Windows 2008 R2



i5 2500



8GB



SATA HDD 1TB



Node.js + MSSQL + memcached



1 instance
B-TOWER 벤치마크
평균 응답속도(ms)
/matchFriends

166.26

/loadFriends

82.73

/construct

30.33

28.39

/findFriend
/login

22.26

/exportGameData

7.35

/useCash

7.07

/visitFriendTower

6.79

/importGameData

6.79

/changebg

6.35

/moveRoomToInven

6.18

0.00

20.00

40.00

60.00

80.00

평균 응답속도(ms)

100.00

120.00

140.00

160.00

180.00
B-TOWER 벤치마크
평균 응답속도(ms)
/loadPropertyTable

1.92

/playStaffRoom

1.82

/loadInventory

1.81

1.78

/playRouletteStaffRoom

/loadHelpers

1.73

/getPhoto

1.73

/givePresent

1.65

/helpFriend

1.64

/moveRoom

1.57

/getDailyBonus
0.00

1.51
0.50

1.00
평균 응답속도(ms)

1.50

2.00

2.50
분석


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



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



백-엔드보다 DB 튜닝이 퍼포먼스 향상에 더 많은 도움
초기 라이브 서비스 환경


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
서비스 환경

memcached

게임 서버
DB 서버
관리자 컴퓨터

스마트폰 앱

컨트롤 서버

로드 밸런서
DB 리플리케이션
로드 밸런서


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



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



서버 로컬 캐시데이터 참조
결제

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

라운드 로빈 베이스



Session Stickiness 지원



100줄 미만의 코드로 동작
프록시


각 서버에 아이디 부여



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

포함해 통신중인 서버 확인
프록시


메시지 포워드는 http 모듈로
cluster.js 퍼포먼스


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



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



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

process fork 하는 구조



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



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

방식으로 우회

cluster.js
서버 에이전트


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



100줄 남짓으로 구현



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



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

게임 서버

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

관리자 컴퓨터

컨트롤 서버

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

1. 주기적으로 서버 상태를 체크
서버 에이전트


기본 설정
서버 에이전트


서버 시작, 종료, 재시작
서버 에이전트


업데이트 / 상태 확인
서버 에이전트


서버 실행은 스크립트로
Node.js를 써보니


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

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



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



퍼포먼스 괜찮음



종합적인 느낌은 잘 훈련한 복서
추가자료 1. 다음 프로젝트
다음 프로젝트 요구사항


2D 스테이지 퍼즐게임



한국 출시



유저간 실시간 대전 지원



소셜 기능



방대한 컨텐츠
다음 프로젝트도


Node.js 를 사용




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

실시간 대전은 CPP로
새롭게 도입한 모듈


생산성을 높여준 코어 모듈





express
mongoose

Coffee-script는 사용하다 보류



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





Webstorm에서도 디버깅이 완벽 지원되지 않음
버그 발생시 문제점을 찾기 어려움

Redis는 사용하다 보류




Mongodb만으로도 충분

Mocha는 좋은 테스트 프레임워크
추가자료 2. B-TOWER 벤치마크 순 데이터
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
감사합니다
jsbaek@abluewind.com

More Related Content

PPTX
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
Kiyoung Moon
 
PPTX
Node.js + Websocket 삽질기
Paprikhan
 
PDF
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
Heungsub Lee
 
PPTX
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
Jeongsang Baek
 
PDF
FIFA 온라인 3의 MongoDB 사용기
Jongwon Kim
 
PPTX
게임 분산 서버 구조
Hyunjik Bae
 
PPTX
T119_5年間の試行錯誤で進化したMVPVMパターン
伸男 伊藤
 
PDF
온라인 게임 처음부터 끝까지 동적언어로 만들기
Seungjae Lee
 
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
Kiyoung Moon
 
Node.js + Websocket 삽질기
Paprikhan
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
Heungsub Lee
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
Jeongsang Baek
 
FIFA 온라인 3의 MongoDB 사용기
Jongwon Kim
 
게임 분산 서버 구조
Hyunjik Bae
 
T119_5年間の試行錯誤で進化したMVPVMパターン
伸男 伊藤
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
Seungjae Lee
 

What's hot (20)

PDF
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
 
PDF
임태현, 게임 서버 디자인 가이드, NDC2013
devCAT Studio, NEXON
 
PDF
Python 게임서버 안녕하십니까 : RPC framework 편
준철 박
 
PPTX
Next-generation MMORPG service architecture
Jongwon Kim
 
PDF
Lock free queue
Bongseok Cho
 
PDF
중앙 서버 없는 게임 로직
Hoyoung Choi
 
PDF
MMOG Server-Side 충돌 및 이동처리 설계와 구현
YEONG-CHEON YOU
 
PDF
테라로 살펴본 MMORPG의 논타겟팅 시스템
QooJuice
 
PDF
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
devCAT Studio, NEXON
 
PDF
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
 
PDF
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
devCAT Studio, NEXON
 
PPT
게임 기획과 Oop
snugdc
 
PDF
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
Seungmo Koo
 
PPTX
分散システムについて語らせてくれ
Kumazaki Hiroki
 
PDF
게임강연정리
Jeong Min Hwang
 
PDF
ソーシャルゲームの為のデータベース設計
kaminashi
 
PDF
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
준철 박
 
PDF
Iocp 기본 구조 이해
Nam Hyeonuk
 
PDF
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
 
PPTX
Neovim으로 생산성 퀀텀점프하기 by 이재열
Excelcon
 
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
 
임태현, 게임 서버 디자인 가이드, NDC2013
devCAT Studio, NEXON
 
Python 게임서버 안녕하십니까 : RPC framework 편
준철 박
 
Next-generation MMORPG service architecture
Jongwon Kim
 
Lock free queue
Bongseok Cho
 
중앙 서버 없는 게임 로직
Hoyoung Choi
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
YEONG-CHEON YOU
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
QooJuice
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
devCAT Studio, NEXON
 
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
devCAT Studio, NEXON
 
게임 기획과 Oop
snugdc
 
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
Seungmo Koo
 
分散システムについて語らせてくれ
Kumazaki Hiroki
 
게임강연정리
Jeong Min Hwang
 
ソーシャルゲームの為のデータベース設計
kaminashi
 
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
준철 박
 
Iocp 기본 구조 이해
Nam Hyeonuk
 
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
 
Neovim으로 생산성 퀀텀점프하기 by 이재열
Excelcon
 
Ad

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

PDF
Netra intro v4
uEngine Solutions
 
PPT
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea Strike
 
PDF
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
Jinuk Kim
 
PDF
Play node conference
John Kim
 
PDF
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
JinKwon Lee
 
PDF
AWS 관리형 서비스를 중심으로 한 NCSOFT 와 Reality Reflection의 클라우드 사용기 - AWS Summit Seoul ...
Amazon Web Services Korea
 
PDF
Javascript everywhere - Node.js | Devon 2012
Daum DNA
 
PPTX
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
SeungYong Oh
 
PPTX
빠르게훓어보는 Node.js와 Vert.x
Terry Cho
 
PDF
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
Tommy Lee
 
PDF
Nodejs발표자료 - 팀 세미나용
SuHyun Jeon
 
PPTX
1711 azure-live
세준 김
 
PPTX
개발자 지향 WAS : IBM WebSphere Liberty Server
JungWoon Lee
 
PDF
서버학개론(백엔드 서버 개발자를 위한)
SU BO KIM
 
PDF
[IoT] MAKE with Open H/W + Node.JS - 3rd
Park Jonggun
 
PPTX
Node.js의 도입과 활용
Jin wook
 
PDF
CoreDot TechSeminar 2018 - Session2 Ji Donghyun
Core.Today
 
PDF
[IGC2018] 에이스프로젝트 안현석 - 유니티로 실시간 멀티플레이 게임서버를 만들 수 있을까?
강 민우
 
PDF
[IGC2018] 에이스프로젝트 안현석 - 유니티로 실시간 멀티플레이 게임서버를 만들수 있을까
영석 양
 
PDF
Laravel로 스타트업 기술 스택 구성하기
KwangSeob Jeong
 
Netra intro v4
uEngine Solutions
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea Strike
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
Jinuk Kim
 
Play node conference
John Kim
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
JinKwon Lee
 
AWS 관리형 서비스를 중심으로 한 NCSOFT 와 Reality Reflection의 클라우드 사용기 - AWS Summit Seoul ...
Amazon Web Services Korea
 
Javascript everywhere - Node.js | Devon 2012
Daum DNA
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
SeungYong Oh
 
빠르게훓어보는 Node.js와 Vert.x
Terry Cho
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
Tommy Lee
 
Nodejs발표자료 - 팀 세미나용
SuHyun Jeon
 
1711 azure-live
세준 김
 
개발자 지향 WAS : IBM WebSphere Liberty Server
JungWoon Lee
 
서버학개론(백엔드 서버 개발자를 위한)
SU BO KIM
 
[IoT] MAKE with Open H/W + Node.JS - 3rd
Park Jonggun
 
Node.js의 도입과 활용
Jin wook
 
CoreDot TechSeminar 2018 - Session2 Ji Donghyun
Core.Today
 
[IGC2018] 에이스프로젝트 안현석 - 유니티로 실시간 멀티플레이 게임서버를 만들 수 있을까?
강 민우
 
[IGC2018] 에이스프로젝트 안현석 - 유니티로 실시간 멀티플레이 게임서버를 만들수 있을까
영석 양
 
Laravel로 스타트업 기술 스택 구성하기
KwangSeob Jeong
 
Ad

More from Jeongsang Baek (6)

PPTX
로그 기깔나게 잘 디자인하는 법
Jeongsang Baek
 
PDF
[NDC16] (애드브릭스) 라이브마이그레이션 분투기 - 달리는 분석 툴의 바퀴를 갈아 끼워보자!
Jeongsang Baek
 
PPTX
NDC15_백정상_최종_모바일_앱의_실시간_운영을_위한_유저분석과_타게팅_기법
Jeongsang Baek
 
PDF
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
Jeongsang Baek
 
PDF
Inside node.js
Jeongsang Baek
 
PPTX
What’s new in c++11
Jeongsang Baek
 
로그 기깔나게 잘 디자인하는 법
Jeongsang Baek
 
[NDC16] (애드브릭스) 라이브마이그레이션 분투기 - 달리는 분석 툴의 바퀴를 갈아 끼워보자!
Jeongsang Baek
 
NDC15_백정상_최종_모바일_앱의_실시간_운영을_위한_유저분석과_타게팅_기법
Jeongsang Baek
 
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
Jeongsang Baek
 
Inside node.js
Jeongsang Baek
 
What’s new in c++11
Jeongsang Baek
 

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