msgbartop
Agile Inspiration for Game Server Development
msgbarbottom

13 Nov 08 KGC2008

터치의 must-have 아이템. KGC pdf 넣느라 사버렸다. 쿨럭.

간만에 부르조아 모드로 집에서 택시를 타고 “일산 킨텍스요~” 라고 하고 가면서 우리나라 교육 제도에 대해서 열심히 떠들었는데, 이 아저씨 할증료를 3천원이나 더 뺏어가네? 한방에 무려 17000원이 날아가버렸다. 역시 택시 기사를 믿어서는 안되는 거다. 일찍 도착하니 할 일도 없고 해서 터치에 무선랜으로 구글 리더를 읽고, 워드프레스 어플로 블로깅도 해보니 어느덧 된장남처럼 느껴졌다. 

배재현 상무의 키노트 중에서의 백미는, 게임은 민주적으로 만들어서는 안된다는 이야기. 무능력자들에게 불필요하게 선의를 보였다가는 언젠가 어떻게든 뒷통수를 맞는다는 개인적 경험과 겹쳐져서 들렸다. 또 “전생에 어디에선가 본 듯한 게임”이라는 접근도 꽤 괜찮았다.

다들 NC에는 학벌이 강하니 정치가 심하니 욕하는데, 의외로 배상무의 학벌은 지방대였다. (만세!) “역시 서울 올라올 때 바로 큰 물에 갔었어야 했어”라고 하니, 쉬귀군은 “우리가 98년도에 제대로 게임을 만들었으면 지금 저 위치에 서있었을 거다.” 라고 하는데 한편으로는 수긍이 가더라는.. (그러고보니 리니지 처음 나왔을 때 Wand of wish 보고 네트핵 따라 했다고 욕했었는데, 지금 생각하니 그냥 네트핵 오덕의 옹알이였을 뿐이었구나)

IK 에 관해서 강연하신 분은 상당히 논리정연하게 설명을 잘 해주셨다. 예전에 크라이엔진 데모때 보던 IK 장면들을 똑같이 구현하신 걸 보니 꽤 열심히 하신 모양이었다. 모션 리타겟팅도 예상 보다 퀄리티가 좋았다. 역시 애니메이션 전문 프로그래머가 있었어야 했다는 아쉬움이 들면서 동시에, 내추럴 모션이 조금만 먼저 출시되었더라도 우리가 그렇게 고생을 안했을 텐데.. 라는 원망도 들었다. 제대로 업데이트도 안하고 매년 돈만 받아 먹던 빌어먹을 이모션FX를 생각하니 울화통이 터진다. 그래 실력 없어서 빨리 출시 못한 놈들이 죄지.

박일씨의 강연은 예상대로 달변이었다. 7대 낭비는 저기 멀리 도요타 동네에서 온 개념인가 본데, 생각보다 게임 개발에 많이 침투해 있던 그들의 실체를 제대로 느껴본 좋은 시간이었다. 또한, 쉬귀 군이 항상 못마땅해하던 유닛테스트를 재평가하는 시간이 되지 않았을까 생각한다. 

셋째 시간은 그다지 땡기는게 없어서 걸스타를 보러 내려갔다가, 넥슨 부스에서 대략 좌절을 하고 돌아섰다. 역시 넥슨은 남들보다 한 세대를 앞서가는 회사이구나 싶었다. 뭐 설명이 필요없는 마비노기 영웅전과, 허스키인지 뭔지 하는 개썰매 게임도 뭐랄까 감성을 자극하는 면이 남달랐다. 물론 드래곤 네스트는 퍼블리싱이니까 별개로 치고 싶지만, 직접 만들든 돈주고 사든, 결과적으로 돈만 많이 벌면 되지 그게 뭔 상관이겠느냐는 의견에 100표.

NHN의 C9도 괜찮았지만 넥슨에 비하면 만 1년의 최적화를 더 해야 할 것 같다는 생각. 그 외에도 괜찮은 게임들이 많이 있었지만, 지면 관계상 생략한다. 이거 맨날 남의 게임 보고 감탄만 하다가 업종을 변경하는게 아닌가 싶어서, 울면서 그냥 집으로 왔다.

