코딩 참 어렵습니다. 컴퓨터로 배우는 외국어라는 말이 있을 정도로 그 고유한 체계를 이해하는데 참 오랜 시간과 노력이 들어가죠. 그런 와중에 점점 그 위상은 높아져 키즈 코딩이 유행할 정도입니다. 개발자가 아닌 이도 새삼 다시 코딩을 배워야 하나 싶은 고민에 빠질 정도죠.

복잡한 수식, 꼬이고 또 꼬이는 알고리즘, 어려운 건 한두가지가 아닙니다. 하지만 그중에서도 가장 힘든 건, '언어'가 나뉜다는 점이죠. '이곳'에 적용되는 게 다르고, '저곳'에 적용되는 게 또 다르니 개발자 입장에선 진이 빠지기 마련입니다.

최근 유니티는 그런 개발자들에게 단비와 같은 소식을 전해왔습니다. 언어간의 전환을 자유롭게 만들어주는 '버스트 컴파일러'와 그 근간이 되는 DOTS를 통해 개발자에게 새로운 청사진을 제시했죠. 과연 유니티가 바라보는 프로그래밍의 미래는 무엇일까요? 유니티 수석 엔지니어 마이크 액톤(Mike Acton)과의 인터뷰를 통해 전해드립니다.





▲ 유니티 수석 엔지니어 마이크 액톤

Q. 간단한 자기소개 부탁한다.

유니티 버뱅크 스튜디오에서 일하고 있는 수석 엔지니어 마이크 액톤이다. DOTS 개발을 담당하고 있다.


Q. DOTS, 약간 생소한 용어인데 독자들을 위해 설명해줄 수 있을까?

DOTS(Data-Oriented Technology Stack)는 데이터에 보다 깊은 이해를 기반으로 이루어지는 엔지니어링 방식이다. 이를 활용해 에너지 소비와 퍼포먼스에서 보다 좋은 효율을 이끌어내는 것이 우리의 목적이다. 어떤 디바이스에서든 최고의 효율을 뽑아낼 수 있는 것을 추구하고 있다.


Q. DOTS가 에너지 소비와 퍼포먼스의 효율을 높일 것이라고 언급했다. 정확한 수치를 얘기해줄 수 있는가?

정확한 수치를 이야기하려면 특정 문제와 그것이 내포한 한계에 대한 깊은 이해가 필요하다. 먼저 대략적으로 설명하자면, 오브젝트 중심에서 데이터 중심으로 옮겨가면, 줄어든 낭비로 인해 대략 열배 정도 빨라진다. JIT-compiled C#을 거쳐 유니티의 HPC#과 버스트 컴파일러로 옮겨오면 추가적으로 몇배 정도 더 빨라질 수도 있다. 결과적으로 최적화에 대한 다양한 접근 방식과 기회를 제공함으로써, 과거에 비해 몇배 가량 향상된 퍼포먼스를 볼 수 있을 것이다.

에너지 소비량은 기본적으로 메모리 액세스에 비례한다. 즉, 퍼포먼스가 개선되면 에너지 효율 역시 높아지게 된다. 물론, 지나치게 많은 새로운 기술 및 특징들을 퍼포먼스에 추가하지 않는다는 전제하에서 위의 명제가 성립된다.


Q. DOTS, 아키텍쳐 간 퍼포먼스 차이가 있는가?

당연하다. 모든 하드웨어는 동일하지 않고, 우리는 이 사실을 숨기려하지 않는다. 반대로, 우리는 이 사실을 오히려 조명하여 개발자들이 어떤 하드웨어를 선택할지에 대한 고민을 덜어주려 한다. 말했듯이, 우리는 개발자들이 어떤 하드웨어를 선택해도 최상의 결과를 낼 수 있도록 돕고자 한다.



Q. 멀티스레딩 문제는 게임 업계에서 꽤나 핫한 이슈다. 유니티가 이를 DOTS로 어떻게 해결했는지 궁금하다.

사실부터 말하자면, 멀티 스레드 프로그래밍 문제는 현재까지 해결되지 않았다. 이 분야의 전문가는 정말 극소수고, 대부분의 개발자는 현재 프로그래밍 모델이 갖고있는 멀티 스레딩 문제에 대한 이슈를 피하기 일쑤다.

사실, 이는 코드 중심의 문제로 알려져 왔다. 현재 우리가 하고 있는 건, 개발자들에게 데이터 액세스 기반으로 피드백을 부여하는 것이다. 이를 통해 개발자들이 현재의 이슈를 쉽게 알아낼 수 있도록 돕는 것이 목적이다. 특히, 오늘날 전문가가 아닌 이들도 우리의 타입 액세스 보안 시스템을 통해 실제 상품에 이를 적용하고, 멀티 스레딩을 어떻게 활용하는지 배울 수 있는 기회를 제공하고자 한다.

팀원 중 한명이라도 멀티 스레딩 시스템에 대해 깊은 이해를 갖추는 것이 중요하다. 이는 주변 개발자들과 후발주자들의 부담을 한결 낮춰주게 되며, 결과적으로 게임 산업 전반에 전문가가 양성되도록 돕는다.


Q. 버스트 컴파일러에 대한 자세한 설명도 부탁한다.

버스트 컴파일러는 HPC# 코드를 다른 기존 플랫폼에서 실행가능한 코드로 바꿔주는 컴파일러다. 꽤나 전통적인 방식의 컴파일러로 보이지만, 일반적인 목적에서는 사용되지 않는다.

버스트 컴파일러의 가장 큰 장점은 DOTS의 일부분이라는 것이다. 그 덕에 우리의 수학 라이브러리, 컨테이너, 메모리 액세스 패턴 등에 접근할 수 있다. C++ 프로그래머는 그들의 반복 수행 코드가 몇배 가량 증가한 것을 발견하고 기뻐할 것이다. 유니티의 편집과 플레이 사이의 짧은 사이클은 DOTS와 버스트 컴파일러의 핵심적인 특징이다.


Q. 궁극적으로 엔진 코드와 게임 코드 간의 경계가 사라진다면, 어떤 변화를 불러올 것이라 생각하나?

나는 개발자들이 유니티를 활용해 이전에는 불가능했던 다양한 콜라볼레이션이 이루어질 것으로 본다. 개발자들은 이제 시스템의 적합성 등을 일일이 따질 필요 없이 아주 간단하고 완벽하게 시스템을 활용할 수 있기 때문이다.