
영수증 프린터로 게임을 돌린다고? 쓸모없지만 위대한 삽질의 미학
영수증 프린터로 게임을 돌리는 엉뚱한 프로젝트를 통해 효율성 너머에 있는 개발의 본질적인 재미와 창의적 문제 해결에 대한 영감을 공유합니다.
김영태
테크리드

안녕하세요. 풀링포레스트 테크리드 김영태입니다.
개발자로 8년 정도 살다 보니, 가끔은 "이게 대체 무슨 의미가 있지?" 싶은 프로젝트에 눈길이 갑니다. 매일 트래픽과 싸우고, 0.1초의 레이턴시를 줄이려 데이터베이스 쿼리를 튜닝하다 보면 가끔 숨이 막힐 때가 있거든요. 그럴 때마다 저를 환기시켜 주는 건 거창한 아키텍처 이론서가 아니라, 누군가의 엉뚱하고 집요한 '삽질'입니다.
오늘 우연히 유튜브 알고리즘이 저를 이끌어 도착한 곳은 바로 "영수증 프린터에서 게임하기"라는 영상이었습니다. 네, 여러분이 식당이나 카페에서 흔히 보는 그 감열식 영수증 프린터 맞습니다.
처음 제목을 보고는 헛웃음이 나왔습니다. "아니, 굳이 왜?"라는 생각이 먼저 들었죠. 하지만 영상을 클릭하고 나서는 묘한 전율을 느꼈습니다. 오늘은 이 기가 막힌 프로젝트를 통해 우리가 잊고 지내던 개발의 본질적인 재미에 대해 이야기해 보려 합니다.
왜 하필 영수증 프린터였을까?
일반적인 디스플레이 장치는 픽셀을 빛으로 표현합니다. 하지만 영수증 프린터는 종이에 열을 가해 점을 찍는 방식이죠. 리프레시율(Refresh Rate)이란 개념 자체가 무색합니다. 프레임이 바뀔 때마다 종이가 물리적으로 밀려 나와야 하니까요. 게임 화면을 출력하려면 엄청난 양의 영수증 용지가 실시간으로 쏟아져 나와야 한다는 뜻입니다.
기술적으로 보면 제약사항 투성이입니다.
대역폭의 한계: 프린터 포트는 고속 데이터 전송을 위해 설계되지 않았습니다.
물리적 속도: 헤드가 열을 가하고 종이를 밀어내는 속도가 초당 프레임(FPS)을 결정합니다.
해상도: 흑백(1비트)인 데다 해상도도 극도로 낮습니다.
이 개발자는 이 모든 제약을 '극복해야 할 버그'가 아니라 '즐겨야 할 챌린지'로 받아들였습니다. 드라이버를 직접 건드리고, 이미지를 디더링(Dithering) 처리하여 흑백으로 변환하고, 시리얼 통신을 최적화해 프린터가 감당할 수 있는 최대 속도로 데이터를 밀어넣습니다.

우리가 '효율'이라는 이름으로 잃어버린 것들
풀링포레스트에서 일하며 저는 항상 '효율성'을 최우선 가치로 둡니다. "이 코드가 비즈니스에 어떤 임팩트를 주나요?", "이 인프라 구조가 비용 대비 효율적인가요?" 주니어 분들의 PR을 리뷰할 때 자주 하는 말들이죠. 물론 프로라면 당연히 따져야 할 문제입니다.
하지만 가끔은 너무 정답만 찾으려다 보니, 문제를 해결하는 과정 자체의 즐거움을 잃어버린 건 아닌가 싶습니다. 영수증 프린터로 게임을 하는 건 비즈니스 관점에서 보면 최악의 비효율입니다. 종이 낭비에, 전기 낭비에, 시간 낭비죠.
그러나 기술적 관점에서는 엄청난 창의력의 산물입니다. 제한된 리소스(프린터 버퍼)를 관리하고, 하드웨어 인터페이스를 밑바닥까지 이해해야 가능하기 때문입니다. 저도 신입 시절엔 라즈베리 파이에 LED 몇 개 연결해 놓고 불 들어오게 하려고 밤을 새우던 때가 있었습니다. 그때는 "이걸로 돈을 벌어야지"가 아니라 "와, 내가 짠 코드가 현실 세계를 움직이네!"라는 순수한 기쁨이 원동력이었죠.
쓸모없음이 주는 영감
이 프로젝트를 보며 문득 지난주에 겪었던 트러블슈팅 하나가 떠올랐습니다. 레거시 시스템의 로그 수집 파이프라인이 자꾸 막히는 문제였는데, 처음엔 단순히 서버 스펙을 올리려고(Scale-up) 했습니다. 그게 가장 '효율적'이고 빠른 해결책이니까요.
하지만 이 '영수증 프린터' 영상을 보고 난 뒤라 그랬을까요? 조금 다르게 접근해 보고 싶어졌습니다. "무조건 늘리는 게 능사가 아니라, 현재 파이프라인의 병목이 정확히 어디인지 데이터를 바이트 단위로 쪼개서 분석해보자"라는 생각이 들더군요.
결국 로그 포맷을 바이너리로 압축하고 불필요한 메타데이터를 쳐내서, 서버 증설 없이 트래픽을 처리해냈습니다. 영수증 프린터의 좁은 대역폭을 통과하기 위해 데이터를 쥐어짜던 그 개발자의 모습에서 힌트를 얻은 셈입니다. 겉보기엔 쓸모없는 장난감 프로젝트가 실무의 중요한 문제를 해결하는 열쇠가 된 것이죠.
마치며: 가끔은 딴짓도 필요합니다
여러분도 가끔은 업무와 전혀 상관없는, "이게 무슨 의미가 있어?" 싶은 토이 프로젝트를 해보셨으면 합니다.
최신 GPU가 달린 서버에서 AI 모델을 돌리는 것도 멋지지만, 10년 된 구형 노트북이나 아두이노 같은 제약된 환경에서 코드를 돌려보는 경험은 우리에게 '리소스에 대한 겸손함'과 '밑바닥 원리에 대한 이해'를 선물해 줍니다.
영수증 프린터로 게임을 돌리는 건 미친 짓 같지만, 그 과정에서 얻은 시리얼 통신 노하우나 이미지 처리 알고리즘은 언젠가 예상치 못한 순간에 여러분을 구원할지도 모릅니다. 무엇보다, 재밌잖아요? 개발자가 코딩이 재밌으면 된 거죠.
오늘 퇴근하고 나면 집에 굴러다니는 안 쓰는 기계가 있나 한번 찾아봐야겠습니다. 저도 오랜만에 '의미 없는' 삽질을 좀 해보고 싶어 졌거든요.
감사합니다.


