콜 오브 듀티 등 게임의 로비 서버를 제공하는 데몬웨어란 회사가 있다. 이 회사가 Erlang 컨퍼런스에서 발표한 자료이다.
ErlangandFirst-PersonShooters.pdf
PDF를 읽어보면 C++로 개발하다가, erlang을 써서 얻은 장점이 잘 나타나있다. C++로 했을 때 닥친 문제점은 무엇이었을까. 인용해본다.
- 동시 처리에 C++은 적합치 않은 언어
- 코드 유지보수가 불가능해졌다
- 오류 처리/디버깅/측정/확장성에서 나쁨
- 설정을 변경하기 위해서 모든 유저의 접속을 끊어야 했음
얼랭으로 해서 얻은 점은?
- 견고함: 크래시되지 않음
- 더 쉬운 설정: 클라이언트 적용 없이 재설정 가능
- 더 나은 로그 저장 / 관리 도구
- 기능 개발이 빨라지고, 더 적은 코드로 작성됨
위 에서 언급된 C++의 단점은 사실이 아니다! ... 라고 생각한다. 어떻게든 다 할 수 있다. 허나 정말 쉽지가 않다. 괜히 절차적 언어일까. SQL로 따지면 커서로 레코드를 처리하는 형국이다. 집합 단위로 처리할 수 있는 함수형 언어가 병행 처리에는 탁월할 수 밖에 없다고 생각한다. C++는 확실히 만능 언어이다. 그러나 병행 처리가 용이한 프레임워크를 구축하기에는 시간이 많이 든다. 라이브러리를 사용하듯이 이미 구현되고 검증된 사례를 사용하는 편이 유리하다.
아직 얼랭을 공부하는 중이지만, 기회가 된다면 꼭 써보고 싶다. 인디 게임도 만들고 싶은 내게 좋은 선택이 되지 않을까 싶다. 조금만 공부하면 알겠지만, 언어 자체가 분산/멀티스레드가 가능할 수 밖에 없는 구조이다. 일단 공유 변수를 쓰지 않으니까(아예 없는 건 아니지만) 잠금 기법을 고민하지 않아도 된다. 확장의 용이성은 엄청난 장점이다. 고객의 요구에 유연하게 대처할 수 있다. 물건이 안 팔리면 사업은 망한다. 물건을 제대로 공급하지 못해도 망한다. 서버 증설이 번거로운 구조라면 당연히 좋지 않다.
얼 랭 책을 아직 다 보지는 않았지만, 이걸 클라이언트에는 사용할 수 없을까 생각한다. 클라이언트 측에서 필요한 연산 처리를 얼랭 모듈에 요청하는 것이다... 그냥 아이디어 차원이고 치기어린 생각일지도 모르지만, 언젠가 시험해볼 기회가 올 것이다. 그 때 다시 글을 써보자 ^^