SlideShare a Scribd company logo
1 of 33
버클리 DB  를 이용한 게임 서버 제작 공봉식 [email_address]
버클리 DB  란 ? ,[object Object]
특징
라이브러리 형태의  DB 이다 ,[object Object],[object Object]
단일 key/ 단일 data  구조 ,[object Object],[object Object],[object Object]
SQL  문을 지원하지 않는다 ,[object Object],[object Object]
뛰어난 성능 ,[object Object],[object Object]
ACID  를 보장하는 트랜잭션 ,[object Object],[object Object],[object Object]
파일  /  메모리 양쪽 모두 사용 가능 ,[object Object],[object Object],[object Object]
사용이 간단하다 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
다양한 언어를 지원한다 ,[object Object],[object Object],[object Object]
오픈소스 라이센싱 ,[object Object]
단점
외부에서 데이터를 볼 수 없다 ,[object Object],[object Object]
백업 ,  미러링 등의 고급 기능이 없다 . ,[object Object],[object Object]
통계용으로 사용하기 힘들다 ,[object Object],[object Object],[object Object]
게임 서버와 버클리 DB
시작은 다크스타 . ,[object Object],[object Object],[object Object],[object Object]
서버의 태스크 분할 형태로 변화 ,[object Object],[object Object]
HitTask() { BeginTransaction(); A = GetForRead(); B = GetForUpdate(); B.Hp -= A.Att; Commit(); } *  태스크의 예 트랜잭션을 시작한다 . A 에 대해 읽기 락을 건다 . 이제  A 에 대해서 쓰기락을 걸 수 없다 . B 에 대해 쓰기 락을 건다 . 이제  B 에 대해서 읽기 / 쓰기 락을 걸 수 없다 . 실제  B  데이터를 수정한다 . 트랜잭션을 커밋한다 . B 의 변경점을 적용하고  A 와  B 의 락킹을 푼다 .
하지만 이런 시스템을 구축하는 건  쉽지 않다 . ,[object Object],[object Object]
버클리 DB  는 이 모든 요구조건을 충족한다 . ,[object Object]
데모 서버엔진
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
데이터를 관리한다 . 내부에는 버클리 DB 를 사용하고 있다 . 트랜잭션 ,  데이터 체크아웃 ,  체크인 기능을 제공한다 . 응용프로그램 동작을 정의한다 . 단순한 광부 AI  를 제작하여 동작하도록  구현하였다 .  (*Programming game AI by example 2 장 ) 네트워크를 담당한다 . 데모버전에서는 실제 네트워크를 구현하지 않고  mock  객체로 구현하였다 . TBB  를 사용하여 태스크 스케쥴러를 작성하였다 . 딜레이 태스크 ,  반복 태스크등을 지원한다 .
네트워크 패킷 태스크 매니져 BeginTransacton 세션 핸들러 OnRecv() Commit 1.  클라이언트로부터 메시지를 수신 2.  태스크 매니져에  메시지 처리 태스크를 추가한다 . 3.  태스크 시작에  트랜잭션을 시작한다 . 4.  실제 메시지를  처리한다 . 이 과정에서 객체 상태 가 변화한다 . 5.  태스크 마지막에 커밋하여 변경점을 적용한다 .
사용예
//  광부를 만든다 . ServerMiner miner; m_minerRef = g_DataManager::Instance().CreateReference(&miner); 광부 객체를  DataManager  를 통해서 메모리 DB 에 쓰고 그 참조객체를 반환한다 . 앞으로 생성한 광부를 객체를 접근하기 위해서 참조객체를 사용하게 된다 . Task() { ServerMiner* pMiner = m_minerRef.GetForUpdate(); if (pMiner != NULL) { pMiner->receivedMessage(_msg); } } 광부를 쓰기 권한을 읽는다 . 메시지를 처리함으로써 광부 상태가 변경된다 . 태스크 종료시 변경점이 자동으로  Commit  된다 . 또한 데드락 발생시  RollBack  된 뒤 태스크가 일정 횟수까지  재실행 된다 .
특징
Application  에서는 싱글쓰레드 ,[object Object],[object Object]
멤버 변수로 포인터를 사용할 수 없다 . ,[object Object],[object Object],[object Object]
최소 의존 컴포넌트 구현 ,[object Object],[object Object]
반복자나 무거운 작업은 별도 태스크로 분리 ,[object Object],[object Object]

More Related Content

What's hot

Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서흥배 최
 
