SlideShare a Scribd company logo
1 of 57
M2프로젝트의
오류보고시스템
백승엽
2010.05.26
자기소개
2010-05-26 2M2프로젝트의 오류보고시스템
백승엽
M2팀
책임연구원
프로그래머 13년차
넥슨 5년차
이 발표에서는
• 유저용 오류보고 시스템(X)
• 개발팀 내부용 오류보고 시스템(O)
• 운용하면서 얻은 노하우 중심
• 구현 기술은 설명이 필요한 부분만
2010-05-26 3M2프로젝트의 오류보고시스템
개발자들이 자기가 만들고 있는 게임을 안해보는 이유
2. 실행이 안된다
개발기간 동안 개발자들은 '우리 게임은 제대로 작동하지 않는다'는
사실을 점차적으로 '학습'한다. 개발중인 코드라서 실행 파일만 클릭
해도 클라가 뻗는다. 실행-다운을 반복적으로 경험하는 개발자들은
심리상자 속의 쥐가 레버누르기-전기충격을 학습하여 결국 레버를
누르지 않게되는 것과 비슷하게 행동한다. 디버깅은 다음다음다음
마일스톤에...
http://www.minamza.net/1741
2010-05-26 4M2프로젝트의 오류보고시스템
어떻게…
그럼 항상 실행되게 하면 되겠네!
2010-05-26 M2프로젝트의 오류보고시스템 5
버그를 다 잡으면 되지!
2010-05-26 M2프로젝트의 오류보고시스템 6
어떻게 해야 다 잡나요?
누구는 버그 잡기 싫어서 안 잡나요?
2010-05-26 M2프로젝트의 오류보고시스템 7
버그를 빨리 발견
• 발생한 그 날 발견한다면 용의자는 그날의 변경점
• 빠른 수정이 가능해진다.
2010-05-26 8M2프로젝트의 오류보고시스템
0
5
10
15
20
25
30
더 많은 정보를 획득
• 아티스트들도 많은 문제를 겪는다
• 하지만 피드백은 잘 주는 편이 아님
• 아티스트의 문제를 파악하고 개선할 수 있다
2010-05-26 9M2프로젝트의 오류보고시스템
0
20
40
60
80
100
오류가 빈번히 생기는 곳을 발견
• 프로세스 개선/리팩토링
– 버그의 발생을 방지!
2010-05-26 M2프로젝트의 오류보고시스템 10
8B1002F1-2B76-42E7-8FA1-96BDC9EB659D
6B40893C-432D-4963-883E-6DC8ED9F1AAC
2E2DAC91-D9E4-4f2a-ADAD-2ACC7D0751AC
4E9C1D9A-9D45-43EA-9238-61A07CF6D273
93171980-CCBA-451D-A562-BD82941D4553
11C43CD3-F252-4EF2-955A-7A2480BA8519
3C29F8F2-AFB1-4AD9-B05D-EB1AAA60B1D9
23C05FDA-3A09-4974-923B-BA13EA9809EF
E4C5E52C-D1A8-415B-9704-E0DB2C0482BC
A0F34C3B-7DFF-4EEB-9C19-F31EF1267B40
1위는 셰이더 컴파일 에러
리팩토링/프로세스 개선으로
이제는 사라진 항목들
개발팀용 오류보고시스템이 있으면 가능!
2010-05-26 M2프로젝트의 오류보고시스템 11
나중에 유저용으로 간단히 교체
2010-05-26 12M2프로젝트의 오류보고시스템
허스키 익스프레스에도 수출
2010-05-26 M2프로젝트의 오류보고시스템 13
필요성/동작설명/구현이슈/미구현이슈
오류코드/오류실명제/오류설명/오류무시/2차재해
오류메일/오류당번제/오버레이/커스텀 핸들러/로컬에러
2010-05-26 M2프로젝트의 오류보고시스템 14
사용법은 매우 간단
• 정보가 좀 더 들어간 ASSERT
• 정체를 파고 들어보면 이런 매크로임
2010-05-26 15M2프로젝트의 오류보고시스템
여기서 잠깐 시연
2010-05-26 16M2프로젝트의 오류보고시스템
오류코드
• 코드가 추가변경되면서 오류주소는 계속 변한다
• 오류코드는 변하지 않는다
– 여러 프로그래머가 작성하므로 GUID로 중복을 피함
• 오류를 발생시킨 코드를 쉽게 검색가능
– 오류 정보에 코드 위치 정보가 있지만 이쪽이 편리
2010-05-26 17M2프로젝트의 오류보고시스템
오류실명제
• 오류를 고칠 사람을 쉽게 특정 가능
• 하부에서 발생하는 경우 익셉션을 던지고
상부에서 캐치해서 처리
2010-05-26 18M2프로젝트의 오류보고시스템
오류설명
• 이것만 보고도 기본적인 대처가 가능
• 특히 데이터 오류에 유용
– 설명을 잘 적어놓으면 프로그래머의 손이 필
요 없어 진다.
2010-05-26 19M2프로젝트의 오류보고시스템
상세 정보
2010-05-26 M2프로젝트의 오류보고시스템 20
오류 무시
• 사소한 문제로 못 띄우면 안되니
2010-05-26 M2프로젝트의 오류보고시스템 21
2차 재해
• 모든 오류 상황에서 중단하면 좋겠지만
– 리소스 생산성에 타격
• 2차 재해 가능성 여부를 잘 생각해서 무시
할 수 있는지 여부를 정해야 한다
• 오류레벨
– Warning 무시 가능
– Error 무시 불가
2010-05-26 M2프로젝트의 오류보고시스템 22
오류메일
2010-05-26 23M2프로젝트의 오류보고시스템
오류 메일 자동 발송
이 발표에서 제일 중요한 노하우입니다
2010-05-26 M2프로젝트의 오류보고시스템 24
오류메일을 사용자가 명시적으로 보내지 않아도 자동으로 보냄
오류발생을 보고하지 않던 사람들의 오류정보를 알 수 있게 된다
오류당번제
• 모든 프로그래머가 돌아가며 당번
• 그 날의 오류 메일을 처리
2010-05-26 25M2프로젝트의 오류보고시스템
오류당번제
• 자신의 작업과 관련 없는 코드들을 보게 된다.
• 추적 과정에서 자연스럽게 코드 리뷰
• 전체에 대한 이해도 상승
2010-05-26 M2프로젝트의 오류보고시스템 26
오버레이
• 창이 뜨니까 너무 심각하게 받아들인다
– 좀 덜 심각해 보이는 것을 추가
– 무시해도 클라이언트 동작에 큰 문제가 없는
것들은 이것으로 처리
2010-05-26 27M2프로젝트의 오류보고시스템
그래도 메일은 날아온다
• 오류를 겪은 사람에게는 중요하지 않은 정보
• 오류의 원인을 만든 사람에게는 필요한 정보
2010-05-26 M2프로젝트의 오류보고시스템 28
오류보고 시스템은 제일 하부
상부에서 핸들러를 설치해서 화면출력 처리
2010-05-26 M2프로젝트의 오류보고시스템 29
오류 발생을 모를 것 같은데요?
• 지나간 오류는 클라이언트 로그에서 확인 가능
• 커스텀 핸들러에서 로거에 기록하도록 구현
2010-05-26 M2프로젝트의 오류보고시스템 30
커스텀 핸들러
• 오류보고 시스템이 처리하기 전에 커스텀
핸들러에게 먼저 처리할 기회를 준다
• 커스텀 핸들러의 리턴값으로 오류보고 시
스템이 계속해서 처리해야할지를 알려줌
2010-05-26 31M2프로젝트의 오류보고시스템
커스텀 핸들러가 있으면
• 툴에서도 유용하게 사용
– 리소스 빌드 시 개별 오류에 반응하지 않고 빌
드 종료시 오류가 있었던 파일 목록을 출력
• 커스텀 오류 정보를 추가 가능
– 문제를 일으킨 리소스 파일을 오류 메일에 첨
부하도록 지시하는 것도 가능
2010-05-26 32M2프로젝트의 오류보고시스템
로컬 에러
• 리소스 작업자가 작업 도중에 발생하는 오
류의 경우 메일을 보내지 않도록
– 체크인하지 않은 리소스에서의 오류는 다른
사람에게는 중요하지 않다
• 오류보고메일을 보내지 않음으로서
– 리소스 작업자의 심적 부담 경감
– 오류 담당자의 처리 부담 경감
2010-05-26 33M2프로젝트의 오류보고시스템
로컬 에러
• 작업자 별로 다른 설정 파일
– GUID 기반으로 필터링
• 오버레이로 지정되어도 오류창을 띄움
– 작업자가 놓치지 않도록
2010-05-26 M2프로젝트의 오류보고시스템 34
필요성/동작설명/구현이슈/미구현이슈
스택오버플로우/멀티쓰레드/디버거
2010-05-26 M2프로젝트의 오류보고시스템 35
직접 만드실 분들을 위해
• 의외로 괴로운 부분이 있는 작업
– 최하부 레이어
• 다른 자가 라이브러리를 쓸 수 없다
– 디버깅이 매우 불편
• OuputDebugString 을 활용
2010-05-26 M2프로젝트의 오류보고시스템 36
스택 오버플로우
• 메모리가 없는데 어떻게 오류 처리를 해
– 사실 메모리가 전혀 없지는 않지만
– 그래도 오류 처리를 하기에는 무리
2010-05-26 37M2프로젝트의 오류보고시스템
스택 오버플로우
• 스택 메모리는 쓰레드 단위
– 새 쓰레드를 만들어서 거기서 처리
– 새 쓰레드를 띄우기까지 과정을 최소화
2010-05-26 38M2프로젝트의 오류보고시스템
멀티쓰레드
• M2는 멀티쓰레드
– 초기에는 싱글쓰레드였지만
2010-05-26 M2프로젝트의 오류보고시스템 39
김주복, NDC2010,
M2아키텍쳐 리뷰: 완벽한 설계에의 도전
멀티쓰레드 그거
락만 걸면 되는거 아닌가요?
• 다른 쓰레드의 작업이 끝나기를 대기
– 윈도우 메시지를 처리하는 쓰레드가 블럭됨
• 오류보고 창이 안 뜬다!
2010-05-26 M2프로젝트의 오류보고시스템 40
오류보고 창을 별도 프로세스로
– 오류로그를 파일로 쓴다
• 로그는 XML로 쓰고 있음
• 오류 설명에 무슨 문자가 들어갈지 모르므로 XML
세이프 하게 문자 변환
– 오류보고 프로세스에는 파일명을 넘김
• 덤으로 나중에도 오류로그를 다시 확인할 수 있다
– 의도한 것은 아니지만…
2010-05-26 M2프로젝트의 오류보고시스템 41
여러 쓰레드에서 동시 오류
• 락으로 한번에 오류창은 하나만 뜨게
• 사실은 오류발생 순간에 다른 쓰레드를 모
두 멈추고 싶지만…
– 아직 해결책을 못 찾았음
2010-05-26 42M2프로젝트의 오류보고시스템
오류정보에 프로세스/쓰레드 ID를 추가
• 오류간의 연관성을 판단하기 쉬워짐
• 싱글스레드라도 프로세스 ID는 꼭 기록
– 한번 수행에서의 연속적인 오류인가?
– 프로그램을 여러 번 기동했는데 같은 오류가
반복적으로 발생했는가?
2010-05-26 M2프로젝트의 오류보고시스템 43
디버거가 붙어있을 때
• 멈춰준다.
• OutputDebugString으로 정보 출력
• 디버거에서 오류 정보의 값을 열어보지 않아도 됨
2010-05-26 44M2프로젝트의 오류보고시스템
디버거가 붙어있을 때
• 덤프 안 남김
– 필요 없으니까
• 메일 안 보냄
– 보통 자신이 빌드한 것이라 보내도 소용 없음
2010-05-26 45M2프로젝트의 오류보고시스템
필요성/동작설명/구현이슈/미구현이슈
실행파일 버전/빌드머신명/디버거연결/스크린샷/이슈트래킹
2010-05-26 M2프로젝트의 오류보고시스템 46
실행파일 버전
• 오류를 일으킨 프로그램이 최신 버전인가?
– 기존에는 타임스탬프로 확인
• AlienBrain의 불안정성으로 트러블
– 파일 시간을 받은 시간으로 세팅하게 설정
– 타임스탬프에만 의지하기 힘들어졌다
2010-05-26 47M2프로젝트의 오류보고시스템
실행파일 버전
• MD5
– MD5의 신뢰성으로 충분
• 변조방지가 목적이 아님
– 빠르고 가벼운 해시가 좋다
2010-05-26 M2프로젝트의 오류보고시스템 48
빌드한 머신 이름
• 왜 필요?
프로그래머가 속도를 이유로
릴리즈 버전으로 빌드해서
디버거를 붙이지 않고
테스트 중 발생한 오류메일을 무시하기 위해
2010-05-26 49M2프로젝트의 오류보고시스템
디버거 연결
• 우선 순위가 낮아서 미뤄지고 있는 기능
– 프로그래머들은 VS에서 프로세스에 디버거
연결이 가능
– 비 프로그래머들에게는 디버거가 없음
2010-05-26 50M2프로젝트의 오류보고시스템
디버거 연결
• 이런 것 쓰면 된다고 하나
– .Net에서 무슨 일이 있을지는 해봐야 알지...
2010-05-26 M2프로젝트의 오류보고시스템 51
스크린샷 찍기
• 매우 도움이 되는 정보
– 꼭 가지고 싶다
• 해당 프로그램은 오류를 일으킨 상황
– 오류보고 시스템이 찍어주어야 한다
2010-05-26 52M2프로젝트의 오류보고시스템
스크린샷 찍기
• 전화면 스크린샷은 어렵지 않다
• 해당 프로그램 영역을 알아내기가 곤란함
– .NET에서 보안관련 이유로 다른 프로세스의
정보를 얻는 것이 제한
– 같은 이유로 오류창을 해당 프로그램 창 옆에
띄워줄 수 없다
2010-05-26 M2프로젝트의 오류보고시스템 53
스크린샷 찍기
• 전화면 스크린샷은 곤란
– 개인의 프라이버시
• 회사는 일하는 곳이기는 하지만
– 상급자의 화면이 캡쳐되면 보안문제
2010-05-26 M2프로젝트의 오류보고시스템 54
오류통계/이슈트래킹 구축
• 내년에는 이걸 발표하는게 목표
2010-05-26 55M2프로젝트의 오류보고시스템
QA
2010-05-26 56M2프로젝트의 오류보고시스템
2010-05-26 M2프로젝트의 오류보고시스템 57

