SlideShare a Scribd company logo
1 of 35
Download to read offline
박근환
클라이언트 개발자, 서버 개발 시작하기
아이펀팩토리
서버도 개발하고 싶은 클라이
언트
개발자를 위한 세션입니다.
서버도 개발하고 싶은 클라이언트
개발자를 위한 세션입니다.
• 옛날 이야기
• 엔진이 가져온 개발 효율 향상
• 게임 서버도 솔루션으로
• 클라이언트 개발과 서버 개발, 환경과 철학의 차이
• 클라이언트 개발과 서버 개발, 기술의 차이
• 컨텐츠 개발이 끝났다! 하지만 그 이후 작업이..
• 서버를 개발하면서 생기는 추가 작업들
• 대박이 나면 어떡하지?
• 정리
옛날 옛적에..
• Brew, WIPI, MIDP..
• C (++?), Java subset
• 밑바닥부터 한땀 한땀
• 사실 Android SDK나 iOS SDK도 마찬가지
게임 엔진의 대중화와 개발 환경 변화
• 게임의 구현 목표에 맞는 엔진을 선택하는 것이 개발의 시작
• 프로토타입 개발은 기획자, 디자이너도 가능
• 개발자의 역할 변화
• 더 빨라진 개발 = 더 많아진 컨텐츠
서버 개발의 현재 상황
웹 서버를
활용해서
개발
41%
자체 소켓 서버를
만들어서 개발
29%
외부 엔진을
도입해서 개발
17%
무응답
13%
(출처: 아이펀팩토리 데브데이 설문조사, 2017.03)
게임 서버 솔루션
개발 환경과 철학의 차이 1 – 예외처리
• 안정성 추구
public void LevelUp(ref int level)
{
level++;
}
private object characterInfoLock;
public const int MAXIMUM_LEVEL = 99;
public void LevelUp(ref int level)
{
lock (characterInfoLock)
{
if (level <= 0)
throw new Exception(“레벨이 0 이하입니다.”);
level++;
}
if (level > MAXIMUM_LEVEL)
throw new Exception(“레벨이 최대치를 초과했습니다.“);
LOG(LogLevel.INFO, string.Format(“레벨이 상승했습니다. {0}”, level));
}
클라이언트
서버
개발 환경과 철학의 차이 2 - 비동기
• 가능한 모든 코드는 비동기로 구현
• 모든 IO 관련 코드
• 데이터베이스, 파일, 네트워크
• 즉시 응답을 얻을 수 없는 기능
• 매치메이킹, 사용자 검색, 랭킹 등
• 외부 서비스 연동
(출처: MSDN, Writing an Asynchronous Method)
개발 환경과 철학의 차이 3 - 최적화
• 최적화 성공 = 비용 감소
• 클라이언트의 화려한 그래픽, 입체적 사운드 = 핸드폰이 뜨거워요 + @
• 서버의 복잡한 로직, 많은 IO = 관리 서버 증가 = 서버 비용 증가
개발 환경과 철학의 차이 3 - 최적화
• 최적화 성공 = 비용 감소
• 클라이언트의 화려한 그래픽, 입체적 사운드 = 핸드폰이 뜨거워요 + @
• 서버의 복잡한 로직, 많은 IO = 관리 서버 증가 = 서버 비용 증가
• 서버 다운 = 매출 감소 & 비용 대비 이익 급감
개발 환경과 철학의 차이 4
• 다양한 환경 유지
• 소규모 팀에서는 주로 서버 개발자의 업무
• 개발
• 테스트
• 라이브
개발 환경과 철학의 차이 4
• 다양한 환경 유지
• 소규모 팀에서는 주로 서버 개발자의 업무
• 개발: 지속적인 코드 수정 및 개발
• 테스트
• 라이브
개발 환경과 철학의 차이 4
• 다양한 환경 유지
• 소규모 팀에서는 주로 서버 개발자의 업무
• 개발: 지속적인 코드 수정 및 개발
• 테스트
• 팀내 테스트
• 사내 테스트
• 외부 테스트
• 라이브
개발 환경과 철학의 차이 4
• 다양한 환경 유지
• 소규모 팀에서는 주로 서버 개발자의 업무
• 개발: 지속적인 코드 수정 및 개발
• 테스트
• 팀내 테스트: 팀원 테스트, 기획 데이터 변경 테스트(밸런싱 등)
• 사내 테스트
• 외부 테스트
• 라이브
개발 환경과 철학의 차이 4
• 다양한 환경 유지
• 소규모 팀에서는 주로 서버 개발자의 업무
• 개발: 지속적인 코드 수정 및 개발
• 테스트
• 팀내 테스트: 팀원 테스트, 기획 데이터 변경 테스트(밸런싱 등)
• 사내 테스트: QA, 사업팀 협업
• 외부 테스트
• 라이브
개발 환경과 철학의 차이 4
• 다양한 환경 유지
• 소규모 팀에서는 주로 서버 개발자의 업무
• 개발: 지속적인 코드 수정 및 개발
• 테스트
• 팀내 테스트: 팀원 테스트, 기획 데이터 변경 테스트(밸런싱 등)
• 사내 테스트: QA, 사업팀 협업
• 외부 테스트: 퍼블리셔 공개, 외부 홍보, 스트레스 테스트
• 라이브
개발 환경과 철학의 차이 4
• 다양한 환경 유지
• 소규모 팀에서는 주로 서버 개발자의 업무
• 개발: 지속적인 코드 수정 및 개발
• 테스트
• 팀내 테스트: 팀원 테스트, 기획 데이터 변경 테스트(밸런싱 등)
• 사내 테스트: QA, 사업팀 협업
• 외부 테스트: 퍼블리셔 공개, 외부 홍보, 스트레스 테스트
• 라이브: 채널, 리전 분리
개발 기술의 차이 1 - 네트워크
• 네트워크
• 버그의 원천
• 끊길 때 예외처리
• 느릴 때 예외처리
• 서버와 클라이언트의 상태 동기화
• 게임 중 전화가 오면?
• 클라이언트 프로세스를 정리해버리면?
• 클라이언트는 해킹 당하기 마련이다 = 메시지는 믿을 수 없다
개발 기술의 차이 2 – 분산처리
• 대부분의 경우 한 대의 서버만 가지고 서비스할 수는 없음
• 기존 서버의 동작을 나누는 난이도 >>넘사벽>> 미리 나눠 놓은 서버를 확장하는 난이
도
• 로그인, 로비, 게임, 채팅..
• 데이터베이스, 캐시, 서비스 검색..
개발 기술의 차이 2 - 분산처리
• 분산처리: 다수의 인스턴스를 하나의 서버처럼 + 여러 서버간 데이터 정합성 보장
로그인
서버
인스턴스
로그인 서버
로비 서버
인스턴스
로비 서버
게임 서버
인스턴스
게임 서버클라이언트
• 어떤 서버 인스턴스가 어디에 있는가 (논리적, 물리적)
• 각 인스턴스의 현재 상태 공유
• 전체 서버 동일한 데이터를 공유
개발 기술의 차이 3 - 데이터베이스
• 데이터베이스
• 트랜잭션은 서버 병목의 원천
• 적게 쓸수록 좋지만 많이 쓸 수밖에 없다
• 비동기 코드 + 분산처리 + 데이터베이스 트랜잭션 = 최적화 난이도 상승 주범
• 스키마 잘 구성하기, DBA의 조언(가능하다면)
• 데이터베이스 접근 최소화, 데이터베이스 접근 레이어
• 서버간 통신 활용
• 요청 처리 롤백, 혹은 실패에 대한 예외처리
개발 기술의 차이 3 - 데이터베이스
• ORM
• 데이터베이스 Query를 클래스 Get, Set으로 사용
• 내부의 복잡한 처리를 숨김 = 마음이 편하다
(출처: 위키피디아, https://en.wikipedia.org/wiki/Object-relational_mapping)
개발 기술의 차이 4 – 외부 서비스 연동
방식
• 외부서비스 연동
• 인증: 카카오, 페이스북, 구글, 트위터..
• 결제: 스토어별 결제 검증
• 친구 리스트, 개인 정보, 업적 관리 등
• 주로 외부 REST API를 호출
• 다수의 요청을 동시에 처리하기 위해 비동기 방식으로 구현 필수
개발 기술의 차이와 엔진
• 새로운 기술을 배워야하는 것은 사실, 하지만 엔진을 사용하면 좀 ‘덜’ 배워도 됨
Your Games Server
N o n e t w o r k i n g c o d e ! N o d a t a b a s e c o d e !
Time
Savings
Network
Event/Timer
Distribution Subsystem
ORM (w/sharding+caching)
Network
Event/Timer
ManagementAPI
UserActivityLog
JSON/protobuf over
TCP/UDP/HTTP(S) using
reliable session+encryption
Processes a large stream of
concurrent events/messages
Scales with multiple servers
Built in ORM with
sharding and cashing
Database
Database
Database
Database
RESTful
API(JASON)
Logs
important
userevents
컨텐츠 개발 이후의 작업 1
• 보안
• 전 세계의 IP가 당신의 서버를 좋아합니다.
• 서버 접속 관련 보안 설정
• 패킷 암호화, 리플레이 공격 차단, 클라이언트 보안 등등
• 이 모든 걸 적용했더라도, 클라이언트 메시지는 믿을 수 없음
• 서버 내부 통신, 외부 통신의 NIC을 다르게: 클라우드 비용 절감 효과는 덤
• 서버 프로세스 실행 계정 권한 조정: 서버 프로세스 자체 취약점이 있을 수 있음
• 배포용 서버 빌드 환경 구성: 치트, 메시지 리스트, 디버그 코드 제거
컨텐츠 개발 이후의 작업 2
• 스트레스 테스트
(출처, 아이펀팩토리 홈페이지)
컨텐츠 개발 이후의 작업 3
• 성능 최적화
(출처, 아이펀팩토리 홈페이지)
컨텐츠 개발 이후의 작업 4
• 통계
• 사용자의 행동 분석
• 게임의 성공을 극대화하기 위한 필수 장치
• 클라이언트 데이터 수집, 서버 데이터 수집
• 하기 싫어도 어차피 퍼블리셔가 요구함
서버를 개발하면 생기는 추가 작업
• 서버 패키지 배포: 라이브 테스트를 통해 동일한 동작을 보장
• 유지보수, 버전 관리: 테스트 서버에 치트 추가해 주세요, 미국 서버 버전은 따로 나눠서..
• 로그 분석, 처리: 리텐션, 결제 비율.. 이탈한 유저의 당일 플레이 내역과 승률
• 운영: 운영툴 만드는데 2주면 되나요? (안됩니다)
• 모니터링: CPU, 메모리, 디스크 공간 등 경고
• 추가 다운로드 서버 유지
대박이 나면 어떡하지?
• 서버 확장
• 부하가 걸리는 타입의 서버 추가 < 어떤 서버에 부하가 걸리는가
• 서버 추가 (동일한 하드웨어 추가, 데이터베이스 샤딩)
• 더 좋은 하드웨어로 교체
• 새로운 월드 생성 (배포 패키지, 여러 월드의 버전 관리 필요)
• 퍼블리싱 확장, 채널링
• 해외 진출
• 리전 추가, 필연적으로 한번은 이야기가 나오는 ‘원 월드 서버’
• 그리고 이전 페이지로 돌아가시오
서버 개발 시작을 위한 정리
• 서버 개발을 위한 엔진을 선택
• 개발, 테스트 서버 환경을 구축, 버전 관리
• 코드에는 항상 최대한의 예외처리, 언제나 비동기로
• 컨텐츠 이외의 작업 일정을 확보
• 통계는 게임의 성공을 위해 꼭 필요
• 서버 성능의 한계를 미리 테스트, 확장 대비
• 모니터링 툴, 운영 툴 준비
예제 프로젝트 소스코드 (C#)
유니티 클라이언트: https://github.com/iFunFactory/game-pong
서버: https://github.com/iFunFactory/game-pong-server-csharp
Thank you!

More Related Content

What's hot

라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성Hyunjik Bae
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트Dae Kim
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기Miyu Park
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음nexusz99
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceXionglong Jin
 
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Jinuk Kim
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들Hyunjik Bae
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기Jinuk Kim
 
PHP 와 MySQL을 이용한 게임 랭킹 구축하기
PHP 와 MySQL을 이용한 게임 랭킹 구축하기PHP 와 MySQL을 이용한 게임 랭킹 구축하기
PHP 와 MySQL을 이용한 게임 랭킹 구축하기Yo-Chang Song
 
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)Brian Hong
 
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)Brian Hong
 
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발현승 배
 
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임흥배 최
 
