한빛출판네트워크

기획연재

맨땅에 헤딩하지 않는 소프트웨어 구조 만들기

한빛미디어

|

2016-04-27

by 로버트 나이스트롬

초등학교 5학년 때 나는 다른 친구들과 함께 굉장히 낡아빠진 TRS-80 컴퓨터가 몇 대 있는 교실을 써도 된다는 허락을 받았다. 선생님은 우리가 컴퓨터를 배우는 데 도움이 되었으면 하는 마음에 우리가 손볼 수 있는 간단한 베이식(BASIC) 프로그램 코드가 적힌 인쇄물을 구해다 주셨다.

 

TRS-80의 카세트 드라이브가 고장 나 있었기 때문에, 뭔가를 실행하려면 코드를 매번 처음부터 입력해야 했다. 그러다 보니 보통은 이런 식으로 몇 줄 안 되는 코드만 입력하곤 했다.

 

10 PRINT "나는 짱이다!!!"
20 GOTO 10

 

이런 환경에서 프로그래밍하는 것은 어려움투성이였다. 프로그래밍을 모르다 보니 사소한 구문 오류 하나에도 절절맸다. 프로그램이 동작하지 않으면(종종 그랬다), 처음부터 다시 짜야 했다.

 

선생님이 준 인쇄물 맨 뒤에는 빽빽한 코드를 여러 장 입력해야 하는 무시무시한 소스 코드가 실려 있었다. 한동안은 보기만 해도 숨이 막혀서 시도해볼 엄두가 나지 않았다. 하지만 거기 적힌 터널 앤 트롤Tunnels  and Trolls이라는 제목에 너무나 끌렸다. 뭐 하는 프로그램인지는 몰랐지만, 게임 같아 보였다. 내가 직접 코딩한 컴퓨터 게임이라니! 이보다 멋진 게 어디 있을까?끝내 한 번도 그 프로그램을 실행해보지 못한 채 1년이 지나갔고, 컴퓨터 수업도 끝이 났다. (한참 뒤에 베이식을 좀 배운 뒤에야, 그 코드가 실제 게임이 아니라 TRPG 터널 앤 트롤 에서 사용할 캐릭터 생성기라는 걸 알게 되었다.) 어쨌거나 주사위는 던져졌다. 그날 이후 내 장래 희망은 게임 프로그래머가 되었다.

 

10대 때 부모님이 퀵베이식QuickBASIC과 THINK C 가 설치된 매킨토시를 사주셨다. 여름방학 이 되면 온종일 이런저런 게임을 만들면서 놀았는데 혼자 배우면서 만들다 보니 오래 걸리고 잘 되지도 않았다. 게임 맵 화면이나 간단한 퍼즐 같은 건 만들기 쉬웠지만  프로그램 규모가 커질수록 점점 만들기 어려워졌다.

 

처음에는 뭔가를 돌아가게 만드는 것만으로도 벅찼다. 나중에는 한 번에 다 파악하기 어려울 정도로 규모가 큰 프로그램을 어떻게 작성할지가 문제가 되었다. 그 후로는 'C++ 배우기' 같은 기본서보다는 프로그램 구조를 다루는 책을 찾았다.

 

몇 년 후, 한 친구 가 『GoF의 디자인 패턴』(프로텍미디어, 2015)이란 책을 건네주었다. 이것이야말로 어렸을 때부터 찾던 책이었다. 앉은 자리에서 바로 끝까지 읽어버렸다. 지금도 프로그래밍을 하면서 어려움이 많지만, 당시 나는 남들 역시 같은 문제로 고민하다 해결책을 발견해냈다는 사실을 알게 되어 크게 위안을 받았다. 마침내 맨손이 아니라 쓸 만한 도구를 손에 쥔 듯한 기분이었다.

 

2001년 마침내 꿈의 직장이었던 일렉트로닉 아츠(EA)에 소프트웨어 엔지니어로 들어갔다. 실제 게임 내부며, 대가들이 만든 코드를 볼 수 있을 거라는 생각에 잠이 오지 않았다. 매든 NFLMadden Football 시리즈 같은 거대한 게임의 아키텍처는 어떻게 되어 있을까? 서로 다른 시스템들이 어떻게 상호작용할까? 한 코드베이스에서 멀티 플랫폼 게임을 어떻게 만들어낼까?

 

 

▲매든 NFL 시리즈  / © 2016 Electronic Arts Inc.

 

처음 소스 코드를 열어보고는 말문이 막힐 정도로 놀랐다. 그래픽스, 인공지능, 애니메이션, 시각적 연출 면에서 훌륭한 코드가 가득했다. EA 개발자들은 어떻게 하면 CPU 성능을 최대한 쥐어짤 수 있는지를 잘 알고, 이를 잘 활용하고 있었다. 나로서는 어떻게 해야 할지 감도 오지 않는 일을 점심시간 전에 끝내버릴 정도였다

 

하지만 이런 훌륭한 코드들은 임기응변식 구조에 얽혀 있었다. 기능 구현에 너무 집중하다 보니, 구조는 대강 만들어놨다. 모듈 사이에는 커플링이 수두룩했고, 새로운 기능을 위한 코드는 되는 대로 추가해놨다. 콩깍지가 벗겨진 눈으로 봤을 때, EA의 많은 프로그래머들은 『GoF의 디자인 패턴』을 한 번도 펼쳐보지 않았거나 읽었다 한들 [[싱글턴 패턴]]에서 책을 덮은 것 같았다.

 

물론 그렇게까지 엉망은 아니었다. 입사 전에는 게임 프로그래머들이 화이트보드로 둘러싸인 상아탑 같은 데 앉아서, 구조와 관련된 세부사항들을 몇 주 동안 계속해서 조곤조곤 토론할 거라고 생각했었다. 하지만 실제로는 빡빡한 마감에 쫓겨가면서 코드를 작성하고 있었다. 그들은 힘든 상황에서도 최선을 다했고, 그렇게 만든 코드가 대부분 굉장히 훌륭하다는 걸 점점 알게 되었다. 개발을 하면 할수록, 겉모습 아래 숨어 있는 코드의 훌륭함을 발견할 수 있었다.

 

문제는 정말로 '숨어 있는' 경우가 많았다는 점이다. 코드 더미 안에 훌륭한 코드가 여기저기 숨어 있었지만, 대부분은 전혀 모르고 있었다. 팀 동료들이 자기가 작업하는 코드베이스에 원하는 해결책이 이미 있음에도 그걸 보지 못하고 다시 만드느라 낑낑대는 모습을 여러 번 보았다.

 

이 책을 통해 이런 문제를 해결하고 싶었다. 지금까지 게임 코드에서 발견한 최고의 패턴들을 찾아내 다듬어 여기에 실었다. 이를 통해 이미 있는 해결책을 다시 개발하기보다, 진짜 새로운 걸 만드는 데 시간을 투자할 수 있기를 바란다.
TAG :
댓글 입력