게임개발

[NDC 영상 분석] 신입 게임 프로그래머가 되는법 (NDC 19)

메카인 2023. 2. 22. 22:30

https://www.youtube.com/watch?v=9XNFtbUmsLY&list=PL-YpDMxwRh8ipzTcgI3xONrF4uSm7vyHy&index=26 

 

이 글은 영상의 내용을 개인이 정리한 글입니다.

윤석주 프로그래머님께 감사드립니다.

 

 

◆게임 프로그래머 채용 프로세스

1.서류 심사

1.1 이력서, 자기소개서

1.2 포트폴리오

2.과제 심사 (온라인 코딩 테스트)

3.직군 면접

4.팀 면접


◆◆1.서류 심사

◆면접관이 원하는 것

▷프로젝트 관련 경험, 의사 결정에 관한 경험, 지원자의 관심 분야

 

◆이력서, 자기소개서 - 프로젝트 관련 경험 예시

●개인 프로젝트

▷개인적으로 연구한 분야, 결과물

●팀프로젝트

▷주어진 과제

▷과제를 해결하기 위해 사용한 기술

=> 현재 팀에서 필요한 인력 수요와 교집합이 많은지 판단하고, 채용 후 어떤 업무를 부여 할 수 있을지 판단하는 요소


ex) <퍼즐 주주> 프로젝트에서 두가지 목표가 있었을 떄

1. 다양한 수요에 대응하는 것

2. 서버 비용을 최소화 하는 것

 

위의 목표를 달성하기 위해 Scale-in/out이 가능한 구조로 서버를 설계하였고 AWS EC2 Auto Scaling Group을 사용하여 목표를 달성하였습니다.


◆이력서, 자기소개서 - 의사 결정에 관한 경험

●예시

▷프로젝트 일정이 부족 했을 때

▷구현이 어려운 목표가 주어졌을 때

●의사 결정을 한 과정, 이유

●의사 결정으로 얻은 경험

=> 현업에서도 비슷한 의사 결정을 통해 업무가 진행되므로 이러한 경험을 공유하는 것이 좋다.

 

◆이력서, 자기소개서 - 지원자의 관심 분야

●앞으로 하고 싶은 업무 분야

●기술적 관심 분야

●열정적인 취미 (개임 개발과 관련이 없어도 괜찮다.)

=> 채용 후에 지원자의 성장 모습 또한 조직에서는 중요하기 때문에 관심이 많다.

 

◆포트폴리오 - 면접관이 원하는 것

●지원자가 연구한 과정, 결과물

●팀 프로젝트에서 지원자가 기여한 부분

●구현 스타일, 코딩 스타일

 

◆포트폴리오 - 면접관의 불만

●팀 프로젝트에서 본인이 작업한 부분을 알기 어렵다.

●회사에서 작업한 프로젝트 소스가 온다.

●읽는 사람을 고려하지 않는다

▷코드 파일만 있거나

▷회사 보안상 EXE 실행 어려움

▷HWP, ALZ, EGG 등

 

◆포트폴리오 -이렇게 준비하면 좋음

●본인이 작성한 코드를 읽을 수 있는 형태로 전달

▷GitHub 프로젝트 링크

▷오픈소스 기여한 부분에 관한 링크

▷본인이 작업한 코드 위치와 간략한 설명

●시연이 가능하다면 동영상으로 준비

▷본인이 작업한 부분 유튜브 영상 링크

▷위 작업을 구현한 코드

 

ex)

●3D팀 프로젝트에서 카메라를 구현 했다면 카메러 구현영상을 유튜브에 올리고 카메라 코드를 첨부함

●결과뿐 아니라 관정에 대한 설명도 포함

▷구현을 하기까지의 작업들

▷시행착오를 겪은 부분

▷이슈 발생 시 의사 결정 과정


◆정리하자면

●자기소개서

▷프로젝트 관련된 기술과 의사 결정 경험을 공유

▷관심 분야와 하고 싶은 롤을 표현

●포트폴리오

▷본인이 작업한 분야를 명확하게 표현