More Related Content

What's hot

이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017devCAT Studio, NEXON
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음nexusz99
 
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015devCAT Studio, NEXON
 
[122]네이버의모던웹라이브러리 박재성
[122]네이버의모던웹라이브러리 박재성[122]네이버의모던웹라이브러리 박재성
[122]네이버의모던웹라이브러리 박재성NAVER D2
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기Miyu Park
 
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!영호 김
 
Ndc17 DevOps? DevOps개발자? 북미에서의 6년
Ndc17 DevOps? DevOps개발자? 북미에서의 6년Ndc17 DevOps? DevOps개발자? 북미에서의 6년
Ndc17 DevOps? DevOps개발자? 북미에서의 6년Taehyun Kim
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기Jinuk Kim
 
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 정주 김
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013devCAT Studio, NEXON
 
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발주항 박
 
[NDC10] Unity Build 로 빌드타임 반토막내기 - 송창규
[NDC10] Unity Build 로 빌드타임 반토막내기 - 송창규[NDC10] Unity Build 로 빌드타임 반토막내기 - 송창규
[NDC10] Unity Build 로 빌드타임 반토막내기 - 송창규ChangKyu Song
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직Hoyoung Choi
 
20160427 ndc16 글로벌 원빌드 모바일 게임 런칭과 라이브 개발
20160427 ndc16 글로벌 원빌드 모바일 게임 런칭과 라이브 개발20160427 ndc16 글로벌 원빌드 모바일 게임 런칭과 라이브 개발
20160427 ndc16 글로벌 원빌드 모바일 게임 런칭과 라이브 개발Heeyoung Lee
 
