#자유로운의견교환 #익명게시판 #구성원간소통 #에티켓필수

제목펄어비스 게임 엔진 개발자 1년차 응애가 올리는 글2024-02-17 01:44
작성자

안녕하세요,

이제 24학번이 입학하는 시점에서, 화석이라는 칭호는 이제 21학번들이 가져가고 있지 않나 생각이 듭니다. 저는 그보다 이제 더욱 깊숙히 묻혀 사실상 소융의 내핵이 된, 소융 1기 17학번 졸업생입니다. 얼마 전에 심심해서 에타에 다시 들어가봤는데, 후배님들께서 소융 겜콘의 미래 / 아웃풋에 대한 궁금증이 많은 것을 확인하고 이렇게 글을 쓰게 되었습니다. 개인적으로는 모든 소융 학우분들에게 도움이 되었으면 하여, 많은 분들이 공감할 수 있도록 정보 전달을 해보겠습니다.


많은 소융 겜콘 후배님들께서 펄어비스에 대한 궁금증이 많으실 것입니다. 블랙 기업이냐, 기술 정말 좋냐, 도깨비 언제 나오냐 등등... 뭐, 아직 저학년인 후배님들에게는 아직 농담이겠지만, 당장 졸업을 앞두고 있는 고학년 후배님들에게는 현실적인 질문들일 것입니다. 이 모든 궁금증에 저는 이렇게 답해드리겠습니다. 만약 자신이 ​기술을 중시​하고, ​야망이 있​고, 세계 최고의 기업들과 경쟁을 하고 싶으시다면, 전 자신 있게 펄어비스를 추천해드리고 싶습니다. 이곳의 장점은 모든 개발자들이 최고가 되기를 열망하는 사람들이 모여 있어 모두가 발전하려는 분위기가 있고, 적당히를 모르고 최대한 좋은 결과를 내려는 문화가 있다는 것입니다. 단순히 적당히 물 흐르듯 가는 것도 좋지만, 자기 발전에 큰 열망이 있으신 분이라면 전 매우 매력적인 문화라고 생각합니다. 이렇게 들으면 사람과 시간을 갈아 넣는다고 생각하실 수 있겠지만, 현실적으로 펄어비스가 큰 회사가 아니기 때문에 일당백을 하느라 시간 투자가 많이 들어가긴 합니다. 하지만 다들 의미 없는 야근을 절대 하지 않으며, 설령 야근을 전부 풀로 채우지 않는다고 해서 눈치를 주지 않습니다. 본인에게 주어진 업무가 있고, 해당 업무를 잘 수행해 내기만 한다면 칼퇴를 한들 뭐라 하겠습니까? 이렇듯 본인이 충분히 기술적인 욕심, 야망이 있다면, 꼭 지원 해주세요!!


여기까지 읽으셨다면 여러분은 펄어비스를 가고 싶으신 분들이라고 이해를 하겠습니다(물론 대부분의 취준생들은 펄어비스든 넥슨이든 어디든 가고 싶어 하시겠지만요). 그런 분들에게 실질적으로 도움이 될 정보는 그래서 어떻게 준비하고, 어떤 수준까지 도달해야 하느냐 일 것입니다. 이를 위해 우선 제 스토리를 먼저 풀어드리겠습니다.


저는 대학교에 입학해서 파이썬으로 첫 코딩을 했습니다. 군대 입학하기 전까지는 그냥 성실하게 대학 생활을 했던 것 같습니다. 딱히 더하지도 않고, 모나지도 않은 생활을 했었습니다. 그러다 군생활을 하면서 혼자서 C 언어 책을 읽고, 책에 있는 문제를 풀며 C 언어에 대한 흥미와 실력을 키워 나갔습니다. C 언어 공부는 KNK의 C Programming Language: A Modern Approach를 사용하여 했습니다. 챕터가 상당히 많은데 핵심 내용들만 읽어 챕터 20까지 공부했습니다. 이후에는 C++을 공부했습니다. 여기서 저는 제 코딩 실력에 상당히 많은 진전을 했고, 자신감도 많이 생겼습니다.


전역을 하고 나서 2학년 2학기로 칼복학을 했습니다. 이때부터 저는 상당히 많은 일을 하기 시작합니다. 당연히 학교 생활도 했고, 웹파 수업 도우미도 하고, 소융튜브라는 동아리 활동도 하고, 따로 인원을 모아 엔진 개발도 하고, 파이썬 프로젝트도 진행하고, 따로 인강도 듣고, 심지어 취준까지 했었습니다. 당시 취준은 네오플이랑 펄어비스 정규직에 지원을 했었는데, C/C++ 실력 하나 만으로 네오플은 최종 면접까지 갔었으나, 결국 최종에서 떨어지긴 했습니다.


