게임 개발에 대해 아무것도 모르는 컴퓨터 공학과 대학생이지만 최근 들어 게임 개발에 막연한 흥미가 생겼습니다.
©Jeff Hardi
현직자 멘토님께 몇 가지 현업과 진로에 관해 여쭤볼 수 있을까요?
1. 비전공자와 차별화될만한 근본적인 이론들을 배우고 싶은데 GPU 구조, 선형대수, 일반 물리학을 공부하면 게임 개발에 도움이 될까요? 게임 개발에 도움이 될만한 다른 분야들도 있으면 추천해 주시면 감사하겠습니다. 일단 지금은 컴퓨터구조론과 선형대수는 약간 아는 수준입니다.
2. 게임 개발에 어떤 언어들을 주로 쓰나요? c++를 공부하는 게 좋을까요?
3. 현업에서 게임 개발 어떤 플로우로 완성되나요?
4. 2학년이 되는 학생 입장에서 해두면 좋을 활동이나 학습이 있을까요?
부족한 질문 읽어주셔서 감사합니다.
안녕하세요. 컴퓨터 공학에 진학하고 다양한 분야가 있다는 인식이 생기면 자연스럽게 게임 개발 업계에 관심이 가지 않을까 싶네요. 그만큼 게임 자체가 인간과 밀접한 연관이 있다고 봐야겠죠.
비전공자들과 차별화를 이루려면 우선 자료구조, 알고리즘, 데이터베이스, 네트워크, 객체지향프로그래밍, 이산수학, 운영체제와 같이 전공 특화된 이론을 차분히 익혀야 합니다.
물론 비전공자들도 알고리즘을 독학하거나 학원에서 학습할 수 있지만, 학부 시절에 시간의 여유를 갖고 하나씩 습득하는 결과와 사뭇 다르지 않을까 싶습니다. 속성으로 배우는 이론은 중요한 문제가 발생하면 큰 효력을 발휘하기가 어렵습니다.
새로운 언어가 탄생하기 어려운 것처럼, 자료구조와 알고리즘이라는 큰 형태는 잘 변하지 않습니다. C++을 오래도록 사용해온 프로그래머라면 최근 업데이트된 C++ 14의 기능은 누구보다 빠르게 습득이 가능하겠죠? 이처럼 학부 시절에 배우는 전공 과목을 차분히 습득하면 비전공자들이 학원에서 배우는 얕은 지식보다는 차별화가 되지 않을까 싶습니다.
©Sean Whelan
게임 개발은 두 가지 언어로 나뉩니다. 유니티 엔진과 언리얼 엔진에서 사용하는 언어가 다르기 때문인데요. 유니티는 기본적으로 C# 언어를 주로 사용하는 반면 언리얼 엔진에서는 C++를 사용합니다.
우선 C#과 C++의 공통분모인 '객체지향' 개념을 먼저 충분히 익히는 방향으로 공부하면 좋습니다. 학부에서 프로젝트는 접근성이 쉬운 유니티로 진행할 가능성이 매우 높아 대부분 C#을 익히기도 합니다. C#으로 프로젝트를 하나 해보고 객체지향 언어 개념이 명확히 생기면 C++ 언어를 연습해 봐도 충분하다고 생각합니다.
만약 C# 언어만 다룰 줄 안다면 유니티 프로젝트를 진행하는 회사에 입사할 가능성이 높고, C++를 메인 언어로 다룰 줄 안다면 언리얼 엔진으로 프로젝트를 진행하는 회사에 입사하겠지만, 객체지향 프로그래밍 개념을 명확히 안다고 가정하면 어느 곳이든 입사할 가능성이 높다고 생각합니다.
게임 개발은 1인 개발자가 아닌 이상 여러 명이 하나의 게임을 개발합니다. 기획 직군에서 작성된 기획서를 토대로 서버 프로그래머와 그래픽 디자이너(3D 모델러, 배경 모델러, UI 디자이너 등)과 협업을 통해 업무가 할당됩니다. 기획 문서의 내용을 구현하려고 모인 회의 자리에서 DB에 저장되어야 할 항목이 있다면 서버와 통신하는 프로토콜을 정의 내려야 하고, 그 정의에 의해서 서로 정보를 주고받는 네트워크 프로토콜을 설계 및 구현합니다.
클라이언트 프로그래머는 기획 데이터와 서버에서 전달받은 정보를 토대로 유저에게 해당 정보를 어떤 자료구조와 알고리즘으로 최적의 효율을 낼 서 보여줄지 고민합니다. UI 디자이너와 UX와 관련된 여러 회의를 거치고 공통적으로 어떤 리소스를 사용해야 개발에 효율적인지 논의하고 구현합니다. 뿐만 아니라 캐릭터의 모습, 몬스터와 전투에서 발생하는 각종 애니메이션과 캐릭터의 상태 표현은 전투 기획서와 애니메이션, 모델러와 협업합니다.
이 밖에도 자신이 구현한 코드를 다른 팀원에게 설명하는 코드 리뷰의 시간도 가끔(?) 갖기도 합니다. 프로그래머라고 해서 하루 종일 자리에 앉아 코드만 보는 직업은 아닙니다. 다른 사람들과 커뮤니케이션을 통해 개발 작업이 어디까지 구현이 되고 있고, 기획 의도와 일치하는지 체크하는 과정도 개발의 일부입니다.
©Marvin Meyer
이론은 모르고 실전 경험만 있는 개발자, 이론은 너무나 잘 알지만 실전 경험이 없는 개발자. 전자와 후자 모두 경쟁력은 점차 줄어들 것이라 생각합니다. 둘 간의 적절한 균형을 이룰 필요가 있습니다.
학부 시절에 배우는 전공 과목을 소홀히 하지 마시고, 교수님의 가르침이 부족하다 생각이 든다면 인터넷에서 좀 더 찾아서 기술의 이론을 습득하는 능동적인 태도가 필요하다고 봅니다.
여기에 더해 기술의 이론을 접목할 수 있는 경험이 꼭 더해져야 합니다. 단순히 학생끼리 모여 스터디를 하지 말고 결과물을 내는 프로젝트를 진행해서 어떤 문제점을 어떻게 해결했는지 기록하세요. 기록은 기억을 이기는 아주 강력한 수단입니다. 일명 개발 일지라 부르는 기록물을 많이 남겨두면 정말 도움이 많이 될 것입니다.
흥미가 생긴 게임 개발의 여정을 응원합니다.