돌아오니 나를 반기는 건, 헌재 SBS들의 종부세 위헌/헌법불합치 판정. 만수야 잘 모르는 헌재 간다고 고생 많았다.

Tags:

09 Nov 08 iPod Touch 2G

 

장모님 지원금 + 모아둔 용돈 + 한 달치 용돈 가불 + 12월부터 새벽 영어 학원 다니기를 조건으로 겨우겨우 아이팟 터치 2세대 8G를 지르는 걸 윤허받았다.

열악한 지갑 상황 덕분에 가죽 케이스 대신  2만원대 초반의 필름&스킨 합본을 주문하고, 어렵사리 미국 아이튠즈 스토어의 카드 인증을 뚫고 상위 랭킹의 무료 어플들을 다운받을 수 있었다. 그 다음에는 잡스 횽아의 스탠포드 연설문과 키노트 몇 개를 받고 있는 중이다. 

App Store를 둘러보니 다들 Lite 라는 이름을 붙여서 무료로 배포한 후, 정식 버전은 1-5$ 정도의 가격으로 유혹하고 있었다. 며칠 전에 확인해보니 테스트삼아 만들던 직소퍼즐은 10여개가 넘게 출시되어 있었다. (분명히 두 달 전에는 2개였는데!) 

최진기 쌤이 말씀하시길, 최악의 경기 불황이 수년간 예상되는데도 이렇게 비싼 성인 남자의 장난감을 지른 이유는,  한 달 동안 너무나 열심히 일한 나에게 조그마한 포상을 주고 싶었고, 그 비싼 몰스킨 노트북을 내년에는 사지 않기 위함이었다. 그런데 터치 입력은 예상보다 오타가 많이 나와서 실시간 필기는 좀 힘들것 같고, 구글 앱스 연동, 아이디어 메모나 워드프레스 블로깅, 사전, 동영상 보기 정도로 활용해야 할 듯 싶다.

추가:

  • 알고보니 터치는 외장하드로 인식이 안되어서, 사진/음악/동영상 외에는 넣을 수가 없다. 그래서 나온 게 WiFi + Web-DAV 를 이용한 어플들이 있는데, 무료 어플들의 수준이 너무 좋지 않아서 결국 Air Sharing 을 사야 한다.
  • 제일 먼저 설치해야 하는 건 구글 어플들이다. :)
  • 동영상 인코딩은 다음의 팟인코더가 짱인듯. MP4Manager 도 괜찮다는 평이 있지만, mov를 지원하지 않는다.

Tags: , , ,

02 Nov 08 Weekends Idle Thoughts

회원님이 촬영한 AQUA, Anantara, Maldives.

오랜만에 사건 사고 없는 한가한 주말이다.

먼저 boost asio 를 이용해서 이상적인 아름다운 윈도우 서버 코어를 만든다면? 이라는 상상의 나래를 펴봤다. 누가 봐도 멋진 서버 코어가 되려면 어떤 특성을 가져야 할까?

  • 손쉬운 확장성 : 한대의 머신에서 하나의 프로세스로 1천명에서 최대 1만 명을 처리할 수 있도록 확장하는데 무리가 없어야 한다. 즉, IOCP 핸들와 Non I/O Worker 쓰레드를 M:N 으로 조합할 수 있는 구조가 되어야 한다.
  • 이벤트 기반 : 사용자가 늘어나면 폴링은 최대한 피해야 한다. 즉 주기적으로 체크해야 하는 Idle Check 같은 코드들은 타이머 쓰레드에서 Post 시켜야 한다.
  • 메모리 풀 기반의 버퍼 관리 : 입출력 버퍼를 세션이나 소켓과 1:1 정적으로 매핑시키기 보다는, 메모리풀에서 필요할 때마다 주고 받는 구조를 쓰자. Gathering & Scattering 을 위해서는 필수적이다.
  • 버퍼 복사의 최소화 : 어차피 1-recv 는 대세다. 즉, WSABUF를 개별 세션에 연관짓기보다는 메모리 풀에서 관리하고, I/O 쓰레드에서 입력이 완료되었을 때 메시지가 온전치 않으면 버퍼를 재사용해서 다시 요청에 들어가고, 아니면 새로운 버퍼를 게임 쓰레드로 넘기자. 브로드캐스팅할 때에도 버퍼 복사 없이 하나를 사용할 것! 출력의 경우라면 N-Send 를 쓸 수 밖에 없겠다.
  • 동기화의 최소화 : 쓰레드간 통신은 lock free queue 를 사용해야 한다. 
  • 쓰레드의 최소화 : 서버간 통신, UDP, 추가적인 listen 소켓이 생겨도 쓰레드를 더 만들지 않을 수 있게, IOCP 를 최대한 활용해야 한다.
  • 멀티 코어 대응 : 단지 쓰레드를 많이 만들어서 적당히 잘 돌아가려니..하기 보다는 멀티 코어를 효율적으로 활용하는 방법을 고민해보자.
  • 서비스 기반 아키텍처 : ACE의 그것처럼 서비스를 하나의 프로세스에서 돌리다가 필요하면 다른 서버로 옮기더라도 무리없는 구조가 되어야 한다.

