2022.02.10 내용 추가:
저는 현재 게임 개발과는 무관한 직종에 종사하고 있는 개발자입니다.
이 글이 꾸준히 조회수가 나오고 있음에 비해, 충분한 전문성을 갖추지 못한 것 같아 늘 죄송스런 마음입니다.
취업준비 하던 시절에 게임 개발 직종에 지원하며 준비하던 내용을 정리한 것 뿐이니, 너무 맹신 마시고 참고만 하시면 좋겠습니다
---------------------
게임 회사를 다수 지원해 보고, 그 중 면접을 몇 번 접한 바 있습니다.
면접은 크게 직군면접, 팀면접, 임원면접 세 개로 나눌 수 있겠으나 이렇게 세 번에 걸쳐서 면접을 보는 회사는 잘 없습니다.
제 경험상 직군면접을 생략하거나, 직군+팀면접 형태로 보는 경우가 꽤 되었습니다.
하지만 팀 면접이 아닌 직군 면접만을 보는 경우, 컴퓨터공학 전공지식에 대해 여러 가지 분야에서 폭넓게 질문을 받게 됩니다.
이것도 직무에 따라 다르겠지만, 각 직무마다 특히 중요시 하는 컴퓨터공학 전공지식 분야가 있을 것입니다.
제가 준비하는 게임프로그래밍 직군의 경우, C++ / C#에 대한 이해, 게임엔진에 대한 지식 등등이 그것입니다.
유튜브에서 좋은 내용이 담긴 영상을 발견하여 이에 대한 내용을 공유하고자 합니다.
2019년 7월 NDC에서 윤석주 님이 발표하신 '신입 게임 프로그래머가 되는 법' 이라는 제목의 발표입니다.
넥슨의 채용 프로세스에 대해 조사하신 내용을 바탕으로 진행된 발표이며, 내용은 크게 네 개로 나뉩니다.
- 서류 심사 (자기소개서, 포트폴리오)
- 과제 심사 (코딩테스트)
- 직군 면접
- 팀 면접
이 외에 마지막 단계로 인사 면접이 있지만 위 영상에서는 다루지 않은 내용입니다.
저는 직군 면접 파트에 대해 요약해 보았습니다.
직군 면접은 지원자의 전산학 지식에 대해 폭넓게 검증하는 단계입니다. 게임 개발은 크게 클라이언트 개발과 서버 개발로 나뉘고, 따라서 각각 중요시 하는 지식 분야가 다르겠지만 게임 프로그래머 지원자로써 이들에 대해 검증받게 됩니다.
전산학 지식이 필요한 이유는, 우리가 사용하는 라이브러리나 엔진 등은 불과 몇 년 후에 다른 것으로 대체될 수 있지만, 기초 전산 지식은 변하지 않기 때문입니다. 제가 현재 Spring Boot와 AWS를 공부하고 있지만 이러한 기술들은 금방 대체될 수 있죠. 하지만 stack/queue, 이산수학, TCP/UDP 통신 등의 내용은 쉽게 바뀌지 않는, 근본적 (fundamental)인 지식이고, 따라서 이러한 기초가 잘 갖추어져 있어야 새로운 기술을 보다 잘 받아들일 수 있습니다.
위 영상은 크게 아래와 같은 큰 주제로 나눌 수 있습니다.
- 언어 (C++, C#)
- 그래픽스
- 네트워크
- 알고리즘, 자료구조
- DB
- 서버-클라이언트 동기화
- Thread
위 주제를 포함하여 아래와 같은 자세한 내용이 있습니다.
- 클라이언트 개발: 언어, 그래픽스에 대한 지식 필요
- 그래픽스 관련 지식 (3D행렬, 카메라, 좌표계, 렌더링 파이프라인)
- 게임엔진에 대한 지식 (유니티, 언리얼)
- C++에 대한 이해. OOP (상속, 다형성, 가상함수), 템플릿 등.
- 메모리 (스택, 힙, 메모리 풀, 스마트 포인터 등).
- 서버 개발: 언어, 네트워크, DB, 서버-클라이언트 동기화, Thread에 대한 지식 필요
- C#에 대한 이해. 실바 바인 서버인진 2 등의 사용, VM(GC), Generic, C# Collections (list, dictionary...) 등.
- 서버에서 여러개의 요청을 동시에 처리하기 위한 방법.
- Thread (lock, deadlock)
- Microthread (coroutine, fiber)
- 서버에서 여러 연결을 효율적으로 처리하는 방법
- Windows - IOCP
- Linux - epoll
- DB에 대한 지식 (게임에서 발생하는 여러 정보들을 저장)
- Transaction, SQL, Stored Procedure
- NoSQL (Redis)
- 게임 로직 관련.
- 서버-클라이언트 통신 (TCP, UDP)
- 어떻게 동기화를 할 것인가
- 메세지를 어떻게 보낼 것인가 (serialization)
- 알고리즘, 자료구조
- 많은 데이터를 처리, 보관하는 방법
- 요구 상황마다 어떤 방식이 효율적인지 알아야 한다.
- 각 자료구조, 알고리즘의 특징을 알아야 한다.
위 내용을 참고하여 면접에 도움이 되기 바랍니다.
보다 자세한 내용은 영상을 통해 직접 확인하실 수 있습니다.
'개발 > 기타' 카테고리의 다른 글
Java에서 메소드의 parameter가 배열일 때 생기는 의문 (0) | 2022.01.23 |
---|---|
IntelliJ 단축키 / 구문 정리 (0) | 2022.01.22 |
[C++] 문자열 substr와 코딩 테스트에서의 활용 (2) | 2021.04.11 |
[C++] 코딩 테스트에서 편하게 사용할 수 있는 문자열 자르기 (0) | 2021.03.24 |
[Git] Fork한 Repository 최신 내용 가져오기 (0) | 2020.11.05 |
댓글