WAS의 동작과 WEB, Servlet, JSP_Wh apm
WAS의 동작과 WEB, Servlet, JSP_Wh apmWAS의 동작과 WEB, Servlet, JSP_Wh apm
WAS의 동작과 WEB, Servlet, JSP_Wh apm엑셈
 
Microsoft pp lpdf
Microsoft pp lpdfMicrosoft pp lpdf
Microsoft pp lpdfHYUNWOO KIM
 
웹 서버의 기능 및 역할_Wh apm
웹 서버의 기능 및 역할_Wh apm웹 서버의 기능 및 역할_Wh apm
웹 서버의 기능 및 역할_Wh apm엑셈
 
WAS와 웹서버 간단 정리
WAS와 웹서버 간단 정리WAS와 웹서버 간단 정리
WAS와 웹서버 간단 정리ChangHyeon Bae
 
Bottled water 요약 설명 20151114
Bottled water 요약 설명 20151114Bottled water 요약 설명 20151114
Bottled water 요약 설명 20151114Daeyong Shin
 
다중성 확보, 시스템 안정화
다중성 확보, 시스템 안정화다중성 확보, 시스템 안정화
다중성 확보, 시스템 안정화Choonghyun Yang
 
Mysql replication
Mysql replicationMysql replication
Mysql replicationThreeSnakes
 
LevelDB 간단한 소개
LevelDB 간단한 소개LevelDB 간단한 소개
LevelDB 간단한 소개종빈 오
 
Mongodb 관리
Mongodb 관리Mongodb 관리
Mongodb 관리흥배 최
 
Pg day seoul 2016 session_02_v1.0_ff
Pg day seoul 2016 session_02_v1.0_ffPg day seoul 2016 session_02_v1.0_ff
Pg day seoul 2016 session_02_v1.0_ffPgDay.Seoul
 
Servlet&jsp 1장
Servlet&jsp 1장Servlet&jsp 1장
Servlet&jsp 1장JeongBong Kim
 
JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본Myungjin Lee
 
JSP 프로그래밍 #03 서블릿
JSP 프로그래밍 #03 서블릿JSP 프로그래밍 #03 서블릿
JSP 프로그래밍 #03 서블릿Myungjin Lee
 
함수형사고 실용적사고
함수형사고 실용적사고함수형사고 실용적사고
함수형사고 실용적사고Sunggon Song
 
JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍Myungjin Lee
 
그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조Choonghyun Yang
 

What's hot (20)

Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
 
WAS의 동작과 WEB, Servlet, JSP_Wh apm
WAS의 동작과 WEB, Servlet, JSP_Wh apmWAS의 동작과 WEB, Servlet, JSP_Wh apm
WAS의 동작과 WEB, Servlet, JSP_Wh apm
 
Microsoft pp lpdf
Microsoft pp lpdfMicrosoft pp lpdf
Microsoft pp lpdf
 
Mongo jdbc
Mongo jdbcMongo jdbc
Mongo jdbc
 
웹 서버의 기능 및 역할_Wh apm
웹 서버의 기능 및 역할_Wh apm웹 서버의 기능 및 역할_Wh apm
웹 서버의 기능 및 역할_Wh apm
 
WAS와 웹서버 간단 정리
WAS와 웹서버 간단 정리WAS와 웹서버 간단 정리
WAS와 웹서버 간단 정리
 
Bottled water 요약 설명 20151114
Bottled water 요약 설명 20151114Bottled water 요약 설명 20151114
Bottled water 요약 설명 20151114
 
다중성 확보, 시스템 안정화
다중성 확보, 시스템 안정화다중성 확보, 시스템 안정화
다중성 확보, 시스템 안정화
 
Mysql replication
Mysql replicationMysql replication
Mysql replication
 
LevelDB 간단한 소개
LevelDB 간단한 소개LevelDB 간단한 소개
LevelDB 간단한 소개
 
Mongodb 관리
Mongodb 관리Mongodb 관리
Mongodb 관리
 
Pg day seoul 2016 session_02_v1.0_ff
Pg day seoul 2016 session_02_v1.0_ffPg day seoul 2016 session_02_v1.0_ff
Pg day seoul 2016 session_02_v1.0_ff
 
Servlet&jsp 1장
Servlet&jsp 1장Servlet&jsp 1장
Servlet&jsp 1장
 
JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본
 
What is the meteor?
What is the meteor?What is the meteor?
What is the meteor?
 
Learning HTML5
Learning HTML5Learning HTML5
Learning HTML5
 
