SlideShare a Scribd company logo
2019 iFunFactory Dev Day
‘아이펀 엔진으로 MO 게임 서버 개발하기’
‘아이펀 엔진으로 MO 게임 서버 개발하기’
2019 iFunFactory Dev Day
2
문대경 CEO
환영합니다!
2019 iFunFactory Dev Day
1. 소켓 프로그래밍 개론
2. 게임 서버 개론
3. 아이펀 엔진 소개
4. 이어지는 세션 소개
3
2019 iFunFactory Dev Day 4
소켓이란?
2019 iFunFactory Dev Day 5
소켓이란?
2019 iFunFactory Dev Day 6
소켓이란?
2019 iFunFactory Dev Day 7
소켓이란?
2019 iFunFactory Dev Day 7
소켓이란?
2019 iFunFactory Dev Day 7
소켓이란?
➢ (기능을 추가 하기 위해서 혹은 제공되는 기능을 쓰기 위해서…)
2019 iFunFactory Dev Day 7
소켓이란?
➢ (기능을 추가 하기 위해서 혹은 제공되는 기능을 쓰기 위해서…)
➢ 그렇다면, 소켓 프로그래밍은 “어떤 기능” 을 쓰기 위해서 빨대를 꽂는 것
2019 iFunFactory Dev Day 7
소켓이란?
➢ (기능을 추가 하기 위해서 혹은 제공되는 기능을 쓰기 위해서…)
➢ 그렇다면, 소켓 프로그래밍은 “어떤 기능” 을 쓰기 위해서 빨대를 꽂는 것
➢ 어떤 기능??
2019 iFunFactory Dev Day 8
TCP/IP 계층 구조와 전송 데이터 구조
Network
Interface
IP
TCP
Application
Network
Interface
IP
TCP
Application
The
Internet
2019 iFunFactory Dev Day 8
TCP/IP 계층 구조와 전송 데이터 구조
Network
Interface
IP
TCP
Application
Network
Interface
IP
TCP
Application
The
Internet
DATA
2019 iFunFactory Dev Day 8
TCP/IP 계층 구조와 전송 데이터 구조
Network
Interface
IP
TCP
Application
Network
Interface
IP
TCP
Application
The
Internet
DATAH
2019 iFunFactory Dev Day 8
TCP/IP 계층 구조와 전송 데이터 구조
Network
Interface
IP
TCP
Application
Network
Interface
IP
TCP
Application
The
Internet
DATA
H
H
2019 iFunFactory Dev Day 8
TCP/IP 계층 구조와 전송 데이터 구조
Network
Interface
IP
TCP
Application
Network
Interface
IP
TCP
Application
The
Internet
DATA
H
H
H
2019 iFunFactory Dev Day 8
TCP/IP 계층 구조와 전송 데이터 구조
Network
Interface
IP
TCP
Application
Network
Interface
IP
TCP
Application
The
Internet
DATA
H
H
H
H
2019 iFunFactory Dev Day 8
TCP/IP 계층 구조와 전송 데이터 구조
Network
Interface
IP
TCP
Application
Network
Interface
IP
TCP
Application
The
Internet
DATA
H
H
H
H
1. “H” 로 된 부분을 헤더(header) 라고 합니다.
즉, 각 프로토콜은 “헤더“+”데이터"형태입니다.
2019 iFunFactory Dev Day 8
TCP/IP 계층 구조와 전송 데이터 구조
Network
Interface
IP
TCP
Application
Network
Interface
IP
TCP
Application
The
Internet
DATA
H
H
H
H
1. “H” 로 된 부분을 헤더(header) 라고 합니다.
즉, 각 프로토콜은 “헤더“+”데이터"형태입니다.
2. 헤더는 택배 송장처럼 송수신자의 주소가
들어갑니다. (MAC, IP, Port, Msg type)
2019 iFunFactory Dev Day 8
TCP/IP 계층 구조와 전송 데이터 구조
Network
Interface
IP
TCP
Application
Network
Interface
IP
TCP
Application
The
Internet
DATA
H
H
H
H
1. “H” 로 된 부분을 헤더(header) 라고 합니다.
즉, 각 프로토콜은 “헤더“+”데이터"형태입니다.
2. 헤더는 택배 송장처럼 송수신자의 주소가
들어갑니다. (MAC, IP, Port, Msg type)
3. 택배 송장 스티커에 주소 말고도 바코드, 취급점
등 부가 정보가 들어가듯이
헤더에는 주소 말고도 다른 정보도 들어가겠죠?
2019 iFunFactory Dev Day 9
Pop Quiz
Q) 컴퓨터 네트워킹에서
프로토콜이 할 수 있는 일과 할 수 없는 일을
결정하는 것은 무엇일까요?
2019 iFunFactory Dev Day 9
Pop Quiz
Q) 컴퓨터 네트워킹에서
프로토콜이 할 수 있는 일과 할 수 없는 일을
결정하는 것은 무엇일까요?
A) Header
2019 iFunFactory Dev Day 10
TCP/IP 계층 구조에서 데이터 전송 요건
1. (구조 요건) “헤더“+“데이터” 구조에서
적절하게 헤더를 만들어서 붙일 것
2019 iFunFactory Dev Day 10
TCP/IP 계층 구조에서 데이터 전송 요건
1. (구조 요건) “헤더“+“데이터” 구조에서
적절하게 헤더를 만들어서 붙일 것
2. (동작 요건) 유지해야 되는 상태(state) 가 있을 경우
양 끝단에서는 이를 적절히 관리할 것
2019 iFunFactory Dev Day 10
TCP/IP 계층 구조에서 데이터 전송 요건
1. (구조 요건) “헤더“+“데이터” 구조에서
적절하게 헤더를 만들어서 붙일 것
2. (동작 요건) 유지해야 되는 상태(state) 가 있을 경우
양 끝단에서는 이를 적절히 관리할 것
➢ 소켓이란
이 두 요건을 library/system call 형태로 자동으로 관리해주고,
프로그래머가 이를 사용할 수 있게 제공되는 빨대 구멍
2019 iFunFactory Dev Day 11
쓰려는 기능에 따라 소켓 위치가 달라짐
Network
Interface
IP
TCP/UDP
Application
Network
Interface
IP
TCP/UDP
Application
The
Internet
2019 iFunFactory Dev Day 12
TCP Socket: TCP heder 생성 및 State 유지
Network
Interface
IP
TCP
Application
Network
Interface
IP
TCP
Application
The
Internet
2019 iFunFactory Dev Day 12
TCP Socket: TCP heder 생성 및 State 유지
Network
Interface
IP
TCP
Application
Network
Interface
IP
TCP
Application
The
Internet
2019 iFunFactory Dev Day 12
TCP Socket: TCP heder 생성 및 State 유지
Network
Interface
IP
TCP
Application
Network
Interface
IP
TCP
Application
The
Internet
2019 iFunFactory Dev Day 13
UDP Socket: UDP header 생성
Network
Interface
IP
UDP
Application
Network
Interface
IP
UDP
Application
The
Internet
2019 iFunFactory Dev Day 13
UDP Socket: UDP header 생성
Network
Interface
IP
UDP
Application
Network
Interface
IP
UDP
Application
The
Internet
2019 iFunFactory Dev Day 13
UDP Socket: UDP header 생성
Network
Interface
IP
UDP
Application
Network
Interface
IP
UDP
Application
The
Internet
2019 iFunFactory Dev Day 14
Raw IP Socket: IP header 생성
Network
Interface
IP
Application
Network
Interface
IP
Application
The
Internet
2019 iFunFactory Dev Day 14
Raw IP Socket: IP header 생성
Network
Interface
IP
Application
Network
Interface
IP
Application
The
Internet
2019 iFunFactory Dev Day 14
Raw IP Socket: IP header 생성
Network
Interface
IP
Application
Network
Interface
IP
Application
The
Internet
2019 iFunFactory Dev Day 15
TCP vs. UDP
1. UDP
✓ 재전송 없음, 순서 정렬 없음
✓ 별도의 transmission control 없음 (있는 힘껏 발사!)
✓ 별도의 state 관리 없음
2019 iFunFactory Dev Day 15
TCP vs. UDP
1. UDP
✓ 재전송 없음, 순서 정렬 없음
✓ 별도의 transmission control 없음 (있는 힘껏 발사!)
✓ 별도의 state 관리 없음
2. TCP
✓ 재전송 있음, 순서 정렬 있음
✓ 상대방의 여력과 네트워크의 여력 둘 다 신경 쓰는 transmission control
✓ 이를 위해 queue 관리와 state 관리를 수행
2019 iFunFactory Dev Day 15
TCP vs. UDP
1. UDP
✓ 재전송 없음, 순서 정렬 없음
✓ 별도의 transmission control 없음 (있는 힘껏 발사!)
✓ 별도의 state 관리 없음
2. TCP
✓ 재전송 있음, 순서 정렬 있음
✓ 상대방의 여력과 네트워크의 여력 둘 다 신경 쓰는 transmission control
✓ 이를 위해 queue 관리와 state 관리를 수행
=> 지연시간 (latency) 에 민감한 application 에서 선호
2019 iFunFactory Dev Day 15
TCP vs. UDP
1. UDP
✓ 재전송 없음, 순서 정렬 없음
✓ 별도의 transmission control 없음 (있는 힘껏 발사!)
✓ 별도의 state 관리 없음
2. TCP
✓ 재전송 있음, 순서 정렬 있음
✓ 상대방의 여력과 네트워크의 여력 둘 다 신경 쓰는 transmission control
✓ 이를 위해 queue 관리와 state 관리를 수행
=> 지연시간 (latency) 에 민감한 application 에서 선호
=> 전송 안정성 (reliability) 에 민감한 application 에서 선호
2019 iFunFactory Dev Day 16
게임 개발에서 TCP vs. UDP
Q) 게임은 통신 안정성(reliability)이 더 중요한가,
통신 지연 (latency)이 더 중요한가?
A) 한국 프로그래머들 다수 관점: reliability > latency => TCP 선호
미국 프로그래머들 다수 관점: reliability < latency => UDP 선호
2019 iFunFactory Dev Day 17
전송 제어 유무 때문에 생기는 TCP/UDP 경합
1. TCP 는 패킷 유실을 경험하면 네트워크가 과부하라고 판단함
2. 그래서 패킷 쏘는 속도를 줄임
3. 그러나 UDP 는 그런거 모름. TCP가 양보한 것을 냉큼 차지
그래프 출처: http://web.opalsoft.net
2019 iFunFactory Dev Day 17
전송 제어 유무 때문에 생기는 TCP/UDP 경합
1. TCP 는 패킷 유실을 경험하면 네트워크가 과부하라고 판단함
2. 그래서 패킷 쏘는 속도를 줄임
3. 그러나 UDP 는 그런거 모름. TCP가 양보한 것을 냉큼 차지
그래프 출처: http://web.opalsoft.net
2019 iFunFactory Dev Day 18
게임 서버 내부
제어 흐름
2019 iFunFactory Dev Day 19
게임 서버 내
소켓의 영역
2019 iFunFactory Dev Day 19
게임 서버 내
소켓의 영역
2019 iFunFactory Dev Day 19
게임 서버 내
소켓의 영역
2019 iFunFactory Dev Day 19
게임 서버 내
소켓의 영역
2019 iFunFactory Dev Day 20
게임 서버를 바라보는 다른 관점
소켓 입력 큐
2019 iFunFactory Dev Day 20
게임 서버를 바라보는 다른 관점
소켓 입력 큐 게임 로직 처리 큐
2019 iFunFactory Dev Day 20
게임 서버를 바라보는 다른 관점
소켓 입력 큐 게임 로직 처리 큐
A
B C
2019 iFunFactory Dev Day 20
게임 서버를 바라보는 다른 관점
소켓 입력 큐 게임 로직 처리 큐 DB 처리 큐
A
B C
2019 iFunFactory Dev Day 20
게임 서버를 바라보는 다른 관점
소켓 입력 큐 게임 로직 처리 큐 DB 처리 큐
A
B C
2019 iFunFactory Dev Day 20
게임 서버를 바라보는 다른 관점
소켓 입력 큐 게임 로직 처리 큐 DB 처리 큐
소켓 출력 큐
…
A
B C
2019 iFunFactory Dev Day 20
게임 서버를 바라보는 다른 관점
소켓 입력 큐 게임 로직 처리 큐 DB 처리 큐
소켓 출력 큐
…
A
B C
2019 iFunFactory Dev Day 20
게임 서버를 바라보는 다른 관점
소켓 입력 큐 게임 로직 처리 큐 DB 처리 큐
소켓 출력 큐
…
모니터링
A
B C
2019 iFunFactory Dev Day 20
게임 서버를 바라보는 다른 관점
소켓 입력 큐 게임 로직 처리 큐 DB 처리 큐
소켓 출력 큐
…
모니터링 운영
A
B C
2019 iFunFactory Dev Day 21
아이펀 엔진의 지원 범위
소켓 입력 큐 게임 로직 처리 큐 DB 처리 큐
소켓 출력 큐
…
모니터링 운영
A
B C
2019 iFunFactory Dev Day 21
아이펀 엔진의 지원 범위
소켓 입력 큐 게임 로직 처리 큐 DB 처리 큐
소켓 출력 큐
…
모니터링 운영
2019 iFunFactory Dev Day 21
아이펀 엔진의 지원 범위
소켓 입력 큐 게임 로직 처리 큐 DB 처리 큐
소켓 출력 큐
…
모니터링 운영
패킷타입 핸들러
LOGIN H1
MOVE H2
… …
2019 iFunFactory Dev Day 21
아이펀 엔진의 지원 범위
소켓 입력 큐 게임 로직 처리 큐 DB 처리 큐
소켓 출력 큐
…
모니터링 운영
패킷타입 핸들러
LOGIN H1
MOVE H2
… …
2019 iFunFactory Dev Day 22
전체 다 만들기 vs. 솔루션 사용하기
1. 전체 다 만들기의 장점
✓ 신나고 재미있음
✓ 조직 내 기술 기반을 쌓는데 도움이 됨
2019 iFunFactory Dev Day 22
전체 다 만들기 vs. 솔루션 사용하기
1. 전체 다 만들기의 장점
✓ 신나고 재미있음
✓ 조직 내 기술 기반을 쌓는데 도움이 됨
2. 전체 다 만들기의 단점
✓ 해야 될 것이 많음 (소켓 프로그래밍이 전부가 아님)
✓ 상당히 많은 프로그래밍 인력이 필요
2019 iFunFactory Dev Day 22
전체 다 만들기 vs. 솔루션 사용하기
1. 전체 다 만들기의 장점
✓ 신나고 재미있음
✓ 조직 내 기술 기반을 쌓는데 도움이 됨
2. 전체 다 만들기의 단점
✓ 해야 될 것이 많음 (소켓 프로그래밍이 전부가 아님)
✓ 상당히 많은 프로그래밍 인력이 필요
3. 조언
✓ 적합한 선택은 상황에 따라 다름
그러나 프로그래머 개인의 지적 호기심 때문에 하는 것은 아니어야 함
✓ 서버는 게임의 실패를 막아줄 수는 있지만, 성공을 보장하지는 않음
게임의 성공은 창의적인 콘텐츠와 빠른 시장 진입에 더 영향을 받음
2019 iFunFactory Dev Day 23
아이펀 엔진 지원 개발 환경
실행 OS 개발 Tool (원격 개발 OS) 개발 언어
Linux1) Clion2), Vim, Mono Develop3) C++, C#
Linux1) VS Code (Win, Mac, Linux) C++, C#
Linux1) VS 2015 (Win) C++
Windows VS 2017 C++
1) Ubuntu (16.04, 18.04), Centos 7
2) C++ 만 지원
3) C# 만 지원
2019 iFunFactory Dev Day 23
아이펀 엔진 지원 개발 환경
실행 OS 개발 Tool (원격 개발 OS) 개발 언어
Linux1) Clion2), Vim, Mono Develop3) C++, C#
Linux1) VS Code (Win, Mac, Linux) C++, C#
Linux1) VS 2015 (Win) C++
Windows VS 2017 C++
1) Ubuntu (16.04, 18.04), Centos 7
2) C++ 만 지원
3) C# 만 지원
2019 iFunFactory Dev Day 23
아이펀 엔진 지원 개발 환경
실행 OS 개발 Tool (원격 개발 OS) 개발 언어
Linux1) Clion2), Vim, Mono Develop3) C++, C#
Linux1) VS Code (Win, Mac, Linux) C++, C#
Linux1) VS 2015 (Win) C++
Windows VS 2017 C++
1) Ubuntu (16.04, 18.04), Centos 7
2) C++ 만 지원
3) C# 만 지원
2019 iFunFactory Dev Day 24
이후 세션에서는…
1. 아이펀 엔진 개발 환경
✓ macOS / VS Code / 원격 Linux 서버 / C++
✓ Windows / VS 2017 / C++
2019 iFunFactory Dev Day 25
이후 세션에서는…
1. MO 게임 콘텐츠 구현
✓ 로그인, 이동, 공격, 인벤토리
✓ 서버간 이동
✓ 채팅
2019 iFunFactory Dev Day 25
이후 세션에서는…
1. MO 게임 콘텐츠 구현
✓ 로그인, 이동, 공격, 인벤토리
✓ 서버간 이동
✓ 채팅
2. 디버깅 / 프로파일링
✓ Dump 분석
✓ 성능 병목 분석
2019 iFunFactory Dev Day 26
이후 세션에서는…
1. 운영툴
✓ 운영을 위한 REST API 추가
✓ 아이펀 디플로이 (운영툴) 에서 운영 기능 활성화 하기
경기도 성남시 분당구 대왕판교로 660, 유스페이스1 B동 606호
info@ifunfactory.com 070-4923-6566www.ifunfactory.com

