컴뱃암즈 이력 http://www.thisisgame.com/board/view.php?id=126976&category=410 * 2005 년 개발 시작 * 2007 년 게임 공개 및 서비스 시작
이쯤에서 청중의 경험을 파악하자 1. Ship It!, 지속적인 통합과 같이 빌드 자동화와 관련된 서적을 읽어본 사람이 얼마나 되나 ? 2. 경력은 ? ( 학생 , 신입 ~3 년 차 , 그 이상 ) 3. 운영 / 빌드 업무를 맡아본 사람은 얼마나 되나 ? 4. 빌드 자동화를 해본 사람은 얼마나 되나 ?
학생 / 신입이 많다면 , 학생이 IDE, 뒤에 나올 소스 /CI 서버에 익숙하긴 한가 ? 확인부터 하자 . 그들이 빌드 담당자가 될 확률이 왜 높은지 , 이 세션을 들으면 왜 좋은지 이야기하자 .
여기에 쓰인 예제는 * 소스코드 : http://code.google.com/p/earlgrey/ * CI 서버 (CruiseControl .NET) : http://confluence.public.thoughtworks.org/display/CCNET
빌드 속도 개선을 최우선적으로 다뤄야 한다 . 피드백이 빨라야 빌드 자동화 작업이 편해지기 때문이다 .
여담 – 통합 빌드의 중요성 (NDC 에 관련 발표가 있었음 )( 통합 빌드를 유지 못하고 지역별로 분기를 타서 결국 지역별로 담당자를 따로 두거나 심지어 팀을 분리해 운영하는 경우까지 있다 .
데이터베이스 버전 관리는 빌드 자동화보단 버전 관리 정책에 가까우므로 본 문서에서 다루지 않는다 . 따로 관리되는 서버 / 클라이언트 * 서버 : Subversion * 클라이언트 : AlienBrain 통합 버전 관리가 안 됨 별도로 설치해야 하는 라이브러리 * DirectX SDK * IncrediBuild 등을 도입할 때 문제가 생김
명령 줄 , 텍스트 형식의 구성 파일 , 레지스트리
SFTP 로 통합 . 크리티컬 패스 : 퍼블리셔 , 보안팀 , 시스템 엔지니어링 팀 등과 협의가 필요한 일
네트워크 대역폭 ? 파일 서버라면 메모리가 적어도 된다는 오해 빌드 머신도 마찬가지 IO 작업이 많기 때문에 사용 가능한 메모리가 순식간에 사라지고 페이지 스왑이 반복된다 . 작업 시간이 길어지고 생산성이 떨어진다 .
MSBuild 의 /v:diag 로 분석하니
추가 기법 UnityBuild C++ 프로젝트의 물리적 구조를 이해하기
하나의 저장소 원칙의 유일한 예외 : 보안 이슈가 있는 프로그램이나 구성 파일은 별도의 저장소에 두었다 . 추적 가능성이 중요한 이유 ? : 1 시간 짜리 빌드를 끝내고 나서 처음 10 분 지점에서 오류가 발생한 사실을 깨닫는다면 ?
빌드 속도를 향상시키려는 피나는 노력 컴포넌트 별로 개발자가 다를 때 이런 구성이 생기곤 한다 .