ݺߣ

ݺߣShare 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

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