Ryan Dahl의 Node.js 소개 동영상 해설 by doortts
Ryan Dahl의 Node.js 소개 동영상 해설 by doorttsRyan Dahl의 Node.js 소개 동영상 해설 by doortts
Ryan Dahl의 Node.js 소개 동영상 해설 by doorttsSuwon Chae
 
임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011devCAT Studio, NEXON
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드Jeongsang Baek
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조Hyunjik Bae
 

What's hot (20)

이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음
 
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
 
[122]네이버의모던웹라이브러리 박재성
[122]네이버의모던웹라이브러리 박재성[122]네이버의모던웹라이브러리 박재성
[122]네이버의모던웹라이브러리 박재성
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
 
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
 
Ndc17 DevOps? DevOps개발자? 북미에서의 6년
Ndc17 DevOps? DevOps개발자? 북미에서의 6년Ndc17 DevOps? DevOps개발자? 북미에서의 6년
Ndc17 DevOps? DevOps개발자? 북미에서의 6년
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
 
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
 
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
 
[NDC10] Unity Build 로 빌드타임 반토막내기 - 송창규
[NDC10] Unity Build 로 빌드타임 반토막내기 - 송창규[NDC10] Unity Build 로 빌드타임 반토막내기 - 송창규
[NDC10] Unity Build 로 빌드타임 반토막내기 - 송창규
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
 
