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

Like this? Share it with your network

Share

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

on

  • 6,883 views

 

Statistics

Views

Total Views
6,883
Views on SlideShare
6,854
Embed Views
29

Actions

Likes
32
Downloads
132
Comments
1

1 Embed 29

https://twitter.com 29

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • 1. 스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드 BLUE WIND 백정상
  • 2. 연사 소개  10년차 서버 프로그래머  주로 PC 온라인 게임을 개발  (2003) 크로니클스  (2005) 팀 레볼루션  (2006) 마비노기  (2009) 넥슨 클래식 RPG  (2011) 스틸독  (2011) 마법천자문 온라인
  • 3. 연사 소개  현재는 BLUE WIND 기술이사  가로세로 온라인  가로세로 2013  B-TOWER  LINE QUIZ
  • 4. 연사 소개  작년 발표 내용
  • 5. BLUE WIND  유서 깊은 모바일 게임 개발사  포트폴리오  Christmas Santa  도둑 루팡  가로세로 낱말맟추기  퀴즈 킹 for kakao  라인 퀴즈
  • 6. 이런 분들에게 도움이 되길  1인 서버 개발자  앱 개발에 붙일 서버를 만들어야 하는 분  그 서버를 단기간에 만들어야 하는 분  라이브 서비스를 준비중인 Node.js 개발자
  • 7. Node.js는 무엇인가
  • 8. 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/
  • 9. 왜 Node.js를 선택했나  Node.js  오픈 소스  libuv(IOCP) + V8(JIT)의 믿고 쓰는 조합  지속적인 업데이트  잘 작성된 레퍼런스  많은 미국 대기업에서 도입 http://nodejs.org/industry/
  • 10. 첫 프로젝트 적용 사례
  • 11. 첫 적용 프로젝트  B-TOWER
  • 12. 프로젝트 요구사항  징가 스타일 소셜게임  http 프로토콜 베이스 서버  개발 인원 : 클라 1, 서버 1, 기획 1, 디자이너 1  초기 예상 개발 기간 : 3개월  전 세계 출시  안드로이드 아이폰 동시 출시
  • 13. 첫 서버 구현  HTTP 프로토콜에 대해 잘 모르던 시절  HTTP 프로토콜 1.1 표준 보면서 공부  Node.js 의 http 모듈과 기본 라이브러리 사용하여 전부 구현  Server Push 가 안되쟎아!  Long polling 기법 사용
  • 14. server.js  기본 라이브러리로 웹 서비스 전부 다 구현
  • 15. 필요한 부가 기능들은  기본 라이브러리 만으로도 원하는 기능 거의 다 구현  기능이 없는 경우 서드파티 모듈을 충분히 사용  유용한 서드파티 모듈은 NPM(https://npmjs.org/)을 이용해 탐색  NPM client을 이용해서 다운로드 및 업데이트  이젠 Windows에서도 잘 동작
  • 16. 유용하게 사용한 기본 라이브러리  http, https  url, querystring  util  buffer, stream  fs  crypto
  • 17. 유용하게 사용한 서드파티 라이브러리  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)
  • 18. 라이브 이슈
  • 19. 라이브 이슈  서버 벤치마크  초기 서비스 환경 설정  로드 밸런서  cluster.js 퍼포먼스  서버 에이전트
  • 20. 서버 벤치마크  실제 구현한 서버의 성능이 어느 수준일지 미지수였음  컨텐츠가 다 구현 된 후에 사내 테스트 서버에서 측정  단순한 웹 서비스 퍼포먼스 말고, 다른 모듈과 연관된 퍼포먼스가 매 우 중요한 이슈였음
  • 21. 측정 방법  http 서버의 ‘request’이벤트 시점에서 이벤트 완료되어 리스펀스 주 는 시점까지의 시간을 측정  밀리세컨드 단위
  • 22. 테스트 환경  Windows 2008 R2  i5 2500  8GB  SATA HDD 1TB  Node.js + MSSQL + memcached  1 instance
  • 23. 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
  • 24. 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
  • 25. 분석  상위 랭크는 대부분 DB 연동 리퀘스트  DB와 관련 없는 리퀘스트는 대부분 2ms 미만에 처리  백-엔드보다 DB 튜닝이 퍼포먼스 향상에 더 많은 도움
  • 26. 초기 라이브 서비스 환경  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
  • 27. 서비스 환경 memcached 게임 서버 DB 서버 관리자 컴퓨터 스마트폰 앱 컨트롤 서버 로드 밸런서 DB 리플리케이션
  • 28. 로드 밸런서  AWS 로드 밸런서는 Session Stickiness를 80포트만 지원  다른 포트를 사용하는데 Session Stickiness 는 지원해야 됨    서버 로컬 캐시데이터 참조 결제 간단하게 프록시를 Node.js로 제작  라운드 로빈 베이스  Session Stickiness 지원  100줄 미만의 코드로 동작
  • 29. 프록시  각 서버에 아이디 부여  세션 아이디에 서버 아이디를 포함해 통신중인 서버 확인
  • 30. 프록시  메시지 포워드는 http 모듈로
  • 31. cluster.js 퍼포먼스  Cluster모듈은 node.js의 병렬 처리를 강화하기 위해 만들어짐  근데 실제 멀티코어를 100프로 활용하진 못함  WCF로 구현한 서버와 쿼드코어 머신에서 3~4배 정도 성능 차이가 발생
  • 32. 내부를 보니  process fork 하는 구조  멀티스레드 형태의 구현보단 퍼포먼스가…  ec2 small 인스턴스를 다수 사용하는 방식으로 우회 cluster.js
  • 33. 서버 에이전트  서버들의 상태를 지속적으로 체크해주는 서버가 필요해짐  100줄 남짓으로 구현  서버들의 상태를 지속적으로 체크하여 서버가 죽을 경우 담당자에게 알림  서버 에이전트를 통해 서버 원격제어의 가능성이 열림
  • 34. 서버 에이전트 구성 서버 에이전트 게임 서버 3. 컨트롤 서버에서 각 서버를 원격 제어 관리자 컴퓨터 컨트롤 서버 2. 수집한 정보를 컨트롤 서버에 전달 1. 주기적으로 서버 상태를 체크
  • 35. 서버 에이전트  기본 설정
  • 36. 서버 에이전트  서버 시작, 종료, 재시작
  • 37. 서버 에이전트  업데이트 / 상태 확인
  • 38. 서버 에이전트  서버 실행은 스크립트로
  • 39. Node.js를 써보니  필요한 백-엔드 기능을 간단하게 만들기 좋음  필요한 게 생기면 일단 빨리 만들어 붙이고  이슈 발생시 적합한 다른 오픈 소스 솔루션으로 교체  퍼포먼스 괜찮음  종합적인 느낌은 잘 훈련한 복서
  • 40. 추가자료 1. 다음 프로젝트
  • 41. 다음 프로젝트 요구사항  2D 스테이지 퍼즐게임  한국 출시  유저간 실시간 대전 지원  소셜 기능  방대한 컨텐츠
  • 42. 다음 프로젝트도  Node.js 를 사용   그래도 아직까진 여러 선택지중에 제일 쓸만함 실시간 대전은 CPP로
  • 43. 새롭게 도입한 모듈  생산성을 높여준 코어 모듈    express mongoose Coffee-script는 사용하다 보류   자바 스크립트의 bad part는 그대로 물려받음   Webstorm에서도 디버깅이 완벽 지원되지 않음 버그 발생시 문제점을 찾기 어려움 Redis는 사용하다 보류   Mongodb만으로도 충분 Mocha는 좋은 테스트 프레임워크
  • 44. 추가자료 2. B-TOWER 벤치마크 순 데이터
  • 45. 감사합니다 jsbaek@abluewind.com