SlideShare a Scribd company logo
1 of 35
잭블랙이블랙잭을한다
JackBlackIsPlayingBlackJack
김명찬노석민송원석
팀원
김명찬 - 채널서버(로직), 클라이언트
송원석 - 채널서버(로직, DB), 로그인서버
노석민 - 채널서버(네트워크), 클라이언트
게임 서버 만드는 법을 가르쳐 주신
최흥배 교수님
만들려던 것
만들려던 것
만들려던 것
만들려던 것
만든 것
https://goo.gl/y16cju
만든 것
만든 것
만든 것
만든 기능
서버 설명
코드
만든 기능
구조
• 로그인 서버
• 채널 서버
• 클라이언트
만든 기능
채널 서버
로그인 서버
클라이언트
로그인요청
토큰발급
토큰정보 기록
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작업큐에 내용물이 들어올 때마다
해당 작업을 처리한 후 DB작업완료큐에 넣는다.
• 로직은 DB작업완료큐에 내용물이 들어올 때마다
미뤄두었던 해당 로직을 마저 처리한다.
클라이언트
• Recv 쓰레드 하나 띄워서 그냥 계속 Recv 하다
가 패킷 만들어서 메인쓰레드의 Job Queue에 넣
어줌
• 그 외 어쩌고 저쩌고 생략
힘들좋았아쉬웠던 점
힘들었던 점
• 멀티스레드 프로그래밍
– 의도했던 만큼 성능이 안 나오는데 이유를 몰라서 고생
– 처음 해봐서…. 공부는 많이 되었다.
• DB, ASP.NET, IOCP
– 처음 써보는 것들이 많아 노력에 비해 생산성이 많이 떨어짐
• 네트워크 게임을 처음 만들어봄
– 문제 발생 -> 로직 문제일거야 -> 형, 서버 코드 봐봐요 패킷 이
상하게 오는 것 같은데... -> 클라문제였음 -> 반복
좋았던 점
• 멀티스레드 프로그래밍
– 재미있다 하하
• 실력
– 정말 많이 늘었다.
– 기본에 대한 중요성을 많이 느낌.
시스템아키텍쳐, 네트워크에서 배웠던 내용들도..
• 온라인 게임!!!
– 초고수들만 만들 수 있는 건 줄 알았는데..
아쉬웠던 점
• 개발 기간 때문에 대충 타협하고 넘어간 부분들을 전
부 신경 써서 최적화하고 싶음.
• 동접자 테스트를 제대로 해보고 싶다.
• 모바일 버전으로 만들어 보고 싶다.
– Cocos2d-x를 썼으나, winsock을 쓴 데다 windows api를
여기저기 쑤셔 넣어서 포팅하려면 고생 좀 할 듯..
• 닌텐도와 잭블랙에게 라이선스를 받아
출시하고 싶다.
쌩큐
질문?

More Related Content

What's hot

이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
devCAT Studio, NEXON
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션
흥배 최
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
devCAT Studio, NEXON
 
프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기
Hyun-jik Bae
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
Jeongsang Baek
 

What's hot (20)

PHP 와 MySQL을 이용한 게임 랭킹 구축하기
PHP 와 MySQL을 이용한 게임 랭킹 구축하기PHP 와 MySQL을 이용한 게임 랭킹 구축하기
PHP 와 MySQL을 이용한 게임 랭킹 구축하기
 
portfolio-subtitle-convert-김남운
portfolio-subtitle-convert-김남운portfolio-subtitle-convert-김남운
portfolio-subtitle-convert-김남운
 
모바일 Rpg 게임서버 리팩토링
모바일 Rpg 게임서버 리팩토링모바일 Rpg 게임서버 리팩토링
모바일 Rpg 게임서버 리팩토링
 