20160427 ndc16 글로벌 원빌드 모바일 게임 런칭과 라이브 개발
20160427 ndc16 글로벌 원빌드 모바일 게임 런칭과 라이브 개발20160427 ndc16 글로벌 원빌드 모바일 게임 런칭과 라이브 개발
20160427 ndc16 글로벌 원빌드 모바일 게임 런칭과 라이브 개발
 
Ryan Dahl의 Node.js 소개 동영상 해설 by doortts
Ryan Dahl의 Node.js 소개 동영상 해설 by doorttsRyan Dahl의 Node.js 소개 동영상 해설 by doortts
Ryan Dahl의 Node.js 소개 동영상 해설 by doortts
 
임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조
 

Similar to 백승엽, M2프로젝트의 오류보고시스템, NDC2010

프로그램은 왜 실패하는가
프로그램은 왜 실패하는가프로그램은 왜 실패하는가
프로그램은 왜 실패하는가Heo Seungwook
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법성훈 김
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)YEONG-CHEON YOU
 
작품요약서 이영식
작품요약서 이영식작품요약서 이영식
작품요약서 이영식Yeongsik
 
하루에 10번 배포하기 - flickr
하루에 10번 배포하기 - flickr하루에 10번 배포하기 - flickr
하루에 10번 배포하기 - flickrSeongSik Kim
 
Ndc2010 김주복, v3. 마비노기2아키텍처리뷰
Ndc2010   김주복, v3. 마비노기2아키텍처리뷰Ndc2010   김주복, v3. 마비노기2아키텍처리뷰
Ndc2010 김주복, v3. 마비노기2아키텍처리뷰Jubok Kim
 
기술적 변화를 이끌어가기
기술적 변화를 이끌어가기기술적 변화를 이끌어가기
기술적 변화를 이끌어가기Jaewoo Ahn
 
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014NDOORS
 
JIRA 업무 생산성 향상 및 프로젝트 관리
JIRA 업무 생산성 향상 및 프로젝트 관리JIRA 업무 생산성 향상 및 프로젝트 관리
JIRA 업무 생산성 향상 및 프로젝트 관리KwangSeob Jeong
 
Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지Bansook Nam
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇Seungyong Lee
 
왜 애플리케이션이 Hang 되어도 OS는 괜찮을까?
왜 애플리케이션이 Hang 되어도 OS는 괜찮을까?왜 애플리케이션이 Hang 되어도 OS는 괜찮을까?
왜 애플리케이션이 Hang 되어도 OS는 괜찮을까?흥배 최
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈NAVER D2
 
Oracle Container Cloud Service & Docker Overview
Oracle Container Cloud Service & Docker OverviewOracle Container Cloud Service & Docker Overview
Oracle Container Cloud Service & Docker OverviewTaewan Kim
 
[아꿈사/110903] 도메인주도설계 4장
[아꿈사/110903] 도메인주도설계 4장[아꿈사/110903] 도메인주도설계 4장
[아꿈사/110903] 도메인주도설계 4장sung ki choi
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발동현 김
 
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트iFunFactory Inc.
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기YoungSu Son
 
실 사례로 보는 고객 디지털 경험 지키기
실 사례로 보는 고객 디지털 경험 지키기실 사례로 보는 고객 디지털 경험 지키기
실 사례로 보는 고객 디지털 경험 지키기IMQA
 

Similar to 백승엽, M2프로젝트의 오류보고시스템, NDC2010 (20)

프로그램은 왜 실패하는가
프로그램은 왜 실패하는가프로그램은 왜 실패하는가
프로그램은 왜 실패하는가
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
 