More Related Content

PDF
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱
PDF
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱
PDF
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현
PDF
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현
PDF
2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원
PDF
생활 코딩 #2(Simple Web Scraping with Python #2)
PDF
Jenkins with Unity3d & Android
PDF
워드프레스 기초 (ABCD) #1
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현
2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원
생활 코딩 #2(Simple Web Scraping with Python #2)
Jenkins with Unity3d & Android
워드프레스 기초 (ABCD) #1

What's hot (12)

PPTX
Unity Auto Build iOS
PPTX
make hybrid app.
PDF
웹 IDE 비교
PDF
[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법
PDF
PyCon 2015 - 업무에서 빠르게 활용하는 PyQt
PPTX
Modern Android App Development
PDF
PyCon 2017 예제로 살펴보는 PyQt
PDF
젠킨스 설치 및 설정
PDF
swift를 이용한 카카오링크 만들기
PDF
Codeveloper 개발기
PDF
Goorm소개
PDF
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
Unity Auto Build iOS
make hybrid app.
웹 IDE 비교
[NHN_NEXT] 게임 휴먼 프로젝트 CI + GitHub 세팅 방법
PyCon 2015 - 업무에서 빠르게 활용하는 PyQt
Modern Android App Development
PyCon 2017 예제로 살펴보는 PyQt
젠킨스 설치 및 설정
swift를 이용한 카카오링크 만들기
Codeveloper 개발기
Goorm소개
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
Ad

Similar to 2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표 (20)

PDF
if kakao dev 2019_Ground X_Session 01
PDF
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
PPT
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
PDF
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
PPTX
2023 GDG Sondo DevFest - Flutter/ Flavor, PlatformChannel, Environment variab...
PDF
ifcpp build guide
PDF
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
PDF
20250210_AI가 코딩하는시대에 개발자 되기 - Google Slides.pdf
PDF
NetApp AI Control Plane
PPTX
자바_웹_개발자를_위한_c#_핵심_기능
PDF
Python과 Git으로 만드는 모바일 게임 패치 시스템
PDF
라즈베리파이로 보일러 제어하기
PDF
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
PDF
Kotlin 2.0을 통해 알아보는 코틀린의 미래
PDF
[IoT] MAKE with Open H/W + Node.JS - 1st
PDF
Meetup tools for-cloud_native_apps_meetup20180510-vs
PDF
Internship backend
PDF
Python과 AWS를 이용하여 게임 테스트 환경 구축하기
PDF
초보 개발자/학생들을 위한 오픈소스 트랜드
PDF
FCGI, C++로 Restful 서버 개발
if kakao dev 2019_Ground X_Session 01
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
2023 GDG Sondo DevFest - Flutter/ Flavor, PlatformChannel, Environment variab...
ifcpp build guide
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
20250210_AI가 코딩하는시대에 개발자 되기 - Google Slides.pdf
NetApp AI Control Plane
자바_웹_개발자를_위한_c#_핵심_기능
Python과 Git으로 만드는 모바일 게임 패치 시스템
라즈베리파이로 보일러 제어하기
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
Kotlin 2.0을 통해 알아보는 코틀린의 미래
[IoT] MAKE with Open H/W + Node.JS - 1st
Meetup tools for-cloud_native_apps_meetup20180510-vs
Internship backend
Python과 AWS를 이용하여 게임 테스트 환경 구축하기
초보 개발자/학생들을 위한 오픈소스 트랜드
FCGI, C++로 Restful 서버 개발
Ad

More from iFunFactory Inc. (20)

PDF
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
PDF
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기
PDF
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
PDF
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
PDF
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
PDF
[아이펀팩토리] 2017 NDCP
PDF
게임서버 구축 방법비교 : GBaaS vs. Self-hosting
PDF
유니티 쉐이더 단기속성
PDF
게임 서버 성능 분석하기
PDF
혼자서 만드는 MMO게임 서버
PPTX
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PPTX
Docker 로 Linux 없이 Linux 환경에서 개발하기
PPTX
게임 운영에 필요한 로그성 데이터들에 대하여
PPTX
Make "PONG" : 아키텍팅과 동기화 테크닉
PPTX
2016 NDC - 클라우드 시대의 모바일 게임 운영 플랫폼 구현
PPTX
2016 NDC - 모바일 게임 서버 엔진 개발 후기
PPT
iFun Engine plugin 만들기 (for Stingray)
PDF
iFun Deploy 소개
PPTX
Apache ZooKeeper 로
 분산 서버 만들기
PDF
클라우드 춘추전국시대 서버 개발자 생존기
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 2017 NDCP
게임서버 구축 방법비교 : GBaaS vs. Self-hosting
유니티 쉐이더 단기속성
게임 서버 성능 분석하기
혼자서 만드는 MMO게임 서버
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
Docker 로 Linux 없이 Linux 환경에서 개발하기
게임 운영에 필요한 로그성 데이터들에 대하여
Make "PONG" : 아키텍팅과 동기화 테크닉
2016 NDC - 클라우드 시대의 모바일 게임 운영 플랫폼 구현
2016 NDC - 모바일 게임 서버 엔진 개발 후기
iFun Engine plugin 만들기 (for Stingray)
iFun Deploy 소개
Apache ZooKeeper 로
 분산 서버 만들기
클라우드 춘추전국시대 서버 개발자 생존기

2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표

  • 1. 2019 iFunFactory Dev Day ‘아이펀 엔진으로 MO 게임 서버 개발하기’
  • 2. ‘아이펀 엔진으로 MO 게임 서버 개발하기’ 2019 iFunFactory Dev Day 2 문대경 CEO 환영합니다!
  • 3. 2019 iFunFactory Dev Day 1. 소켓 프로그래밍 개론 2. 게임 서버 개론 3. 아이펀 엔진 소개 4. 이어지는 세션 소개 3
  • 4. 2019 iFunFactory Dev Day 4 소켓이란?
  • 5. 2019 iFunFactory Dev Day 5 소켓이란?
  • 6. 2019 iFunFactory Dev Day 6 소켓이란?
  • 7. 2019 iFunFactory Dev Day 7 소켓이란?
  • 8. 2019 iFunFactory Dev Day 7 소켓이란?
  • 9. 2019 iFunFactory Dev Day 7 소켓이란? ➢ (기능을 추가 하기 위해서 혹은 제공되는 기능을 쓰기 위해서…)
  • 10. 2019 iFunFactory Dev Day 7 소켓이란? ➢ (기능을 추가 하기 위해서 혹은 제공되는 기능을 쓰기 위해서…) ➢ 그렇다면, 소켓 프로그래밍은 “어떤 기능” 을 쓰기 위해서 빨대를 꽂는 것
  • 11. 2019 iFunFactory Dev Day 7 소켓이란? ➢ (기능을 추가 하기 위해서 혹은 제공되는 기능을 쓰기 위해서…) ➢ 그렇다면, 소켓 프로그래밍은 “어떤 기능” 을 쓰기 위해서 빨대를 꽂는 것 ➢ 어떤 기능??
  • 12. 2019 iFunFactory Dev Day 8 TCP/IP 계층 구조와 전송 데이터 구조 Network Interface IP TCP Application Network Interface IP TCP Application The Internet
  • 13. 2019 iFunFactory Dev Day 8 TCP/IP 계층 구조와 전송 데이터 구조 Network Interface IP TCP Application Network Interface IP TCP Application The Internet DATA
  • 14. 2019 iFunFactory Dev Day 8 TCP/IP 계층 구조와 전송 데이터 구조 Network Interface IP TCP Application Network Interface IP TCP Application The Internet DATAH
  • 15. 2019 iFunFactory Dev Day 8 TCP/IP 계층 구조와 전송 데이터 구조 Network Interface IP TCP Application Network Interface IP TCP Application The Internet DATA H H
  • 16. 2019 iFunFactory Dev Day 8 TCP/IP 계층 구조와 전송 데이터 구조 Network Interface IP TCP Application Network Interface IP TCP Application The Internet DATA H H H
  • 17. 2019 iFunFactory Dev Day 8 TCP/IP 계층 구조와 전송 데이터 구조 Network Interface IP TCP Application Network Interface IP TCP Application The Internet DATA H H H H
  • 18. 2019 iFunFactory Dev Day 8 TCP/IP 계층 구조와 전송 데이터 구조 Network Interface IP TCP Application Network Interface IP TCP Application The Internet DATA H H H H 1. “H” 로 된 부분을 헤더(header) 라고 합니다. 즉, 각 프로토콜은 “헤더“+”데이터"형태입니다.
  • 19. 2019 iFunFactory Dev Day 8 TCP/IP 계층 구조와 전송 데이터 구조 Network Interface IP TCP Application Network Interface IP TCP Application The Internet DATA H H H H 1. “H” 로 된 부분을 헤더(header) 라고 합니다. 즉, 각 프로토콜은 “헤더“+”데이터"형태입니다. 2. 헤더는 택배 송장처럼 송수신자의 주소가 들어갑니다. (MAC, IP, Port, Msg type)
  • 20. 2019 iFunFactory Dev Day 8 TCP/IP 계층 구조와 전송 데이터 구조 Network Interface IP TCP Application Network Interface IP TCP Application The Internet DATA H H H H 1. “H” 로 된 부분을 헤더(header) 라고 합니다. 즉, 각 프로토콜은 “헤더“+”데이터"형태입니다. 2. 헤더는 택배 송장처럼 송수신자의 주소가 들어갑니다. (MAC, IP, Port, Msg type) 3. 택배 송장 스티커에 주소 말고도 바코드, 취급점 등 부가 정보가 들어가듯이 헤더에는 주소 말고도 다른 정보도 들어가겠죠?
  • 21. 2019 iFunFactory Dev Day 9 Pop Quiz Q) 컴퓨터 네트워킹에서 프로토콜이 할 수 있는 일과 할 수 없는 일을 결정하는 것은 무엇일까요?
  • 22. 2019 iFunFactory Dev Day 9 Pop Quiz Q) 컴퓨터 네트워킹에서 프로토콜이 할 수 있는 일과 할 수 없는 일을 결정하는 것은 무엇일까요? A) Header
  • 23. 2019 iFunFactory Dev Day 10 TCP/IP 계층 구조에서 데이터 전송 요건 1. (구조 요건) “헤더“+“데이터” 구조에서 적절하게 헤더를 만들어서 붙일 것
  • 24. 2019 iFunFactory Dev Day 10 TCP/IP 계층 구조에서 데이터 전송 요건 1. (구조 요건) “헤더“+“데이터” 구조에서 적절하게 헤더를 만들어서 붙일 것 2. (동작 요건) 유지해야 되는 상태(state) 가 있을 경우 양 끝단에서는 이를 적절히 관리할 것
  • 25. 2019 iFunFactory Dev Day 10 TCP/IP 계층 구조에서 데이터 전송 요건 1. (구조 요건) “헤더“+“데이터” 구조에서 적절하게 헤더를 만들어서 붙일 것 2. (동작 요건) 유지해야 되는 상태(state) 가 있을 경우 양 끝단에서는 이를 적절히 관리할 것 ➢ 소켓이란 이 두 요건을 library/system call 형태로 자동으로 관리해주고, 프로그래머가 이를 사용할 수 있게 제공되는 빨대 구멍
  • 26. 2019 iFunFactory Dev Day 11 쓰려는 기능에 따라 소켓 위치가 달라짐 Network Interface IP TCP/UDP Application Network Interface IP TCP/UDP Application The Internet
  • 27. 2019 iFunFactory Dev Day 12 TCP Socket: TCP heder 생성 및 State 유지 Network Interface IP TCP Application Network Interface IP TCP Application The Internet
  • 28. 2019 iFunFactory Dev Day 12 TCP Socket: TCP heder 생성 및 State 유지 Network Interface IP TCP Application Network Interface IP TCP Application The Internet
  • 29. 2019 iFunFactory Dev Day 12 TCP Socket: TCP heder 생성 및 State 유지 Network Interface IP TCP Application Network Interface IP TCP Application The Internet
  • 30. 2019 iFunFactory Dev Day 13 UDP Socket: UDP header 생성 Network Interface IP UDP Application Network Interface IP UDP Application The Internet
  • 31. 2019 iFunFactory Dev Day 13 UDP Socket: UDP header 생성 Network Interface IP UDP Application Network Interface IP UDP Application The Internet
  • 32. 2019 iFunFactory Dev Day 13 UDP Socket: UDP header 생성 Network Interface IP UDP Application Network Interface IP UDP Application The Internet
  • 33. 2019 iFunFactory Dev Day 14 Raw IP Socket: IP header 생성 Network Interface IP Application Network Interface IP Application The Internet
  • 34. 2019 iFunFactory Dev Day 14 Raw IP Socket: IP header 생성 Network Interface IP Application Network Interface IP Application The Internet
  • 35. 2019 iFunFactory Dev Day 14 Raw IP Socket: IP header 생성 Network Interface IP Application Network Interface IP Application The Internet
  • 36. 2019 iFunFactory Dev Day 15 TCP vs. UDP 1. UDP ✓ 재전송 없음, 순서 정렬 없음 ✓ 별도의 transmission control 없음 (있는 힘껏 발사!) ✓ 별도의 state 관리 없음
  • 37. 2019 iFunFactory Dev Day 15 TCP vs. UDP 1. UDP ✓ 재전송 없음, 순서 정렬 없음 ✓ 별도의 transmission control 없음 (있는 힘껏 발사!) ✓ 별도의 state 관리 없음 2. TCP ✓ 재전송 있음, 순서 정렬 있음 ✓ 상대방의 여력과 네트워크의 여력 둘 다 신경 쓰는 transmission control ✓ 이를 위해 queue 관리와 state 관리를 수행
  • 38. 2019 iFunFactory Dev Day 15 TCP vs. UDP 1. UDP ✓ 재전송 없음, 순서 정렬 없음 ✓ 별도의 transmission control 없음 (있는 힘껏 발사!) ✓ 별도의 state 관리 없음 2. TCP ✓ 재전송 있음, 순서 정렬 있음 ✓ 상대방의 여력과 네트워크의 여력 둘 다 신경 쓰는 transmission control ✓ 이를 위해 queue 관리와 state 관리를 수행 => 지연시간 (latency) 에 민감한 application 에서 선호
  • 39. 2019 iFunFactory Dev Day 15 TCP vs. UDP 1. UDP ✓ 재전송 없음, 순서 정렬 없음 ✓ 별도의 transmission control 없음 (있는 힘껏 발사!) ✓ 별도의 state 관리 없음 2. TCP ✓ 재전송 있음, 순서 정렬 있음 ✓ 상대방의 여력과 네트워크의 여력 둘 다 신경 쓰는 transmission control ✓ 이를 위해 queue 관리와 state 관리를 수행 => 지연시간 (latency) 에 민감한 application 에서 선호 => 전송 안정성 (reliability) 에 민감한 application 에서 선호
  • 40. 2019 iFunFactory Dev Day 16 게임 개발에서 TCP vs. UDP Q) 게임은 통신 안정성(reliability)이 더 중요한가, 통신 지연 (latency)이 더 중요한가? A) 한국 프로그래머들 다수 관점: reliability > latency => TCP 선호 미국 프로그래머들 다수 관점: reliability < latency => UDP 선호
  • 41. 2019 iFunFactory Dev Day 17 전송 제어 유무 때문에 생기는 TCP/UDP 경합 1. TCP 는 패킷 유실을 경험하면 네트워크가 과부하라고 판단함 2. 그래서 패킷 쏘는 속도를 줄임 3. 그러나 UDP 는 그런거 모름. TCP가 양보한 것을 냉큼 차지 그래프 출처: http://web.opalsoft.net
  • 42. 2019 iFunFactory Dev Day 17 전송 제어 유무 때문에 생기는 TCP/UDP 경합 1. TCP 는 패킷 유실을 경험하면 네트워크가 과부하라고 판단함 2. 그래서 패킷 쏘는 속도를 줄임 3. 그러나 UDP 는 그런거 모름. TCP가 양보한 것을 냉큼 차지 그래프 출처: http://web.opalsoft.net
  • 43. 2019 iFunFactory Dev Day 18 게임 서버 내부 제어 흐름
  • 44. 2019 iFunFactory Dev Day 19 게임 서버 내 소켓의 영역
  • 45. 2019 iFunFactory Dev Day 19 게임 서버 내 소켓의 영역
  • 46. 2019 iFunFactory Dev Day 19 게임 서버 내 소켓의 영역
  • 47. 2019 iFunFactory Dev Day 19 게임 서버 내 소켓의 영역
  • 48. 2019 iFunFactory Dev Day 20 게임 서버를 바라보는 다른 관점 소켓 입력 큐
  • 49. 2019 iFunFactory Dev Day 20 게임 서버를 바라보는 다른 관점 소켓 입력 큐 게임 로직 처리 큐
  • 50. 2019 iFunFactory Dev Day 20 게임 서버를 바라보는 다른 관점 소켓 입력 큐 게임 로직 처리 큐 A B C
  • 51. 2019 iFunFactory Dev Day 20 게임 서버를 바라보는 다른 관점 소켓 입력 큐 게임 로직 처리 큐 DB 처리 큐 A B C
  • 52. 2019 iFunFactory Dev Day 20 게임 서버를 바라보는 다른 관점 소켓 입력 큐 게임 로직 처리 큐 DB 처리 큐 A B C
  • 53. 2019 iFunFactory Dev Day 20 게임 서버를 바라보는 다른 관점 소켓 입력 큐 게임 로직 처리 큐 DB 처리 큐 소켓 출력 큐 … A B C
  • 54. 2019 iFunFactory Dev Day 20 게임 서버를 바라보는 다른 관점 소켓 입력 큐 게임 로직 처리 큐 DB 처리 큐 소켓 출력 큐 … A B C
  • 55. 2019 iFunFactory Dev Day 20 게임 서버를 바라보는 다른 관점 소켓 입력 큐 게임 로직 처리 큐 DB 처리 큐 소켓 출력 큐 … 모니터링 A B C
  • 56. 2019 iFunFactory Dev Day 20 게임 서버를 바라보는 다른 관점 소켓 입력 큐 게임 로직 처리 큐 DB 처리 큐 소켓 출력 큐 … 모니터링 운영 A B C
  • 57. 2019 iFunFactory Dev Day 21 아이펀 엔진의 지원 범위 소켓 입력 큐 게임 로직 처리 큐 DB 처리 큐 소켓 출력 큐 … 모니터링 운영 A B C
  • 58. 2019 iFunFactory Dev Day 21 아이펀 엔진의 지원 범위 소켓 입력 큐 게임 로직 처리 큐 DB 처리 큐 소켓 출력 큐 … 모니터링 운영
  • 59. 2019 iFunFactory Dev Day 21 아이펀 엔진의 지원 범위 소켓 입력 큐 게임 로직 처리 큐 DB 처리 큐 소켓 출력 큐 … 모니터링 운영 패킷타입 핸들러 LOGIN H1 MOVE H2 … …
  • 60. 2019 iFunFactory Dev Day 21 아이펀 엔진의 지원 범위 소켓 입력 큐 게임 로직 처리 큐 DB 처리 큐 소켓 출력 큐 … 모니터링 운영 패킷타입 핸들러 LOGIN H1 MOVE H2 … …
  • 61. 2019 iFunFactory Dev Day 22 전체 다 만들기 vs. 솔루션 사용하기 1. 전체 다 만들기의 장점 ✓ 신나고 재미있음 ✓ 조직 내 기술 기반을 쌓는데 도움이 됨
  • 62. 2019 iFunFactory Dev Day 22 전체 다 만들기 vs. 솔루션 사용하기 1. 전체 다 만들기의 장점 ✓ 신나고 재미있음 ✓ 조직 내 기술 기반을 쌓는데 도움이 됨 2. 전체 다 만들기의 단점 ✓ 해야 될 것이 많음 (소켓 프로그래밍이 전부가 아님) ✓ 상당히 많은 프로그래밍 인력이 필요
  • 63. 2019 iFunFactory Dev Day 22 전체 다 만들기 vs. 솔루션 사용하기 1. 전체 다 만들기의 장점 ✓ 신나고 재미있음 ✓ 조직 내 기술 기반을 쌓는데 도움이 됨 2. 전체 다 만들기의 단점 ✓ 해야 될 것이 많음 (소켓 프로그래밍이 전부가 아님) ✓ 상당히 많은 프로그래밍 인력이 필요 3. 조언 ✓ 적합한 선택은 상황에 따라 다름 그러나 프로그래머 개인의 지적 호기심 때문에 하는 것은 아니어야 함 ✓ 서버는 게임의 실패를 막아줄 수는 있지만, 성공을 보장하지는 않음 게임의 성공은 창의적인 콘텐츠와 빠른 시장 진입에 더 영향을 받음
  • 64. 2019 iFunFactory Dev Day 23 아이펀 엔진 지원 개발 환경 실행 OS 개발 Tool (원격 개발 OS) 개발 언어 Linux1) Clion2), Vim, Mono Develop3) C++, C# Linux1) VS Code (Win, Mac, Linux) C++, C# Linux1) VS 2015 (Win) C++ Windows VS 2017 C++ 1) Ubuntu (16.04, 18.04), Centos 7 2) C++ 만 지원 3) C# 만 지원
  • 65. 2019 iFunFactory Dev Day 23 아이펀 엔진 지원 개발 환경 실행 OS 개발 Tool (원격 개발 OS) 개발 언어 Linux1) Clion2), Vim, Mono Develop3) C++, C# Linux1) VS Code (Win, Mac, Linux) C++, C# Linux1) VS 2015 (Win) C++ Windows VS 2017 C++ 1) Ubuntu (16.04, 18.04), Centos 7 2) C++ 만 지원 3) C# 만 지원
  • 66. 2019 iFunFactory Dev Day 23 아이펀 엔진 지원 개발 환경 실행 OS 개발 Tool (원격 개발 OS) 개발 언어 Linux1) Clion2), Vim, Mono Develop3) C++, C# Linux1) VS Code (Win, Mac, Linux) C++, C# Linux1) VS 2015 (Win) C++ Windows VS 2017 C++ 1) Ubuntu (16.04, 18.04), Centos 7 2) C++ 만 지원 3) C# 만 지원
  • 67. 2019 iFunFactory Dev Day 24 이후 세션에서는… 1. 아이펀 엔진 개발 환경 ✓ macOS / VS Code / 원격 Linux 서버 / C++ ✓ Windows / VS 2017 / C++
  • 68. 2019 iFunFactory Dev Day 25 이후 세션에서는… 1. MO 게임 콘텐츠 구현 ✓ 로그인, 이동, 공격, 인벤토리 ✓ 서버간 이동 ✓ 채팅
  • 69. 2019 iFunFactory Dev Day 25 이후 세션에서는… 1. MO 게임 콘텐츠 구현 ✓ 로그인, 이동, 공격, 인벤토리 ✓ 서버간 이동 ✓ 채팅 2. 디버깅 / 프로파일링 ✓ Dump 분석 ✓ 성능 병목 분석
  • 70. 2019 iFunFactory Dev Day 26 이후 세션에서는… 1. 운영툴 ✓ 운영을 위한 REST API 추가 ✓ 아이펀 디플로이 (운영툴) 에서 운영 기능 활성화 하기
  • 71. 경기도 성남시 분당구 대왕판교로 660, 유스페이스1 B동 606호 info@ifunfactory.com 070-4923-6566www.ifunfactory.com