[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임
 
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
 
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션
 
테드폴허브(올챙이) PostgreSQL 디비 확장하기
테드폴허브(올챙이) PostgreSQL 디비 확장하기테드폴허브(올챙이) PostgreSQL 디비 확장하기
테드폴허브(올챙이) PostgreSQL 디비 확장하기
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
게임서버프로그래밍 #5 - 데이터베이스 핸들링
게임서버프로그래밍 #5 - 데이터베이스 핸들링게임서버프로그래밍 #5 - 데이터베이스 핸들링
게임서버프로그래밍 #5 - 데이터베이스 핸들링
 
문돌이가 가르치는 서버사이드 PHP
문돌이가 가르치는 서버사이드 PHP문돌이가 가르치는 서버사이드 PHP
문돌이가 가르치는 서버사이드 PHP
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
 
Redis on AWS
Redis on AWSRedis on AWS
Redis on AWS
 
EC2용 SSH Tool - Eclair
EC2용 SSH Tool - EclairEC2용 SSH Tool - Eclair
EC2용 SSH Tool - Eclair
 
WebAssembly 101
WebAssembly 101WebAssembly 101
WebAssembly 101
 
프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
 
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
 
[I/O Extended 2019 Incheon] What's new in the Web
[I/O Extended 2019 Incheon] What's new in the Web[I/O Extended 2019 Incheon] What's new in the Web
[I/O Extended 2019 Incheon] What's new in the Web
 
Nodejs를 이용한 개발
Nodejs를 이용한 개발Nodejs를 이용한 개발
Nodejs를 이용한 개발
 

Viewers also liked

게임제작개론 9
게임제작개론 9게임제작개론 9
게임제작개론 9
Seokmin No
 
게임제작개론 5
게임제작개론 5게임제작개론 5
게임제작개론 5
Seokmin No
 
게임제작개론 8
게임제작개론 8게임제작개론 8
게임제작개론 8
Seokmin No
 
KGCA 2011-04-06 Speech
KGCA 2011-04-06 SpeechKGCA 2011-04-06 Speech
KGCA 2011-04-06 Speech
노진 곽
 
GameMath-Chapter 07 조명
GameMath-Chapter 07 조명GameMath-Chapter 07 조명
GameMath-Chapter 07 조명
Mark Choi
 
영상제작의 미학적 원리와 방법 1강(1장 오리엔테이션)
영상제작의 미학적 원리와 방법 1강(1장 오리엔테이션)영상제작의 미학적 원리와 방법 1강(1장 오리엔테이션)
영상제작의 미학적 원리와 방법 1강(1장 오리엔테이션)
커뮤니케이션북스(주)
 
Tv프로그램기획제작론.01 포맷의 새로운 분석
Tv프로그램기획제작론.01 포맷의 새로운 분석Tv프로그램기획제작론.01 포맷의 새로운 분석
Tv프로그램기획제작론.01 포맷의 새로운 분석
커뮤니케이션북스(주)
 

Viewers also liked (20)

게임제작개론 9
게임제작개론 9게임제작개론 9
게임제작개론 9
 
게임제작개론 5
게임제작개론 5게임제작개론 5
게임제작개론 5
 
게임제작개론 8
게임제작개론 8게임제작개론 8
게임제작개론 8
 
123
123123
123
 
게임서버프로그래밍 #6 - 예외처리 및 로깅
게임서버프로그래밍 #6 - 예외처리 및 로깅게임서버프로그래밍 #6 - 예외처리 및 로깅
게임서버프로그래밍 #6 - 예외처리 및 로깅
 
게임제작개론: #1 게임 구성 요소의 이해
게임제작개론: #1 게임 구성 요소의 이해게임제작개론: #1 게임 구성 요소의 이해
게임제작개론: #1 게임 구성 요소의 이해
 
게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가게임서버프로그래밍 #8 - 성능 평가
게임서버프로그래밍 #8 - 성능 평가
 
Essence of Game
Essence of GameEssence of Game
Essence of Game
 
KGCA 2011-04-06 Speech
KGCA 2011-04-06 SpeechKGCA 2011-04-06 Speech
KGCA 2011-04-06 Speech
 
게임의 분류
게임의 분류게임의 분류
게임의 분류
 
GameMath-Chapter 07 조명
GameMath-Chapter 07 조명GameMath-Chapter 07 조명
GameMath-Chapter 07 조명
 
영상제작의 미학적 원리와 방법 1강(1장 오리엔테이션)
영상제작의 미학적 원리와 방법 1강(1장 오리엔테이션)영상제작의 미학적 원리와 방법 1강(1장 오리엔테이션)
영상제작의 미학적 원리와 방법 1강(1장 오리엔테이션)
 
왜 게임에 빠질까 Chap 3,4,5,6
왜 게임에 빠질까 Chap 3,4,5,6왜 게임에 빠질까 Chap 3,4,5,6
왜 게임에 빠질까 Chap 3,4,5,6
 
영화연출과 게임 레벨디자인에 기반한 Vr컨텐츠 제작 장명곤
영화연출과 게임 레벨디자인에 기반한 Vr컨텐츠 제작 장명곤영화연출과 게임 레벨디자인에 기반한 Vr컨텐츠 제작 장명곤
영화연출과 게임 레벨디자인에 기반한 Vr컨텐츠 제작 장명곤
 
비주얼 스토리텔링의 재미요소 설계
비주얼 스토리텔링의 재미요소 설계비주얼 스토리텔링의 재미요소 설계
비주얼 스토리텔링의 재미요소 설계
 
방송기획제작의 기초(개정판) 1장
방송기획제작의 기초(개정판) 1장방송기획제작의 기초(개정판) 1장
방송기획제작의 기초(개정판) 1장
 
언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.
 
게임제작개론: #3 간접통제와 게임 커뮤니티
게임제작개론: #3 간접통제와 게임 커뮤니티게임제작개론: #3 간접통제와 게임 커뮤니티
게임제작개론: #3 간접통제와 게임 커뮤니티
 
Tv프로그램기획제작론.01 포맷의 새로운 분석
Tv프로그램기획제작론.01 포맷의 새로운 분석Tv프로그램기획제작론.01 포맷의 새로운 분석
Tv프로그램기획제작론.01 포맷의 새로운 분석
 
All That Puzzle Games
All That Puzzle GamesAll That Puzzle Games
All That Puzzle Games
 

Similar to 잭블랙이블랙잭을한다 - 최종발표

Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
cranbe95
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
devCAT Studio, NEXON
 
임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011
devCAT Studio, NEXON
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
devCAT Studio, NEXON
 

Similar to 잭블랙이블랙잭을한다 - 최종발표 (20)

Place site Design
Place site DesignPlace site Design
Place site Design
 
Pwnable study basic_1
Pwnable study basic_1Pwnable study basic_1
Pwnable study basic_1
 
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
 
모바일 SNG 비동기 네트워크 통신 사례
모바일 SNG 비동기 네트워크 통신 사례모바일 SNG 비동기 네트워크 통신 사례
모바일 SNG 비동기 네트워크 통신 사례
 
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
 
하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
Dynamodb 삽질기
Dynamodb 삽질기Dynamodb 삽질기
Dynamodb 삽질기
 
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기 [아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
 
요람(CreateProcess)에서 무덤(ResumeThread)까지
요람(CreateProcess)에서 무덤(ResumeThread)까지요람(CreateProcess)에서 무덤(ResumeThread)까지
요람(CreateProcess)에서 무덤(ResumeThread)까지
 
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
 
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011
 
Ahea Team Spring batch
Ahea Team Spring batchAhea Team Spring batch
Ahea Team Spring batch
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 

잭블랙이블랙잭을한다 - 최종발표