작품요약서 이영식
작품요약서 이영식작품요약서 이영식
작품요약서 이영식
 
하루에 10번 배포하기 - flickr
하루에 10번 배포하기 - flickr하루에 10번 배포하기 - flickr
하루에 10번 배포하기 - flickr
 
Ndc2010 김주복, v3. 마비노기2아키텍처리뷰
Ndc2010   김주복, v3. 마비노기2아키텍처리뷰Ndc2010   김주복, v3. 마비노기2아키텍처리뷰
Ndc2010 김주복, v3. 마비노기2아키텍처리뷰
 
기술적 변화를 이끌어가기
기술적 변화를 이끌어가기기술적 변화를 이끌어가기
기술적 변화를 이끌어가기
 
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014
 
JIRA 업무 생산성 향상 및 프로젝트 관리
JIRA 업무 생산성 향상 및 프로젝트 관리JIRA 업무 생산성 향상 및 프로젝트 관리
JIRA 업무 생산성 향상 및 프로젝트 관리
 
Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇
 
왜 애플리케이션이 Hang 되어도 OS는 괜찮을까?
왜 애플리케이션이 Hang 되어도 OS는 괜찮을까?왜 애플리케이션이 Hang 되어도 OS는 괜찮을까?
왜 애플리케이션이 Hang 되어도 OS는 괜찮을까?
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈
 
Oracle Container Cloud Service & Docker Overview
Oracle Container Cloud Service & Docker OverviewOracle Container Cloud Service & Docker Overview
Oracle Container Cloud Service & Docker Overview
 
201702-Oracle Container Cloud Service
201702-Oracle Container Cloud Service201702-Oracle Container Cloud Service
201702-Oracle Container Cloud Service
 
[아꿈사/110903] 도메인주도설계 4장
[아꿈사/110903] 도메인주도설계 4장[아꿈사/110903] 도메인주도설계 4장
[아꿈사/110903] 도메인주도설계 4장
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
 
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
 
실 사례로 보는 고객 디지털 경험 지키기
실 사례로 보는 고객 디지털 경험 지키기실 사례로 보는 고객 디지털 경험 지키기
실 사례로 보는 고객 디지털 경험 지키기
 

More from devCAT Studio, NEXON

김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019devCAT Studio, NEXON
 
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019devCAT Studio, NEXON
 
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019devCAT Studio, NEXON
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019devCAT Studio, NEXON
 
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019devCAT Studio, NEXON
 
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019devCAT Studio, NEXON
 
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019devCAT Studio, NEXON
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019devCAT Studio, NEXON
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019devCAT Studio, NEXON
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018devCAT Studio, NEXON
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018devCAT Studio, NEXON
 
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018devCAT Studio, NEXON
 
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018devCAT Studio, NEXON
 
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018devCAT Studio, NEXON
 
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012devCAT Studio, NEXON
 
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011devCAT Studio, NEXON
 
홍성우, 내가 만든 언어로 게임 만들기, NDC2017
홍성우, 내가 만든 언어로 게임 만들기, NDC2017홍성우, 내가 만든 언어로 게임 만들기, NDC2017
홍성우, 내가 만든 언어로 게임 만들기, NDC2017devCAT Studio, NEXON
 
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017devCAT Studio, NEXON
 
노기태, 김대우, 모바일 게임 데이터에 입각한 머신러닝 예측 분석 도입 및 삽질 후기, NDC2017
노기태, 김대우, 모바일 게임 데이터에 입각한 머신러닝 예측 분석 도입 및 삽질 후기, NDC2017노기태, 김대우, 모바일 게임 데이터에 입각한 머신러닝 예측 분석 도입 및 삽질 후기, NDC2017
노기태, 김대우, 모바일 게임 데이터에 입각한 머신러닝 예측 분석 도입 및 삽질 후기, NDC2017devCAT Studio, NEXON
 
이승재, 일정대로 출시하기 왜 & 어떻게: 개발자를 위한 제작진행개론, NDC2017
이승재, 일정대로 출시하기 왜 & 어떻게: 개발자를 위한 제작진행개론, NDC2017이승재, 일정대로 출시하기 왜 & 어떻게: 개발자를 위한 제작진행개론, NDC2017
이승재, 일정대로 출시하기 왜 & 어떻게: 개발자를 위한 제작진행개론, NDC2017devCAT Studio, NEXON
 

More from devCAT Studio, NEXON (20)

김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
 
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
이봄, 스토리텔링으로 즐기는 콘서트 - 시나리오 기획자를 위한 TRPG의 세계, NDC2019
 
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
유인호, <드래곤하운드>비주얼이펙트 연출, NDC2019
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
 
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
이현기, <드래곤하운드> 새로움과의 새로운 싸움, NDC2019
 
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
강성훈, 실버바인 대기열 서버 설계 리뷰, NDC2019
 
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
김호용, 드래곤하운드 비주얼 개발기 - 프로젝트 킥오프부터 현재까지, 아트의 기둥 세우기, NDC2019
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
 
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
문석진, 프로젝트DH의 절차적 애니메이션 시스템 Ⅱ, NDC2018
 
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
모광택, 모바일 TCG 게임의 라이브 서비스에 대한 경험 공유, NDC2018
 
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
 
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
백승엽, 매직 더 개더링 20년간의 게임디자인 엿보기, NDC2012
 
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
백승엽, M2프로젝트의 애니메이션 로딩 전략, NDC2011
 
