게임프로그래밍을 희망하시는 분들이 아주 기초적인 질문들을 많이 하셔서, 그냥 제가 아는 선에서 일반적인 지식들을 나열해보겠습니다. 먼저, 게임 프로그래머가 되기 위해서는 먼저 대학 진학을 하는 방법과 대학 진학을 하지 않는 방법이 있습니다.
1. 대학 진학을 하는 경우
컴퓨터 공학과
대부분의 국내 대학에는 컴퓨터 00, 소프트웨어학과 같은 이름으로 불리는 컴퓨터 공학을 공부하는 학과가 개설되어있다. 그러나 대부분 컴퓨터 공학과의 커리큘럼은 임베디드, 모바일, 보안, 웹서비스 등을 포함한 여러 프로그래밍 과목을 두루두루 배우므로 실상 게임 프로그래밍의 기법이나 노하우 같은 건 거의 배우지 못할 수도 있다. 그러므로 동기 친구들과의 스터디, 학원, 독학 등 학교의 정기 커리큘럼 이외의 방법을 모색해서도 실력을 쌓아야 한다.
게임 학과
국내의 게임학과들은 10년이 넘은 과가 거의 없을 정도로 역사가 짧고, 커리큘럼 역시 제대로 정립되어 있지 않다. 게다가 대학 특유의 비효율적인 교육과정 때문에 실력만 따지자면 2-4년제 게임학과 졸업생보다 오히려 현업 출신 강사에게 알짜배기 교육만 받는 학원 출신이 더 잘하는 경우를 더 많이 보았다.
2. 대학 진학을 희망하지 않는 경우
독학
스승 또는 학교의 도움을 받지 않고 혼자서 공부하는 것을 말한다. 주로 책이나 웹 사이트, 온라인 강좌 등 다양한 지식창고들을 직접 찾아 나아가면서 학습한다. 정보를 수집하다 보면 찾고 있던 정보가 국어가 아닐 경우, 또 해석본이나 번역본을 찾기 힘들 경우에는 스스로 해석을 해야 하는 어려움이 따른다. 또한, 그 정보가 반드시 옳다라는 보장도 없다.
학원
독학하는 것은 매우 힘들다. 따라서 게임 학원에 다니는 것이 좋은 방안이고, 국비 지원 하는 학원이 많다. 그러나 학원 중에는 요즘 유행하는 유니티 게임 엔진만 교육하는 학원이 많다. 이런 학원은 수준 향상에 도움이 안될뿐더러 회사는 유니티만 다룰 수 있는 사람은 선호하지 않는다. 그러므로 비용이 많이 들더라도 커리큘럼이 체계적으로 잘 정립된 학원을 선택해 기초부터 공부하는 것을 추천한다.
게임 프로그래머가 되기 위해선 어떤 것을 준비해야 할까? 많은 프로그래밍 실무자들은 '스킬'보다, 그 기저에 깔린 '기초지식'에 집중하라고 조언한다. 기초가 튼튼하면 된다. 수학, 물리학 같은 기초 학문은 물론, CPU 구조는 어떤 방식인지, 윈도우는 메모리를 어떻게 할당하는지, 각 언어는 어떤 특징을 가지고 있는지 등등
공통으로 무엇을 배워야 할까?
프로그래밍 언어
프로그래밍 언어는 무엇이 되든 상관이 없다. 본인이 생각하고 있는 것을 로직으로 작성할 수 있고, 그 결과를 알아볼 수 있기만 하다면 말이다.
그러나 만일 한 가지 언어를 선택하는 것이 어렵다면 C++를 추천하고 싶다. 자바나 C#과 같은 언어들도 좋지만, 여전히 게임 개발의 주류 언어는 C++다. 현재 모바일 게임 시장이 크고 유니티 위주로 제작하는 곳이 아직 많다. PC에서는 C++ 이 강세이지만, 모바일에서는 유니티 엔진으로 게임을 개발하는 회사가 많기에, 이를 위해서는 C#을 공부하는 것도 필수라고 생각한다.
컴퓨터 구조
프로그래머는 컴퓨터 소프트웨어를 만드는 사람이다. 그래서 컴퓨터라는 물건이 어떻게 동작하는지 내부적으로 알아야 한다. 물론 내부적으로 어떻게 컴퓨터가 동작하는지 몰라도 소프트웨어를 작성하는 데 무리는 없다.
하지만 컴퓨터의 동작 원리를 알고 나면 컴퓨터 소프트웨어를 작성하는 데 많은 도움이 되는 것은 사실이다. 그리고 콘솔 게임 개발자라면 해당 게임기(예를 들어 PS3, Xbox360)의 하드웨어에 대한 이해가 필수다. 하드웨어에 대한 올바른 이해를 갖추고 있어야 해당 게임기의 최고 성능을 이끌어낼 수 있기 때문이다.
수학
고등학교 수학 수준으로는 요새 출시되는 게임들을 만들 수 없다. 대수학, 삼각함수, 미적분, 선형 대수학 정도는 알아 두어야 게임을 만들 때 막힘이 없을 것이다.
자료구조 / 알고리즘
자료구조와 알고리즘은 프로그래머에게 필수다. 데이터를 어떻게 표현하는가에 따라 프로그램의 성능이 좌우되는 경우가 많다. 예를 들어 컴퓨터는 캐시 메모리가 있고 이 캐시 메모리를 잘 사용한 자료구조는 성능을 대폭 향상시킨다. 또한 프로그래머에게 있어 가장 중요한 것은 논리적인 사고를 이용한 문제 해결 능력이다.
라이브러리 / API
모든 라이브러리나 API 사용법을 알 필요는 없다. 하지만 최소한 본인이 만들어낼 프로그램이 돌아가는 기계의 종류를 알고 거기에 필요한 API나 라이브러리들이 어떠한 것들이 있는지는 알아 두어야 한다.
컴퓨터 그래픽스
게임은 모니터에 무언가를 그려야 하므로 DirectX, OpenGL 둘 중에 하나는 알아야 한다. 이러한 라이브러리를 사용하는 것뿐만 아니라 원리를 알기 위해서는 컴퓨터 그래픽스라는 것을 공부해야 한다. 내부적인 모든 원리를 알면 좋겠지만 어렵다면 최소한 개론 서적 정도는 읽어 주자. 내부 원리를 알고 라이브러리를 사용하는 것과 모른 채로 사용하는 것은 많은 차이가 있다.
다음은 게임 학원의 정규 커리큘럼과 게임 공학과 커리큘럼을 통해 클라이언트 프로그래머가 되기 위한 실질적인 공부 순서를 알아보겠다. 각 단계별로 학습을 하는 데 있어 정해진 순서는 없다. 모두가 톱니바퀴처럼 맞물려서 상호작용한다
C / C++
프로그래밍 언어는 로직을 표현하는 데 있어 일종의 도구다. 이 도구를 잘 활용하기 위해 문법 숙지는 필수다. 문법 숙지가 됐다면 테트리스, 스네이크 게임 등 텍스트 기반 소규모 프로젝트를 통해 활용 능력을 키우는 게 좋다.
자료구조 / 알고리즘
자료구조란 자료를 효율적으로 이용할 수 있도록 컴퓨터에 저장하는 방법이다. 신중히 선택한 자료구조는 더 효율적인 알고리즘을 사용할 수 있게 한다. 각 게임에 맞게 자료를 구성하는 시스템을 만드는 일도 자료구조의 일종이다. 마찬가지로 게임에 맞는 로직을 구현하는 것도 알고리즘의 일종이다.
게임 기초 수학 / 물리
행렬, 벡터, 삼각함수, 가속도, 중력, 충돌처리 등 게임을 개발하는 데 있어 기초 수학 / 물리를 습득한다.
네트워크
클라이언트 프로그래머도 어느 정도의 서버 지식을 갖추어야 한다. 소켓프로그래밍의 기초를 습득해 방 입장 채팅 / 구현 수준의 능력을 갖춘다.
컴퓨터 / 시스템 구조
컴퓨터의 동작 원리를 알고 나면 컴퓨터 소프트웨어를 작성하는 데 많은 도움이 된다.
윈도우 API(or MFC)
윈도우 API를 사용해 윈도우 응용 프로그램을 만들 수 있다. 더는 텍스트 기반이 아닌 그래픽 기반의 2D 게임을 만들 준비가 완료된 것이다.
STL
STL은 컨테이너(Container, 자료구조) / 반복자 / 알고리즘 간의 협력에 기반을 둔 C++ 표준 템플릿 라이브러리다. 사실 현업에 있어 스택과 같은 자료구조를 직접 개발 하지는 않는다. 대게 표준을 쓴다.
디자인패턴
디자인패턴이란 프로그래밍을 하는 데 있어 특별한 상황에 이렇게 하는 게 좋더라 라고 패턴화된 내용이다. 즉, 어떤 상황의 문제에 대한 해법이다.
그래픽스 API
쉽게 말해서 DirectX다. DirectX의 API를 사용해 GPU 프로그래밍이 가능하다. 이것을 통해 실질적인 3D 게임 프로그래밍이 가능하다.
3D 공간에 대한 이해 / 선형대수학
행렬, 벡터 등 수학은 계속해서 필요하다. 가상세계에서 3D 물체가 어떻게 표현되는지에 대한 이해가 필요하다. 물체의 위치는 행렬 연산에 의해 표현되므로 선형대수학 지식또한 필요하다.
렌더링 파이프라인 / 셰이더
렌더링 파이프라인이란 가상 카메라에 비친 3차원 장면의 모습에 근거해서 2차원 이미지를 생성하는 데 필요한 인련의 단계들 전체를 뜻한다. 여기서 정점 셰이더 단계, 픽셀 셰이더 단계 등 셰이더 프로그래밍이 가능하다.
물리 라이브러리
PhysX, Bullet 등과 같은 3D 물리 라이브러리를 사용해보는 것도 많은 공부가 된다. 상용 엔진의 물리 시스템을 이용하는 데 큰 도움이 될것이다.(유니티, 언리얼 모두 PhysX를 사용한다.)
게임 시스템
게임 루프
입력 처리
충돌 처리
AI
렌더링...
등 포괄적인 것을 말한다. 간단하게나마 게임 프레임워크를 만들어 보는 것은 훌륭한 공부가 된다.
유니티, 얼리얼과 같은 상용 게임엔진을 학습
즉, 유니티와 언리얼과 같은 상용 게임엔진은 게임을 쉽게 개발할 수 있는 일종의 도구다. 학습 장벽이 높다는 이유로 기초지식을 수박 겉핥기 식으로 학습하고, 진입 장벽이 낮다는 이유로 유니티만 할 줄 아는 프로그래머는 스크립터다. 이러한 프로그래머는 실력이 안 되니 조금만 난이도가 올라가도 재대로 빌드를 하지 못하거나 최적화에 실패하고 자기가 만든 시스템이 디버깅이 안되는 등 문제해결능력이 극히 떨어지는 스크립터가 된다.
헬로앙
와 15년차이시면 직접 코딩하기 보단 관리자로 있으신거 아니신가요?
작성자
관리자도 아무나 하는 것이 아니어서요..ㅎ 사람관리, 문서관리, 정치능력등이 있어야 하는데 전 개발밖에 못해서요. 그리고 15년 경력도 요샌 널리고 널렸습니다.. 경력많다고 무조건 좋은 것도 아니고요~ 전 나이 어린 것이 가장 부럽습니다
학력봅니다
큰회사는 15년차 필드에서 뛰는분들 많습니다.
ㅌㄹㅇ
쓰신 것들을 다 해야 신입으로 들어가야하나요? 크고작게 공부해본 것들이긴한데 그래픽쪽은 아예 해본게 없네요..
작성자
작은 회사는 그냥 C#과 유니티 그리고 면접통과를 위한 자료구조알고리즘지식 조금만으로 취업하는 경우도 많습니다만, 좋은 프로젝트 진입을 위해서 위에 부분들을 슬슬 익혀야 합니다.
ㅌㄹㅇ
1. 큰 회사는 어느정도로 알아야 하나요? 요즘 특히 공부하면서 공부가 끝이 없는거같네요.. 2. 혹시 클라이언트로 들어가서 서버로 옮기는 경우도 많은지 궁금합니다
작성자
1. 저 위에 것에 대해서 다 공부하는 것은 좋지만 좀 좁힌다면, 첫번째는 C/C++을 깊이있게 이해하는 것이고 그다음에 다른 것 공부라고 생각합니다. 2. 클라하면서 자연스레 서버도 배우게 되기때문에 본인이 의지만 있다면 서버로 옮기는 것도 물론 가능합니다.
ㅇㅠㅇ
좋은 글 감사합니다. 나열해놓고 보니 정말 많아보이네요...
ㅌㄹㅇ
혹시 소년코딩 본인이신가요?
ㄴㅇㄴㅇㄴㄴㄴ
좋은말
ㅇㅋㅋㅋ
좋은 글 좋아요 박고 갑니다
CrunchBlue
너무 좋은 글이네요 쭉 읽어보면서 요새 그래픽스를 공부할 필요가 없고, 몰라도 상용 엔진만 사용할 줄 알면 된다고 하는 프로그래머들이 많은데 그분들이 이 글을 꼭 보았으면 좋겠습니다
qwo***
깔끔하게 잘 요약해주셨네요. 감사합니다. 몰랐던 것도 있어서 찾아보겠습니다.
출처 : http://www.gamejob.co.kr/Community/Talk/Detail?talk_Stat=12&idx=33077&page=1
'회사 > 게임잡' 카테고리의 다른 글
유니티 신입 클라이언트 프로그래머 포폴 조언 부탁드리겠습니다. (0) | 2023.08.01 |
---|---|
유니티로 RPG 게임 만들고 포트폴리오 문서만 남았는데.. (0) | 2023.08.01 |
게임 배포 사이트 뭐가 있을까요? (0) | 2023.08.01 |
게임 프로그래밍 공부에 대해 물어보는 분들 많은데 댓글은 한계가 있어 그냥 따로 적습니다. (0) | 2023.08.01 |
신입 게임 클라이언트 프로그래머 취업, 면접후기 (0) | 2023.08.01 |