여기까지만 들으면 "이건 그냥 님이 규격 외의 강자 아님?"이라는 생각이 들을 수도 있을 것입니다. 하지만 전 반대로 이를 해석합니다. 이렇게 해석하는 건 하수죠. 진짜 고수는 "아, 대학교부터 코딩 첨 시작해도 C/C++만이라도 제대로 공부하고 학교 공부 열심히 하고 졸업해도 네오플처럼 좋은 회사를 갈 수 있구나"라고 해석합니다 ㅎㅎ. 실제로 저는 당시 필기에서 제가 모르는 문제는 당당하게 틀렸습니다. 당시 수업을 듣지 않아 몰랐던 데이터베이스나 서버 쪽 내용은 완전 빈칸으로 냈었죠 ㅎㅎ.


이후에 저는 실무 경험에 메말랐었기에 인턴십을 하고 싶었습니다. 그래서 실리콘 밸리 인턴십에 지원하여 6개월 동안 (코로나 이슈로 서울에서) 안드로이드 QA 및 개발자로 근무하면서 실무 경험을 쌓았습니다. 이때 저는 심지어 안드로이드는 해본 적도 없었고, Java는 인강으로 개체지향 공부한다고 들은 게 전부였습니다. 하지만 인턴을 하면서 안드로이드에 대한 공부를 하고, 직접 디버깅을 하면서 QA도 하는 식으로 경험을 쌓았습니다.


사실 이때 저는 다른 많은 학생들이 겪는 일명 "대2병"을 겪었습니다. "게임 개발자가 진짜 나한테 맞을까?", "게임 개발자도 분야가 한둘이 아닌데, 내가 지금 특출난 분야에 대한 깊이가 없는데 뭐 어떡하지?", "인공지능을 하고 싶긴 한데, 게임 인공지능 개발자가 의미가 있는 분야고, 내가 정말 하고 싶은 분야일까?" 등등 여러 고민을 하던 시기입니다. 근데 제 성격상 저는 의미 없는 고민을 하기 싫었습니다. 마침 배성호 교수님께서 학부 연구생을 제안하셔서 저는 인턴십 기간 말부터 약 8개월 간 딥러닝을 공부하는 학부 연구생을 했습니다. 그렇게 인공지능이 고민 된다면 차라리 화끈하게 제대로 공부를 해보자는 심상이었습니다. 그곳에서 딥러닝에 대한 기초를 배우고, 게임 딥러닝 및 경량화에 대한 공부를 했습니다. 그 기간동안 저는 따로 사이드 프로젝트로 팀을 꾸려 게임 엔진을 계속 개발을 했고, 자료구조와 알고리듬 수업을 인강으로 들었습니다. 오히려 이 경험을 바탕으로 저는 게임 인공지능 개발자가 되고 싶은 게 아니었다는 결론을 내릴 수 있었습니다.


학부 연구생이 끝난 이후 저는 또다시 선택을 해야 했습니다. 마침 3학년이니 캡스톤 디자인도 들어야 해, 주제도 선정해야 했지요. 그래서 그냥 같이 한 팀원에게 선택권을 주어 갑작스레 유체 시뮬레이션을 주제로 캡스톤 디자인을 했습니다. 과탐도 물리가 싫어 화생을 했었는데 물리 중에서도 어렵다는 유체역학을 공부하게 되었죠. 그곳에서 저는 단순히 유체역학이나 시뮬레이션 뿐만 아니라 CUDA를 통한 GPGPU 프로그래밍과 간단한 OpenGL 렌더링, 언리얼 렌더링 등을 공부했습니다. 매우 어려운 과정이었고, 힘들었지만 고통 끝에 결과를 냈을 때의 감정과 경험을 얻게 해준 매우 귀중한 순간이었다고 생각합니다.


그 과정이 끝난 이후 저는 스스로 확신을 갖고 드디어 분야를 정했습니다. 바로 게임 그래픽스라는 분야입니다. 게임에도 여러 분야가 있지만 보통 가장 어렵다고 여겨지는 분야 중 하나가 바로 그래픽스입니다. 학기가 끝난 방학부터 저는 Real Time Rendering이라는 책을 읽어 공부했고, 동시에 Direct3D 11으로 렌더러를 개발하여 교내 게임 그래픽 프로그래밍 실습/과제 자료로 사용할 수 있도록 개발하였습니다. 이 글을 읽고 있는 3학년 중에 게임 그래픽 프로그래밍 수업이 너무 어렵고 고통 받는 분이 계시다면, 그거 다 제가 범인입니다 ㅎㅎ.


이후 4학년에는 이 경험을 바탕으로 펄어비스 하계 인턴십에 지원하여 방학 동안 인턴십을 진행했고, 최종 합격하여 현재까지 오고 있습니다. 지원 당시에는 NC소프트나 넷마블도 지원했지만 신기하게 나머지 둘은 떨어졌습니다. 인턴십 때도 비슷하게 처음하는 주제로 해보고 싶어 렌더링 최적화 방법 중 하나인 Deferred Rendering과 Tiled/Clustered Lighting을 주제로 프로젝트를 진행했습니다.


