게임 서버 프로그래머가 되려면 뭘 공부해야되나요?

byflashh의 이미지

말그대로 게임 서버 관리자가 되고싶습니다.
흔히 말하는 서버 터졌다할때 일하는사람들 있잖아여.
일단 C를 공부중인데 여기저기물어봐도 두루뭉실하게만 답이나와서
따로 서버관련 책은 없는거같고;
어떻게 공부하면 좋을까요

lalupo20의 이미지

c 기초 닦으시고 tcpip 프로그래밍 관련 책 사시면 될거 같네여

세벌의 이미지

스트레스 많이 받으실텐데... 왜 그런 험한 일을...

vagabond20의 이미지

용어정의부터 확실하게 하십시다.

게임 서버 프로그래머는 정확히 말하면 프로그래머/소프트웨어 개발자/소프트웨어 엔지니어 쪽에 속합니다. '퉁' 쳐서 프로그래머입니다. (저 역시 프로그래머입니다, 분야만 다를뿐 C 와 자바 기타 등등의 컴퓨터 프로그래밍언어와 스크립트 언어를 사용하여 일을 하지요.)

반면에 서버 관리자는 하는일이 서버 관리, 즉 시스템 쪽에 국한됩니다.
서버 관리자가 우리가 일컫는 '프로그램' (관리자들은 어플리케이션이라고 말합니다) 을 건들지 않습니다.
서버 관리자는 일단 해당 운영체제 (Linux/UNIX 와 같은 Operating Systems) 가 자신이 책임지고 있는 시스템에서 최적화되어 잘 돌아가게 하는일을 합니다. 당연히 시스템에 딸려 있는 각종 핵심/주변기기 (CPU, memory, disk, network device / card 등등) 가 운영체제에 물려 잘 작동하는지 유지/보수하고 업그레이드 하는일을 합니다. 일반 프로그래머들과 소통을 하며 문제를 해결하고 새로운 네트워킹 셋업등에 협업하여 관여도 합니다.

바로 위에서 세벌님이 "그런 험한일" 이라 하셨는데, 맞습니다.
저는 개발자이기 때문에 개발만 잘 하면 됩니다. 물론 제가 건든 프로그램이 잘못되어 떨어지거나 오작동을 하면 회사에 막대한 손해를 끼치기 때문에 책임이 따르고 서포트 콜이 오면 즉시 개입해서 밤낮 관계없이 수정하고 올리는데 관여를 해야 하나, 이미 테스트를 충분히 하기 때문에 흔한일은 아닙니다.

그러나 서버 관리자, 즉 시스어드민 일은 대체로 밤에 많이 있습니다.
운영체제나, 각종 기기의 firmware 업그레이드 등을 할 책임이 있는데 밤에 꼭 하더군요.

설령 계획한 업그레이드 일이 밤에 없어도, 시스템에 문제가 생겼고 그 문제가 '단순히' 어플리케이션 쪽이 아닌 디스크가 깨지거나 오작동하는 경우, 네트워킹에 문제가 생겨 트랜잭션이 상대방 시스템에 넘어가지 못하고 막히는 경우, 시스 어드민이 호출됩니다. 밤에 전화를 받기 일쑤입니다.

서버관리자가 리눅스/유닉스 시스템의 시스어드민 일을 한다고 가정할때 C 를 잘 하면 많은 도움이 될겁니다. 하지만 그에 못지않게 운영체제론을 꽉 잡고 있어야 합니다.

*
그런데 만약 하고 싶은일이 게임 서버 프로그래머라면 얘기가 좀 달라지는데, 그 경우 '서버' 프로그램을 건드는 일일테니 lalupo20 님 말씀대로 tcpip 를 확실하게 이해해야 하고, 그 프로그래밍쪽도 공부할 필요가 있습니다.

*
대부분 이 바닥에 들어설때 "나는 서버관리자가 될테야!" 혹은 "난 훌륭한 프로그래머가 될테야!" 하고 들어오는것 같지는 않습니다. 일단 들어는 왔는데 하다보니 (첫직장이 그래서 중요합니다), 그쪽으로 가게 되는 경우가 많습니다. 나중에 세월이 흐르다보면 서버관리자보다는 개발자가 더 나은 대접을 받는것 같습니다. (경우에 따라, 나라에 따라 물론 다릅니다.) 그리고 하는 일에 비해 보수도 개발자가 좀 나은게 사실인것 같습니다.

주저리 주저리 썼는데, 도움이 되었으면 합니다.

여의도자바

byflashh의 이미지

좋은 답변 감사합니다!!

AustinKim의 이미지