JSP 프로그래밍 #03 서블릿
JSP 프로그래밍 #03 서블릿JSP 프로그래밍 #03 서블릿
JSP 프로그래밍 #03 서블릿
 
함수형사고 실용적사고
함수형사고 실용적사고함수형사고 실용적사고
함수형사고 실용적사고
 
JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍
 
그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조그림으로 공부하는 오라클 구조
그림으로 공부하는 오라클 구조
 

Similar to 버클리Db 를 이용한 게임 서버 제작

Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료ssuser776e2d
 
Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피ssuser776e2d
 
안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기은아 정
 
All about JDBC Performance Tuning_Wh apm
All about JDBC Performance Tuning_Wh apmAll about JDBC Performance Tuning_Wh apm
All about JDBC Performance Tuning_Wh apm엑셈
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Hyosang Hong
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Hyosang Hong
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드중선 곽
 
게임을 위한 AWS의 다양한 관리형 Database 서비스 Hands on Lab (김성수 솔루션즈 아키텍트, AWS) :: Gaming ...
게임을 위한 AWS의 다양한 관리형 Database 서비스 Hands on Lab (김성수 솔루션즈 아키텍트, AWS) :: Gaming ...게임을 위한 AWS의 다양한 관리형 Database 서비스 Hands on Lab (김성수 솔루션즈 아키텍트, AWS) :: Gaming ...
게임을 위한 AWS의 다양한 관리형 Database 서비스 Hands on Lab (김성수 솔루션즈 아키텍트, AWS) :: Gaming ...Amazon Web Services Korea
 
Sql Server 2005 개요
Sql Server 2005 개요Sql Server 2005 개요
Sql Server 2005 개요beamofhope
 
spark database Service
spark database Servicespark database Service
spark database Service창언 정
 
Spring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDDSpring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDDSanghyuk Jung
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbieDaeMyung Kang
 
LucideWorks Banana 소개
LucideWorks Banana 소개 LucideWorks Banana 소개
LucideWorks Banana 소개 SuHyun Jeon
 
