SlideShare a Scribd company logo
잭블랙이블랙잭을한다
JackBlackIsPlayingBlackJack
김명찬노석민송원석
스크린샷 : 블랙잭
만든 기능
시연
서버 설명
코드
만든 기능
구조
• 로그인 서버
• 채널 서버
• 클라이언트
만든 기능
채널 서버
로그인 서버
클라이언트
로그인 요청
토큰 발급
토큰정보 기록
DB (MySQL)
게임기록
조회
로그인
정보 조회
플레이
로그인 서버
• C#_Asp.Net, Http를 이용하여 구현
• 회원 가입 , 로그인
• 현재 게임에 접속중인 유저 (중복 로그인 방지)
• 현재 가동중인 서버 리스트를 관리 (IP주소 포함)
채널 서버
• C++, winsock, IOCP를 이용하여 구현
• 방 + 게임 진행
• 비어있는 방에 바로 집어넣음.
– 로비 등등 없음.
클라이언트
• C++, Cocos2d-x, winsock
• 로그인 서버와 http로 통신 (Cocos2d-x)
• 로그인 서버에게 받은 채널 목록에서 채널선택
기타
• 로비(룸 리스트)는 없고, 접속 시 빈 방으로 빠른
참여
• 칩 충전은 횟수 제한 없음.
• 유저마다 고유 포켓몬(아이콘)이 있다
기타
• 게임 룰
– 17 soft stand
– Split : Only 1 time.
– Double down : Only when player has 2 cards.
시연
서버
서버
• 로직 쓰레드 : 1개
• 네트워크 쓰레드 :
– 워커 쓰레드 다수
– 센드 쓰레드 1
– 리슨 쓰레드 1
• 디비 쓰레드
서버 구조
메인 스
레드
작업 큐
IOCP
Listen
스레드
Worker
Worker
Worker
Worker
Awake
Enque
Deque
패킷 작업
로직
네트워크
• 리슨 쓰레드는 새로운 클라이언트가 들어올 때마
다 IOCP에 등록후 WSARecv 작업만을 반복한다.
서버 구조
메인 스
레드
작업 큐
IOCP
Listen
스레드
Worker
Worker
Worker
Worker
Awake
Enque
Deque
패킷 작업
로직
네트워크
• 워커 쓰레드는 IOCP에 등록된 클라이언트들에게
서 받은 데이터가 있을 때마다
• 해당 데이터를 패킷으로 만들어서
RecvPacketQueue에 Push한다.
서버 구조 : Logic & DB
메인 스
레드
send 큐로직 처리
DB
manager
DB담당
Send
스레드
전송
DB recv 큐
DB
스레드
DB
스레드
DB
스레드
DB
스레드
전송
응답
네트워크
• 센드 쓰레드는 SendPacketQueue를 주시하고 있
다가 내용물이 있다면 들어있는 패킷을 보내야 할
클라이언트에게 보낸다.
로직
• RecvPacketQueue에서 하나씩 꺼내서 처리한다.
• 클라이언트에게 알릴때는 SendPackQue 이용.
• DB작업이 필요할 경우 DB작업큐에 넣음
DB
• DB 쓰레드는 DB작업큐에 내용물이 들어올 때마다
(SetEvent) 해당 작업을 처리한 후 DB작업완료
큐에 넣는다.
• 로직은 DB작업완료큐에 내용물이 들어올 때마다
미뤄두었던 해당 로직을 마저 처리한다.
클라이언트
• Recv 쓰레드 하나 띄워서 그냥 계속 Recv 하다
가 패킷 만들어서 메인쓰레드의 Job Queue에 넣
어줌
• 그 외 서버 과목이니까 생략
힘들좋았던 점
힘들었던 점 - 명찬
• 멀티스레드…
– 성능이 안 나오는데 이유를 몰라서 고생
• DB, ASP.NET, IOCP 처음 써보는 것들이 많아
노력에 비해 생산성이 떨어진 듯…
• 미리 좀 할걸
– 지금이 제일 힘듦. 졸려…
• 교수님 ㅠㅠ 코드리뷰 좀,
– 지금 짜고 있는 패턴이 잘한 건지 못한 건지…
좋았던 점 - 명찬
• 리팩토링
– 내 맘대로 해도 팀원들이 잘 받아줌
• 멀티스레드
– 하다보니 재밌음
• 추상적인 설계
– Proactor
– 생각한대로 된다고? 신기하네…
힘들었던 점 - 석민
• 시간이 부족
– 초중반까지는 구조 고민해가며 최선이라고 생각하는 방법으로 짰지만, 나중에
는 시간이 없어서 노가다 코드, 땜빵 코드, 더티 코드 작렬(특히 클라)
• 네트워크 게임을 처음 만들어봄
– 문제 발생 -> 로직 문제일거야 -> 형, 서버 코드 봐봐요 패킷 이상하게 오는
거 같은데.. -> 클라문제 -> 반복
• 코딩 실력이 딸림
– 하면서 많이 늘긴 했다.
• 죄송
– 기획 등등 거의 내 위주로 주장하고 내 의견만 고집했던 것 같다.
– 팀원들이 잘 받아주어서 문제는 없었지만, 조화롭게 잘 섞여서 프로젝트 진행
하는 법도 배우고 싶었는데 잘 안됐다.
좋았던 점 - 석민
• 팀원들
– 많이 떼쓰고 그랬는데 잘 받아주셨다.
– 협업하는 과정에서 많이 배웠다.
• 클라 완성도
– 검증된 리소스를 막 긁어다 붙였더니
예쁘게(순전히 내 기준) 나왔다.
• 실력
– 정말 많이 늘었다.
– 10,000줄짜리 프로그램 살면서 처음 짜봤다.
힘들었던 점 - 원석
• 다른 프로젝트/과제랑 동시에 진행하는 것
– 제대로 프로젝트를 하려면 너무 일을 크게 벌리면 안될 듯..
• 코드 마음에 들게 짜는게 어려움
– 시간이 부족하고.. 피곤하고.. 코딩하면서 빚이 늘어남..
• 멀티 스레드 프로그래밍
– 어려움..
• 밤 새면 힘들어요..
좋았던 점 - 원석
• 네트워크 게임을 만드는 것
– 자체로 좋았음
• 새로운 것들을 많이 해봄
– 멀티 스레딩, ASP.NET 등..
• 돌아가는게 신기해서 좋았음
다시 만든다면?
• 명찬
– DB 쓰레드 쪽을 최적화 하고 싶음.
– 감정표현 추가 해서 발표해야지…
• 석민
– 닌텐도와 잭블랙에게 라이선스를 받아 출시하고 싶다.
• 원석
– 로그인 서버를 제대로 만들고 싶음. 레디스도..
쌩큐