홍성우, 내가 만든 언어로 게임 만들기, NDC2017
홍성우, 내가 만든 언어로 게임 만들기, NDC2017홍성우, 내가 만든 언어로 게임 만들기, NDC2017
홍성우, 내가 만든 언어로 게임 만들기, NDC2017
 
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #2, NDC2017
 
노기태, 김대우, 모바일 게임 데이터에 입각한 머신러닝 예측 분석 도입 및 삽질 후기, NDC2017
노기태, 김대우, 모바일 게임 데이터에 입각한 머신러닝 예측 분석 도입 및 삽질 후기, NDC2017노기태, 김대우, 모바일 게임 데이터에 입각한 머신러닝 예측 분석 도입 및 삽질 후기, NDC2017
노기태, 김대우, 모바일 게임 데이터에 입각한 머신러닝 예측 분석 도입 및 삽질 후기, NDC2017
 
이승재, 일정대로 출시하기 왜 & 어떻게: 개발자를 위한 제작진행개론, NDC2017
이승재, 일정대로 출시하기 왜 & 어떻게: 개발자를 위한 제작진행개론, NDC2017이승재, 일정대로 출시하기 왜 & 어떻게: 개발자를 위한 제작진행개론, NDC2017
이승재, 일정대로 출시하기 왜 & 어떻게: 개발자를 위한 제작진행개론, NDC2017
 

