컴퓨터공학과를 전공 중인 대학교 4학년 학생입니다. 졸업을 앞둔 상태에서 늦게 게임 개발자가 되고자 하는 막연한 꿈을 가지게 되었습니다. 어디서부터 어떻게 무엇을 준비해야 하는지 잘 알지도 못해서 이에 대한 해답을 얻고자 멘토님께 질문을 여쭤보려고 합니다. 진로는 우선 게임 클라이언트 개발자로 정해둔 상태입니다!
©Nikita
1. 게임 클라이언트 개발자가 되려면 무엇을 하는 게 좋은지 궁금합니다.
2. 포트폴리오는 어떤 게임을 만들어 보는 게 좋은지, 어떤 내용을 담는 게 좋을지 궁금합니다.
3. 신입에게 요구하는, 혹은 기대하는 포트폴리오의 수준 및 퀄리티가 어느 정도인지 궁금합니다.
4. 코딩 테스트를 어떤 식으로 대비하는 게 좋은지, 어떻게 공부하는 게 좋을지 궁금합니다.
5. 이력서와 자기소개서가 차지하는 비중이 큰지 궁금합니다. 만약 비중이 크다면 어떤 부분을 중요하게 써야 할지 궁금합니다.
6. 동아리나 기타 활동이 도움이 되는지 궁금합니다. 만약 도움이 된다면 어떤 활동을 하는 게 좋을지 궁금합니다.
현직자 멘토님께 이런 질문을 드릴 기회가 없어서 질문이 너무 많아졌습니다.. 제 꿈을 이루기 위해 열심히 노력하고 싶습니다. 귀한 시간 내주셔서 정말 감사합니다!
안녕하세요. 졸업을 앞둔 상태에서 커리어의 고민은 누구에게나 나타나는 과정이 아닐까 싶습니다. 컴퓨터공학을 전공하고 프로그래머로 커리어를 쌓으려는 학생들에게 IT 분야는 너무나 넓고 무엇을 선택해야 할지 전혀 감이 잡히지 않을리라 생각해요. IT 분야는 그만큼 넓고 세부적으로 나눌 수 있습니다. 게임 개발자(클라이언트 프로그래머)는 학부 시절에 배운 전공을 토대로 그래픽 테크놀로지와 다양한 시스템을 개발하는 직업입니다.
1. 게임 클라이언트 개발자가 되려면 무엇을 하는게 좋은지 궁금합니다.
클라이언트 프로그래머가 되려면 가장 기본 바탕은 프로그래밍 역량을 키워야 합니다. 학부 커리큘럼에 반드시 포함되는 프로그래밍 언어가 기초가 됩니다. 우선 C언어를 배우며 절차 지향의 개념을 익히고, 그 다음으로 객체 지향 프로그래밍을 배웁니다. 객체 지향 언어에는 Python, JAVA, C++, C#과 같은 언어가 존재합니다. 어떤 언어를 배웠는지 모르겠지만, 클라이언트 개발자는 C++, C#을 주로 사용합니다. 두 가지 언어는 상용화 엔진과 매핑되어 있습니다.
유니티 엔진은 보통 C#으로 개발하며, EpicGames의 언리얼 엔진은 C++ (물론 블루프린트도 사용하지만..)을 주 언어로 사용하여 개발합니다. 자신이 어떤 언어에 강점을 가지고 있는지 파악한 후에 해당 연계된 게임 엔진을 다뤄보면 됩니다.
프로그래머는 클라이언트, 서버라는 직군과 상관없이 구현에 우선 초점을 두어야 합니다. 구현하려면 언어의 기본적인 문법을 활용하고, 시스템의 구성에 최대한의 효율을 보장해야 합니다. 시스템을 구현하는 과정에서 자료구조와 알고리즘은 자연스럽게 뒤따라옵니다. 배열과 리스트의 자료구조를 어떤 상황에서 써야 하는지 알아야 한다는 뜻입니다. (4번 질문인 코딩 테스트와 연결됩니다.)
이렇게 프로그래밍 언어를 습득하면서 선형대수학, 이산수학도 공부할 필요가 있습니다. 벡터 연산, 행렬의 곱셈 정도는 자세히 물어보는 지식은 아니지만 알아두면 여러모로 도움이 됩니다.
게임은 1인 개발자가 아닌 이상 거의 대부분 네트워크 기반입니다. Socket 통신, TCP/IP, UDP과 같은 개념을 익혀둘 필요가 있습니다. 아마도 학부 커리큘럼에 네트워크 통신과 같은 과목이 있다면 꼭 수업을 들어야 합니다. 클라이언트의 주요 영역은 아니지만 네트워크와 관련된 데이터베이스도 기본 개념은 알고 있어야 합니다.
클라이언트 개발자가 되려면 무엇을 하는지 나열해 봤습니다. 결국 제가 나열한 지식은 프로그래밍 언어(객체 지향), 자료구조, 알고리즘(+디자인 패턴), 네트워크, 데이터베이스, 선형대수학, 이산수학, 그리고 게임 엔진의 기반 지식입니다. 여기에 추가로 운영체제(윈도, 리눅스, 안드로이드, iOS)도 포함될 듯합니다. 아마도 대학 4년 동안 컴퓨터 공학에서 배운 내용(게임 엔진 제외)이라고 생각합니다. 학부에서 배우는 기초 지식에 게임 엔진이라고 한 줄 요약할 수 있겠네요.
2. 포트폴리오에는 어떤 내용을 담는 게 좋을까요?
C#, C++ 객체 지향 언어 중에서 하나를 선택해야 합니다. 우선은 하나인 C# 언어를 선택했다고 가정해 보겠습니다. C#으로 유니티 프로젝트를 진행한 결과물이 포트폴리오가 됩니다. 프로젝트를 진행하는 과정에서 생성된 직접 작성한 코드가 클라이언트 개발자의 주요 포트폴리오가 됩니다. 여기에 프로젝트의 개발에 사용된 다양한 기술의 설명 문서도 추가할 수 있습니다.
프로젝트는 처음부터 거창한 게임을 목료로 지정하면 완성하기 어렵습니다. 오목, 장기와 같이 간단한 아케이드 게임이나 보드 게임의 규칙을 적용한 게임 정도가 적당합니다. 프로젝트를 진행하는 이유는 프로젝트의 초기 설정부터 빌드라는 단계까지 경험해 볼 수 있기 때문입니다. 한 번의 사이클을 경험해보는 것이 가장 중요한 경험입니다. 규칙을 정하고, 환경을 구축하는 과정에서 유니티 엔진 및 툴을 익히는 과정에서 어떤 점을 배웠으며, 어떤 문제를 해결했는지, 코드의 버전 관리(보통은 GibHub 사용)는 어떻게 했는지 학습하며 그 내용을 잘 갈무리해 놓습니다.
예를 들면 캐릭터 머리 위에 프로필UI를 구현해 놓았는데, 캐릭터가 이동하는 위치와 동기화 하려고 Update 구문에서 매 프레임 호출했지만, 미세한 떨림이라는 문제가 발생하여 이 오류를 Lerp라는 Math.h의 API를 활용하여 개선했다. 라는 식의 해결 과정을 깃허브 Commit 코멘트로 상세히 적어놓고 추후에 정리한 문서를 포트폴리오에 첨부합니다. 이러한 내용은 직접 문제를 겪어봐야 해결할 수 있어서 직접 프로젝트를 진행했다는 근거가 됩니다.
©Nubelson Fernandes
3. 신입에게 요구하는, 혹은 기대하는 포트폴리오의 수준 및 퀄리티가 어느정도인지 궁금합니다.
학부 시절에 만든 졸업 프로젝트의 수준은 기업에서 여러 경력자가 모여 만든 프로젝트와 상당한 차이를 보입니다. 신입에게 기업에서 만든 수준의 퀄리티를 요구하지는 않습니다. 다만 앞서 이야기한 프로젝트를 얼마나 진행해 봤고, 게임 엔진의 이해도는 얼마인지 판단합니다.
포트폴리오의 수준이 높다 낮다를 판단하는 기준은 사람마다 다르고, 기업에서 요구하는 퀄리티도 각양각색입니다. 기업에서 요구하는 수준보다는 본인이 어느 정도 프로그래밍의 역량을 갖추었는지 파악해 봐야 합니다. 대부분 개발 스튜디오에서 원하는 신입의 역량은 디버깅 능력을 갖추었는지, 객체 지향 개념은 어떤지 점검하며, 다양한 시스템의 코드를 읽고 해석할 수 있는지를 파악합니다.
4. 코딩테스트를 어떤식으로 대비하는게 좋은지, 어떻게 공부하는게 좋을지 궁금합니다.
게임 프로그래머는 다양한 문제를 코드로 해결하는 직군입니다. 이때 활용하는 것이 바로 알고리즘입니다. 어떤 상황에서는 동적 계획법이라는 알고리즘으로 해결하고, 어떤 상황에서는 깊이 우선 탐색을 사용하여 해결하는 편이 훨씬 효율적인지 경험이 필요하죠. 이러한 문제 해결 능력을 알아보는 과정이 바로 코딩 테스트라 할 수 있습니다.
코딩 테스트는 백준, 프로그래머스에서 연습합니다. 아마도 신입에게 요구되는 코딩 테스트의 수준은 프로그래머스 레벨3 정도면 거의 풀지 않을까 합니다. 앞서 소개한 사이트에서 제공하는 문제를 풀어보고, 실제로 웹 환경에서 코딩해보는 경험을 쌓으면 코딩 테스트에 충분히 대비할 수 있을 겁니다.보통 개발은 Visual Studio로 하지만 코딩 테스트는 전혀 다른 환경에서 코딩하는 것이라서 코딩 테스트 환경에 적응하는 것도 필요합니다.
5. 이력서와 자기소개서가 차지하는 비중이 큰지 궁금합니다.
개발자의 자기 소개서는 비중이 그리 크지 않습니다. 조금 규모가 큰 기업은 어느 정도 질문이 주어지고 1000자 내외로 글을 작성하게 되어 있습니다. 한번 예시를 살펴볼까요?
[A사 자소서 항목]
Q1. 선택하신 직무에 지원하신 동기와 입사 후 성장 목표를 서술해 주세요.
Q2. 선택하신 직무 관련 역량을 갖추기 위해 구체적으로 어떠한 준비를 해오셨는지 경험과 결과를 중심으로 기재해 주세요.
Q3. 지원하신 직무와 관련해 활용 가능한 스킬셋(기술 스택, 플랫폼 등)과 각각의 활용 수준을 적어주세요.
이와 같이 인터넷을 검색해 보면 어떤 내용이 있는지 알 수 있습니다. 이러한 내용을 바탕으로 자기소개서를 작성해도 무방합니다. 이력서는 프로젝트를 설명하는 내용으로 작성하면 됩니다. 앞서 언급한 포트폴리오의 기술 문서를 이력서에 간략히 요약하면 됩니다.
6. 동아리나 기타 활동이 도움이 될까요?
모든 활동이 도움이 되는지 아닌지는 본인의 의지에 따라 다릅니다. 동아리 활동에서 여러 사람이 모여 프로젝트를 진행한다면 도움이 되는 방향으로 참여해야 합니다. 협업 과정에서 내부 시스템을 설계하는 과정을 경험하거나 게임 엔진을 다양하게 다뤄보는 경험을 동아리나 기타 활동에서 겪게 된다면 본인의 성장에 보탬이 되지 않을까 합니다.
게임 개발자가 되고 싶다는 막연한 생각만 가지고 있었습니다. 무엇을 어떻게 해야 할지 모르는 상황에서 멘토님께 여러 가지 질문을 드렸습니다. 많은 질문이었지만 멘토님께서 귀한 시간 내주셔서 성심성의껏 답변을 해주셨습니다. 기본기를 갈고닦는 것이 중요하다는 것을 느꼈습니다. 비록 졸업하는 시기에 늦게 진로를 결정했지만 열심히 도전해 보겠습니다. 감사합니다!