현재 저는 펄어비스에서 코어 시스템을 다루고 있습니다. 코어 시스템이라 함은 렌더러의 핵심 코드, Job System, Material System, Shader Compile System, Container, Cross-Platform 포팅 등을 다루고 있다는 것입니다.


제 스토리에서의 핵심은 개인적으로 네 가지라고 생각합니다. (1) C/C++에 대한 실력, (2) 탄탄한 핵심 CS 배경지식, (3) 하나의 특화 분야에 대한 지식, (4) 팀플 경험. 이 네 가지가 갖춰지셨다면, 전 어디든 취업이 가능하다고 생각합니다.


위 네 가지를 달성하는 개인적으로 추천하는 방법을 나열해드리겠습니다:


(1) C/C++에 대한 실력

여러 방법이 있지만, 역시 제일 좋은 건 직접 코딩을 하는 것입니다!!

공부 자료로는 제가 직접 사용한 것은 KNK의 C Programming Language: A Modern Approach라는 책이 있습니다. 검색해보시면 제가 대충 번역한 자료도 wikidocs에 있는데, 웬만하면 원서로 사서 보시는 걸 추천합니다. 그게 좀 더 멋있거든요. C++은 인강 https://pocu.academy/ko/Courses/COMP3200 을 들었습니다.

여러분들은 학교에서 객프를 통해 처음 C++을 접할 것입니다. 딱 한 마디만 조언 드리겠습니다. 회사에서 배우는 객프는 정말 쉬운 겁니다. 객프가 어렵다면, 반드시 끈질기게 공부하고 직접 코딩을 해서 이해를 하시길 바랍니다!!


(2) 탄탄한 핵심 CS 배경지식

학교 수업만 열심히 들어도 생긴다고 생각하지만, 좀 더 깊이를 주는 방법으로는 직접 코딩을 해보거나, 추가 인강을 듣는 걸 추천합니다. 제 경우 운영체제를 들을 때 과제를 전부 C 언어로 작성해서 제출했습니다. 운영체제는 보통 C 언어로 작성하기 때문에 일부러 그런 끔찍한 짓을 한 것입니다. 또한 교재로 나오는 책들, 전부 싹 다 읽고 번역하고 정리해서 velog에 올렸습니다. 특히 공룡책, 정말 재미있게 읽었습니다.

인강의 경우 https://pocu.academy/ko/Courses/COMP2500 개체지향 프로그래밍과 https://pocu.academy/ko/Courses/COMP3500 자료구조와 알고리듬을 공부했습니다.


(3) 하나의 특화된 분야에 대한 지식

저의 경우 그래픽스입니다. 솔직히 지금 와서 생각해보면 알량한 지식 수준이지만, 그래도 학부생 수준에서는 많이 공부했다고 생각합니다. 제가 했던 것은 직접 Direct3D 11으로 렌더러를 개발하고, 그 렌더러로 게임 그래픽 프로그래밍 수업 실습/과제를 만들었던 경험이 있고, 레이트레이싱 쪽을 공부해서 ReSTIR 관련 논문을 읽고 Falcor로 해당 내용을 공부한 경험이 있습니다. 추가적으로 인턴십 때 Microsoft의 Direct3D 12 기반 렌더러인 MiniEngine으로 Tiled/Clustered Lighting, Deferred Rendering 등을 구현한 경험이 있습니다.


(4) 팀플 경험

저는 복학한 이후 단 한 학기도 팀플을 하지 않은 적이 없습니다. 여기서 말하는 팀플은 학교 수업 얘기가 아닙니다. 물론 학교 수업에서의 팀플도 귀중한 경험입니다. 저는 매 학기마다 팀원들과 파이썬 프로젝트든, 게임 엔진 개발 프로젝트든, 렌더러 개발 프로젝트든 진행했습니다. 팀플 경험은 크게 두 가지를 제공한다고 생각합니다. 커뮤니케이션 능력과 프로젝트 수행 능력입니다. 이 두 가지가 회사에서 생각보다 매우 중요합니다. 아무리 기술력이 뛰어난들, 게임 엔진을 혼자서 만들 수는 없습니다. 그러기엔 세상이 너무 빠르게 발전하고, 게임 엔진은 생각보다 많은 일을 복잡하고 효율적이게 수행하기 때문이죠. 그렇기 때문에 커뮤니케이션 능력은 필수적입니다. 학교에서 프로젝트를 진행할 때 그런 경험이 있을 수 있습니다. 분명 열심히 공부를 하는 것 같은데, 결과는 잘 안 나오는 경험 말이죠. 그런 경험이 없으시다면, 주변에 그런 친구는 한 명 정도 있을 수 있습니다. 분명 잘하는 것 같은데... 결과가 영 시원찮은... 저는 이걸 프로젝트 수행 능력이라고 생각합니다. 프로그래밍의 세상은 너무나도 넓고 깊어 어딜 가든 여러분이 처음 가보는 곳입니다. 그런 세상에서 필요한 지식은 (2)번과 같이 탄탄한 배경지식과, 어떤 문제든 해결해낼 수 있는 수행 능력입니다. 문제가 있다면 해당 문제가 정확하게 뭔지 파악하고, 어떤 지식을 공부해야하는 파악하고 수행하여 해결을 해내는 능력이죠.


