0. 서론

많은 개발자들의 블로그를 보면 연말에 회고록을 작성하는 것을 볼 수 있다. 일 년의 마지막, 자신(또는 자신의 프로젝트)을 돌아보며 한 해를 정리하는 글들을 보며 나도 한 번 회고록을 작성해 볼까 하는 생각이 들었지만, 과연 2021년에 내가 돌아볼 수 있을 만한 일들을 했는지 의심스러웠다. 정확히는 회고할 만한 목표들이 있었는지가 의심스러웠던 것이다.

지금까지 나는 썩 계획적인 삶을 살아오진 않았다. 구체적인 계획을 세우고 움직이기보다는 일단 가슴이 시키는 일들을 먼저 해 나가는 삶을 살았는데, 좋아하거나 흥미로운 일들을 해 나가는 것은 끊임없는 원동력을 제공한다는 장점이 있었지만 균형 있는 성장을 이루는 데에는 단점으로 작용하기도 했고 무엇보다 내 ‘전체적인’ 삶을 돌아볼 수 없게 하는 요인이 되기도 했다. 그래서 올해는 너무 구체적이진 않더라도 한 해의 계획을 간단히 세워 보고 연말의 나에게 뒤를 돌아볼 기회를 주고자 한다.

우선 계획을 세우기 이전에.. 나는 무언가를 학습할 때 이론과 실전을 분리시켜 바라보는 경향이 있다. 필요한 모든 지식을 공부한 후에 무언가를 만든다는 뜻인데, 지식이 잘 정리된 채로 습득된다는 장점은 있지만 정작 실제적인 경험을 할 기회가 부족해지고 경험을 하게 되더라도 배워 왔던 이론과 괴리되는 동작들이 발생할 때 이를 잘 해결하지 못하는 경우가 잦았다.

그래서 이번 한 해에는 프로젝트 단위로 계획을 세우고 프로젝트의 진행과 이론 습득을 하나의 사이클처럼 진행해 볼까 한다.

1. 목표

올해의 프로젝트는 다음을 선정했다.

  • 소프트웨어 래스터라이저
  • C++ 소켓 기반 채팅 서버
  • DirectX 기반 렌더링 엔진
  • 3D 네트워크 슈팅 게임

사실 2021년에도 그저 마음 가는 대로만 공부했다기보다는, 학교에서 지금까지 배웠던 이론 지식들(컴퓨터구조, 운영제체, 자료구조, 알고리즘 등)을 탄탄하게 다시 다지자는 큰 목표를 기반으로 공부해 왔다. 작년에 익힌 기반 지식들을 바탕으로 이제는 본격적으로 구상하던 것들을 하나씩 만들어 볼까 한다.

1.1. 소프트웨어 래스터라이저(Software Rasterizer)

소프트웨어 래스터라이저는 컴퓨터그래픽스에 관심이 있는 사람들이라면 한 번쯤 구현해 보는 프로젝트이다. 아마 WinAPI나 DirectDraw(엄밀히 말하면 DDraw는 하드웨어 가속-VRAM에 직접적으로 상호작용-을 할 수 있기 때문에 목적과는 거리가 멀어 안 쓸수도..)정도만을 이용할 것 같다. 제일 중요한 재료는 컴퓨터그래픽스에 대한 이해와 수학 지식일 것이다.

1.2. C++ 소켓 기반 채팅 서버

항상 막연히 관심만 가지던 네트워크에 대한 프로젝트도 한번 진행해 보고자 한다. 채팅 서버는 다양한 언어로 구현할 수 있지만(파이썬으로 이미 구현해 본 경험이 있다) MMO 게임 서버에서 주로 사용하는 C++과 소켓 프로그래밍 지식을 통해 채팅 프로그램을 한번 구현해 보는 것도 좋을 것 같아 선정했다. 이 프로젝트를 통해 C++에 대한 확고한 지식과 네트워크 이론, 소켓 프로그래밍 지식을 쌓을 수 있었으면 좋겠다.

1.3. DirectX 기반 렌더링 엔진

1학년에는 막연히 게임 개발이 재미있고 멋진 일이라는 걸 알게 되었고, 2학년 때 Unity 클라이언트 제작을 공부하면서 게임 클라이언트 개발을 접하게 되었는데, 클라이언트 개발(게임 로직 구현)보다는 엔진의 스크린에 비춰지는 오브젝트 그 자체에 관심이 생겼다. 그 후로 컴퓨터그래픽스에 대한 흥미와 막연한 동경(?)을 가지게 되었고 게임 개발 + 컴퓨터그래픽스 = 게임 엔진 개발자라는 꿈을 가지게 되었다.

3D 그래픽스를 맛보며 OpenGL을 이용해 본 경험은 있지만 Direct3D를 이용해 본 적은 없다. 더욱이 게임 제작에 실제 사용 가능한 렌더링 엔진은 작성해 본 경험이 없다. 렌더링 엔진 제작을 통해 게임 엔진 개발자로의 목표에 다가가고, 엔진 개발자가 아닌 다른 선택을 하게 되더라도 DirectX는 게임 개발자라면 한 번쯤 경험해 볼 필요가 있다고 생각하기에 그러한 경험을 쌓을 수 있기를 기대한다.

1.4. 3D 네트워크 슈팅 게임

솔직히 올해 안에 이 프로젝트까지 완성할 수 있을 것 같진 않지만… 만약 위의 세 프로젝트를 모두 성공한다면 직접 만든 렌더링 엔진과 소켓 프로그래밍 지식을 바탕으로 멀티플레이 게임을 만들어 보고 싶다. 이 프로젝트는 위의 세 프로젝트와 달리 여러 사람과 함께 진행해 보고 싶다. 복학하게 되면 속한 게임 개발 동아리에서 협업 프로젝트를 진행할 수야 있겠지만, 대학 동아리 특성상 일정에 쫓기거나 일부 개발 일정이 증발(시험기간 ㅠ)하게 되기도 하고, 개발 플랫폼이 고정되게 되는데(Unity) 그러한 걱정 없이 집중적인 개발이 가능할 것 같기 때문이다.

2. 결론

올해 어떤 일이 일어날지는 잘 모르겠지만 일단 심심할 걱정은 안 해도 될 것 같다. 올해는 꼭 연말에 회고록을 쓰면서 성장한 나를 되돌아볼 수 있었으면 좋겠다. ~혹시나 이 글을 읽는 분이 계시다면 새해 복 많이 받으시길 바랍니다!