프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기Hyun-jik Bae
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱NAVER D2
 
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라NAVER D2
 
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)Sang Don Kim
 

What's hot (20)

라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성라이브 서비스를 위한 게임 서버 구성
라이브 서비스를 위한 게임 서버 구성
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
 
iFun Deploy 소개
iFun Deploy 소개iFun Deploy 소개
iFun Deploy 소개
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
 
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
Gametech 2014: 모바일 게임용 PaaS/BaaS 구현 사례와 디자인 트레이드오프
 
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 온라인 게임에서 고려해야 할 것들
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
 
PHP 와 MySQL을 이용한 게임 랭킹 구축하기
PHP 와 MySQL을 이용한 게임 랭킹 구축하기PHP 와 MySQL을 이용한 게임 랭킹 구축하기
PHP 와 MySQL을 이용한 게임 랭킹 구축하기
 
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
 
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
 
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발
 
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
 
프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기프라우드넷 사용법 훑어보기
프라우드넷 사용법 훑어보기
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱
 
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
 
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
 

Similar to [아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기

하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기Mijeong Park
 
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가? Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가? 정민 안
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdfSeung kyoo Park
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리Gyuwon Yi
 
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스Hee Jae Lee
 
스마일게이트 서버개발캠프 - HGHSS - 합격하소서
스마일게이트 서버개발캠프 - HGHSS - 합격하소서스마일게이트 서버개발캠프 - HGHSS - 합격하소서
스마일게이트 서버개발캠프 - HGHSS - 합격하소서ServerDevCamp
 
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기Seokjae Lee
 
커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님NAVER D2
 
오픈소스 프로젝트 따라잡기_공개
오픈소스 프로젝트 따라잡기_공개오픈소스 프로젝트 따라잡기_공개
오픈소스 프로젝트 따라잡기_공개Hyoungjun Kim
 
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)Seungmo Koo
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019devCAT Studio, NEXON
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기Sumin Byeon
 
