서버는 서버 프로그래머만이 짠다?

3권에서 새로 도입된 네트웍 및 멀티플레이어 프로그로그래밍 섹션을 위한 게시판입니다.

Moderator: 류광

Locked
imays
Posts: 1044
Joined: 2003-02-18 10:29
Contact:

서버는 서버 프로그래머만이 짠다?

Post by imays »

1. 게임 서버는 서버 프로그래머만이 짜는 것이 좋다.
2. 게임 서버의 엔진이나 DB 연동되는 부분은 기술의 영역이 달라서 서버프로그래머만이 만진다 하더라도 게임 서버의 로직 부분정도는 클라이언트 프로그래머 등 다른 개발자들이 손대도 괜찮다.
3. 게임 서버의 모든 부분은 서버 프로그래머가 아니더라도 누구나 수정 가능하다.

각 케이스에 대한 여러분의 의견은 어떠신가요?

저는 지난 프로젝트까지는 1, 현재는 2를 조심스럽게 접근하려는 중입니다. 단 2를 하되 상당히 강압적인 프로그래밍 규약을 정하고 말입니다. (물론 그럼에도 불구하고 별일이 다 생길지도 모르지만... 이 질문의 배경에는 이러한 것도 있습니다.)
Last edited by imays on 2004-08-02 13:04, edited 1 time in total.
온라인 게임 서버 엔진 ProudNet
http://www.nettention.com
Testors
Posts: 557
Joined: 2003-07-26 00:34
Location: (주)nFlavor
Contact:

Post by Testors »

이부분은 개발이나 기술의 문제를 떠나서 관리와 책임의 문제라고 생각합니다.
저는 서버 코드는 전체를 핸들링 할 수 있는 제한된 서버 프로그래머만이 접근가능해야 하고 그리고 모든 서버 프로그래머는 서버에 대해 무한책임을 져야 한다고 생각하는 편입니다.
구현이야 누구든 할 수 있습니다. 하지만 다음과 같은 사례를 생각해 보자면..

1. 클라이언트 프로그래머가 게임서버에 새로운 feature 를 추가했습니다.
2. 그런데 추가된 코드에는 heap 을 깨는 버그가 있었습니다.
3. 이 버그는 서버가 일정 시간이 지나면 서버를 crash 시키는데 스택 덤프 로그에 crash 된 부분은 network I/O 루틴이라고 보고됩니다. (heap 을 over-run 한다거나 하면 아무 상관없는 코드에서 crash 가 나는 일은 흔히 있을 수 있는 일입니다.)
4. 아직 버그의 정확한 원인이 무엇인지는 서버 프로그래머도, 클라이언트 프로그래머도 모르는 상황입니다.
5. 클라이언트 프로그래머는 이번에 성능개선을 이유로 수정된 network I/O 루틴에 버그가 있는것이라고 얘기합니다.
6. 서버 프로그래머는 디버깅에 착수해서 수시간에 걸쳐 network I/O 루틴을 점검하였지만 도저히 문제를 찾을 수 없었습니다.

버그가 나타났다고 해서 모든 프로그래머가 디버깅에 투입될 수는 없습니다. 결국 '그 버그를 만들어냈을 가능성이 가장 높은 누군가' 가 디버깅을 해야겠지요. 그 과정에서 원인이 밝혀지고 책임소재가 확실해 진다면 해결을 당사자에게 넘길 수 있겠지만 중요한것은 거기까지의 과정이라고 생각합니다.

위와 같은 사례에서는 '서버 프로그래머가 버그의 원인을 찾는 일' 을 해야 합니다. 그리고 그것이 클라이언트 프로그래머가 새로 추가한 코드에 문제가 있다는 것을 밝혀낸 이후에는 '클라이언트 프로그래머가 그것을 해결' 해야 하겠지요. 결국 일은 한사람이 했는데 해결에는 두사람이 필요합니다. 그리고 초기에 서버프로그래머가 엉뚱한 곳에서 원인을 찾아야 하고 그리도 남의 코드도 점검해야 하기에 드는 비용도 더 커지지요.

온라인 게임에서 서버의 버그는 보통 치명적인 상황을 만들어낼 가능성이 매우 큽니다. 그리고 해결에 그리 넉넉한 시간적 여유가 주어지는 편도 아니지요. (패치해서 오픈한 직후 발견되는 서버 crash 버그를 상상해 보세요) 이때의 문제 해결이 얼마나 신속하고 정확하게 이루어 지는가는 누군가가 서버 코드 전체를 파악하고 있느냐, 아니냐에 따라 결과가 판이하게 달라질 것입니다.
플머/모델러/애니메이터 구해염 **현역/보충역 병특가능** / http://testors.net/
비회원

