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
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