More Related Content

What's hot

게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv
Seungmo Koo
 
게임서버프로그래밍 #3 - 메모리 및 오브젝트 풀링
게임서버프로그래밍 #3 - 메모리 및 오브젝트 풀링게임서버프로그래밍 #3 - 메모리 및 오브젝트 풀링
게임서버프로그래밍 #3 - 메모리 및 오브젝트 풀링
Seungmo Koo
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
Seungmo Koo
 
임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011devCAT Studio, NEXON
 
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
flashscope
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theorem
Seungmo Koo
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013devCAT Studio, NEXON
 
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013devCAT Studio, NEXON
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가
Seungmo Koo
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들
Hyunjik Bae
 
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
devCAT Studio, NEXON
 
모바일 Rpg 게임서버 리팩토링
모바일 Rpg 게임서버 리팩토링모바일 Rpg 게임서버 리팩토링
모바일 Rpg 게임서버 리팩토링
기환 천
 
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
영호 김
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
QooJuice
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
devCAT Studio, NEXON
 
PHP 와 MySQL을 이용한 게임 랭킹 구축하기
PHP 와 MySQL을 이용한 게임 랭킹 구축하기PHP 와 MySQL을 이용한 게임 랭킹 구축하기
PHP 와 MySQL을 이용한 게임 랭킹 구축하기
Yo-Chang Song
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
devCAT Studio, NEXON
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
Miyu Park
 
이승재, 실시간 HTTP 양방향 통신, NDC2012
이승재, 실시간 HTTP 양방향 통신, NDC2012이승재, 실시간 HTTP 양방향 통신, NDC2012
이승재, 실시간 HTTP 양방향 통신, NDC2012devCAT Studio, NEXON
 

What's hot (20)

게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv
 
게임서버프로그래밍 #3 - 메모리 및 오브젝트 풀링
게임서버프로그래밍 #3 - 메모리 및 오브젝트 풀링게임서버프로그래밍 #3 - 메모리 및 오브젝트 풀링
게임서버프로그래밍 #3 - 메모리 및 오브젝트 풀링
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
 
임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011
 
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theorem
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
 
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들
 
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
 