= _=)

Post by 비회원 »

2번을 유지하면서 결국 "게임 서버의 모든 부분은 다른 프로그래머들도 기술구현등의 대강은 방법은 알되 수정은 서버 프로그래머가 한다" 가 되었으면 좋겠습니다.

제가 보기엔 회사에서 누군가만 알고있는 (만질수있는) 코드 혹은 부분이라 함은 바람직해 보이지 않네요. = _=)a
비회원

Re: = _=)

Post by 비회원 »

비회원 wrote:2번을 유지하면서 결국 "게임 서버의 모든 부분은 다른 프로그래머들도 기술구현등의 대강은 방법은 알되 수정은 서버 프로그래머가 한다" 가 되었으면 좋겠습니다.

제가 보기엔 회사에서 누군가만 알고있는 (만질수있는) 코드 혹은 부분이라 함은 바람직해 보이지 않네요. = _=)a
XP 책에서 본 내용과 같은 말씀을 ^^;

게임 분야도 똑같이 적용되는지는 잘 몰겠지만서요
해키스트
Posts: 398
Joined: 2004-02-14 20:11
Location: N거시기
Contact:

Post by 해키스트 »

전 사실 클라이언트 프로그래머가 서버 프로그래밍까지 하는건 효율적이지 못한 프로젝트 진행이라 생각합니다. 아무래도 개발을 효율적으로 하지 못할것이기 때문입니다.(물론 클라이언트 프로그래머가 서버 프로그래밍 기술이 좋지 못하다고 가정할때입니다.. 서버에서도 잔뼈가 굵었던 클라이언트 개발자가 개발한다면 뭐 얘기는 조금 달라질 수 있겠죠.) 앞서서 Testors님이 말씀하신것처럼 프로젝트의 각 담당별 역할 경계 설정이 효율적으로 이루어져야 정확한 개발 일정을 예측 가능하고, 개발중 생길지도 모르는 불안 요소를 일정수준 제거할 수 있다고 생각합니다. 그런 면에서 클라이언트, 서버 프로그래머간의 작업 담당 경계는 뚜렷해야 합니다.

만약 개발인원이 클라이언트는 남아돌고 서버는 턱없이 모자른데, 개발 시한이 무쟈게 짧아서 어쩔 수 없이 울며 겨자먹기로 특정 모듈에 한해서만 투입된다면, 클라이언트 프로그래머가 서버 프로그램중 일부를 코딩하는것도 나쁘지 않다고 봅니다. 다만, 손수 만든 모듈에서 에러나기 시작하면 책임은 당근 클라이언트 프로그래머가 져야하구요, 그리고 그런 절박한 상황을 유도한 회사는 손실이 발생하더라도 해당 개발자에게 다른말 할 권리는 없겠죠.

땀 삐질삐질 흘리면서 에러나는 모듈 디버깅하는 클라이언트 프로그래머의 긴장된 손놀림이 눈에 환히 보이긴 하네요 :)
Quitters no win, winners no quit.
perpet
Posts: 94
Joined: 2004-06-07 10:59

Post by perpet »

Testors 님이 예를 들어주신 상황은 개발할때 매우 빈번하게 발생되면 그런일이 발생되면 많은 사람과 시간이 소요되더군요..
그래서 생각하는것이 날마다 업데이트할때 개개인들이 추가한코드부분과 변경된상황등을 남겨서 버그가 발견되면 기록지를 보고 어느정도 감을 잡을 수있게 하거나 프로그램안에 기본적이지만 엄청많은 로그정보를 평소에 남겨두다가 갑자기 수치가 이상하게 나오는 현상이 보이면 감지를 하는 등..여러가지 보안방법을 생각하게 될텐데요...
결론적으로 어떤시스템(<-핵심)을 두어 이런일들을 좀더 쉽게 찾거나 해결할수있게 하고싶은데 좋은 방법이 있거나 쓰시고 계신 방법은 무언가요?
seeper
Posts: 1483
Joined: 2003-06-06 23:19
Contact:

Re: 결국 돈문제 같군요...

Post by seeper »

