반응형
< 강연자 소개 >
김준엽 (넥슨 라이브팀)
다른 팀에서 근무하다가 도중에 메이플 스토리로 팀을 옮기게 됐다고 한다. 성공한 게임을 개발한 팀에서 개발하게 된다는 환상 뒤에는 서비스 8년(개발한지는 거의 10년)이 된 낡은 코드와 시스템이 있었다.
< 새로운 개발툴 >
퀘스트 편집기라는 툴이 있는데 MFC와 변형된 Component인 PCOM, 가장 중요하게 기획자들이 사용하기 힘든 사용법 때문에 변화가 필요했다. 그래서 이번에는 C#과 .NET Framework를 가지고 새로 만들어 보기로 했다. 하지만 PCOM 인터페이스 때문에 Managed C++로 Wrapping이 필요했고, ILMerge 라는 프로그램도 사용했다.
< 장기 컨텐츠 >
"해적"이라는 대규모 패치가 기획되었다. 제작 기간은 무려 1년이다. 대부분의 경우 소스/데이터 브랜치를 떠서 독립된 공간에서 신규 컨텐츠 작업을 하는데, 약 1년 후에 Trunk와 머지하려면 Conflict는 기본이요, Conflict를 해결하고 컴파일을 마쳐도 실행할 때 어떤 위험이 있을지 모른다. 더구나 바이너리 데이터의 경우 포맷이 바뀌면... 기획자들이 모든 데이터를 수동으로 고쳐야 한다.
그래서 아예 같은 브랜치에서 작업을 하고 원래 코드와 실행 분기는 건드리지 않도록 작업을 했다고 한다. (이 부분은 현재 우리 팀에서 하고 있는 한 소스에 #ifdef 등으로 나누는 것과 비슷한 맥락인것 같다.) 단 바이너리 데이터의 경우 완성되지 않은 그리고 유출될 위험이 있기에 패치나 실서버에 껴들어 가는것이 싫었고, 리소스를 패킹할 때 원하지 않는 파일들을 제거하는 기능을 구현했다.
< 대규모 자료 >
"빅뱅" 패치에서는 1500종의 몬스터의 밸런스를 조정하기로 했다. 하지만 1500종 몬스터와 26개의 스탯 항목은 총 39000번의 수정을 의미했다. 그것도 사람이 일일히... 이 때문에 기획자들이 가장 잘 사용하고 믿고 좋아하는 엑셀에서 모든 작업을 수행할 수 있도록 하기로 했다. Visual Studio에 엑셀 Add In 등을 제작할 수 있는 템플릿이 있기 때문에 이를 이용하면 된다. (이 부분은 저도 처음 듣는 내용이라 기억이 부정확할 수도 있습니다. VS2008->New Project->C#->Office를 누르면 나오는 프로젝트 타입이 아닌가 추측됩니다.)
< 구조 변경 >
"카오스" 패치에서는 기존에 존재하지 않았던 PvP가 추가되었다. PvP는 프로그래머들이 생각하기에 문제가 많았는데, (1) 클라이언트에서 MOB의 정보를 가져와서 데미지를 계산 후 서버로 전송 / (2) 필드 템플릿 당 단 하나의 필드 인스턴스만 생성되는 기존 방식들의 제약 때문이다. (투기장 같이 별도의 필드에서 PvP를 하는 기획인듯 하다. 메이플을 안해서 잘 모름...ㅠㅠ) 때문에 일단 작업을 데미지 계산하는 스킬, 로직 부분과 동적 필드를 구현하는 3부분으로 나눠서 병렬로 처리를 하였고, 구조는 기존 서버 구조를 크게 바꾸지 않는 선에서 마무리 하였다.
< 마무리 >
- 기존 툴을 최대한 활용 : 기존 GUI가 모두 하드코딩 되어 있었지만, 구식 툴을 조금 수정하여 어느정도 자동화를 해결하였다.
- 범용 툴 활용 : 엑셀이나 포토샵의 Add In 등을 사용할 수 있도록 지원했다.
- 부작용 최소화 : 실제 서비스 되는 인기 게임이기 때문에 다른 서비스에 영향을 주지 않도록 주의해야 한다.
- 때로는 Best 보다는 Better가 나을 수도 있다.
< 질문과 답변 >
Q) VS6에서 VS2008로 마이그레이션을 했다고 하는데 노하우가 궁금하다. 특히 템플릿 부분이 오류가 난다.
A) 우리가 작업할 때는 메모리 관련한 오류는 많았는데 템플릿 쪽은 큰 문제가 없어서 잘은 모르겠다. 하지만 ZTL(?)이라는 내부 개발한 템플릿 라이브러리가 있는데 이 라이브러리만 새로 수정을 하였다. 또 한번에 하려던 것이 아니고 혼자서 조금 조금씩 마이그레이션 작업을 진행하다가 거의 완성될 시점에 다른 사람과 함께 마무리 했다. 때문에 전체 기간을 따지면 1~2년은 걸린것 같고 절대 만만히 보고 급하게 할 수 있는 작업은 아닌것 같다.
김준엽 (넥슨 라이브팀)
다른 팀에서 근무하다가 도중에 메이플 스토리로 팀을 옮기게 됐다고 한다. 성공한 게임을 개발한 팀에서 개발하게 된다는 환상 뒤에는 서비스 8년(개발한지는 거의 10년)이 된 낡은 코드와 시스템이 있었다.
< 새로운 개발툴 >
퀘스트 편집기라는 툴이 있는데 MFC와 변형된 Component인 PCOM, 가장 중요하게 기획자들이 사용하기 힘든 사용법 때문에 변화가 필요했다. 그래서 이번에는 C#과 .NET Framework를 가지고 새로 만들어 보기로 했다. 하지만 PCOM 인터페이스 때문에 Managed C++로 Wrapping이 필요했고, ILMerge 라는 프로그램도 사용했다.
< 장기 컨텐츠 >
"해적"이라는 대규모 패치가 기획되었다. 제작 기간은 무려 1년이다. 대부분의 경우 소스/데이터 브랜치를 떠서 독립된 공간에서 신규 컨텐츠 작업을 하는데, 약 1년 후에 Trunk와 머지하려면 Conflict는 기본이요, Conflict를 해결하고 컴파일을 마쳐도 실행할 때 어떤 위험이 있을지 모른다. 더구나 바이너리 데이터의 경우 포맷이 바뀌면... 기획자들이 모든 데이터를 수동으로 고쳐야 한다.
그래서 아예 같은 브랜치에서 작업을 하고 원래 코드와 실행 분기는 건드리지 않도록 작업을 했다고 한다. (이 부분은 현재 우리 팀에서 하고 있는 한 소스에 #ifdef 등으로 나누는 것과 비슷한 맥락인것 같다.) 단 바이너리 데이터의 경우 완성되지 않은 그리고 유출될 위험이 있기에 패치나 실서버에 껴들어 가는것이 싫었고, 리소스를 패킹할 때 원하지 않는 파일들을 제거하는 기능을 구현했다.
< 대규모 자료 >
"빅뱅" 패치에서는 1500종의 몬스터의 밸런스를 조정하기로 했다. 하지만 1500종 몬스터와 26개의 스탯 항목은 총 39000번의 수정을 의미했다. 그것도 사람이 일일히... 이 때문에 기획자들이 가장 잘 사용하고 믿고 좋아하는 엑셀에서 모든 작업을 수행할 수 있도록 하기로 했다. Visual Studio에 엑셀 Add In 등을 제작할 수 있는 템플릿이 있기 때문에 이를 이용하면 된다. (이 부분은 저도 처음 듣는 내용이라 기억이 부정확할 수도 있습니다. VS2008->New Project->C#->Office를 누르면 나오는 프로젝트 타입이 아닌가 추측됩니다.)
< 구조 변경 >
"카오스" 패치에서는 기존에 존재하지 않았던 PvP가 추가되었다. PvP는 프로그래머들이 생각하기에 문제가 많았는데, (1) 클라이언트에서 MOB의 정보를 가져와서 데미지를 계산 후 서버로 전송 / (2) 필드 템플릿 당 단 하나의 필드 인스턴스만 생성되는 기존 방식들의 제약 때문이다. (투기장 같이 별도의 필드에서 PvP를 하는 기획인듯 하다. 메이플을 안해서 잘 모름...ㅠㅠ) 때문에 일단 작업을 데미지 계산하는 스킬, 로직 부분과 동적 필드를 구현하는 3부분으로 나눠서 병렬로 처리를 하였고, 구조는 기존 서버 구조를 크게 바꾸지 않는 선에서 마무리 하였다.
< 마무리 >
- 기존 툴을 최대한 활용 : 기존 GUI가 모두 하드코딩 되어 있었지만, 구식 툴을 조금 수정하여 어느정도 자동화를 해결하였다.
- 범용 툴 활용 : 엑셀이나 포토샵의 Add In 등을 사용할 수 있도록 지원했다.
- 부작용 최소화 : 실제 서비스 되는 인기 게임이기 때문에 다른 서비스에 영향을 주지 않도록 주의해야 한다.
- 때로는 Best 보다는 Better가 나을 수도 있다.
< 질문과 답변 >
Q) VS6에서 VS2008로 마이그레이션을 했다고 하는데 노하우가 궁금하다. 특히 템플릿 부분이 오류가 난다.
A) 우리가 작업할 때는 메모리 관련한 오류는 많았는데 템플릿 쪽은 큰 문제가 없어서 잘은 모르겠다. 하지만 ZTL(?)이라는 내부 개발한 템플릿 라이브러리가 있는데 이 라이브러리만 새로 수정을 하였다. 또 한번에 하려던 것이 아니고 혼자서 조금 조금씩 마이그레이션 작업을 진행하다가 거의 완성될 시점에 다른 사람과 함께 마무리 했다. 때문에 전체 기간을 따지면 1~2년은 걸린것 같고 절대 만만히 보고 급하게 할 수 있는 작업은 아닌것 같다.
반응형
'Game Dev > Article' 카테고리의 다른 글
에밀레종을 만들지 말자. (0) | 2013.03.26 |
---|---|
간단한 Python 문법 정리 (XML 파싱 기준) (0) | 2011.09.29 |
내가 만들고 싶은 회사 (작성 중) (0) | 2011.05.24 |
Float 상수의 컴파일-타임 최적화 (0) | 2011.03.31 |