[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
NDC14에서 발표한 "[야생의 땅: 듀랑고] 서버 아키텍처" 세션의 슬라이드입니다.
슬라이드에 설명이 많지 않은데, 디스이즈게임에서 발표 내용을 잘 정리해주었습니다. 기사도 함께 보시면 좋을 것 같습니다.
http://www.thisisgame.com/webzine/news/nboard/4/?n=54955
이 발표는 [야생의 땅: 듀랑고]의 지형 배포 시스템과 생태계 시뮬레이션 자동화 시스템에 대한 이야기를 다룹니다. 듀랑고의 각 섬은 크기와 지형, 기후 조건이 다양하고 섬의 개수가 많아서 수동으로 관리하는 것은 사실상 불가능합니다. 몇번의 사내 테스트와 베타 테스트를 거치면서 이러한 문제를 해결해주는 자동화된 도구의 필요성이 절실해졌고, 작년에 NDC에서 발표했던 생태계 시뮬레이터와 Docker, 그리고 아마존 웹서비스(AWS)를 이용하여 수많은 섬들을 자동으로 생성하고 관리하는 자동화 시스템을 구축하게 되었습니다. 그 과정에서 했던 고민들, 기존의 애플리케이션을 "Dockerizing" 했던 경험, AWS의 각 서비스들을 적절히 활용했던 이야기, AWS의 각 지역별 요금이 상이하다는 점을 이용해서 비용을 절감한 사례, 그리고 자동화 시스템의 문제점과 앞으로의 방향에 대해서 이야기 할 계획입니다.
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
NDC14에서 발표한 "[야생의 땅: 듀랑고] 서버 아키텍처" 세션의 슬라이드입니다.
슬라이드에 설명이 많지 않은데, 디스이즈게임에서 발표 내용을 잘 정리해주었습니다. 기사도 함께 보시면 좋을 것 같습니다.
http://www.thisisgame.com/webzine/news/nboard/4/?n=54955
이 발표는 [야생의 땅: 듀랑고]의 지형 배포 시스템과 생태계 시뮬레이션 자동화 시스템에 대한 이야기를 다룹니다. 듀랑고의 각 섬은 크기와 지형, 기후 조건이 다양하고 섬의 개수가 많아서 수동으로 관리하는 것은 사실상 불가능합니다. 몇번의 사내 테스트와 베타 테스트를 거치면서 이러한 문제를 해결해주는 자동화된 도구의 필요성이 절실해졌고, 작년에 NDC에서 발표했던 생태계 시뮬레이터와 Docker, 그리고 아마존 웹서비스(AWS)를 이용하여 수많은 섬들을 자동으로 생성하고 관리하는 자동화 시스템을 구축하게 되었습니다. 그 과정에서 했던 고민들, 기존의 애플리케이션을 "Dockerizing" 했던 경험, AWS의 각 서비스들을 적절히 활용했던 이야기, AWS의 각 지역별 요금이 상이하다는 점을 이용해서 비용을 절감한 사례, 그리고 자동화 시스템의 문제점과 앞으로의 방향에 대해서 이야기 할 계획입니다.
패치해야할 서버가 전 세계에 나뉘어져 있다면, 어떻게 해야 동시에, 빠르면서, 또 신뢰성있게 서버를 패치할 수 있을까?이를 구현하기 위해 개발된 1)작은 크기의 패치데이터를 빠르게 생성하는 알고리즘과 2) 글로벌 데이터 복제를 위한 기술, 3) 동시 패치와 롤백이 가능하도록 구성한 시스템의 설계와 구조에 대해서 알아본다. 또, 핵심기능에 대한 시연과 함께넥슨아메리카에서 실제로 이를 어떻게 활용하고 있는지, 현장에서 얼마만큼의 개선이 이루어졌는지를 실증적 데이터에 기반하여 공유하고자 한다.
멀티플레이어 게임을 서비스하는 데 필요한 게임 장르별 백엔드 아키텍처에 대한 설명해 드립니다. 기본적인 게임의 상태 동기화 개념과 서버 구성에 관한 이야기, 게임 클라이언트 엔진(Unity, Lumberyard, Unreal Engine 등)에서 제공하는 복제 프레임워크를 통하여 손쉽게 게임 서버를 만드는 방법에 대한 내용을 다룹니다. 또한, 이렇게 만들어진 게임 서버를 Amazon GameLift라는 클라우드 서비스를 통해 DevOps형태의 비용 효율적으로 서비스하는 방법에 대해 소개합니다.
저는 운 좋게도 게임 PD로서 지난 10년 동안 몇 개의 게임을 개발하고, 서비스하는 경험을 가질 수 있었습니다.
본 세션에서는 제가 그동안 개발했던 게임들을 간단히 돌아보고, 개발 과정에서 시행착오를 통해 배운 것들을 살펴보려고 합니다.
개인적인 경험이라 편향이 있을 수 있겠지만, 게임 PD나 디렉터 커리어를 목표로 하시는 분들께 참고가 될 수 있으면 좋겠습니다.
패치해야할 서버가 전 세계에 나뉘어져 있다면, 어떻게 해야 동시에, 빠르면서, 또 신뢰성있게 서버를 패치할 수 있을까?이를 구현하기 위해 개발된 1)작은 크기의 패치데이터를 빠르게 생성하는 알고리즘과 2) 글로벌 데이터 복제를 위한 기술, 3) 동시 패치와 롤백이 가능하도록 구성한 시스템의 설계와 구조에 대해서 알아본다. 또, 핵심기능에 대한 시연과 함께넥슨아메리카에서 실제로 이를 어떻게 활용하고 있는지, 현장에서 얼마만큼의 개선이 이루어졌는지를 실증적 데이터에 기반하여 공유하고자 한다.
멀티플레이어 게임을 서비스하는 데 필요한 게임 장르별 백엔드 아키텍처에 대한 설명해 드립니다. 기본적인 게임의 상태 동기화 개념과 서버 구성에 관한 이야기, 게임 클라이언트 엔진(Unity, Lumberyard, Unreal Engine 등)에서 제공하는 복제 프레임워크를 통하여 손쉽게 게임 서버를 만드는 방법에 대한 내용을 다룹니다. 또한, 이렇게 만들어진 게임 서버를 Amazon GameLift라는 클라우드 서비스를 통해 DevOps형태의 비용 효율적으로 서비스하는 방법에 대해 소개합니다.
저는 운 좋게도 게임 PD로서 지난 10년 동안 몇 개의 게임을 개발하고, 서비스하는 경험을 가질 수 있었습니다.
본 세션에서는 제가 그동안 개발했던 게임들을 간단히 돌아보고, 개발 과정에서 시행착오를 통해 배운 것들을 살펴보려고 합니다.
개인적인 경험이라 편향이 있을 수 있겠지만, 게임 PD나 디렉터 커리어를 목표로 하시는 분들께 참고가 될 수 있으면 좋겠습니다.
KGC 2014 가볍고 유연하게 데이터 분석하기 : 쿠키런 사례 중심 , 데브시스터즈Minwoo Kim
1년 7개월 장수 모바일 게임 쿠키런. 많은 유저, 하루에도 쏟아지는 많은 로그. Time To Market 단축이 핵심 역량 중 하나가 되는 모바일 게임 시장. 자주 빠르게 변경되는 스팩, 로그도 마찬가지로 자주 빠르게 변경되는 스키마. 이런 현실속에서 게임 개발과 운영, 데이터 분석까지 병행 하기 위해서 가볍고 유연한 아키텍처로 적당히 빠르게 데이터 분석을 하는 쿠키런 서버팀 사례를 소개합니다.
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016Taehoon Kim
발표 영상 : https://goo.gl/jrKrvf
데모 영상 : https://youtu.be/exXD6wJLJ6s
Deep Q-Network, Double Q-learning, Dueling Network 등의 기술을 소개하며, hyperparameter, debugging, ensemble 등의 엔지니어링으로 성능을 끌어 올린 과정을 공유합니다.
Apache Hive Hook
I couldn't find enough info about Hive hooks.
So, I made this.
I hope this presentation will be useful when you want to use hooks.
This included some infomation about metastore event listeners.
This was written based on release-0.11 tag.
세계 선도 It사 및 게임사 벤치마킹 + 인사이트 보고서 (6부)_새로운 삶의 시작Seunghun Lee
안녕하세요, 만 1년 만에 세계 선도 IT/게임사 벤치마킹 & 인사이트 보고서 6부를 올리게 되었습니다.
6부 주제는, 새로운 삶의 시작 입니다!
지난 1년 간 직접 경험한 실리콘밸리는 어떠했는지,
벤치마킹 대상 기업들의 시작 (0명 --> 30명)은 어떠했는지,
무엇이 저를 Ringle Start-up 창업으로 이끌었는지,
저의 사고와 삶은 어떻게 변하였는지,
중심으로 담아보았습니다.
6부를 쓰며, 아직 제가 많이 부족하다는 생각을 많이 했습니다.
그래도, 용기내어 한자 한자 적어보았습니다.
대한민국 Start-up 분들께 도움이 될 수 있길 소망합니다.
블록체인 제품 생태계를 구성해보자
Ground X가 블록체인을 통해 세상에 기여하고 싶은 메세지가 있습니다. 그것을 이뤄내기 위해 어떤 제품들을 기획했고, 1년반동안 제품을 만들면서 PM/Designer/Data scientist/Engineer 들과 어떻게 협업을 하였는지 공유하고자 합니다. 그리고 메인넷을 출시한 다음에 어떤 제품로드맵과 방향을 가지고 있는지 공유할 예정입니다.
디자인에 이어 코딩까지 AI가 프로그램 개발을 척척?: GitHub Copilot, 어디까지 알아보셨나요Ian Choi
* 본 세션은 2022년 11월 15일, Microsoft Ignite Spotlight on Korea 오프라인 행사에서 진행된 세션의 녹화본 발표 자료입니다.
- 제목: "디자인에 이어 코딩까지 AI가 프로그램 개발을 척척?: GitHub Copilot, 어디까지 알아보셨나요"
- 스피커: 최영락 (한국마이크로소프트, Territory Channel Mgr.) & 변정훈 (GitHub Star(aka., Outsider)
- 설명: AI가 많은 부분을 바꾸고 있는 세상에서 GitHub은 2021년 AI 페어 프로그래머인 GitHub Copilot을 발표하고 올해 유료 모델로 공개했습니다. GitHub Copilot과 함께 코딩할 때 어떤 부분을 도와주고 얼마나 유용한 지 설명합니다.
- 영상 보기: https://info.microsoft.com/KO-DevOps-VDEO-FY23-01Jan-10-From-design-to-coding-AI-drives-program-development-GitHub-Copilot-how-far-have-you-found-out-SRGCM8854_LP01-Registration---Form-in-Body.html
- 참고: 지난 Ignite 2022에서서 등장하신 사티야 및 OpenAI CEO 두 분께서 대화한 ChatGPT 및 Codex에 대한 자세한 내용은 https://youtu.be/EDsGm-3OEOY 를 통해서도 보실 수 있습니다.
Chapter 2. 업무 자동화를 위한 컴퓨터 세팅 | 6개월 치 업무를 하루 만에 끝내는 업무자동화 |...Byunghyun Ban
* SlideShare 오류로 빈 화면이 나올 경우 다운로드하여 이용해주시기 바랍니다.
<6개월 치 업무를 하루 만에 끝내는 업무 자동화, 2020, 생능출판사>의 수업용 PPT 자료입니다. 교재로 활용하실 경우 출판사를 통해 한 학기 분량의 PPT를 제공받으실 수 있습니다.
Meetup tools for-cloud_native_apps_meetup20180510-vsminseok kim
마이크로서비스로 시스템을 구성하면 서비스간에 연관관계가 줄어들면서 서비스 릴리즈 속도가 높아지고 유연하게 대처할 수 있지만, 관리포인트가 늘어나게 되어 운영상에 많은 어려움을 마주치게 됩니다. 배포 될 때마다 생성되고 소멸되는 마이크로서비스를 다른 마이크로서비스가 쉽게 참조하게 하고 마이크로서비스들의 설정 정보를 일관되게 관리하는 일은 쉬운일이 아닙니다. 이러한 문제를 해결하기 위해 Spring Cloud 프로젝트와 같은 도구를 비롯하여 Pivotal Cloud Foundry와 같은 클라우드 플랫폼등이 있습니다. 이번 밋업에서는 마이크로서비스를 운영할 때의 어려운점과 도움을 주는 다양한 도구들에 대해 알아보도록 하겠습니다.
consumer_driven_contract with spring cloud contract at spring camp 2018minseok kim
스프링캠프에서 발표한 세션내용입니다. http://www.springcamp.io/2018/
마이크로서비스가 본격적으로 확산이되면 API 제공자와 사용자간의 dependency가 생겨서 마이크로서비스 API의 개선과정이 매우 복잡해지고 느려지게됩니다. 이 문제를 해결하기 위해 Consumer Driven Contract기법을 적용한 Spring cloud contract 프로젝트의 활용방법에 대해 소개하고 샘플 애플리케이션을 통해 개발자들이 API를 개발하고 테스트하며 개선하는 방식에 대해 알아봅니다
[1장] 파이썬 개발환경 구축하기 | 수학 통계를 몰라도 이해할 수 있는 쉬운 딥러닝Byunghyun Ban
* SlideShare 오류로 빈 화면이 나올 경우 다운로드하여 이용해주시기 바랍니다.
<수학 통계를 몰라도 이해할 수 있는 쉬운 딥러닝, 2021, 생능북스> 의 수업용 ppt 자료입니다. 교재로 활용하실 경우 출판사를 통해 한 학기 분량의 PPT를 제공받으실 수 있습니다.
* SlideShare에서 특정 폰트로 쓰인 글자가 보이지 않는 경우가 있습니다. 다운로드 하셔서 PDF 리더로 보시는 것을 권해드립니다. -> 기존 폰트를 모두 나눔고딕으로 변경하였습니다.
OSS 포럼 개발 교육으로 진행한 Git, GitHub 강의 자료입니다.
(http://onoffmix.com/event/67081)
간단한 로또 번호 생성기 프로그램을 작성하면서 Git, GitHub에 대해 배웁니다.
1. Git과 Github
- 버전 관리?
- Git은 어쩌다 세상에 나왔나?
- Github?
2. Git 시작하기 - 실습
- 실습 준비 : Github, Goorm IDE 가입하기
- 리눅스 명령어와 친해지기
- Git 필수 개념 집고 넘어가기
- Step by Step Git 명령어 실습 (커밋, 브랜치, 원격 저장소 등)
- 옆자리 분과 Fork하고, Pull Request
3. Git과 Github 맛깔나게 활용하기
- Github의 협업 기능 살펴보기
- Github Page
- Gitbook
4. 있어보이는 Git 활용
- .git 디렉토리 살펴보기
- Git Branch 전략
- Commit Message 활용
10. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
게임 패치란?
새로운 이벤트가 열릴 때, 데이터가 수정됐을 때
받는 이것
10
11. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
패치 시스템 구조
한 묶음의 콘텐츠를 가지고 있는 패치 서버
테스트가 필요한 파일을 패치 서버에 올림
클라이언트가 패치를 다운로드 받아 테스트
11
패치 서버 클라이언트
12. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
쿠키 굽는 과정 (Before)
1. 아트팀이 정글전사 쿠키를 그린다
12
아트팀
운영팀
클라이언트
QA팀
13. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
쿠키 굽는 과정 (Before)
2. 운영팀이 해당 내용을 받아서 서버에 올려본다.
13
아트팀
운영팀
클라이언트
QA팀
14. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
쿠키 굽는 과정 (Before)
3. 올렸는데 반영이 되지 않는다. 왜인지 모르겠다.
4. 클라이언트팀에 요청해 디버그 빌드를 뽑는다.
14
아트팀
운영팀
클라이언트
QA팀
15. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
쿠키 굽는 과정 (Before)
5. 반영을 해서 테스트한다.
15
아트팀
운영팀
클라이언트
QA팀
어라, 변신하는
애니메이션에
얼굴이 없네?
호랑이가
더 밝은 느낌이면
좋겠어요!
16. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
쿠키 굽는 과정 (Before)
6. 고친다. 나. 정글전사
16
아트팀
운영팀
클라이언트
QA팀
17. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
쿠키 굽는 과정 (Before)
아트팀
운영팀
클라이언트
QA팀
문제 확인을 위해 거쳐야하는 팀들?
적으면 2개, 보통 3개팀
문제를 확인하기까지 걸리는 시간?
최소 1~2시간, 길게는 반나절
17
18. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
콘텐츠를 독립적으로 확인하기 어려움
18
저 이 파일 업로드 해도 되나요?
제 거 테스트 중이에요!
조금만 (1시간) 기다리세요.
19. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
콘텐츠를 독립적으로 확인하기 어려움
개발 환경에서 필요한만큼
독립적으로 콘텐츠 묶음을 만들 수 있어야 함
19
저 이 파일 업로드 해도 되나요?
제 거 테스트 중이에요!
조금만 (1시간) 기다리세요.
20. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
언제 어떤 콘텐츠를 올렸는지 알 수 없음
20
쿠키 이미지 고친걸
안 올렸나?
이 때 업데이트 한 게
어떤 파일들인지 모르겠어..
21. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
언제 어떤 콘텐츠를 올렸는지 알 수 없음
쿠키 이미지 고친걸
안 올렸나?
이 때 업데이트 한 게
어떤 파일들인지 모르겠어..
콘텐츠가 전부 관리되고,
변경점이 명확하게 파악되어야 함.
21
22. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
테스트 후 원래 상태로 돌리기 어려움
22
테스트 하기 전으로
돌려야 하는데
어떻게 해야하지?
23. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
테스트 후 원래 상태로 돌리기 어려움
테스트 하기 전으로
돌려야 하는데
어떻게 해야하지?
콘텐츠 묶음을 원하는 상태로
손쉽게 리셋할 수 있어야함
23
24. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
바뀐적이 없는 파일이 올라가 혼동을 유발함
24
이번에 파일 5개 올려서
업데이트 했어요~
?!?!
바뀐 게 하나밖에 없을텐데??
25. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
바뀐적이 없는 파일이 올라가 혼동을 유발함
이번에 파일 5개 올려서
업데이트 했어요~
?!?!
바뀐 게 하나밖에 없을텐데??
최소 변경점만이 반영되고 패치로 생성되어야 함.
25
26. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
필요한 것들 정리
개발 환경에서 필요한만큼 독립적으로 콘텐츠 묶음을 정의
콘텐츠가 전부 관리되고, 변경점이 명확하게 파악돼야함
콘텐츠 묶음을 원하는 상태로 손쉽게 리셋
최소 변경점만이 반영되고 패치로 생성돼야함
26
27. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015 27
개발 환경에서 필요한만큼 독립적으로 콘텐츠 묶음을브랜치를 정의
콘텐츠가파일이 전부 버전관리되고, 변경점이 명확하게 파악돼야함됨
콘텐츠 묶음을브랜치를 원하는 상태로 손쉽게 리셋
최소 변경점만이 반영되고 패치로 생성돼야함할 수 있음
28. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
Git
개발 환경에서 필요한만큼 독립적으로 브랜치를 정의
파일이 전부 버전관리되고, 변경점이 명확하게 파악됨
브랜치를 원하는 상태로 손쉽게 리셋
최소 변경점만이 반영되고 패치로 생성할 수 있음
28
37. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
만든 것 1. 패치 파일 서버
Git 원격 저장소로부터 최신 내용을 항상 받아옴
클라이언트에 브랜치의 최신 커밋을 알려줌
요청받은 커밋 A와 커밋 B 사이에
달라진 파일들을 하나로 압축해 내려줌
37
38. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
만든 것 2. Git 웹 클라이언트
비개발자들(아트, UI, QA 등등)을 위해 만들어짐
원하는 브랜치에 파일을 업로드하는 기능
변경사항을 커밋해주는 시스템
기존의 Django 베이스의 쿠키런 운영 툴에 구현
38
39. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
만든 것 3. 콘텐츠 배포 시스템
필요한 패치 파일들을 생성
AWS S3에 업로드
CDN에 해당 파일들을 반영
사용자들에게 배포
39
40. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
시스템을 쓰는 방법
콘텐츠를 만들고
Git 저장소의 브랜치에 콘텐츠를 올림
40
41. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
시스템을 쓰는 방법
올린 파일은 패치 시스템에 자동 동기화
41
Github webhook을 이용
Github에서 이벤트 발생시 알려주는 기능
42. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
시스템을 쓰는 방법
테스트 클라이언트를 사용해 콘텐츠 확인
42
43. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
시스템을 쓰는 방법
검증이 끝난 콘텐츠는 배포 단계를 거쳐 사용자에게 전달
43
46. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
이걸 어떻게 만들지
Git 저장소를 손쉽게 코드로 조작
저장소를 바탕으로 필요한 파일을 생성하여 제공
콘텐츠 관리를 쉽게 만들어 줄 프론트엔드 도구
46
다양한 이질적인 요소들을 결합할 수 있어야 한다
47. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
Python
이질적인 요소들도 쉽게 연동할 수 있다 (glue language)
개발 속도가 빠르고, 이해하기 쉽다
라이브러리가 다양하고, 잘 알려진 것들을 믿고 쓸 수 있다
사내 많은 개발자들이 이미 파이썬에 친숙하다
47
48. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
Pygit2
에 기반한 라이브러리
libgit2는 github에서도 사용하고 있음
사용을 위해서는 git 내부 구조를 이해해야함
(https://git-scm.com/book/en/v1/Git-Internals 을 참고)
문서가 다소 불친절..
48
49. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
Pygit2
개발 당시 (2014년 중반) libgit2는 아직 안정적인 상태가 아님
어처구니 없는 버그(들)이 존재
(예 : 아무리 큰 파일도 commit push할때 첫 32KB까지만 전송하는 버그)
종종 libgit2 코드를 통해 작동 방식을 확인할 필요가 있음
49
50. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
Bottle
Python의 수많은 웹 프레임워크 중 하나
단일 모듈로 웹서버를 빠르고 손쉽게 구축
단순한 로직의 구현에는 매우 쓸만함
50
51. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
Bottle
Hello {name} 을 출력하는 웹서버 (bottlepy 첫 예제)
51
from bottle import route, run, template
@route('/hello/<name>')
def index(name):
return template('<b>Hello {{name}}</b>!', name=name)
run(host='localhost', port=8080)
52. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
Bottle
Git 저장소에서
특정 로컬 브랜치의 최신 리비전을 출력하는 웹서버
52
import bottle
import pygit2
@bottle.route('/branch/<branch_name>')
def get_latest_revision(branch_name):
repo = pygit2.Repository(‘/path/to/repo‘)
branch = repo.lookup_branch(branch_name)
return str(branch.target) if branch else 'branch not found'
bottle.run(host='localhost', port=8080)
53. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
그외에 라이브러리
boto - AWS Python SDK
paramiko - SSH2 프로토콜 라이브러리
fabric - 서버 배포에 특화된 SSH 라이브러리
53
57. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
콘텐츠 제작 과정 Before & After
57
콘텐츠제작
운영팀
클라이언트
QA팀
콘텐츠제작
운영팀
클라이언트
QA팀
58. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
쿠키 굽는 과정 (After)
콘텐츠 확인을 직접 할 수 있게 됨
콘텐츠 확인에 필요한 시간이 매우 단축됨
( 수시간 -> 10분 이하 )
콘텐츠를 자주 확인하고
빠르게 문제를 해결할 수 있게 됨
58
콘텐츠제작
운영팀
클라이언트
QA팀
59. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
쿠키 굽는 과정 (After)
매 콘텐츠 제작때 발생하는
데이터 반영 요청 감소
배포된 콘텐츠의 이력을 명확히 파악하여
배포상의 실수를 방지하고
발생해도 빠르게 파악
59
콘텐츠제작
운영팀
클라이언트
QA팀
60. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
쿠키 굽는 과정 (After)
문제 상황 확인을 위해
빌드를 새로 뽑아야하는 상황 감소
독립적으로 안정화된 콘텐츠 묶음을
이용하여 코드 디버그에 집중
60
콘텐츠제작
운영팀
클라이언트
QA팀
61. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
쿠키 굽는 과정 (After)
어쨌든 일이 줄어듦
61
콘텐츠제작
운영팀
클라이언트
QA팀
62. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
쿠키 굽는 과정 (After)
어쨌든 일이 줄어듦
62
콘텐츠제작
운영팀
클라이언트
QA팀
64. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015 64
Git을 시스템 베이스로 사용한 것이 옳았는가?
테스트 코드 부재의 아쉬움
시스템의 Github 의존성
65. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
회고 1. 베이스 시스템 Git
Git을 사용한 것이 과연 좋은 선택이었을까?
공통적인 개념을 가져다 쓸 때는 편했다
예측하지 못한 부수적인 개발 공수(삽질)가 많이 들었다
Git도 괜찮았지만, 반드시 Git은 아니어도 된다
65
66. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
회고 2. 테스트 코드 부재
콘텐츠 배포과정에 상시 사용되는
매우 중요한 코드에 테스트가 없다!
문제가 생기면 실제 환경의 유저들 접속이 불가해짐
그런데 테스트가 없어 모르는 사람이 함부로 수정하기 어려움
여러분, 테스트 코드를 짭시다
66
67. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
회고 2. 테스트 코드 부재
67
이런거 안됩니다
68. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
회고 3. Github 의존성
시스템 전체가 Github에 의존적
(원격 저장소, Webhook 등)
대륙발로 추정되는 DDoS로 인해 Github가 작동하지 않았음
Github 장애로 개발자들이 멘붕할 때 콘텐츠 개발팀과 운영팀도 함께
멘붕
별도의 Git 서버를 구축하여 결국은 회피
하지만 구축과 동시에 Github가 정상으로 돌아왔...
68
69. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
결론
총 배포 회수 200회 이상, 총 전송 트래픽 6 PB 이상
콘텐츠를 만들고, 점검하고, 배포하는 과정에 들이는 시간이 줄어듦
파이썬이 아니었다면
이 정도 규모의 시스템을 만드는데에 얼마나 걸렸을까?
파이썬을 사용한 것은 탁월한 선택이었다
69
70. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
개발자가 개발에 집중할 수 있게
필요한 것을 아낌없이 지원해주는 회사
함께 일하는 것이 즐거운 스마트한 사람들
저희들과 함께 재밌는 거 만들지 않으시렵니까 ;p
세상을 즐겁게!
70
71. Python과 Git으로 만드는 모바일 게임 패치 시스템
Pycon KR 2015
Q & A
t
71
환영합니다.
최고의 팀에 합류하세요!
career@devsisters.com