모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트Dae Kim
CloudBread
클라우드 기반 무료 오픈소스 프로젝트로, 모바일 게임과 모바일 앱에 최적화된 게임 서버 엔진입니다. 모든 서비스는 마이크로소프트의 클라우드 서비스인 Azure에 최적화되어 동작하며, 안정성과 확장성을 목표로 개발 중입니다.
기능
•PaaS / DaaS 서버 엔진•PaaS, DaaS 로 손쉬운 개발 및 서비스 즉시 배포
•Real Auto Scale - PaaS
•개발/테스트/배포 = 통합 환경
•서비스 규모에 따른 앱 변경 없음
글로벌 론칭 아키텍처
•글로벌 론칭+데이터 동기화
•설계 부터 클라우드에 최적화된 아키텍처 및 프레임워크로 개발
•오픈소스 프레임워크 활용 개발
보안, 관리, 기술교육
•저장/통신에 표준 암호화 기술 적용
•기본 관리자 서비스 및 커스터마이징
•분석/관리 배치 작업 추가 제작 가능
개발자 그룹
•페이스북 사용자 그룹 : https://www.facebook.com/groups/cloudBreadProject/
지원되는 모바일 & 클라이언트환경
•iOS, Android, Windows Phone, Windows 스토어앱, Xamarin, PhoneGap, Sencha 등
•Microsoft Azure Mobile Service가 지원하는 모바일 및 다양한 클라이언트 플랫폼 지원 : http://azure.microsoft.com/ko-kr/documentation/services/mobile-services/
설치
•Wiki의 튜토리얼 설치 참조
프로젝트 설명
•모바일게임과 모바일 앱에서 사용되는 사용자의 패턴과 액션을 기록해 기능들을 제공
•클라이언트 모바일 디바이스는 게임서버로 JSON 방식의 데이터를 요청하고 서버가 해당 데이터를 처리 후 응답
•약 100여개의 비즈니스 로직이 기본제공(Wiki 참조)
•클라이언트는 마이크로소프트가 오픈소스로 직접 만들어 제공하는 라이브러리를 통해 서버로 API를 호출
실행 예제와 API 리스트는 Wiki 참조
Contribute/질문/토론
•페이스북 사용자 그룹 : https://www.facebook.com/groups/cloudBreadProject/
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트Dae Kim
CloudBread
클라우드 기반 무료 오픈소스 프로젝트로, 모바일 게임과 모바일 앱에 최적화된 게임 서버 엔진입니다. 모든 서비스는 마이크로소프트의 클라우드 서비스인 Azure에 최적화되어 동작하며, 안정성과 확장성을 목표로 개발 중입니다.
기능
•PaaS / DaaS 서버 엔진•PaaS, DaaS 로 손쉬운 개발 및 서비스 즉시 배포
•Real Auto Scale - PaaS
•개발/테스트/배포 = 통합 환경
•서비스 규모에 따른 앱 변경 없음
글로벌 론칭 아키텍처
•글로벌 론칭+데이터 동기화
•설계 부터 클라우드에 최적화된 아키텍처 및 프레임워크로 개발
•오픈소스 프레임워크 활용 개발
보안, 관리, 기술교육
•저장/통신에 표준 암호화 기술 적용
•기본 관리자 서비스 및 커스터마이징
•분석/관리 배치 작업 추가 제작 가능
개발자 그룹
•페이스북 사용자 그룹 : https://www.facebook.com/groups/cloudBreadProject/
지원되는 모바일 & 클라이언트환경
•iOS, Android, Windows Phone, Windows 스토어앱, Xamarin, PhoneGap, Sencha 등
•Microsoft Azure Mobile Service가 지원하는 모바일 및 다양한 클라이언트 플랫폼 지원 : http://azure.microsoft.com/ko-kr/documentation/services/mobile-services/
설치
•Wiki의 튜토리얼 설치 참조
프로젝트 설명
•모바일게임과 모바일 앱에서 사용되는 사용자의 패턴과 액션을 기록해 기능들을 제공
•클라이언트 모바일 디바이스는 게임서버로 JSON 방식의 데이터를 요청하고 서버가 해당 데이터를 처리 후 응답
•약 100여개의 비즈니스 로직이 기본제공(Wiki 참조)
•클라이언트는 마이크로소프트가 오픈소스로 직접 만들어 제공하는 라이브러리를 통해 서버로 API를 호출
실행 예제와 API 리스트는 Wiki 참조
Contribute/질문/토론
•페이스북 사용자 그룹 : https://www.facebook.com/groups/cloudBreadProject/
어느 해커쏜에 참여한 백엔드 개발자들을 위한 교육자료
쉽게 만든다고 했는데도, 많이 어려웠나봅니다.
제 욕심이 과했던 것 같아요. 담번엔 좀 더 쉽게 !
- 독자 : 백엔드 개발자를 희망하는 사람 (취준생, 이직 희망자), 5년차 이하
- 주요 내용 : 백엔드 개발을 할 때 일어나는 일들(개발팀의 일)
- 비상업적 목적으로 인용은 가능합니다. (출처 명기 필수)
어느 해커쏜에 참여한 백엔드 개발자들을 위한 교육자료
쉽게 만든다고 했는데도, 많이 어려웠나봅니다.
제 욕심이 과했던 것 같아요. 담번엔 좀 더 쉽게 !
- 독자 : 백엔드 개발자를 희망하는 사람 (취준생, 이직 희망자), 5년차 이하
- 주요 내용 : 백엔드 개발을 할 때 일어나는 일들(개발팀의 일)
- 비상업적 목적으로 인용은 가능합니다. (출처 명기 필수)
14. 현재 구조 – 두 개의 백엔드 (큰 문제 없는 것처럼 보임)
View 서버 파일 서버
View만 담당 파일 저장처리만
담당
15. 구조 문제점
View 서버 파일 서버
1. 요청
2. View 서버 폴더에
파일 저장
A가 요청을 B로 보내면
요청 받은 B는 파일을
A에 저장함
2. 파일 불러오기
(view 서버 파일을 불러옴)
3. 파일 요청 / 전송
0. html 파일 안의
Js 에서 모든 요청
html 파일을
render
A B
16. 단일서버 MVC 패턴으로 개선
단방향 데이터
파일처리
단일 서버
불필요한 과정을 없애고,
하나의 서버 내에서 처리
대신 로직 분리를 위해
MVC 패턴 적용 필요
27. Sample 문제 개선 불가
1. HTML 파일 내부의 JS 에서 절대 경로를 통해
데이터를 가져오는 구조
2. 데이터는 항상 같은 경로에서 가져오며,
경로를 변경하면 과거 데이터 읽기 불가능
3. 문제 개선을 위해 sample 을 다른 경로에
만들면 과거 기능 동작 x
데이터 구조를 개선한 신버전 필요
28. 기존 Mediclip 폴더의 JS파일들 생성 방식
1. 회원 stl 파일을 토대로 생성
2. stl 파일을 파싱 후 데이터 값을
JS 파일 생성하여 배열 안에 저장.
문제점 :
1. 데이터가 5개의 파일에 흩어져 있어서 관리가 어려움
2. JS 형태로 만들어서 변수 중복 선언 오류 나타남
29. 개선 방향
1. 데이터를 JSON 형태로 하나의 파일에 저장한다.
- JS형태로 인한 변수 선언 오류 피할 수 있음.
- 관리가 쉽다.
2. JSON을 서버 내에서 parse하여 HTML에 뿌려준다.
- 기존 방식 : HTML에 JS파일 바로 삽입
31. 현재 VisualPrinting 생성하기 순서
1. Medip에서 VisualPrinting 생성하기를 누른다.
2. Stl/Data/회원아이디 폴더 내부에 현재 시간 폴더생성
3. 그 안에 nrrd, stl, js 파일을 ftp로 전송
회원 폴더 내부
시간 폴더 내부
Stl, nrrd, js
생성하기 폴더생성
32. 문제점
1. 회원이 가진 데이터 개수가 많아지면,
보기 힘들 정도로 길어짐.
개선 :
1.아이디 폴더 안에 visualPrinting 폴더로
경로 변경
2. js로 전송하는 files.js를 json 형태로 전송 필요
34. 기존 visualPrinting 리스트 생성 방식
1. 유저가 visualprinting & mediclip 로그인 함.
2. 그 유저의 아이디를 토대로 폴더를 찾아냄
3. 폴더 리스트를 읽은 뒤,
visualprinting_url_list.js 파일을 생성하여,
폴더 이름 값을 JS 변수에 저장함.
문제 : 리스트 삭제, 변경 시 문제 발생, 가독성 x
Visualprinting_url
_list.js 내부
35. 개선 방식
방법1. 목록을, js파일이 아닌, JSON 파일로 저장
(js 파일로 변수 선언할 경우, 변수 겹침 발생)
(가독성 ↑)
방법2. 목록 파일을 만들지 않고, 바로 현재 목록 불러오기
(node.js 의 파일읽기 기능 사용)
방법3. DB사용(stl, nrrd를 저장해야 하는 구조상 어려울 수
있음)
37. 기존 서버 명령어 (forever)
서버 목록 보기
sudo node forever list (Test NAS Server)
sudo forever list (Service NAS Server/연구소 NAS Server)
서버 종료
sudo node forever stop uid sudo forever stop uid (Service NAS Server/연구소 NAS Server)
서버 구동(SRFserver)
서버 구동 명령 : sudo node forever start /volume1/SRF/srfserver/app.js (Test NAS Server)
강제 서버구동 명령 : sudo forever start --minUptime 1000 --spinSleepTime 1000 /volume1/SRF/srfserver/app.js –d false (Service NAS
Server/연구소 NAS Server)
서버 구동(stl)
서버 구동 명령: sudo node forever start /volume1/SRF/stl/app.js
강제 서버구동 명령 : sudo forever start --minUptime 1000 --spinSleepTime 1000 /volume1/SRF/stl/app.js –d false (Service NAS
Server/연구소 NAS Server)
38. 신규 서버 구동 명령어 (pm2)
-서버 시작하기
sudo pm2 start /volume1/SRF/stl/app.js
또는 sudo pm2 start /volume1/SRF/원하는 경로 파일
-원하는 이름으로 서버 시작하기
sudo pm2 start 경로 --name 원하는이름
-서버 리스트 보기 (서버 아이디 볼 수 있음)
sudo pm2 list 또는 sudo pm2 status
-서버 로그보기
sudo pm2 log 서버아이디
- 서버 아이디는 리스트 보기에 나옴.
-서버 멈추기 - 서버 소멸시키기 - 전체 서버 죽이기
sudo pm2 stop 서버아이디 sudo pm2 delete 서버아이디 sudo pm2 kill
-서버 껐다가 재시작 - 무중단 재시작(추천)
sudo pm2 restart 서버아이디 sudo pm2 reload 서버아이디
39. 선택은 자유
Pm2, forever : 같은 기능의 라이브러리, 선택은 자유
Pm2의 장점 :
서버 로그(log)
변경사항 실시간 반영(watch),
무 중단 재시작 기능 제공(reload)
보기 좋은 인터페이스