• 2007-11-08

    KGC 2007 1st Day

    see also KGC 2007 2nd Day

    KEYNOTE

    분명 한글 제목이 "상업적인 3D 엔진을 사용하여 MMO를 개발하는 도전"인데 영문 제목은 "Thin Transaction Clients: Delivering games fast and furious" ... 쉽게 말해서 오타라는 뜻이다. 키노트의 주제로는 좀 어울리지 않을 정도로 프로그래밍에 치우친 내용이었는데, 내용 자체는 패러다임 시프트라고 부를 수 있을 정도로 참신했다. 실제 코드가 한번도 나오지 않아서 확실히 이해한 것은 아니지만, 간단하게 메모한 내용을 정리해보면

    • TTC는 스크립트의 개념과 유사한데, 좀 더 분산처리라든지 멀티티어, 멀티쓰레딩(또는 멀티코어), 스트리밍에 친화적인 개념이다.
    • 가령 클라이언트를 잘게 dll로 쪼개고 그 안에 각종 텍스처나 사운드 같은 asset들을 담을 수 있도록 하고, 서버에서 스트리밍으로 이걸 다운받아서 실행한다고 보면 그럭저럭 비슷하다고나 할까? 아니면 파이썬으로 클라이언트를 만들었는데 각각의 파이썬 코드들은 다운받는다고 생각하면 될 것 같다.
    • 핵심은 이런 하나 하나의 트랜잭션들을 멀티코어에서 자유롭게 분산처리할 수 있도록 토큰(코드 또는 asset)을 적당히 조립하고 동기화를 맞춘다...고 하는 개념. 따라서 향후 재사용성도 높을 거라고 강사가 말했지만, 6년 정도 사용해봤음에도 아직 상용화된 게임은 없다고 하니...
    • 서버에서 클라이언트를 완전히 통제한다는 것을 계속 강조했다. 근데 이렇게 살면 제법 피곤할텐데;;; 그 트래픽은 과연 어떻게 감당해낼지도 의문이다.
    • 당연히 디버깅이라든지 트레이싱이 난감하다. 다만 이런 느낌이라면 적당히 GUI 툴로 개발해도 될 것 같다.
    • 그런데 스크립트에 비해서 얼마나 더 좋은지에 대해서는 공감하기 힘들다. 오직 멀티코어 대응이 좋다는 점에 대해서는 수긍함.

    XNA Game Studio Express and the XBOX Live Arcade

    개인적으로 XNA에 대해서 관심이 많아서 참가했는데 질문 하나 하고 "블루드래곤"을 경품으로 받았다. 그래서 그런지 오늘 가장 마음에 든 알찬 세션 중에 하나였다. 몇 가지 인상 깊은 이야기를 적어보자면,

    • XBLA 게임들은 라이브에서 지원하는 일종의 쉐어웨어 게임으로, 현재 70개 정도의 아케이드 게임이 출시되었다. 대부분의 게임들이 고전 게임들의 리메이크이거나 퍼즐, 보드 게임들이다.
    • 일반적으로 XNA 게임들은 10-15만불 정도의 개발비를 투입해서 3개월 정도 개발을 하는데, 보통 출시한지 1주에서 10일만에 손익분기점을 넘긴다고 한다. 이때 수익은 개발사:MS가 7:3으로 나눈다.
    • MS에 제안서를 제출해서 accept가 나면 본격적인 개발에 들어간다. 이때 콘솔 게임 특유의 치열한 QA를 통과해야만 실제로 LIVE로 배포가 된다.
    • XLSP를 통해서 마비노기처럼 독립적인 외부 서버를 지원할 수 있게 되었다.
    • 아무래도 콘솔이다보니 PC 처럼 손쉽게 패치를 할 수 있는 환경은 아니다. 만약 실행 파일을 패치한다면 또다시 QA를 거쳐야 하지만 asset은 적당히 통보만 하고 배포해도 된다고 한다.
    • 30초만에 플레이가 가능할 정도로 쉽고, 모든 나이의 플레이어들이 좋아하며, 협동과 경쟁 개념이 강하고, 가족끼리 즐길 수 있는 캐주얼 게임을 찾고 있다고 한다.
    • 배포 크기는 보통 150M를 넘지 않아야 된다고 한다. 즉 양으로 승부하는 2D게임은 힘들다는 점.

    Multi-Core Programming : Lessons From Experience

    워낙 많은 사람이 들어와서 통역기도 못받고 바닥에 앉아서 들어야 했다. 다행히 강사가 천천히 말해줘서 대충은 알아 들을 수 있었는데, 갑자기 식곤증이 몰려와서 많은 내용을 놓쳐버렸다;

    • 렌더링과 업데이트간의 버퍼 교환이 결국 병목의 근원이다. 더블버퍼링을 이용하면 될 것 같지만, 쉽지 않다. 결국은 프레임 단위로 바뀐 것들만 잘 분산시켜서 넘겨야 된다. 너무 분산시키면 렌더링은 과거의 정보를 그리게 된다..
    • lock-free queue 를 이용해서 멀티쓰레드간 동기화를 하는 XMCore 가 XDK에 포함되었다
    • 이 동네는 결국 메시지 기반의 통신을 해야만 한다.
    • legacy code를 만질 때에는 cloth simulation 등의 eye candy 류의 기능들을 먼저 분산 처리하는 것이 정신 건강에 좋다.

    XNA Game Studio Express 2.0

    올해 12월에 출시된다는 XNAGS 2.0의 기능에 대한 소개 세션이었다. 1.0 에 비해서 달라진 점들을 간단히 소개하는 정도였는데 첫 세션과 중복되는 내용도 많고, 이미 인터넷으로 공개된 내용이 대부분이라서 많이 아쉬웠던 시간이었다.

    • 게이머 태그, 게이머 카드, 친구 관리 등의 게이머 서비스 지원
    • Xbox LIVE의 매치메이킹 API을 이용해서 서버 없이도 네트워크 플레이가 손쉽게 지원되도록 함
    • reliable UDP 라든지 멀티렌더타겟 등을 지원함
    • 내년 후반에 출시될 버전에서는 C++도 지원할 예정

    SCRUM Development Methodology to MMOs

    바이오웨어에서 온 고든 할아버지의 강연. 어째 MMO를 개발하면서 스크럼을 적용하면서 얻은 교훈을 소개해주시나 싶었는데 30분 넘게 스크럼의 개요에 대해서만 이야기를 들었다. 동시통역하는 언니가 너무 버벅거려서 더욱 마음에 들지 않았다;; 아무래도 고든 박사가 전직 VP여서 그런지 실질적인 스크럼팀 운영에는 참가하지 않는 모양이었다. 하하하. (아마도 치킨이 아니었을까?)

    • QA팀이 스크럼에 참가하면 효율이 정말 높아진다!
    • 스크럼의 핵심은 진실을 말하는 것이다.

    see also KGC 2007 2nd Day

  • 2007-10-26

    MSBuild with Cruise Control .Net (2)

    http://boxcatstudio.files.wordpress.com/2009/07/ccnet_success.JPG

    며칠 동안의 삽질 끝에 오늘 드디어 MSBuild + CC.NET으로 웹브라우저에서 빌드할 수 있도록 설정하는 것을 대략 마무리 지었다. 그 과정에서 알아낸 사실을 정리해보면 (틀린 정보도 있을 수 있으니 주의 바란다)

    • 대상 시스템은 Windows Server 2003 R2 Standard Kor 이다.
    • 가장 먼저 IIS 를 설치해야 한다. 상세한 내용은 KAISTIZEN 님의 Visual C++을 위한 지속적인 통합 빌드 서버라는 글을 참고하면 간단하다.
    • MSBuild는 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 아래에 있다. 미리 SVN에서 소스 코드를 다운받은 후 MSBuild 로 VC++ 솔루션을 빌드해봤다. 그런데 vcbuild 뭐뭐가 없다면서 빌드에 실패했다. C# 이나 VB.NET 프로젝트라면 몰라도 MSBuild 혼자만으로 VC++ 프로젝트를 빌드할 수는 없는 모양이다. 결국 Visual Studio 를 설치해야 했다.
    • 돈을 아끼기 위해서 Visual Studio 2005 Express와 Platform SDK를 설치했는데, 알고보니 devenv.com 가 들어 있지 않았다. 이 말은 Visual Studio Task (devenv)를 사용할 수는 없다는 뜻이 된다.
    • 다시 프로젝트를 빌드해보니 windows.h 라든지 winsock2.h 를 찾을 수 없다고 나왔다. 이건 단순히 include 의 문제이므로 쉽다고 생각했는데, 아무리 IncludeDirectories 를 설정하려고 노력해봤지만 모두 실패했다. (환경변수, vcvar32.bat, /property: 모두 시도해봤지만 허사였다) 결국 Visual Studio 2005 Express 와 Platform SDK 모두 제거하고 울며 겨자먹기로 Visual Studio 2005 를 설치해야 했다. 이 문제를 해결하신 분이 있다면 좀 알려주세요~
    • WebDashBoard에서 IE를 통해 빌드 로그를 봤을때 한글이 깨지는 현상이 있었다. (반면 FireFox에서는 한글이 잘 보였다.) CC.NET 콘솔에서는 잘 출력되는 걸로 봐서 인코딩 문제인 듯하다. 또한 로그가 너무 긴 경우 끝부분이 짤리는 현상이 있었는데, HTML 소스를 보면 모든 로그가 다 있는 걸로 봐서 브라우저의 문제이거나 HTML 태그가 깨진 모양이다.
    • CCTray에서 강제 빌드를 하려면 HTTP 가 아닌 .NET Remoting 으로 연결해야 하는데, 어떤 주소를 써야 하지는 잘 모르겠다. 이게 아무래도 CC.NET 콘솔 맨 처음에 나오는 tcp://server:port 인 듯도 한데... -_-
    • Project Configuration 메뉴에서 ccnet.config 파일을 열람할 수 있는데 SVN 패스워드가 노출되는 문제가 있다. 결국 check out 만 되는 계정을 만들고, 웹 권한 설정을 꼭 해줘야 한다는 의미. (물론 URL을 지우는게 제일 속이 편하겠지만)
    • dashboard.config 에서 viewConfigurationProjectPlugin 를 제거하면 해결된다.

    관련 글 보기

  • 2007-10-10

    WebDashboard & CCTray

    http://farm3.static.flickr.com/2400/1531958729_2520a21bdb.jpg

    IIS와 CruiseControl.NET(이하 CCNET)의 WebDashBoard를 이용하면 최근 빌드 현황이나 그래프를 웹에서 관리할 수 있다. 그 중에서도 가장 매력적인 기능은, - 사실 우리 팀에게 가장 필요한 - 바로 저 "Force Build" 인데, 웹에서 버튼만 눌러서 자동적으로 빌드 -> 배포를 할 수 있게 해주는 기능이다. 우리 팀처럼 단지 배포용 빌드 머신만을 운용하고 있는 작은 조직에게는, CCNET의 수많은 자동화 기능보다는 저런 단순하면서도 아름다운 기능이 제일 절실하게 와닿는다고나 할까? (사실 빌드 머신까지는 한발짝 거리인데, SVN 업데이트 -> Visual Studio 빌드 -> 배포 버전 빌드..라는 3단계를 무지 귀찮아하는 것 같다 -_-)

    http://farm3.static.flickr.com/2191/1532824658_af03210327.jpg

    CCTray는 CCNET에서 제공하는 트레이에서 실행되는 자바 유틸리티로, 서버의 빌드 현황을 실시간으로 모니터링할 때 사용된다. 이 넘도 마찬가지로 강제 빌드 기능을 제공한다. 맨 위의 스크린샷에서도 볼 수 있듯이, 원래는 WebDashBoard 에서 다운받아서 실행할 수 있는 듯한데, 집에서 테스트해보니 경고음만 나오고 아무 것도 실행되지 않았다. 결국은 그냥 인스톨러를 이용해서 설치해서 사용중인데 별 문제는 없는 듯하다.

    이제 대충 다음과 같은 것들을 테스트해보는 것만 남았다. 과연 어느 세월에 이걸 다 해볼지는 의문이지만.

    • CCStatistics 붙여보기
    • CppUnitLite2 연동
    • SVN Revision 을 클라이언트 rc 파일에 넣기
    • Mantis 연동하기
    • exe, pdb 파일을 버전별로 백업하기
    • 인스톨러 연동하기

    이렇게 적다 보니, 과연 이걸 다 테스트해서 얼마나 더 좋은 효율을 얻을 수 있을지가 심히 궁금해진다. 에휴.

  • 2007-10-08

    MSBuild with Cruise Control .Net

    http://www.codeplex.com/ccstatistics/Project/FileDownload.aspx?DownloadId=19113

    지속적인 통합(Continuous Integration)은 최근에 읽고 있는 책마다 항상 등장하는 단어다. 요약하자면 빌드 머신에 적당한 CI도구를 설치해두면 누가 커밋할 때마다 소스를 체크아웃해서 빌드하고 테스트를 실행한다는 것이다. 그러나, 우리 팀처럼 테스트가 거의 없고, 커밋 직전에 항상 최신 버전을 다운받아서 컴파일이 잘 되는지만 체크하는 정도의 통합 수준을 갖고 있는 조직에서는 그다지 효용성이 있어 보이지 않을 수 있다. (물론 빌드 안하고 커밋하는 개발자를 보유하고 있다면 이야기가 달라진다) 그런데 Cruise Control.Net을 사용하면 상상만 했던 이상적인 빌드 시스템 그 이상을 손쉽게 구현할 수 있다. 단순 배치 파일 실행에서부터, 소스코드 체크아웃은 물론, 버전 넘버를 붙이고, 빌드가 성공하면 소스 저장소에 태그를 붙이기도 하고, 웹기반의 히스토리 관리에서부터 위 그림에서 보이듯 그래프 기반의 뷰도 제공한다. 나아가서 일전에는 실패했던 MSN 연동도 된다! 시험삼아서 구글코드에 올려둔 raknet_wrapper 프로젝트를 체크아웃받아서 빌드하는 스크립트를 만들어봤다.

    
    <cruisecontrol>
    
    
      <workingDirectory>d:\works\ccnet</workingDirectory>
      <artifactDirectory>d:\works\ccnet\artifact</artifactDirectory>
      <modificationDelaySeconds>2</modificationDelaySeconds>
      <triggers>
      <intervalTrigger seconds="10"/>
      </triggers>
      <sourcecontrol type="svn">
      <trunkUrl>https://raknet-wrapper.googlecode.com/svn/trunk/</trunkUrl>
      <workingDirectory>d:\works\ccnet\build</workingDirectory>
      <username>----</username>
    
    ----
    
      </sourcecontrol>
    
    
      <msbuild>
      <workingDirectory>d:\works\ccnet\build</workingDirectory>
    
    raknet_wrapper.sln
    
      <buildArgs>/p:Configuration=Release  /v:diag</buildArgs>
      <targets>Rebuild</targets>
      <logger>d:\works\ccnet\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
      </msbuild>
    
    
      <tasks>
      <msbuild>
      <workingDirectory>d:\works\ccnet\build</workingDirectory>
    
    raknet_wrapper.sln
    
      <buildArgs>/p:Configuration=Release /v:diag</buildArgs>
      <targets>Build</targets>
      <logger>d:\works\ccnet\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
      </msbuild>
      </tasks>
    
    
      <xmllogger />
    
    
    
    
    </cruisecontrol>
    
    

    기능을 정리해보자면 * 10초마다 최신 소스가 커밋되어있는지 체크 * 최초 실행시 리빌드 * MSBuild 와의 연동 정도에 불과하다. 아직 IIS를 설치해보질 못해서 웹 대시보드를 구경해보진 못했다. 이 정도랑 웹에서 빌드 버튼만 제공하면 사내 빌드 머신에 빨리 도입해봐야겠다. 참고자료:

  • 2007-10-01

    AgileOST2007

    지난 토요일 KBS 별관에서 진행되었던 Agile OST 2007 에 다녀왔다. 미처 등록하지 못한 상태에서 마감되었는데, 김기웅님의 도움으로 참가할 수 있었다. (그런데 막상 가보니 이름 체크를 하지는 않았다)

    http://farm2.static.flickr.com/1052/1460398781_332a98ee1b.jpg?v=0

    OST 사진 모음집

    OST에서 다뤄졌던 이야기들은 애자일 컨설팅 위키에 정리한후, 다음주에 xper.org로 옮겨진다고 한다. 몇 가지 소감을 간략하게 적어보면,

    • 웹젠의 헉슬리팀를 비롯해서 CJ, NC소프트 등 많은 게임 회사에서 스크럼을 사용중이다.
    • 판타그램의 N3를 개발할 때, MS에서 개발지원인력이 파견되었다고 한다. 매일 매일 계속되는 업무 회의 때문에 관리자들이 무지 피곤했는데, 덕분에 이슈가 팀 내부에 잘 공유되었고, 우선순위를 관리함으로써 디테일한 개별업무 관리에서 벗어날 수 있었다고 한다. 가장 인상깊었던 이야기는, MS쪽 사람들이 현재 결함율 그래프를 보더니만 이 프로젝트는 내년 3월에나 되어야 끝난다고 했는데, 실제로도 그때 끝이 났다는 이야기였다.
    • 게임 개발자들이 대략 15-20명 가까이 있었는데, NC나 CJ쪽에서 아리따운 여성 기획자분들이 대거 참가했다. (사진을 클릭해 보시기 바란다) 특히 기획자들이 스크럼을 매우 좋아한다는 사실이 충격적이었다. 반면 프로그래머들은 대체로 부정적이었다는 이야기가 들렸다. 쩝.

    누구 말마따나 agile 이니 XP니 안써도 열정만 있으면 개발은 잘된다고도 한다. 그러나 이제는 열정만으로 움직이는 사람들은 점차 드물어져가는 것이 현실. 다양한 욕구를 가진 사람들을 하나의 비전을 바라보게 하면서 2-3년 동안 달려가게 하려면, 무엇보다도 사람을 중시하는 프로세스가 필요할 것 같다.