What is Game Server ?
What is Game Server ?What is Game Server ?
What is Game Server ?흥배 최
 
성장하는 스타트업의 프로세스 개척기
성장하는 스타트업의 프로세스 개척기성장하는 스타트업의 프로세스 개척기
성장하는 스타트업의 프로세스 개척기DomainDriven DomainDriven
 
개발 생산성 향상 기법 V1.2
개발 생산성 향상 기법 V1.2개발 생산성 향상 기법 V1.2
개발 생산성 향상 기법 V1.2Daniel Lim
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debuggingJongwon Han
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018devCAT Studio, NEXON
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)수보 김
 
Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기YEONG-CHEON YOU
 

Similar to [아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기 (20)

하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기
 
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가? Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리
 
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
 
스마일게이트 서버개발캠프 - HGHSS - 합격하소서
스마일게이트 서버개발캠프 - HGHSS - 합격하소서스마일게이트 서버개발캠프 - HGHSS - 합격하소서
스마일게이트 서버개발캠프 - HGHSS - 합격하소서
 
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
 
커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님
 
오픈소스 프로젝트 따라잡기_공개
오픈소스 프로젝트 따라잡기_공개오픈소스 프로젝트 따라잡기_공개
오픈소스 프로젝트 따라잡기_공개
 
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
 
What is Game Server ?
What is Game Server ?What is Game Server ?
What is Game Server ?
 
성장하는 스타트업의 프로세스 개척기
성장하는 스타트업의 프로세스 개척기성장하는 스타트업의 프로세스 개척기
성장하는 스타트업의 프로세스 개척기
 
개발 생산성 향상 기법 V1.2
개발 생산성 향상 기법 V1.2개발 생산성 향상 기법 V1.2
개발 생산성 향상 기법 V1.2
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기
 

More from iFunFactory Inc.

2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원
2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원
2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원iFunFactory Inc.
 
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현iFunFactory Inc.
 
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현iFunFactory Inc.
 
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱iFunFactory Inc.
 
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱iFunFactory Inc.
 
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표iFunFactory Inc.
 
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTOiFunFactory Inc.
 
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기iFunFactory Inc.
 
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기iFunFactory Inc.
 
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유iFunFactory Inc.
 
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석iFunFactory Inc.
 
[아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP [아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP iFunFactory Inc.
 
유니티 쉐이더 단기속성
유니티 쉐이더 단기속성유니티 쉐이더 단기속성
유니티 쉐이더 단기속성iFunFactory Inc.
 
게임 서버 성능 분석하기
게임 서버 성능 분석하기게임 서버 성능 분석하기
게임 서버 성능 분석하기iFunFactory Inc.
 
혼자서 만드는 MMO게임 서버
혼자서 만드는 MMO게임 서버혼자서 만드는 MMO게임 서버
혼자서 만드는 MMO게임 서버iFunFactory Inc.
 
Python과 AWS를 이용하여 게임 테스트 환경 구축하기
Python과 AWS를 이용하여 게임 테스트 환경 구축하기Python과 AWS를 이용하여 게임 테스트 환경 구축하기
Python과 AWS를 이용하여 게임 테스트 환경 구축하기iFunFactory Inc.
 
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교iFunFactory Inc.
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기iFunFactory Inc.
 
게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여iFunFactory Inc.
 
Make "PONG" : 아키텍팅과 동기화 테크닉
Make "PONG" : 아키텍팅과 동기화 테크닉Make "PONG" : 아키텍팅과 동기화 테크닉
Make "PONG" : 아키텍팅과 동기화 테크닉iFunFactory Inc.
 

More from iFunFactory Inc. (20)

2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원
2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원
2019 아이펀팩토리 Dev Day 세션6 아이펀엔진 운영툴 연동하기 - 장수원
 
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현
2019 아이펀팩토리 Dev Day 세션5 아이펀엔진으로 만든 게임 성능 분석 및 디버깅 - 남승현
 
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현
2019 아이펀팩토리 Dev Day 세션4 아이펀엔진에 MO 게임 콘텐츠 채워 넣기 - 남승현
 
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱
2019 아이펀팩토리 Dev Day 세션3 아이펀엔진 개발 환경 설정하기 (Windows+ VS) - 김진욱
 
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱
2019 아이펀팩토리 Dev Day 세션2 아이펀엔진 개발 환경 설정하기 (Linux + VS Code) - 김진욱
 
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
 
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
 
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _03 Scalable 한 게임 서버 만들기
 
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
[아이펀팩토리] 2018 데브데이 서버위더스 _01 HTML5/WebSocket으로 Pong 게임 만들기
 
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
 
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
[아이펀팩토리] 2018 데브데이 서버위더스 _04 리눅스 게임 서버 성능 분석
 
[아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP [아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP
 
유니티 쉐이더 단기속성
유니티 쉐이더 단기속성유니티 쉐이더 단기속성
유니티 쉐이더 단기속성
 
게임 서버 성능 분석하기
게임 서버 성능 분석하기게임 서버 성능 분석하기
게임 서버 성능 분석하기
 
혼자서 만드는 MMO게임 서버
혼자서 만드는 MMO게임 서버혼자서 만드는 MMO게임 서버
혼자서 만드는 MMO게임 서버
 
Python과 AWS를 이용하여 게임 테스트 환경 구축하기
Python과 AWS를 이용하여 게임 테스트 환경 구축하기Python과 AWS를 이용하여 게임 테스트 환경 구축하기
Python과 AWS를 이용하여 게임 테스트 환경 구축하기
 
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
PC 와 모바일에서의 P2P 게임 구현에서의 차이점 비교
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
 
게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여게임 운영에 필요한 로그성 데이터들에 대하여
게임 운영에 필요한 로그성 데이터들에 대하여
 
Make "PONG" : 아키텍팅과 동기화 테크닉
Make "PONG" : 아키텍팅과 동기화 테크닉Make "PONG" : 아키텍팅과 동기화 테크닉
Make "PONG" : 아키텍팅과 동기화 테크닉
 

Recently uploaded

캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 

Recently uploaded (6)

캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 

[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기

  • 1.
  • 2. 박근환 클라이언트 개발자, 서버 개발 시작하기 아이펀팩토리
  • 3. 서버도 개발하고 싶은 클라이 언트 개발자를 위한 세션입니다.
  • 4. 서버도 개발하고 싶은 클라이언트 개발자를 위한 세션입니다. • 옛날 이야기 • 엔진이 가져온 개발 효율 향상 • 게임 서버도 솔루션으로 • 클라이언트 개발과 서버 개발, 환경과 철학의 차이 • 클라이언트 개발과 서버 개발, 기술의 차이 • 컨텐츠 개발이 끝났다! 하지만 그 이후 작업이.. • 서버를 개발하면서 생기는 추가 작업들 • 대박이 나면 어떡하지? • 정리
  • 5. 옛날 옛적에.. • Brew, WIPI, MIDP.. • C (++?), Java subset • 밑바닥부터 한땀 한땀 • 사실 Android SDK나 iOS SDK도 마찬가지
  • 6. 게임 엔진의 대중화와 개발 환경 변화 • 게임의 구현 목표에 맞는 엔진을 선택하는 것이 개발의 시작 • 프로토타입 개발은 기획자, 디자이너도 가능 • 개발자의 역할 변화 • 더 빨라진 개발 = 더 많아진 컨텐츠
  • 7. 서버 개발의 현재 상황 웹 서버를 활용해서 개발 41% 자체 소켓 서버를 만들어서 개발 29% 외부 엔진을 도입해서 개발 17% 무응답 13% (출처: 아이펀팩토리 데브데이 설문조사, 2017.03)
  • 9. 개발 환경과 철학의 차이 1 – 예외처리 • 안정성 추구 public void LevelUp(ref int level) { level++; } private object characterInfoLock; public const int MAXIMUM_LEVEL = 99; public void LevelUp(ref int level) { lock (characterInfoLock) { if (level <= 0) throw new Exception(“레벨이 0 이하입니다.”); level++; } if (level > MAXIMUM_LEVEL) throw new Exception(“레벨이 최대치를 초과했습니다.“); LOG(LogLevel.INFO, string.Format(“레벨이 상승했습니다. {0}”, level)); } 클라이언트 서버
  • 10. 개발 환경과 철학의 차이 2 - 비동기 • 가능한 모든 코드는 비동기로 구현 • 모든 IO 관련 코드 • 데이터베이스, 파일, 네트워크 • 즉시 응답을 얻을 수 없는 기능 • 매치메이킹, 사용자 검색, 랭킹 등 • 외부 서비스 연동 (출처: MSDN, Writing an Asynchronous Method)
  • 11. 개발 환경과 철학의 차이 3 - 최적화 • 최적화 성공 = 비용 감소 • 클라이언트의 화려한 그래픽, 입체적 사운드 = 핸드폰이 뜨거워요 + @ • 서버의 복잡한 로직, 많은 IO = 관리 서버 증가 = 서버 비용 증가
  • 12. 개발 환경과 철학의 차이 3 - 최적화 • 최적화 성공 = 비용 감소 • 클라이언트의 화려한 그래픽, 입체적 사운드 = 핸드폰이 뜨거워요 + @ • 서버의 복잡한 로직, 많은 IO = 관리 서버 증가 = 서버 비용 증가 • 서버 다운 = 매출 감소 & 비용 대비 이익 급감
  • 13. 개발 환경과 철학의 차이 4 • 다양한 환경 유지 • 소규모 팀에서는 주로 서버 개발자의 업무 • 개발 • 테스트 • 라이브
  • 14. 개발 환경과 철학의 차이 4 • 다양한 환경 유지 • 소규모 팀에서는 주로 서버 개발자의 업무 • 개발: 지속적인 코드 수정 및 개발 • 테스트 • 라이브
  • 15. 개발 환경과 철학의 차이 4 • 다양한 환경 유지 • 소규모 팀에서는 주로 서버 개발자의 업무 • 개발: 지속적인 코드 수정 및 개발 • 테스트 • 팀내 테스트 • 사내 테스트 • 외부 테스트 • 라이브
  • 16. 개발 환경과 철학의 차이 4 • 다양한 환경 유지 • 소규모 팀에서는 주로 서버 개발자의 업무 • 개발: 지속적인 코드 수정 및 개발 • 테스트 • 팀내 테스트: 팀원 테스트, 기획 데이터 변경 테스트(밸런싱 등) • 사내 테스트 • 외부 테스트 • 라이브
  • 17. 개발 환경과 철학의 차이 4 • 다양한 환경 유지 • 소규모 팀에서는 주로 서버 개발자의 업무 • 개발: 지속적인 코드 수정 및 개발 • 테스트 • 팀내 테스트: 팀원 테스트, 기획 데이터 변경 테스트(밸런싱 등) • 사내 테스트: QA, 사업팀 협업 • 외부 테스트 • 라이브
  • 18. 개발 환경과 철학의 차이 4 • 다양한 환경 유지 • 소규모 팀에서는 주로 서버 개발자의 업무 • 개발: 지속적인 코드 수정 및 개발 • 테스트 • 팀내 테스트: 팀원 테스트, 기획 데이터 변경 테스트(밸런싱 등) • 사내 테스트: QA, 사업팀 협업 • 외부 테스트: 퍼블리셔 공개, 외부 홍보, 스트레스 테스트 • 라이브
  • 19. 개발 환경과 철학의 차이 4 • 다양한 환경 유지 • 소규모 팀에서는 주로 서버 개발자의 업무 • 개발: 지속적인 코드 수정 및 개발 • 테스트 • 팀내 테스트: 팀원 테스트, 기획 데이터 변경 테스트(밸런싱 등) • 사내 테스트: QA, 사업팀 협업 • 외부 테스트: 퍼블리셔 공개, 외부 홍보, 스트레스 테스트 • 라이브: 채널, 리전 분리
  • 20. 개발 기술의 차이 1 - 네트워크 • 네트워크 • 버그의 원천 • 끊길 때 예외처리 • 느릴 때 예외처리 • 서버와 클라이언트의 상태 동기화 • 게임 중 전화가 오면? • 클라이언트 프로세스를 정리해버리면? • 클라이언트는 해킹 당하기 마련이다 = 메시지는 믿을 수 없다
  • 21. 개발 기술의 차이 2 – 분산처리 • 대부분의 경우 한 대의 서버만 가지고 서비스할 수는 없음 • 기존 서버의 동작을 나누는 난이도 >>넘사벽>> 미리 나눠 놓은 서버를 확장하는 난이 도 • 로그인, 로비, 게임, 채팅.. • 데이터베이스, 캐시, 서비스 검색..
  • 22. 개발 기술의 차이 2 - 분산처리 • 분산처리: 다수의 인스턴스를 하나의 서버처럼 + 여러 서버간 데이터 정합성 보장 로그인 서버 인스턴스 로그인 서버 로비 서버 인스턴스 로비 서버 게임 서버 인스턴스 게임 서버클라이언트 • 어떤 서버 인스턴스가 어디에 있는가 (논리적, 물리적) • 각 인스턴스의 현재 상태 공유 • 전체 서버 동일한 데이터를 공유
  • 23. 개발 기술의 차이 3 - 데이터베이스 • 데이터베이스 • 트랜잭션은 서버 병목의 원천 • 적게 쓸수록 좋지만 많이 쓸 수밖에 없다 • 비동기 코드 + 분산처리 + 데이터베이스 트랜잭션 = 최적화 난이도 상승 주범 • 스키마 잘 구성하기, DBA의 조언(가능하다면) • 데이터베이스 접근 최소화, 데이터베이스 접근 레이어 • 서버간 통신 활용 • 요청 처리 롤백, 혹은 실패에 대한 예외처리
  • 24. 개발 기술의 차이 3 - 데이터베이스 • ORM • 데이터베이스 Query를 클래스 Get, Set으로 사용 • 내부의 복잡한 처리를 숨김 = 마음이 편하다 (출처: 위키피디아, https://en.wikipedia.org/wiki/Object-relational_mapping)
  • 25. 개발 기술의 차이 4 – 외부 서비스 연동 방식 • 외부서비스 연동 • 인증: 카카오, 페이스북, 구글, 트위터.. • 결제: 스토어별 결제 검증 • 친구 리스트, 개인 정보, 업적 관리 등 • 주로 외부 REST API를 호출 • 다수의 요청을 동시에 처리하기 위해 비동기 방식으로 구현 필수
  • 26. 개발 기술의 차이와 엔진 • 새로운 기술을 배워야하는 것은 사실, 하지만 엔진을 사용하면 좀 ‘덜’ 배워도 됨 Your Games Server N o n e t w o r k i n g c o d e ! N o d a t a b a s e c o d e ! Time Savings Network Event/Timer Distribution Subsystem ORM (w/sharding+caching) Network Event/Timer ManagementAPI UserActivityLog JSON/protobuf over TCP/UDP/HTTP(S) using reliable session+encryption Processes a large stream of concurrent events/messages Scales with multiple servers Built in ORM with sharding and cashing Database Database Database Database RESTful API(JASON) Logs important userevents
  • 27. 컨텐츠 개발 이후의 작업 1 • 보안 • 전 세계의 IP가 당신의 서버를 좋아합니다. • 서버 접속 관련 보안 설정 • 패킷 암호화, 리플레이 공격 차단, 클라이언트 보안 등등 • 이 모든 걸 적용했더라도, 클라이언트 메시지는 믿을 수 없음 • 서버 내부 통신, 외부 통신의 NIC을 다르게: 클라우드 비용 절감 효과는 덤 • 서버 프로세스 실행 계정 권한 조정: 서버 프로세스 자체 취약점이 있을 수 있음 • 배포용 서버 빌드 환경 구성: 치트, 메시지 리스트, 디버그 코드 제거
  • 28. 컨텐츠 개발 이후의 작업 2 • 스트레스 테스트 (출처, 아이펀팩토리 홈페이지)
  • 29. 컨텐츠 개발 이후의 작업 3 • 성능 최적화 (출처, 아이펀팩토리 홈페이지)
  • 30. 컨텐츠 개발 이후의 작업 4 • 통계 • 사용자의 행동 분석 • 게임의 성공을 극대화하기 위한 필수 장치 • 클라이언트 데이터 수집, 서버 데이터 수집 • 하기 싫어도 어차피 퍼블리셔가 요구함
  • 31. 서버를 개발하면 생기는 추가 작업 • 서버 패키지 배포: 라이브 테스트를 통해 동일한 동작을 보장 • 유지보수, 버전 관리: 테스트 서버에 치트 추가해 주세요, 미국 서버 버전은 따로 나눠서.. • 로그 분석, 처리: 리텐션, 결제 비율.. 이탈한 유저의 당일 플레이 내역과 승률 • 운영: 운영툴 만드는데 2주면 되나요? (안됩니다) • 모니터링: CPU, 메모리, 디스크 공간 등 경고 • 추가 다운로드 서버 유지
  • 32. 대박이 나면 어떡하지? • 서버 확장 • 부하가 걸리는 타입의 서버 추가 < 어떤 서버에 부하가 걸리는가 • 서버 추가 (동일한 하드웨어 추가, 데이터베이스 샤딩) • 더 좋은 하드웨어로 교체 • 새로운 월드 생성 (배포 패키지, 여러 월드의 버전 관리 필요) • 퍼블리싱 확장, 채널링 • 해외 진출 • 리전 추가, 필연적으로 한번은 이야기가 나오는 ‘원 월드 서버’ • 그리고 이전 페이지로 돌아가시오
  • 33. 서버 개발 시작을 위한 정리 • 서버 개발을 위한 엔진을 선택 • 개발, 테스트 서버 환경을 구축, 버전 관리 • 코드에는 항상 최대한의 예외처리, 언제나 비동기로 • 컨텐츠 이외의 작업 일정을 확보 • 통계는 게임의 성공을 위해 꼭 필요 • 서버 성능의 한계를 미리 테스트, 확장 대비 • 모니터링 툴, 운영 툴 준비
  • 34. 예제 프로젝트 소스코드 (C#) 유니티 클라이언트: https://github.com/iFunFactory/game-pong 서버: https://github.com/iFunFactory/game-pong-server-csharp