SlideShare una empresa de Scribd logo
1 de 48
넥슨 코리아
김성은(build88@nexon.co.kr)
라이브 프로세스 분석을 통한
효율적인 로직 개발
발표자는....
발표자의 경험......
계기..
지구 반대편도 비슷한데??
다른 개발자들과의 대화..
그래서 얻은 결론…
LIVE PROCESS
기획서 이해
기존 코드 분석 구조 설계
코드 작성
완성
QA & 버그수정
Before you can change the code to add a new feature, to fix a bug,
or for whatever reason caused you to fire up your editor,
you have to understand what the existing code is doing.
We tend to gloss over this step, but it’s often the most time-
consuming part of programming.
기능추가,버그수정 그 외 무슨 이유든 코드를 고치려면 먼저 기존 코드를 이해해야 한다.
대부분 이 과정을 별것 아닌 것으로 여기지만 사실
프로그래밍에서 가장 오래 걸리는 부분이다.
못 알아 먹겠다….
기존 코드는....
대부분…
0% 40% 50% 5% 5%
설계 및 구현
기존 코드 분석
꿈 상위 대부분 삶이 힘들다 갈아엎는중..
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
항목 1 항목 2 항목 3 항목 4 항목 5
실제 일정…
BAD
CODE
분석시간
증가
코드 설계
시간 부족
그래서 오늘의 핵심!!
분석에 소요되는 시간을 줄여서!!
코드 설계 & 작성하는 시간을 늘리자!!!!!!!!
GOOD
CODE
분석시간
감소
충분한
설계 시간
오또케요~???
좋은 코드를 많이 만들어 보아요~
좋은 코드?????
좋은 코드의 정의 :
새로운 코드를 작성 하기 전,
머리 속에 입력해야 할
정보가 적은 코드
발표자를 포함한 많은 프로그래머들이
경험을 통해 배운 여러 가지 TIP
‘코드’적인 측면과
‘방법론’적인 측면으로
나누어 말씀 드리려 합니다.
코드
작명은 중요하다. 정말로 중요하다.
( 변수 , 함수 , 클래스의 작명 )
// 알아보기 겁나 힘들다..
NameGet()
GetNameRes()
UserIDGet()
...
// CS 가 뭐지???, 정의를 찾아 가봐야 한다...
if( CS() ) {
...
}
// 공통적인 내용이 앞에 있어 알아보기 쉽다.
GetName
GetNameRes
GetUserID
...
// 한눈에 무슨 일을 하는지 알 수 있다.
if( CheckState() ) {
...
}
작업자들간의 공유할 수 있는 네이밍 규칙이 필요합니다.
사용하지 않게 된"#if~endif"은 빠르게 Delete
대부분의 서비스중인 온라인 게임에서
#define 의 개수는 적게는 "몇백개"에서
많게는"몇천 몇만개"에 달한다.
#ifdef~#endif 는
“가독성”과 “유지보수” 에 있어
굉장히 중요하고 민감한 부분임을
항상 명심하자.
USE_FUNC_A,B,C,D 모두 더 이상 사용하지 않지만
여전히 코드상에 남아있다
Class1
CompareString // Class1 의 스트링 비교 함수
미사용 코드는 꼭 제거하자
완전히 같은 기능을 하는
중복 함수들..
Class2
StringCompare // Class2 의 스트링 비교 함수
Class3
CompareStr // Class3 의 스트링 비교 함수
#ifdef CASE_NEW
int nCase = 0 ;
#else
int nCase = random(0,2);
#endif // CASE_NEW
if( nCase == 0 ){
...
}
// 여기부터는 필요가 없어 졌다.
else if( nCase == 1 ) {
...
}
else if( nCase == 2 ){
...
}
무쓸모 코드 발생
int nCase = random(0,2);
if( nCase == 0 ){
...
}
else if( nCase == 1 ) {
...
}
else if( nCase == 2 ){
...
}
적재적소의 주석! , 미사용 주석은 빠르게 제거~!!
실제로 동작하는 코드는
한줄!!??
직관적으로 이해 가능!!
OnExcuteSpecial()이 무엇을
하는지는 오로지 작성자만...
‘코드’적인 측면의
공 통 점
작은 불씨가..
큰 불로..
업무 하다가 남은 시간에 정리하자
“남은 시간” 은 없다.
반드시 “업무” 로 할당하여 해결하자.
방법론
짧은 개발 기간 동안 무리한 양의 개발 지양
개발완료 이후 출시 전 사이 여러 번의 내용 변경 시도 (지양x3)
그래도 정말 어쩔 수 없이! 꼭!!
이번만큼은 해야 한다면!!??
업데이트 이후 스케줄은 반드시 !!
무리한 개발에 따른 비효율적 코드(땜빵코드) or 리소스의
정리(리펙토링)가 되어야 한다.
무리한 개발을 진행하였으면 반드시 그에 따른 결과를 기록해야 하고
이를 향후 비슷한 이슈가 발생했을 때 참고자료로 사용해야 한다.
신입은 야생동물이 아닙니다.
야생에 방치하면 아니되오~!!
첫 출근!! 전쟁터.. 여긴 어디 나는 누구..
탈선..
새로운 환경과 업무에
잘 적응 할 수 있도록
많은 관심과 노력이 필요합니다.
퇴사 예정자에게 새로운 업무부여는 XXX
이번 개발은 진짜 중요한 건데
퇴사 전에 , 마지막으로
멋지게 마무리 하고 가자.
잘 할 수 있지??
너만 믿는다~
“근데 너는 이 개발이
성공하더라도
그것에 대한 보상은
단 하나도 받을 수 없어
하지만 일은 정말 멋지고 완벽하게
해내야 해
알았지?”
그럼 수고해~
퇴사 예정자가 진짜 해야 할 업무는
“신규개발” 이 아닌
“인수인계” 입니다.
직간접적인 "코드리뷰"!! must have!!
나는 10줄의 코드로 구현 가능하다고 생각한 기능을
다른 프로그래머는 단 2줄의 코드로 구현 가능한 방법을
알고 있을 수도 있다.
직간접적인 "코드리뷰"!! must have!!
직접적인 코드 리뷰
( 결과물에 대해 모두가 토론 )
간접적인 코드 리뷰
( 리드 프로그래머의 검수 )
30 %
70 %
직간접적인 "코드리뷰"!! must have!!
팀원들의 리드 프로그래머에 대한 "신뢰도" UP
Code talks bullshit walks
프로젝트의 코드 퀄리티가 뛰어나다 응답
작업자와 1:1 대화를 통한 코드 리뷰 or
관련 컨텐츠의 샘플 코드 제시
방향을 제시
(리더가 직접 코드를 작성하며 게임 코드의 변화를 자세히 파악하고 있어야 한다.)
“원래 다 그런 거지..”
이 세상에 원래부터 그런 것은 없습니다.
오래된 관습 만이 존재할 뿐입니다.
각 팀에 맞는 해결책을 지속적으로 논의
재미있는 게임 만들어 보아요~
감사합니다.