▷면접관이 알아보기 편한 형태로 준비


◆◆2. 과제심사(온라인 코딩 테스트)

●알고리즘 문제 해결능력을 보기 위한 절차

●이런한 테스트를 처음 접해보면 실력발휘가 어려울 수 있으므로 연습할 것

●국내사이트

▷NYPC 공개 문제

▷카카오 공채 코딩 테스트

▷백준 온란인 저지

●해외사이트

▷Codility

▷LeetCode

▷HackerRank


◆◆3. 직군 면접

●게임프로그래머 직군의 능력을 평가

▷게임 엔진(유니티, 언리얼)외에 전반적인 전산학 지식을 폭넓게 요구함

 

◆<드래곤 하운드> 프로그래머라고 가정

●기술 스택

●언리얼 엔진 (C++)

●실버바인서버엔진2 (C#)

 

◆클라이언트 - 언리얼 엔진

●그래픽스 관련 지식

●3D 행렬

●카메라

●좌표게

●랜더링 파이프라인

●관련 수학 지식

◆엔진에서 쓰이는 C++에 대한 지식

●OOP개면

▷상속

▷다형성

▷가상함수

●템플릿

●STL ?

◆메모리관련 지식

●스택

●힙

●메모리 풀

●스마트 포인터

 

◆서버 - 실버바인서버엔진2 를 만드려면

◆C#에 대한 이해

●VM

▷GC

●Generic

●C# Collection들 - List, Dictionary

 

◆서버에서 여러 개의 요청을 동시에 처리하기 위한 방법

●Thread

▷Lock

▷DeadLock

●Micorthred(coroutine, fiber) (장단점 파악)

 

◆서버에서 여러 연결을 효율적으로 처리하는 방법

●IOCP

●epoll

 

◆DB에 대한 지식

●Transaction

●SQL

●Stored Procedure

●NoSQL

▷Redis

 

◆서버 클라이언트 통신

●TCP, UDP

●어떻게 동기화를 할 것인가?

●메세지를 어떤 방식으로 보낼 것인가? (Serialization)

 

◆알고리즘, 자료구조

●게임에 많은 데이터를 보관, 처리하는 방법들

●요구 상황마다 어떤 방식이 효율적인지 알아야 함

●결론은 각각 자료구조, 알고리즘의 특징을 알아야 함

 

◆정리하자면

●언어(C++,C#)

●그래픽스

●네트워크

●알고리즘, 자료구조

●DB

●서버-클라이언트 동기화

●Thread

 

●+전산학 지식

▷전산학 지식은 엔진과 달리 바뀌지 않는 소중한 기초지식이다.

 

◆책으로 공부하는것을 추천

●전산학용 책 추천

▷C로 배우는 알고리즘

▷Introduction to algorithms

---

●언어용 책 추천

▷Effective C++

▷C# in Depth

▷Inside C#

---

●그래픽스

▷DirectX11을 이용한 3D 게임 프로그래밍 입문

▷Real-Time Rendering

---

●면접 대비

▷프로그래밍 면접 이렇게 준비한다.

 


◆◆4. 팀 면접

●팀의 방향성과 일치하는지 평가

●팀마다 원하는 방향성, 인재상이 다름

▷채용 공고, 팀 인터뷰, 게임 등을 통한 파악

▷파악한 팀의 방향성이 본인과 맞는지 확인

 

◆준비 전략

●프로그래머는 직군 면접 준비를 소홀히 해서는 안 된다

●프로그래머로 업무 수행을 하기 위한 필수 지식

●게임업계 뿐 아니라 IT업계에서 요구하는 지식

●기초 지식을 쌓는 경험 도중에 잘하는 분야/관심 있는 분야를 파악할 수 있음

●이력서, 포트폴리오, 팀 면접은 전문 분야를 만들어서 표현

●본인이 잘 하거나 흥미 있는 분야를 선정

●전문 분야의 경험을 만들어서 표현

▷연구 분야에 대한 PT, 동영상, 소스 코드

▷오픈 소스 프로젝트 참여

▷완수 후 얻은 경험