게임 처음부터 라이브까지 개발 (Dizzy Pang, Big Shot, Bubble Fighter) 1999, 한스타 개발 1999, Gabriel Knight 3 한글화, 출시 2001, Worms World Party 한글화, 출시 2002, Crazy Arcade 참여 2002-2003, Dizzy Pang 개발 리드, 출시 2004-2006, Big Shot 제안, 기획, 개발 리드, 출시 2006-2010, Bubble Fighter 개발 리드, 출시 2010-2011, Project W @ devCAT 참여 2011-, Dungeon & Fighter 테크니컬 디렉팅
셋업 작업 진행 중국에 맞는 이벤트/컨텐츠를 개발하자 한국 대규모 컨텐츠 도입 중국에 맞는 이벤트/컨텐츠를 개발하자 작업했던것 다시 머지해넣음 불어나는 빚: 처음부터 다시 머지해넣는다 중국에 맞는 이벤트/컨텐츠를 개발하자 한국 대규모 컨텐츠 도입 OB수준의 대량 테스트/문제해결 OB수준의 대량 테스트/문제해결 OB수준의 대량 테스트/문제해결
메인으로 개발 이후 모든 국가가 개발브랜치로 정기적인 통합 통합과정에서의 불안정성이 아직 과제 게임 C’ 해외 진출을 고려한 구조 릴리즈용 stable branch가 있고 그 외의 것은 메인 개발 브랜치에서 개발 국가별 차이를 Feature Switch 로 구현 테스트와 안정성을 위해 릴리즈/브랜치 구조 개선 (프로세스 개선에 약 1년 소요)
인증, 빌링 등 초기 셋업 작업 진행 중국에 맞는 이벤트/컨텐츠를 개발하자 한국 대규모 컨텐츠 도입 중국에 맞는 이벤트/컨텐츠를 개발하자 작업했던것 다시 머지해넣음 불어나는 빚: 처음부터 다시 머지해넣는다 중국에 맞는 이벤트/컨텐츠를 개발하자 한국 대규모 컨텐츠 도입 OB수준의 대량 테스트/문제해결 OB수준의 대량 테스트/문제해결 OB수준의 대량 테스트/문제해결
모두 제각기 다르게 적용되고 있다면? local copy 나 branch 없이 여러 국가의 freeze & test & release 가 가능한가? 브랜치를 사용 안하는것? QA테스트와 릴리즈시에 브랜치 사용하면 원소스 아닌가? 피처 브랜치 사용하면 원소스 아닌가? 패치를 위해 커밋한 내용이 다른나라서비스에 영향을 주는지? 한국에 커밋된 내용은 다른나라에 영향을 주지만, 중국에 커밋된 내용은 한국에 영향을 안준다면? 혹은 영향을 주지만, 6개월 후에 영향을 준다면? 사실, 차이가 크게 나는 브랜치의 반대 형태를 막연하게 지칭하는 말
정도 빌드를 깨먹는 (컴파일이 안되거나 실행이 안되거나) 신중한 개발자들이 개발팀을 꾸렸다. 만약 한 브랜치에서 작업한다면: 7명 일때 어느 하루 빌드가 깨질 확률은 약 20% 70명 일때 어느 하루 빌드가 깨질 확률은 약 90% 지나치게 단순화시키긴 했지만 작업자에 따라 급격하게 떨어지는 안정성을 설명 가능
과 downtime 이 같이 늘어난다 ( 안깨먹을 확률은 기하급수적으로 떨어짐 ) Loss of Resource = downtime * n (no. of developers) 경험상 같은 영역의 개발조직에 개발자 10명이 넘어가면 병목이 심해지기 시작 Side-effect Downtime Bottleneck
마음대로 선택할 수 있다 국내의 패치에 지장을 덜 주면서 QA 테스트 일정과 연계할 수 있도록 trunk 반영 시점을 선택할 수 있다: “conflict 걱정없이 atomic 하게 reintegrate” 안정성 등의 이유로 중간에 계획이 바뀌더라도 global (work) 의 베이스 시점을 나중에 바꿀 수도 있음
마음대로 선택할 수 있다 국내의 패치에 지장을 덜 주면서 QA 테스트 일정과 연계할 수 있도록 trunk 반영 시점을 선택할 수 있다: “conflict 걱정없이 atomic 하게 reintegrate” 안정성 등의 이유로 중간에 계획이 바뀌더라도 global (work) 의 베이스 시점을 나중에 바꿀 수도 있음
책임을 분리할 수 있다 오렌지색 작업영역은 국내개발팀에서 하늘색 작업영역은 해외개발팀에서 담당하면 “우리 영역의 코드만을 머지한다” “우리 영역의 코드에 머지한다” 가 명확해진다 우리영역 너네영역이 어딨겠냐만은.. 인원이 많고 조직이 크고 라이브 서비스에 영향을 주면 때론 R&R 영역구분이 중요하다
리소스파일의 SVN 머지도 조금씩 도입중 같은 영역에 함께 작업했을때 conflict 이 나지 않고 merge 되는 구조가 중요 테스트 안정성 통합 시점에 엔트로피가 급증하고 안정성이 떨어지는 시기를 수반 리소스, DB 등 다른 시스템과의 정합성을 맞추고, 중간 통합을 초기부터 바로바로 하고, 머지 누락을 자동화하여 체크하는 등 개선을 시도
중, 대 규모로 구분되는 feature branch • 개발QA테스팅과 함께가는 stable branch • stable branch를 기반으로 한 패치날짜별 staging branch, release branch staging 브랜치는 패치 전 테스트용 release 브랜치는 실섭 버그픽스/장애 대응용 hotfix 개발 역할의 분리일뿐 같은 브랜치 사용이 편리 “Guild Wars 2는 20개의 feature branch team 를 운영하지요” - “Guild Wars 2: Scaling from One to Millions, GDC2013
자주할수록 유리 동시에 작업이 쏟아져들어오면 엔트로피가 급격히 증가하고 안정성이 떨어질 수 있다 둘 사이에서 적절한 균형을 잡아야 QA/테스트 프로세스에 맞춘 불안정/안정 관리가 주기 선정에 있어 중요 Integration Branch 를 활용하면 좀더 선택의 폭이 넓어짐 side-effect 제어 시점 제어 길어야 6개월 이내가 되도록 안그러면 영영 멀어질수도 있다
내용들에 대한 metadata (svn property) 머지된 리비전 관리비용과 중복 머지로 인한 컨플릭트를 줄여준다 알아두면 종종 mergeinfo 수작업을 통한 활용으로 시간을 많이 아낄 수 있다 svn reintegrate 시에는 모든 내용이 머지되어있어야 하므로 직접 채워줘야할 수 있음 대규모 리팩토링/Find & Replace All in Files 같이 컨플릭트를 많이 유발하는 작업의 경우 의미적으로 같은 작업을 모든 브랜치에 적용하고 서브 브랜치에 mergeinfo 를 넣어줌으로서 독립 브랜치를 유지하면서 컨플릭트를 드라마틱하게 낮출 수 있다 버블파이터 개발당시 feature branch
후기 게임 개발 단계 전환시기가 기회 각 단계 전환을 앞두고 채무점검 & 다음 스테이지에 필요한 구조를 준비 이자율 할인의 기회 초반 구조를 어떻게 잡느냐에 따라 이후 개발에서 큰 차이가 나타날때가 많다 초반에 잡지 않은 구조를 라이브 단계에서 다잡는것은 매우 힘겨운일 너무 이른 시점에 너무 후반을 위해 많은 리소스를 들이는것도 현명하지는 않음
Switching #ifdef 를 최소화하고 국가별 차이에 일원화된 Feature Switching 구조를 사용 개념적으로 Feature Matrix 형태를 형성 그렇다고 국가별 파일을 가르지 않고 전체 매트릭스를 하나의 파일로 관리하면 재앙이 올것이야.. ON/OFF 뿐 아니라 피처 버전이나 실장날짜가 들어가면 유용
애셋/리소스 관리/머지 도구 최대한 머지가 가능한 리소스 포맷과 툴을 사용 국가별 사용/패키징 여부를 Feature Matrix 형태로 중앙관리할 수 있는 기반이나 도구를 장만 버전 차이로 인해 어려운 완전 자동화를 노리기보다는 머지가 쉬운 포맷과 국가별 사용/패키지 여부를 관리하는 도구를 장만하는 쪽이 현명 관련자료 GDC 2013, “Working Together”
수집 구조 (Telemetry) 라이브 서비스를 시작하면 늘 통계적인 분석을 필요 매번 반복되는 로그/수집을 일원화하면 큰 도움이 된다 부하를 신경쓰지 않아도 되는 수집 인터페이스 정규화되고 대칭적인 로그/포맷 공통 필드를 정해놓고 tab 으로 구분하기만 해도 큰 도움이 된다
뺄 수 있는 구조 라이브 개발이 지속되면 개발 내용은 쌓이지만 정작 무거워진 로딩시간이나 메모리 부족 현상에 봉착했을 때 정작 원하는 내용이나 사용하지 않는 내용을 지우기는 굉장히 힘들다 컨텐츠단위로 소스/리소스를 선택하거나 뺄 수 있는것이 중요 리소스/애셋관리 하부에 공통 weak referencing 기능이 있으면 유용
따면 당장은 편하지 나중에 결국 머지 다 해야해요 지금 당장 편하자고 갈라서면 나중에 개고생해요 나중에 합칠때 서로 안맞는건 어떡하려고 갈라지려는 포스 보통 서비스쪽의 의지 지표가 떨어지고 있어 빨리 패치해야해 지금 못한다고? 우리 작업이 늦춰지잖아 우리 서버가 죽은 이유가 저쪽에서 로그 심다가 그런거라고? 이 나라에 맞는 컨텐츠를 직접 개발하고싶어
있다 모든 국가에 똑같이 서비스 개발응집성이 늘어나 Technical Debt 을 줄일 수 있다 컨텐츠가 따로놀지 않고 일관성을 갖는다 여러 국가별로 다양한 이슈 대응이 기민하고 유연하지 못하기 쉽다 국가별 상황과 특징에 맞춰 개발 국가별로 상황/이슈 대응이 유연하지만 활발한 개발직군 커뮤니케이션 등을 통해 개발 응집성을 충분히 갖추지 못하면 이자와 함께 빚이 눈덩이처럼 불어날 수 있음 던파의 경우 Technical Debt 부담이 크지만, 한편 중국 서비스 성공 요소에는 기민하고 유연한 서비스 대응과 중국서비스-중국개발의 긴밀함이 기반되었다고도 볼 수 있다
있다 1개의 개발조직 vs 서비스조직 개발팀 응집성을 늘려 Technical Debt 을 줄일 수 있고 컨텐츠가 따로놀지 않고 일관성을 갖지만 국가별 상황/이슈 대응이 기민하고 유연하지 못하고 조직 R&R 이 모호해진다 서비스별 개발조직 분리 국가별로 상황/이슈 대응이 유연하지만 활발한 개발직군 커뮤니케이션 등을 통해 개발 응집성을 충분히 갖추지 못하면 이자와 함께 빚이 눈덩이처럼 불어날 수 있음
불이 꺼지지 않게, 화재시엔 빠르게 불끄는게 중요 서비스팀이 개발팀에 설득.강조해야하는 부분 아무리 좋은 땔감(컨텐츠, 기술)을 마련해도 불이 꺼지면(유저가 떠나면) 모든건 끝이다 당장 필요한 것들에 치중해서 구조를 개선하고 빚갚는데 소홀하면 늘어나는 이자로 빚더미에 앉고 파산할 수 있다 개발팀이 다른 직군에게 설득.강조해야하는 부분 빚내고 이자가 늘어나는 개념으로 설명하면 비개발 사람들에게 쉽게 전달.설득 가능