🚀 2026 스타트업 컨퍼런스

출시 3일 전 발견된 치명적 오타, 그리고 전설적인 픽셀 깎기

출시 3일 전 발견된 치명적 오타, 그리고 전설적인 픽셀 깎기

김현수·2026년 1월 4일·2

출시 3일 전 발견된 치명적 오타를 해결하기 위해 가일 캐릭터의 종아리 픽셀까지 동원했던 '스트리트 파이터 2' 개발진의 기발한 엔지니어링 실화를 소개합니다.

개발자로 일하다 보면 누구나 한 번쯤은 등골이 서늘해지는 순간을 마주합니다. 배포 직전에 치명적인 버그를 발견하거나, 이미 운영 서버에 나간 코드에서 오타를 발견했을 때의 그 아찔함은 10년 차가 된 지금도 적응하기 힘듭니다. 오늘은 우리가 너무나 잘 아는 고전 명작, ‘스트리트 파이터 2’의 개발 비화를 통해 그 시절 엔지니어들이 겪었던 극한의 위기 상황과 기발한 해결책에 대해 이야기해 볼까 합니다. 요즘처럼 핫픽스(Hotfix) 한 번이면 해결되는 시대가 아니었기에, 이들의 고군분투는 더욱 경이롭게 다가옵니다.

사건은 전설적인 게임 ‘스트리트 파이터 2’의 출시를 불과 3일 앞둔 시점에 벌어졌습니다. 리드 그래픽 디자이너였던 아키만(Akiman)은 마스터 업 직전, 게임의 부제인 ‘World Warrior’의 철자가 ‘World Warrier’로 잘못 표기된 것을 발견했습니다. 단순한 텍스트 수정이라고 생각할 수 있지만, 당시 아케이드 게임기의 하드웨어 구조를 이해하면 이것이 얼마나 절망적인 상황인지 알 수 있습니다. 이 게임이 구동되는 CPS-1 기판은 그래픽 데이터가 담긴 GFX ROM과 프로그램 코드가 담긴 명령어 ROM이 물리적으로 분리되어 있었습니다. 이미 그래픽 ROM은 생산 공정에 들어가 ‘구워진(Burned)’ 상태였기에, 픽셀 자체를 수정하는 것은 불가능했습니다.

쉽게 말해, 인쇄소에서 책을 이미 다 찍어낸 상태에서 오타를 발견한 것과 같습니다. 남은 방법은 페이지의 순서를 바꾸거나, 오려 붙이는 것뿐이었죠. 아키만은 포기하지 않고 이미 존재하는 그래픽 타일(Tile)들을 조합해 오타를 수정하기로 마음먹었습니다. 그는 먼저 앞 단어인 ‘World’에서 ‘or’에 해당하는 타일들을 복사해 뒤쪽의 잘못된 ‘er’ 자리에 덮어씌웠습니다. 하지만 여기서 또 다른 문제가 발생했습니다. ‘World’의 ‘W’ 글자 형태 때문에 가져온 타일이 미묘하게 어긋나면서, ‘Warrior’가 아닌 ‘Warrlor’처럼 보이게 된 것입니다. 이제 ‘l’의 윗부분을 잘라내어 ‘i’의 점처럼 보이게 만들어야 하는 난제에 봉착했습니다.

여기서 등장한 해결책이 정말 기가 막힙니다. 픽셀을 새로 찍을 수 없는 상황에서 개발진은 게임 내의 다른 모든 스프라이트를 뒤지기 시작했고, 가일(Guile) 캐릭터의 종아리 부분에서 해답을 찾았습니다. 가일의 타일 중 하나(0x96번)는 거의 투명하고 왼쪽 구석에 딱 1픽셀만 색이 칠해져 있었습니다. 개발진은 이 ‘1픽셀짜리 타일’을 덧칠용 수정테이프처럼 사용하기로 했습니다. 하지만 가일의 색상은 초록색 계열이었고, 로고는 파란색이었습니다. 초록색 점을 그대로 붙이면 티가 날 수밖에 없었죠.

이때 엔지니어링의 묘미가 발휘됩니다. 팔레트(Palette) 시스템을 제어하는 코드는 아직 수정이 가능했습니다. 개발진은 가일의 초록색 팔레트와 로고의 파란색 팔레트 인덱스를 비교 분석했습니다. 그리고 가일의 타일을 불러오되, 로고의 파란색 팔레트를 적용하여 렌더링하도록 코드를 짰습니다. 이렇게 색상을 변조한 1픽셀짜리 타일을 ‘l’ 글자 위에 교묘하게 세 번 겹쳐 찍음으로써(Draw calls), 마치 ‘l’의 윗부분이 잘려 나간 것처럼, 그리고 ‘i’의 점이 찍힌 것처럼 보이게 만드는 데 성공했습니다. 256개의 픽셀 중 255개를 투명으로 날리는 비효율적인 방식이었지만, 출시 3일을 앞둔 시점에서는 이것이 최선의 ‘트러블슈팅’이었습니다.

오늘날 우리는 너무나 편리한 환경에서 개발하고 있습니다. 문제가 생기면 클라우드 환경에서 즉시 롤백하거나 패치를 배포하면 그만입니다. 하지만 가끔은 이렇게 제약이 극심했던 시절의 이야기를 되새길 필요가 있습니다. 완벽한 코드가 아니라, 주어진 환경과 자원 안에서 어떻게든 문제를 해결해 내는 집요함, 그것이야말로 엔지니어의 가장 중요한 덕목이 아닐까 싶습니다. 혹시 지금 풀리지 않는 버그 때문에 막막하신가요? 가일의 종아리 픽셀 하나로 전 세계를 구했던 선배 개발자들의 기지를 떠올리며, 커피 한 잔 마시고 다시 한번 모니터를 들여다보시길 바랍니다. 해결책은 의외로 아주 가까운 곳에 있을지도 모릅니다.

김현수
김현수10년 차 시니어 개발자

SI의 척박한 땅에서 시작해 빅테크의 대규모 트래픽까지 경험한 생존형 개발자입니다. '화려한 기술'보다 '퇴근을 보장하는 안정성'을 신봉하며, 주니어들의 삽질을 방지하기 위해 펜을 들었습니다.

김현수님의 다른 글

댓글 0

첫 번째 댓글을 남겨보세요!