모바일 Rpg 게임서버 리팩토링
모바일 Rpg 게임서버 리팩토링모바일 Rpg 게임서버 리팩토링
모바일 Rpg 게임서버 리팩토링
 
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
PHP 와 MySQL을 이용한 게임 랭킹 구축하기
PHP 와 MySQL을 이용한 게임 랭킹 구축하기PHP 와 MySQL을 이용한 게임 랭킹 구축하기
PHP 와 MySQL을 이용한 게임 랭킹 구축하기
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
 
이승재, 실시간 HTTP 양방향 통신, NDC2012
이승재, 실시간 HTTP 양방향 통신, NDC2012이승재, 실시간 HTTP 양방향 통신, NDC2012
이승재, 실시간 HTTP 양방향 통신, NDC2012
 

Similar to 잭블랙이블랙잭을한다 - 수업용 발표

요람(CreateProcess)에서 무덤(ResumeThread)까지
요람(CreateProcess)에서 무덤(ResumeThread)까지요람(CreateProcess)에서 무덤(ResumeThread)까지
요람(CreateProcess)에서 무덤(ResumeThread)까지
Hyoje Jo
 
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기 [아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
iFunFactory Inc.
 
모바일 SNG 비동기 네트워크 통신 사례
모바일 SNG 비동기 네트워크 통신 사례모바일 SNG 비동기 네트워크 통신 사례
모바일 SNG 비동기 네트워크 통신 사례
성수 이
 
Pwnable study basic_1
Pwnable study basic_1Pwnable study basic_1
Pwnable study basic_1
Jinkyoung Kim
 
프로그래머에게 사랑받는 게임 기획서 작성법
프로그래머에게 사랑받는 게임 기획서 작성법프로그래머에게 사랑받는 게임 기획서 작성법
프로그래머에게 사랑받는 게임 기획서 작성법
Lee Sangkyoon (Kay)
 
뒷북요정으로 알아보는 사용자 요구 반영의 나쁜 예
뒷북요정으로 알아보는 사용자 요구 반영의 나쁜 예뒷북요정으로 알아보는 사용자 요구 반영의 나쁜 예
뒷북요정으로 알아보는 사용자 요구 반영의 나쁜 예
gnomekr
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
cranbe95
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
Place site Design
Place site DesignPlace site Design
Place site Design
HaYoungChoi17
 
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
Minwoo Kim
 
NHN NEXT 2014년도 게임트랙 소개
NHN NEXT 2014년도 게임트랙 소개 NHN NEXT 2014년도 게임트랙 소개
NHN NEXT 2014년도 게임트랙 소개
Seungmo Koo
 
Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기
YEONG-CHEON YOU
 
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
YEONG-CHEON YOU
 
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
Yi-kwon Hwang
 
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Jinuk Kim
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
devCAT Studio, NEXON
 
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
준철 박
 
에어헌터 for kakao 포스트모템(공개용)
에어헌터 for kakao 포스트모템(공개용)에어헌터 for kakao 포스트모템(공개용)
에어헌터 for kakao 포스트모템(공개용)
Woo Yeong Choi
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Esun Kim
 
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
iFunFactory Inc.
 

Similar to 잭블랙이블랙잭을한다 - 수업용 발표 (20)

요람(CreateProcess)에서 무덤(ResumeThread)까지
요람(CreateProcess)에서 무덤(ResumeThread)까지요람(CreateProcess)에서 무덤(ResumeThread)까지
요람(CreateProcess)에서 무덤(ResumeThread)까지
 
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기 [아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
 
모바일 SNG 비동기 네트워크 통신 사례
모바일 SNG 비동기 네트워크 통신 사례모바일 SNG 비동기 네트워크 통신 사례
모바일 SNG 비동기 네트워크 통신 사례
 
Pwnable study basic_1
Pwnable study basic_1Pwnable study basic_1
Pwnable study basic_1
 
프로그래머에게 사랑받는 게임 기획서 작성법
프로그래머에게 사랑받는 게임 기획서 작성법프로그래머에게 사랑받는 게임 기획서 작성법
프로그래머에게 사랑받는 게임 기획서 작성법
 
뒷북요정으로 알아보는 사용자 요구 반영의 나쁜 예
뒷북요정으로 알아보는 사용자 요구 반영의 나쁜 예뒷북요정으로 알아보는 사용자 요구 반영의 나쁜 예
뒷북요정으로 알아보는 사용자 요구 반영의 나쁜 예
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
Place site Design
Place site DesignPlace site Design
Place site Design
 
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈
 
NHN NEXT 2014년도 게임트랙 소개
NHN NEXT 2014년도 게임트랙 소개 NHN NEXT 2014년도 게임트랙 소개
NHN NEXT 2014년도 게임트랙 소개
 
Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기
 
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
 
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
 
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
 
에어헌터 for kakao 포스트모템(공개용)
에어헌터 for kakao 포스트모템(공개용)에어헌터 for kakao 포스트모템(공개용)
에어헌터 for kakao 포스트모템(공개용)
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
 

More from Seokmin No

SiegeMode! C++ Advanced Project Ver
SiegeMode! C++ Advanced Project VerSiegeMode! C++ Advanced Project Ver
SiegeMode! C++ Advanced Project Ver
Seokmin No
 
MsgPack 정리
MsgPack 정리MsgPack 정리
MsgPack 정리
Seokmin No
 
Wtl로 소레미 만들기
Wtl로 소레미 만들기Wtl로 소레미 만들기
Wtl로 소레미 만들기
Seokmin No
 
게임제작개론 8
게임제작개론 8게임제작개론 8
게임제작개론 8Seokmin No
 
게임제작개론 9
게임제작개론 9게임제작개론 9
게임제작개론 9Seokmin No
 
게임제작개론 5
게임제작개론 5게임제작개론 5
게임제작개론 5Seokmin No
 
123
123123

More from Seokmin No (7)

SiegeMode! C++ Advanced Project Ver
SiegeMode! C++ Advanced Project VerSiegeMode! C++ Advanced Project Ver
SiegeMode! C++ Advanced Project Ver
 
MsgPack 정리
MsgPack 정리MsgPack 정리
MsgPack 정리
 
Wtl로 소레미 만들기
Wtl로 소레미 만들기Wtl로 소레미 만들기
Wtl로 소레미 만들기
 
게임제작개론 8
게임제작개론 8게임제작개론 8
게임제작개론 8
 
게임제작개론 9
게임제작개론 9게임제작개론 9
게임제작개론 9
 
게임제작개론 5
게임제작개론 5게임제작개론 5
게임제작개론 5
 
123
123123
123
 

잭블랙이블랙잭을한다 - 수업용 발표

  • 5. 구조 • 로그인 서버 • 채널 서버 • 클라이언트
  • 6. 만든 기능 채널 서버 로그인 서버 클라이언트 로그인 요청 토큰 발급 토큰정보 기록 DB (MySQL) 게임기록 조회 로그인 정보 조회 플레이
  • 7. 로그인 서버 • C#_Asp.Net, Http를 이용하여 구현 • 회원 가입 , 로그인 • 현재 게임에 접속중인 유저 (중복 로그인 방지) • 현재 가동중인 서버 리스트를 관리 (IP주소 포함)
  • 8. 채널 서버 • C++, winsock, IOCP를 이용하여 구현 • 방 + 게임 진행 • 비어있는 방에 바로 집어넣음. – 로비 등등 없음.
  • 9. 클라이언트 • C++, Cocos2d-x, winsock • 로그인 서버와 http로 통신 (Cocos2d-x) • 로그인 서버에게 받은 채널 목록에서 채널선택
  • 10. 기타 • 로비(룸 리스트)는 없고, 접속 시 빈 방으로 빠른 참여 • 칩 충전은 횟수 제한 없음. • 유저마다 고유 포켓몬(아이콘)이 있다
  • 11. 기타 • 게임 룰 – 17 soft stand – Split : Only 1 time. – Double down : Only when player has 2 cards.
  • 14. 서버 • 로직 쓰레드 : 1개 • 네트워크 쓰레드 : – 워커 쓰레드 다수 – 센드 쓰레드 1 – 리슨 쓰레드 1 • 디비 쓰레드
  • 15. 서버 구조 메인 스 레드 작업 큐 IOCP Listen 스레드 Worker Worker Worker Worker Awake Enque Deque 패킷 작업 로직
  • 16. 네트워크 • 리슨 쓰레드는 새로운 클라이언트가 들어올 때마 다 IOCP에 등록후 WSARecv 작업만을 반복한다.
  • 17. 서버 구조 메인 스 레드 작업 큐 IOCP Listen 스레드 Worker Worker Worker Worker Awake Enque Deque 패킷 작업 로직
  • 18. 네트워크 • 워커 쓰레드는 IOCP에 등록된 클라이언트들에게 서 받은 데이터가 있을 때마다 • 해당 데이터를 패킷으로 만들어서 RecvPacketQueue에 Push한다.
  • 19. 서버 구조 : Logic & DB 메인 스 레드 send 큐로직 처리 DB manager DB담당 Send 스레드 전송 DB recv 큐 DB 스레드 DB 스레드 DB 스레드 DB 스레드 전송 응답
  • 20. 네트워크 • 센드 쓰레드는 SendPacketQueue를 주시하고 있 다가 내용물이 있다면 들어있는 패킷을 보내야 할 클라이언트에게 보낸다.
  • 21. 로직 • RecvPacketQueue에서 하나씩 꺼내서 처리한다. • 클라이언트에게 알릴때는 SendPackQue 이용. • DB작업이 필요할 경우 DB작업큐에 넣음
  • 22. DB • DB 쓰레드는 DB작업큐에 내용물이 들어올 때마다 (SetEvent) 해당 작업을 처리한 후 DB작업완료 큐에 넣는다. • 로직은 DB작업완료큐에 내용물이 들어올 때마다 미뤄두었던 해당 로직을 마저 처리한다.
  • 23. 클라이언트 • Recv 쓰레드 하나 띄워서 그냥 계속 Recv 하다 가 패킷 만들어서 메인쓰레드의 Job Queue에 넣 어줌 • 그 외 서버 과목이니까 생략
  • 25. 힘들었던 점 - 명찬 • 멀티스레드… – 성능이 안 나오는데 이유를 몰라서 고생 • DB, ASP.NET, IOCP 처음 써보는 것들이 많아 노력에 비해 생산성이 떨어진 듯… • 미리 좀 할걸 – 지금이 제일 힘듦. 졸려… • 교수님 ㅠㅠ 코드리뷰 좀, – 지금 짜고 있는 패턴이 잘한 건지 못한 건지…
  • 26. 좋았던 점 - 명찬 • 리팩토링 – 내 맘대로 해도 팀원들이 잘 받아줌 • 멀티스레드 – 하다보니 재밌음 • 추상적인 설계 – Proactor – 생각한대로 된다고? 신기하네…
  • 27. 힘들었던 점 - 석민 • 시간이 부족 – 초중반까지는 구조 고민해가며 최선이라고 생각하는 방법으로 짰지만, 나중에 는 시간이 없어서 노가다 코드, 땜빵 코드, 더티 코드 작렬(특히 클라) • 네트워크 게임을 처음 만들어봄 – 문제 발생 -> 로직 문제일거야 -> 형, 서버 코드 봐봐요 패킷 이상하게 오는 거 같은데.. -> 클라문제 -> 반복 • 코딩 실력이 딸림 – 하면서 많이 늘긴 했다. • 죄송 – 기획 등등 거의 내 위주로 주장하고 내 의견만 고집했던 것 같다. – 팀원들이 잘 받아주어서 문제는 없었지만, 조화롭게 잘 섞여서 프로젝트 진행 하는 법도 배우고 싶었는데 잘 안됐다.
  • 28. 좋았던 점 - 석민 • 팀원들 – 많이 떼쓰고 그랬는데 잘 받아주셨다. – 협업하는 과정에서 많이 배웠다. • 클라 완성도 – 검증된 리소스를 막 긁어다 붙였더니 예쁘게(순전히 내 기준) 나왔다. • 실력 – 정말 많이 늘었다. – 10,000줄짜리 프로그램 살면서 처음 짜봤다.
  • 29. 힘들었던 점 - 원석 • 다른 프로젝트/과제랑 동시에 진행하는 것 – 제대로 프로젝트를 하려면 너무 일을 크게 벌리면 안될 듯.. • 코드 마음에 들게 짜는게 어려움 – 시간이 부족하고.. 피곤하고.. 코딩하면서 빚이 늘어남.. • 멀티 스레드 프로그래밍 – 어려움.. • 밤 새면 힘들어요..
  • 30. 좋았던 점 - 원석 • 네트워크 게임을 만드는 것 – 자체로 좋았음 • 새로운 것들을 많이 해봄 – 멀티 스레딩, ASP.NET 등.. • 돌아가는게 신기해서 좋았음
  • 31. 다시 만든다면? • 명찬 – DB 쓰레드 쪽을 최적화 하고 싶음. – 감정표현 추가 해서 발표해야지… • 석민 – 닌텐도와 잭블랙에게 라이선스를 받아 출시하고 싶다. • 원석 – 로그인 서버를 제대로 만들고 싶음. 레디스도..