그 동안 '서버 관리'를 맡은 개발자분들이 구체적으로 어떤 일을 하는지 궁금했습니다.
글을 읽어 보니 '스트레스' 강도가 높을 수 있는 개발 업무인 것 같습니다.

좋은 정보 감사합니다.

(개인블로그)
http://rousalome.egloos.com

김정균의 이미지

너무 개발자 시선에서 보는 것 같아 거들어 보자면..

게임 서버를 놓고 서버 관리자라는 것을 분석해 보자면..

1. H/W 관리
- 원격지에서 제어가 가능한 경우 원격 제어
- 원격 제어가 불가능 한 경우, IDC 行 또는 IDC에서 조치를 해 주는 상주 근무원이 별도로 있는 경우

2. OS 관리
- 보통 SE 라는 직함의 관리자들이 별도로 있음.
- OS 설치, 튜닝, 관리 등등 업무

3. application 운영 (게임 서버에서는 게임 daemon 이겠죠.)
- 개발자가 직접 하는 경우
- 전문 운영 SE 가 있는 경우
- 회사마다 케바케

무얼 원하시는 건가요?

보통 서버 관리자라는 말은 잘 사용을 하지 않습니다. 왜냐면 주체에 따라서 달라질 수 있거든요. 서버 관리자라는 의미는 보통 이 서버가 문제가 생겼을 때 서비스에 대해서 누가 대처할 것이냐에 따라 개발자가 될 수 도 있고, SE 가 별도로 있으면 SE가 될 수도 있습니다.

그리고 보통 서버 관리자라고 칭하는 업무는 S.E (System enginner) 와 S.A (System administrator) 로 구분을 하는 경우도 있습니다. 조금 더 나누는 사람들은 System Operator 까지 나누는 경우도 있습니다. 여기서 말하는 System engineering 이 조금 논란의 소지가 있는데, 한국의 IT 업체(포탈/게임/IDC)에서는 https://en.wikipedia.org/wiki/Systems_engineering 에서 말하는 부분과는 조금 다르게 사용하는 용어라고 보입니다.

일단 제가 일하는 포탈/게임 업체 기준으로 설명을 드리자면..

S.E 와 S.A 의 가장 큰 차이점은 프로그래밍 능력이 있느냐 없느냐 입니다. S.A 는 운영에 특화가 되어 있고, S.E 의 경우에는 문제가 발생했을 경우 trouble shooting 이 가능하느냐 안하느냐 있다고 봅니다. 물론 S.A 도 가능한 T/S 가 있기는 하지만 S.E 들은 debugging 이나 소스 코드 레벨까지 접근을 합니다. (개발자에게 어떤 symbol 에서 문제가 되고 있다고 알려 주거나, open source 의 경우 bug report 또는 fix 를 보내기도 합니다)

System Operator 는 보통 IDC 상주 인원을 칭하는 경우가 많습니다. 대부분 H/W 적인 업무가 많고, 보통은 원격지의 S.A 나 S.E 의 요청을 처리하는 경우 입니다. IDC 상주 인원이라고 해서 모두 O.P 는 아닙니다. 어떤 일을 하느냐에 따른 분류이지, 어느곳에서 일하느냐에 따른 분류가 아닙니다. 예를 들어 Virtual IDC 나 IDC 의 support 인력들이 고객의 문제를 해결해 주는 업무를 한다면 Operating 의 수준을 넘어서게 되는 것이죠.

그리고, "야간 작업".. 이게 관리자의 숙명인 것 처럼 위에 분이 말씀 하셨는데, 제 경험상으로는 야간 작업은 대부분 영세업체들의 경우가 많고 규모가 커질 수록 야간 작업이 줄어드는 경향이 있는 것 같습니다. 그리고 제 경험상 S.E/S.A 의 야간 작업 보다 개발자의 야간 작업이 더 많은 것 같습니다. 일정이라는 굴레에 매여져 있는 개발자들은 그냥 매일 야간 작업을 하는 것 같습니다.

서버 관리자가 야간 작업이 많은 경우는 분명 합니다. 장애시 24시간 연락 체계를 가지게 되는 것이기 떄문인데요. 제일 위에 적었듯이 서버 관리자는 개발자도 될 수가 있습니다. 그러므로 개발자도 야간 작업에서는 자유로울 수가 없습니다. :)

imays의 이미지

제가 쓴 책을 소개하는거라 정말 어색하지만,

http://www.yes24.com/Product/Goods/71768958
게임서버프로그래밍 교과서 (배현직 저)

지금 하시는 C와 C++까지는 하시고요, 그다음에 이 책을 갖고 시작해보세요.

----------

게임 서버 엔진 개발자입니다.

https://blog.naver.com/imays