imays wrote:1. 게임 서버는 서버 프로그래머만이 짜는 것이 좋다.
2. 게임 서버의 엔진이나 DB 연동되는 부분은 기술의 영역이 달라서 서버프로그래머만이 만진다 하더라도 게임 서버의 로직 부분정도는 클라이언트 프로그래머 등 다른 개발자들이 손대도 괜찮다.
3. 게임 서버의 모든 부분은 서버 프로그래머가 아니더라도 누구나 수정 가능하다.
가급적이면 1의 상황을 유지하는것이 최선이라고 봅니다.
Testors wrote:이부분은 개발이나 기술의 문제를 떠나서 관리와 책임의 문제라고 생각합니다.
Testors님처럼 저 역시 관리와 책임의 문제라고 생각합니다. 사람이 많을수록 책임소재는 어려운 문제입니다.
수정한 루틴의 잠재적으로 버그를 갖는 경우도 있습니다. 한달후가 되어서 잠재한 버그가 나올수도 있습니다
예를 들자면 기획의 변경에 의해서 몰랐던 버그를 찾는 경우도 있고 유저들이 새로운 버그를 알아낼수도 있죠.
그렇게 되면 바쁜 상황에서는 설마 내가 짠게 문제가 되지 않겠지라는 생각들을 갖고
결국은 서버 프로그래머가 찾을수 밖에 없겠죠.

그러나 언제나 그렇듯이 여유가없을 때도 있겠지요. -_-;;;
만약 상황이 어쩔수 없이 2로 간다면... 클라이언트 프로그래머중에 한명만 플로우를 담당할 사람을
지정해서 양쪽의 일을 하게 해야할것 같군요. 그래서 서버 담당자와 긴밀한 협력후 수정, 디버깅을
하는쪽으로 해야할것 같습니다.

만약 전체인원이 3명 이하라면 3의 방식도 가능할것이라 생각됩니다. -_-;;;;;
(물론 수정시 총괄하는 사람의 허가는 받아야겠죠...)
myevan
Posts: 1314
Joined: 2003-03-04 10:21
Contact:

Post by myevan »

서버 프로그래밍은
일단 안전하게 만든다는
마인드가 우선이라고 생각하기때문에
서버 프로그래머만 서버 프로그램을 만지는게 좋다고 생각합니다.
(오히려 특히 로직 부분이라면... 서버프로그래머가 작성해야! )

클라이언트 프로그래머의 경우 '뭐;-_- 문제될일은 없을거다' 라는 생각을 전제하고
작성하기때문에...;; 대개 작업을 시키면 문제를 발생시키는 경우가 상당히 많습니다 = =)~

하지만 뭐 최적화라던지, 버그 수정, 리팩토링같은 일반적인 사항은
어느정도 실력이 갖춰진다면 무방하지 않나라는 생각이고요.

스크립트 정도는 약간의 주의사항만 숙지하고(무한루프는 안된다던지, 아이템은 한번만 줘야 한다던지..)
안전장치만 갖추어진다면, 약간의 프로그래밍 지식을 가진 사람이 작성 가능할듯...
(그래도 각각 파트별로 업무를 전담하는게 좋겠죠. )
빗자루네 http://www.myevan.net >_<b
비회원

Post by 비회원 »

1. 게임 서버는 서버 프로그래머만이 짜는 것이 좋다.
2. 게임 서버의 엔진이나 DB 연동되는 부분은 기술의 영역이 달라서 서버프로그래머만이 만진다 하더라도 게임 서버의 로직 부분정도는 클라이언트 프로그래머 등 다른 개발자들이 손대도 괜찮다.
3. 게임 서버의 모든 부분은 서버 프로그래머가 아니더라도 누구나 수정 가능하다.

어느 회사라고 말씀드리기는 어렵습니다만, 저희 회사에서는 클라이언트, 서버 프로그래머로 나뉘어 작업하고 있지 않습니다.
한가지 예로서, 개인상점이나 개인거래작업을 해야 한다면 한 사람이 클라이언트 인터페이스 및 패킷, 서버 로직 및 패킷, DB 서버로의 패킷등을 전부 설계하고 작업을 수행합니다.
한 사람의 작업이므로 클라이언트 작업을 서버 작업자가 기다릴 필요도 없고 의사소통의 문제로 인한 에러도 상당히 줄어들었다고 생각합니다.
가장중요한것은 작업에 대한 책임성이나 작업속도가 아주 빨리 진행이 되고 있읍니다.

단, 서버 프로그래머의 역할 중 네트워크 라이브러리는 특성상 한사람이 게임 개발 초기에 작업하고 그 이후로는 특별한 수정이 가해지고 있지 않습니다. 네트웍 라이브러리를 작업한 사람도 그후에는 일반 프로그래머와 같은 작업을 수행하고 있습니다. 초기작업 이후에는 전부 게임에만 집중을 하고 있습니다.

결론적으로 2번의 확장된 형태로 작업이 되지만, 각자 맡은 컨텐츠에 자신이 책임을 지고 작업한다고 말한다면 정리가 될거 같습니다. 자신의 작업이 다른 부분에 영향을 준다면 그부분에 대해서는 서로 작업을 도와주고 문제가 생기면 먼저 문제점을 숙지 시킨후 다른 사람이 작업한 부분을 직접 수정을 하기도 하고 있습니다.
Locked