광고성 글이지만 일전에 c10k 라고 서버 코어를 괴롭히는 스트레스 테스트 클라이언트 프레임워크를 구글 코드에 만들어뒀는데 boost asio 테스트만 하다가 중단된 상태다. 대충 아래 그림과 같은 건데…

이런 걸 구글 app engine 으로 만들고 웹으로 요청하면 쓰레드 1만개 정도 만들어서 서버에 패킷을 보내면 괜찮을 거 같은데… 과연 구글에서 허용할까? (아마 SDK 레벨에서 쓰레드 생성이 막혀 있을 것 같다.) 만약 가능하다고 하면 대충 웹페이지에다가 서버 IP/Port 를 입력하고 테스트 시작을 누르면, 각 테스트 케이스들을 실행하고 성공/실패 여부를 화면에 출력해주는 느낌일 것 같다. (emule 에서 웹 기반으로 TCP 포트 체크하는 거랑 비슷한 거다) 헉. 역시나 찾아보니 안된단다.

An App Engine application cannot:

  • write to the filesystem. Applications must use the App Engine datastore for storing persistent data. Reading from the filesystem is allowed, and all application files uploaded with the application are available. (Files uploaded as “static” files are not kept on the filesystem.)
  • open a socket or access another host directly. An application can use the App Engine URL fetch service to make HTTP and HTTPS requests to other hosts on ports 80 and 443, respectively.
  • spawn a sub-process or thread. A web request to an application must be handled in a single process within a few seconds. Processes that take a very long time to respond are terminated to avoid overloading the web server.
  • make other kinds of system calls, such as signals.
  • 그나저나 Windows Server 2008 에는 CreateThreadpoolIo() 라든지 GetCurrentProcessorNumber() 같은 해괴한 API 들이 많이 추가된 모양이다. 어디 새로 추가된 API 목록  정리된 페이지 같은 게 없을까?

    구글 막대 그래프 예제

    다음 잡상은 구글 가젯, 구글 스프레드시트 API, 구글 차트 API로 야구 핵을 만들어보자 라는 글을 보고 떠올린 생각.

    서버 개발을 하다 보면 효율적인 리포팅에 대해서 한두번쯤 고민해본다. 수없이 쌓이는 개발자 로그라든지, 동시 접속자나 아이템 판매량 등등의 통계 그래프라든지, GM들에게 노출할 다양한 사용자 액션 추적 기능 같은 것들이 있을텐데, 이런 걸 구글 apps 기반에 통합해버리면 어떨까 하는 생각이다.

    요즘의 추세는 온라인으로 이 모든 정보를 확인할 수 있는 웹 기반 솔루션을 만드는 것일텐데, 그렇다면 가젯으로 만들어서 구글 시작 페이지에 넣고 권한 관리를 해버리면 되지 않을까? 자자. 이건 상상이니까 안되는 이유에 대해서는 고민하지 말자.

    전사적으로 수많은 서버들의 상황을 한번에 모니터링하기에는 꽤 괜찮은 솔루션일 듯하다.  (물론 MS의 리포팅 서비스가 더 멋지긴 하겠다만..)

    Tags: , , , , ,

    WordPress Loves AJAX