백승엽, M2프로젝트의 오류보고시스템, NDC2010

  • 3. 이 발표에서는 • 유저용 오류보고 시스템(X) • 개발팀 내부용 오류보고 시스템(O) • 운용하면서 얻은 노하우 중심 • 구현 기술은 설명이 필요한 부분만 2010-05-26 3M2프로젝트의 오류보고시스템
  • 4. 개발자들이 자기가 만들고 있는 게임을 안해보는 이유 2. 실행이 안된다 개발기간 동안 개발자들은 '우리 게임은 제대로 작동하지 않는다'는 사실을 점차적으로 '학습'한다. 개발중인 코드라서 실행 파일만 클릭 해도 클라가 뻗는다. 실행-다운을 반복적으로 경험하는 개발자들은 심리상자 속의 쥐가 레버누르기-전기충격을 학습하여 결국 레버를 누르지 않게되는 것과 비슷하게 행동한다. 디버깅은 다음다음다음 마일스톤에... http://www.minamza.net/1741 2010-05-26 4M2프로젝트의 오류보고시스템
  • 5. 어떻게… 그럼 항상 실행되게 하면 되겠네! 2010-05-26 M2프로젝트의 오류보고시스템 5
  • 6. 버그를 다 잡으면 되지! 2010-05-26 M2프로젝트의 오류보고시스템 6
  • 7. 어떻게 해야 다 잡나요? 누구는 버그 잡기 싫어서 안 잡나요? 2010-05-26 M2프로젝트의 오류보고시스템 7
  • 8. 버그를 빨리 발견 • 발생한 그 날 발견한다면 용의자는 그날의 변경점 • 빠른 수정이 가능해진다. 2010-05-26 8M2프로젝트의 오류보고시스템 0 5 10 15 20 25 30
  • 9. 더 많은 정보를 획득 • 아티스트들도 많은 문제를 겪는다 • 하지만 피드백은 잘 주는 편이 아님 • 아티스트의 문제를 파악하고 개선할 수 있다 2010-05-26 9M2프로젝트의 오류보고시스템 0 20 40 60 80 100
  • 10. 오류가 빈번히 생기는 곳을 발견 • 프로세스 개선/리팩토링 – 버그의 발생을 방지! 2010-05-26 M2프로젝트의 오류보고시스템 10 8B1002F1-2B76-42E7-8FA1-96BDC9EB659D 6B40893C-432D-4963-883E-6DC8ED9F1AAC 2E2DAC91-D9E4-4f2a-ADAD-2ACC7D0751AC 4E9C1D9A-9D45-43EA-9238-61A07CF6D273 93171980-CCBA-451D-A562-BD82941D4553 11C43CD3-F252-4EF2-955A-7A2480BA8519 3C29F8F2-AFB1-4AD9-B05D-EB1AAA60B1D9 23C05FDA-3A09-4974-923B-BA13EA9809EF E4C5E52C-D1A8-415B-9704-E0DB2C0482BC A0F34C3B-7DFF-4EEB-9C19-F31EF1267B40 1위는 셰이더 컴파일 에러 리팩토링/프로세스 개선으로 이제는 사라진 항목들
  • 11. 개발팀용 오류보고시스템이 있으면 가능! 2010-05-26 M2프로젝트의 오류보고시스템 11
  • 12. 나중에 유저용으로 간단히 교체 2010-05-26 12M2프로젝트의 오류보고시스템
  • 13. 허스키 익스프레스에도 수출 2010-05-26 M2프로젝트의 오류보고시스템 13
  • 15. 사용법은 매우 간단 • 정보가 좀 더 들어간 ASSERT • 정체를 파고 들어보면 이런 매크로임 2010-05-26 15M2프로젝트의 오류보고시스템
  • 16. 여기서 잠깐 시연 2010-05-26 16M2프로젝트의 오류보고시스템
  • 17. 오류코드 • 코드가 추가변경되면서 오류주소는 계속 변한다 • 오류코드는 변하지 않는다 – 여러 프로그래머가 작성하므로 GUID로 중복을 피함 • 오류를 발생시킨 코드를 쉽게 검색가능 – 오류 정보에 코드 위치 정보가 있지만 이쪽이 편리 2010-05-26 17M2프로젝트의 오류보고시스템
  • 18. 오류실명제 • 오류를 고칠 사람을 쉽게 특정 가능 • 하부에서 발생하는 경우 익셉션을 던지고 상부에서 캐치해서 처리 2010-05-26 18M2프로젝트의 오류보고시스템
  • 19. 오류설명 • 이것만 보고도 기본적인 대처가 가능 • 특히 데이터 오류에 유용 – 설명을 잘 적어놓으면 프로그래머의 손이 필 요 없어 진다. 2010-05-26 19M2프로젝트의 오류보고시스템
  • 20. 상세 정보 2010-05-26 M2프로젝트의 오류보고시스템 20
  • 21. 오류 무시 • 사소한 문제로 못 띄우면 안되니 2010-05-26 M2프로젝트의 오류보고시스템 21
  • 22. 2차 재해 • 모든 오류 상황에서 중단하면 좋겠지만 – 리소스 생산성에 타격 • 2차 재해 가능성 여부를 잘 생각해서 무시 할 수 있는지 여부를 정해야 한다 • 오류레벨 – Warning 무시 가능 – Error 무시 불가 2010-05-26 M2프로젝트의 오류보고시스템 22
  • 24. 오류 메일 자동 발송 이 발표에서 제일 중요한 노하우입니다 2010-05-26 M2프로젝트의 오류보고시스템 24 오류메일을 사용자가 명시적으로 보내지 않아도 자동으로 보냄 오류발생을 보고하지 않던 사람들의 오류정보를 알 수 있게 된다
  • 25. 오류당번제 • 모든 프로그래머가 돌아가며 당번 • 그 날의 오류 메일을 처리 2010-05-26 25M2프로젝트의 오류보고시스템
  • 26. 오류당번제 • 자신의 작업과 관련 없는 코드들을 보게 된다. • 추적 과정에서 자연스럽게 코드 리뷰 • 전체에 대한 이해도 상승 2010-05-26 M2프로젝트의 오류보고시스템 26
  • 27. 오버레이 • 창이 뜨니까 너무 심각하게 받아들인다 – 좀 덜 심각해 보이는 것을 추가 – 무시해도 클라이언트 동작에 큰 문제가 없는 것들은 이것으로 처리 2010-05-26 27M2프로젝트의 오류보고시스템
  • 28. 그래도 메일은 날아온다 • 오류를 겪은 사람에게는 중요하지 않은 정보 • 오류의 원인을 만든 사람에게는 필요한 정보 2010-05-26 M2프로젝트의 오류보고시스템 28
  • 29. 오류보고 시스템은 제일 하부 상부에서 핸들러를 설치해서 화면출력 처리 2010-05-26 M2프로젝트의 오류보고시스템 29
  • 30. 오류 발생을 모를 것 같은데요? • 지나간 오류는 클라이언트 로그에서 확인 가능 • 커스텀 핸들러에서 로거에 기록하도록 구현 2010-05-26 M2프로젝트의 오류보고시스템 30
  • 31. 커스텀 핸들러 • 오류보고 시스템이 처리하기 전에 커스텀 핸들러에게 먼저 처리할 기회를 준다 • 커스텀 핸들러의 리턴값으로 오류보고 시 스템이 계속해서 처리해야할지를 알려줌 2010-05-26 31M2프로젝트의 오류보고시스템
  • 32. 커스텀 핸들러가 있으면 • 툴에서도 유용하게 사용 – 리소스 빌드 시 개별 오류에 반응하지 않고 빌 드 종료시 오류가 있었던 파일 목록을 출력 • 커스텀 오류 정보를 추가 가능 – 문제를 일으킨 리소스 파일을 오류 메일에 첨 부하도록 지시하는 것도 가능 2010-05-26 32M2프로젝트의 오류보고시스템
  • 33. 로컬 에러 • 리소스 작업자가 작업 도중에 발생하는 오 류의 경우 메일을 보내지 않도록 – 체크인하지 않은 리소스에서의 오류는 다른 사람에게는 중요하지 않다 • 오류보고메일을 보내지 않음으로서 – 리소스 작업자의 심적 부담 경감 – 오류 담당자의 처리 부담 경감 2010-05-26 33M2프로젝트의 오류보고시스템
  • 34. 로컬 에러 • 작업자 별로 다른 설정 파일 – GUID 기반으로 필터링 • 오버레이로 지정되어도 오류창을 띄움 – 작업자가 놓치지 않도록 2010-05-26 M2프로젝트의 오류보고시스템 34
  • 36. 직접 만드실 분들을 위해 • 의외로 괴로운 부분이 있는 작업 – 최하부 레이어 • 다른 자가 라이브러리를 쓸 수 없다 – 디버깅이 매우 불편 • OuputDebugString 을 활용 2010-05-26 M2프로젝트의 오류보고시스템 36
  • 37. 스택 오버플로우 • 메모리가 없는데 어떻게 오류 처리를 해 – 사실 메모리가 전혀 없지는 않지만 – 그래도 오류 처리를 하기에는 무리 2010-05-26 37M2프로젝트의 오류보고시스템
  • 38. 스택 오버플로우 • 스택 메모리는 쓰레드 단위 – 새 쓰레드를 만들어서 거기서 처리 – 새 쓰레드를 띄우기까지 과정을 최소화 2010-05-26 38M2프로젝트의 오류보고시스템
  • 39. 멀티쓰레드 • M2는 멀티쓰레드 – 초기에는 싱글쓰레드였지만 2010-05-26 M2프로젝트의 오류보고시스템 39 김주복, NDC2010, M2아키텍쳐 리뷰: 완벽한 설계에의 도전
  • 40. 멀티쓰레드 그거 락만 걸면 되는거 아닌가요? • 다른 쓰레드의 작업이 끝나기를 대기 – 윈도우 메시지를 처리하는 쓰레드가 블럭됨 • 오류보고 창이 안 뜬다! 2010-05-26 M2프로젝트의 오류보고시스템 40
  • 41. 오류보고 창을 별도 프로세스로 – 오류로그를 파일로 쓴다 • 로그는 XML로 쓰고 있음 • 오류 설명에 무슨 문자가 들어갈지 모르므로 XML 세이프 하게 문자 변환 – 오류보고 프로세스에는 파일명을 넘김 • 덤으로 나중에도 오류로그를 다시 확인할 수 있다 – 의도한 것은 아니지만… 2010-05-26 M2프로젝트의 오류보고시스템 41
  • 42. 여러 쓰레드에서 동시 오류 • 락으로 한번에 오류창은 하나만 뜨게 • 사실은 오류발생 순간에 다른 쓰레드를 모 두 멈추고 싶지만… – 아직 해결책을 못 찾았음 2010-05-26 42M2프로젝트의 오류보고시스템
  • 43. 오류정보에 프로세스/쓰레드 ID를 추가 • 오류간의 연관성을 판단하기 쉬워짐 • 싱글스레드라도 프로세스 ID는 꼭 기록 – 한번 수행에서의 연속적인 오류인가? – 프로그램을 여러 번 기동했는데 같은 오류가 반복적으로 발생했는가? 2010-05-26 M2프로젝트의 오류보고시스템 43
  • 44. 디버거가 붙어있을 때 • 멈춰준다. • OutputDebugString으로 정보 출력 • 디버거에서 오류 정보의 값을 열어보지 않아도 됨 2010-05-26 44M2프로젝트의 오류보고시스템
  • 45. 디버거가 붙어있을 때 • 덤프 안 남김 – 필요 없으니까 • 메일 안 보냄 – 보통 자신이 빌드한 것이라 보내도 소용 없음 2010-05-26 45M2프로젝트의 오류보고시스템
  • 47. 실행파일 버전 • 오류를 일으킨 프로그램이 최신 버전인가? – 기존에는 타임스탬프로 확인 • AlienBrain의 불안정성으로 트러블 – 파일 시간을 받은 시간으로 세팅하게 설정 – 타임스탬프에만 의지하기 힘들어졌다 2010-05-26 47M2프로젝트의 오류보고시스템
  • 48. 실행파일 버전 • MD5 – MD5의 신뢰성으로 충분 • 변조방지가 목적이 아님 – 빠르고 가벼운 해시가 좋다 2010-05-26 M2프로젝트의 오류보고시스템 48
  • 49. 빌드한 머신 이름 • 왜 필요? 프로그래머가 속도를 이유로 릴리즈 버전으로 빌드해서 디버거를 붙이지 않고 테스트 중 발생한 오류메일을 무시하기 위해 2010-05-26 49M2프로젝트의 오류보고시스템
  • 50. 디버거 연결 • 우선 순위가 낮아서 미뤄지고 있는 기능 – 프로그래머들은 VS에서 프로세스에 디버거 연결이 가능 – 비 프로그래머들에게는 디버거가 없음 2010-05-26 50M2프로젝트의 오류보고시스템
  • 51. 디버거 연결 • 이런 것 쓰면 된다고 하나 – .Net에서 무슨 일이 있을지는 해봐야 알지... 2010-05-26 M2프로젝트의 오류보고시스템 51
  • 52. 스크린샷 찍기 • 매우 도움이 되는 정보 – 꼭 가지고 싶다 • 해당 프로그램은 오류를 일으킨 상황 – 오류보고 시스템이 찍어주어야 한다 2010-05-26 52M2프로젝트의 오류보고시스템
  • 53. 스크린샷 찍기 • 전화면 스크린샷은 어렵지 않다 • 해당 프로그램 영역을 알아내기가 곤란함 – .NET에서 보안관련 이유로 다른 프로세스의 정보를 얻는 것이 제한 – 같은 이유로 오류창을 해당 프로그램 창 옆에 띄워줄 수 없다 2010-05-26 M2프로젝트의 오류보고시스템 53
  • 54. 스크린샷 찍기 • 전화면 스크린샷은 곤란 – 개인의 프라이버시 • 회사는 일하는 곳이기는 하지만 – 상급자의 화면이 캡쳐되면 보안문제 2010-05-26 M2프로젝트의 오류보고시스템 54
  • 55. 오류통계/이슈트래킹 구축 • 내년에는 이걸 발표하는게 목표 2010-05-26 55M2프로젝트의 오류보고시스템