Más contenido relacionado

La actualidad más candente

Kotlin 을 아시나요?
Kotlin 을 아시나요?Kotlin 을 아시나요?
Kotlin 을 아시나요?NBT Inc.
 
간단하게 알아보는 좋은 코드 서영훈
간단하게 알아보는 좋은 코드   서영훈간단하게 알아보는 좋은 코드   서영훈
간단하게 알아보는 좋은 코드 서영훈Seo YoungHoon
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기Chris Ohk
 
모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디quxn6
 
2016 C++스터디 1주차
2016 C++스터디 1주차2016 C++스터디 1주차
2016 C++스터디 1주차Seungwee  Choi
 
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)MinGeun Park
 

La actualidad más candente (9)

Kotlin 을 아시나요?
Kotlin 을 아시나요?Kotlin 을 아시나요?
Kotlin 을 아시나요?
 
1 2 1
1 2 11 2 1
1 2 1
 
Work With Engineer
Work With EngineerWork With Engineer
Work With Engineer
 
간단하게 알아보는 좋은 코드 서영훈
간단하게 알아보는 좋은 코드   서영훈간단하게 알아보는 좋은 코드   서영훈
간단하게 알아보는 좋은 코드 서영훈
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기
 
모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디
 
Java the good parts
Java the good partsJava the good parts
Java the good parts
 