[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿AnselmKim
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드cranbe95
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드중선 곽
 
손쉬운 데이터 연결 방법(라이브바인딩 활용)
손쉬운 데이터 연결 방법(라이브바인딩 활용)손쉬운 데이터 연결 방법(라이브바인딩 활용)
손쉬운 데이터 연결 방법(라이브바인딩 활용)Devgear
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용중선 곽
 

Similar to 버클리Db 를 이용한 게임 서버 제작 (20)

Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료
 
Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피
 
안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기
 
All about JDBC Performance Tuning_Wh apm
All about JDBC Performance Tuning_Wh apmAll about JDBC Performance Tuning_Wh apm
All about JDBC Performance Tuning_Wh apm
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드
 
게임을 위한 AWS의 다양한 관리형 Database 서비스 Hands on Lab (김성수 솔루션즈 아키텍트, AWS) :: Gaming ...
게임을 위한 AWS의 다양한 관리형 Database 서비스 Hands on Lab (김성수 솔루션즈 아키텍트, AWS) :: Gaming ...게임을 위한 AWS의 다양한 관리형 Database 서비스 Hands on Lab (김성수 솔루션즈 아키텍트, AWS) :: Gaming ...
게임을 위한 AWS의 다양한 관리형 Database 서비스 Hands on Lab (김성수 솔루션즈 아키텍트, AWS) :: Gaming ...
 
Sql Server 2005 개요
Sql Server 2005 개요Sql Server 2005 개요
Sql Server 2005 개요
 
Html5
Html5 Html5
Html5
 
spark database Service
spark database Servicespark database Service
spark database Service
 
Spring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDDSpring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDD
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbie
 
LucideWorks Banana 소개
LucideWorks Banana 소개 LucideWorks Banana 소개
LucideWorks Banana 소개
 
[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿
 
CouchDB - Introduction - Korean
CouchDB - Introduction - KoreanCouchDB - Introduction - Korean
CouchDB - Introduction - Korean
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드
 
손쉬운 데이터 연결 방법(라이브바인딩 활용)
손쉬운 데이터 연결 방법(라이브바인딩 활용)손쉬운 데이터 연결 방법(라이브바인딩 활용)
손쉬운 데이터 연결 방법(라이브바인딩 활용)
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 

More from Vong Sik Kong

Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가Vong Sik Kong
 
TDD in gameserver 발표자료
TDD in gameserver 발표자료TDD in gameserver 발표자료
TDD in gameserver 발표자료Vong Sik Kong
 
HolubOnPatterns/chapter3_2
HolubOnPatterns/chapter3_2HolubOnPatterns/chapter3_2
HolubOnPatterns/chapter3_2Vong Sik Kong
 
게임 서버 기술 현황 및 전망
게임 서버 기술 현황 및 전망게임 서버 기술 현황 및 전망
게임 서버 기술 현황 및 전망Vong Sik Kong
 
6장 그래프 알고리즘
6장 그래프 알고리즘6장 그래프 알고리즘
6장 그래프 알고리즘Vong Sik Kong
 

More from Vong Sik Kong (8)

UPnP 발표자료
UPnP 발표자료UPnP 발표자료
UPnP 발표자료
 
Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가
 
TDD in gameserver 발표자료
TDD in gameserver 발표자료TDD in gameserver 발표자료
TDD in gameserver 발표자료
 
Hadoop발표자료
Hadoop발표자료Hadoop발표자료
Hadoop발표자료
 
HolubOnPatterns/chapter3_2
HolubOnPatterns/chapter3_2HolubOnPatterns/chapter3_2
HolubOnPatterns/chapter3_2
 
Chap10
Chap10Chap10
Chap10
 
게임 서버 기술 현황 및 전망
게임 서버 기술 현황 및 전망게임 서버 기술 현황 및 전망
게임 서버 기술 현황 및 전망
 
6장 그래프 알고리즘
6장 그래프 알고리즘6장 그래프 알고리즘
6장 그래프 알고리즘
 

버클리Db 를 이용한 게임 서버 제작

  • 1. 버클리 DB 를 이용한 게임 서버 제작 공봉식 [email_address]
  • 2.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 14.
  • 15.
  • 16.
  • 18.
  • 19.
  • 20. HitTask() { BeginTransaction(); A = GetForRead(); B = GetForUpdate(); B.Hp -= A.Att; Commit(); } * 태스크의 예 트랜잭션을 시작한다 . A 에 대해 읽기 락을 건다 . 이제 A 에 대해서 쓰기락을 걸 수 없다 . B 에 대해 쓰기 락을 건다 . 이제 B 에 대해서 읽기 / 쓰기 락을 걸 수 없다 . 실제 B 데이터를 수정한다 . 트랜잭션을 커밋한다 . B 의 변경점을 적용하고 A 와 B 의 락킹을 푼다 .
  • 21.
  • 22.
  • 24.
  • 25. 데이터를 관리한다 . 내부에는 버클리 DB 를 사용하고 있다 . 트랜잭션 , 데이터 체크아웃 , 체크인 기능을 제공한다 . 응용프로그램 동작을 정의한다 . 단순한 광부 AI 를 제작하여 동작하도록 구현하였다 . (*Programming game AI by example 2 장 ) 네트워크를 담당한다 . 데모버전에서는 실제 네트워크를 구현하지 않고 mock 객체로 구현하였다 . TBB 를 사용하여 태스크 스케쥴러를 작성하였다 . 딜레이 태스크 , 반복 태스크등을 지원한다 .
  • 26. 네트워크 패킷 태스크 매니져 BeginTransacton 세션 핸들러 OnRecv() Commit 1. 클라이언트로부터 메시지를 수신 2. 태스크 매니져에 메시지 처리 태스크를 추가한다 . 3. 태스크 시작에 트랜잭션을 시작한다 . 4. 실제 메시지를 처리한다 . 이 과정에서 객체 상태 가 변화한다 . 5. 태스크 마지막에 커밋하여 변경점을 적용한다 .
  • 28. // 광부를 만든다 . ServerMiner miner; m_minerRef = g_DataManager::Instance().CreateReference(&miner); 광부 객체를 DataManager 를 통해서 메모리 DB 에 쓰고 그 참조객체를 반환한다 . 앞으로 생성한 광부를 객체를 접근하기 위해서 참조객체를 사용하게 된다 . Task() { ServerMiner* pMiner = m_minerRef.GetForUpdate(); if (pMiner != NULL) { pMiner->receivedMessage(_msg); } } 광부를 쓰기 권한을 읽는다 . 메시지를 처리함으로써 광부 상태가 변경된다 . 태스크 종료시 변경점이 자동으로 Commit 된다 . 또한 데드락 발생시 RollBack 된 뒤 태스크가 일정 횟수까지 재실행 된다 .
  • 30.
  • 31.
  • 32.
  • 33.