위 네 가지만 다 해도 여러분은 정말 회사 골라가실 수 있습니다. 너무 많다고 생각하시나요? 그건 여러분이 학기 중이나 방학 중에 그냥 공부를 안 하셔서 그런 겁니다. 제가 대학교 다니면서 느낀 거지만, 경희대학교에는 정말 태생적인, 신체적인 한계로 프로그래밍을 못하는 사람은 없습니다. 그냥 안 했기 때문에 레벨이 낮아서 프로그래밍을 못하는 겁니다. 만약 본인이 레벨이 낮다고 생각해 뭘 해야 할지 모른다거나, 심리적으로 위축이 되어있을 수 있습니다. 하지만 여러분, 게임에서 경험치는 자신보다 살짝 레벨이 높은 몬스터를 잡을 때 가장 효율이 좋습니다. 인생도 마찬가지입니다. 지금 당장 여러분이 할 수 있는 수준에서 조금 도전적인 프로젝트를 고르고 해보세요. C/C++을 할 줄 모른다구요? 그러면 C/C++ 잘하기가 목표겠네요? 그 정도는 할 수 있을 것 같다구요? 그러면 살짝 레벨을 높여서 C/C++로 나만의 vector, string 등 구현해보기 등으로 도전해보세요!!


마지막으로 각 학년별 후배님들에게 조언을 올리겠습니다.


예비 소융인 고딩 여러분들, 국영수 열심히 하세요. 수능 얘기가 아니라 진짜 국어, 영어, 수학 얘기입니다. 여러분들의 미래의 근간이 될 세 과목들입니다. 물리까지 하면 도움이 되긴 합니다만 필수는 아닙니다.

1학년 후배님들, 공격적으로 넓게 공부를 하세요. 옷 쇼핑도 최대한 여러 곳을 가서, 여러 옷을 직접 실측해보고 사는 게 제일 좋은 쇼핑이 되듯이, 시간이 많고 가능성이 많은 이 시기에 최대한 다양한 분야를 찍먹해보세요. 단, 최소한 한 벌이라도 입으셔야 합니다. 다양한 분야를 찍먹하라고 해서 직접 코딩도 안하고 유튜브만 보는 건 시간 낭비입니다.

2학년 후배님들, 대2병에 걸렸을 땐 절대 고민하지 마세요. 어차피 고민해도 답이 안 나오잖아요? 답이 안 나오는 이유는 여러분이 정말 "몰라서"입니다. 모르면 뭘 하면 되죠? 공부하면 되죠? A랑 B 중에 고민이 된다면 그냥 둘 중 하나 해보세요. 그럼 답 나옵니다. 옵션 자체가 없다구요? 그럼 그냥 눈 감고 아무거나 꺼내서 해보세요. 고민하는 시간이 더 아깝습니다. 그리고 C/C++ 꼭 열심히 튼튼하게 닦아두세요.

3학년 후배님들, 정말 힘든 학교 생활이 이어질겁니다. 중요한 내용들을 와장창 배울 거거든요. 근데 그 수업들 전부 끈질기게 공부하세요. 학교는 여러분들에게 최소한만 제공합니다. 그 최소한의 발판에서 뛰어 더 높게 날아오르는 건 여러분들 몫입니다.

4학년 후배님들, 백준에 눈 멀지 마세요. 다른 분야는 몰라도 게임은 백준이 중요한 게 아닙니다. 위에서 언급한 그 네 가지를 잘 수행했는지 확인하고, 자신의 확실한 무기를 갈고 닦으세요. 그리고 취준 열심히 준비하세요. 취준 준비라는 것은 외모를 가꾸는 것도 포함됩니다. 이제 사회에 나가셔야 하잖아요?


글이 너무 길어진 것 같아 여기서 맺도록 하겠습니다.

혹여라도 궁금한 점이 있다면 덧글로 질문 자유롭게 주세요!!

댓글
자동등록방지
(자동등록방지 숫자를 입력해 주세요)
이전게임 제작 동아리, 루덴스에 대하여2024-02-22
다음NC 공채 & 넥토리얼 합격 후기2024-02-17