2016 C++스터디 1주차
2016 C++스터디 1주차2016 C++스터디 1주차
2016 C++스터디 1주차
 
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
 

Similar a NDC 2017 라이브 프로세스 분석을 통한 효율적인 게임 로직 개발 - 김성은

깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)Jay Park
 
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여iamprogrammerofficial
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
05. 아키텍트가 알아야할 12 97가지
05. 아키텍트가 알아야할 12 97가지05. 아키텍트가 알아야할 12 97가지
05. 아키텍트가 알아야할 12 97가지YoungSu Son
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니Lusain Kim
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Ryan Park
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Dong Chan Shin
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기Seungjae Lee
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013devCAT Studio, NEXON
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규ChangKyu Song
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기Sunghyouk Bae
 
[TECHCON 2019: MOBILE - iOS]2.들숨에 협업 날숨에 클린코드
[TECHCON 2019: MOBILE - iOS]2.들숨에 협업 날숨에 클린코드[TECHCON 2019: MOBILE - iOS]2.들숨에 협업 날숨에 클린코드
[TECHCON 2019: MOBILE - iOS]2.들숨에 협업 날숨에 클린코드NAVER Engineering
 
The art of readable code ch4 ch8
The art of readable code ch4   ch8The art of readable code ch4   ch8
The art of readable code ch4 ch8Ki Sung Bae
 
랩탑으로 tensorflow 도전하기 - tutorial
랩탑으로 tensorflow 도전하기 - tutorial랩탑으로 tensorflow 도전하기 - tutorial
랩탑으로 tensorflow 도전하기 - tutorialLee Seungeun
 
21.11.01 ASTERA Study
21.11.01 ASTERA Study21.11.01 ASTERA Study
21.11.01 ASTERA StudyJihun Jeon
 
스타트업 인턴 개발자 3달간의 고군분투기 김은향
스타트업 인턴 개발자 3달간의 고군분투기 김은향스타트업 인턴 개발자 3달간의 고군분투기 김은향
스타트업 인턴 개발자 3달간의 고군분투기 김은향Eunhyang Kim
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다wonmin lee
 
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기초보개발자의 TDD 체험기
초보개발자의 TDD 체험기Sehun Kim
 
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018Kenneth Ceyer
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10흥배 최
 

Similar a NDC 2017 라이브 프로세스 분석을 통한 효율적인 게임 로직 개발 - 김성은 (20)

깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
 
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
05. 아키텍트가 알아야할 12 97가지
05. 아키텍트가 알아야할 12 97가지05. 아키텍트가 알아야할 12 97가지
05. 아키텍트가 알아야할 12 97가지
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기
 
[TECHCON 2019: MOBILE - iOS]2.들숨에 협업 날숨에 클린코드
[TECHCON 2019: MOBILE - iOS]2.들숨에 협업 날숨에 클린코드[TECHCON 2019: MOBILE - iOS]2.들숨에 협업 날숨에 클린코드
[TECHCON 2019: MOBILE - iOS]2.들숨에 협업 날숨에 클린코드
 
The art of readable code ch4 ch8
The art of readable code ch4   ch8The art of readable code ch4   ch8
The art of readable code ch4 ch8
 
랩탑으로 tensorflow 도전하기 - tutorial
랩탑으로 tensorflow 도전하기 - tutorial랩탑으로 tensorflow 도전하기 - tutorial
랩탑으로 tensorflow 도전하기 - tutorial
 
21.11.01 ASTERA Study
21.11.01 ASTERA Study21.11.01 ASTERA Study
21.11.01 ASTERA Study
 
스타트업 인턴 개발자 3달간의 고군분투기 김은향
스타트업 인턴 개발자 3달간의 고군분투기 김은향스타트업 인턴 개발자 3달간의 고군분투기 김은향
스타트업 인턴 개발자 3달간의 고군분투기 김은향
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다
 
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기초보개발자의 TDD 체험기
초보개발자의 TDD 체험기
 
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
 

NDC 2017 라이브 프로세스 분석을 통한 효율적인 게임 로직 개발 - 김성은