
제목
스타트업 출신 8년 차가 털어놓는, 20년 된 레거시 코드 심폐소생술 비공개 기록
본문
대기업으로 이직하고 나니 참 좋습니다. 잘 갖춰진 인프라, 빵빵한 복지, 체계적인 코드 리뷰... 그런데 가끔은 몸이 근질거립니다.
맨땅에 헤딩하며 밤새 삽질하던 그 '야생성'이 그리울 때가 있거든요.
최근에 그 야생 본능을 강제로 깨운 사건이 하나 있었습니다. 회사 업무는 아니고, 아버지의 '생업'이 걸린 문제였습니다.

저희 아버지는 타일 시공 전문가십니다. 설계할 때 'TileCreatorPro'라는 프로그램을 쓰세요. 2000년대 초반에 나온, 지금 보면 아주 투박한 물건이죠.
문제는 아버지가 컴퓨터를 윈도우 10으로 업그레이드하면서 터졌습니다. 잘 돌아가던 프로그램이 라이선스 키를 뱉어내며 먹통이 된 겁니다.
개발사인 'ThoughtFishMedia'요? 이미 망했습니다. 도메인은 팔렸고, DNS는 끊겼더군요.
전형적인 'Abandonware(버려진 소프트웨어)'가 된 겁니다.
아버지는 발을 동동 구르시고, 개발자 아들내미가 가만히 있을 수 있나요.
일단 바이너리(Binary)부터 뜯었습니다.
맥북 터미널을 열고 strings 명령어를 때려 박았죠.
지푸라기라도 잡는 심정으로 텍스트 덤프를 훑다 보니, 자매품인 'BeadCreatorPro'라는 단어가 보였습니다.
구글링 끝에 기적적으로 'Bryce'라는 옛 개발자와 연락이 닿았습니다! (이때만 해도 해피엔딩인 줄 알았습니다.)
Bryce가 새 시리얼 키를 보내줬고, 한동안은 잘 썼습니다. 그런데 2년 뒤, 아버지가 GPU를 교체하자마자...
또다시 라이선스가 깨졌습니다. PC-ID(하드웨어 고유값)가 바뀌었거든요. 이번엔 Bryce도 답장이 없습니다. 진짜 잠수를 탄 거죠.

이제 방법은 하나뿐입니다. "직접 뚫는다."
백엔드 개발 8년 차지만, 리버스 엔지니어링은 제 전문 분야가 아닙니다. 솔직히 말해, 막막했습니다. '내가 이걸 할 수 있을까?' 하는 두려움도 있었고요.
하지만 아버지는 당장 클라이언트에게 보여줄 도면이 필요했습니다. 비즈니스 임팩트(Business Impact)가 이보다 확실한 프로젝트가 어디 있겠습니까?
도구들을 챙겼습니다.
- Binary Ninja: Ghidra보다 UI가 친절해서 골랐습니다.
- Quickemu: 맥북에서 윈도우 환경을 빠르게 돌리기 위해 사용했습니다.
퇴근 후 늦은 밤, 화려한 IDE 대신 투박한 디버거를 켜고 어셈블리 코드의 미로 속으로 들어갔습니다.
목표는 단 하나. '도대체 이 망할 놈의 Magic Number(PC-ID)는 어디서 생성되는가?'
함수 이름을 하나하나 추측해서 바꿔가며 로직을 파헤쳤습니다.
calls_busted_with_cb 같은 웃긴 이름도 붙여가면서요.
이 삽질의 과정에서 제가 뼈저리게 느낀 게 하나 있습니다.
우리는 매일 최신 기술을 논합니다. MSA, Kubernetes, AI Agent, LLM... 화려하고 멋진 기술들이죠.
하지만 때로는 20년 묵은 레거시 코드 한 줄을 고치는 게 누군가에게는 세상에서 가장 중요한 가치가 될 수 있습니다.
기술의 본질은 결국 '문제 해결'이니까요.
비록 냄새나는 레거시 덩어리였지만, 그 안에는 치열하게 고민했던 과거 개발자의 흔적이 있었고 그걸로 생계를 꾸려가시는 아버지의 땀이 있었습니다.
혹시 지금 다루고 있는 레거시 코드(Legacy Code)가 지긋지긋하신가요? 그 코드가 지금 회사의 매출을 만들고 있다는 사실을 기억해 주세요.
가끔은 이렇게 밑바닥까지 내려가서 기계어와 씨름해 보는 것도 나쁘지 않습니다. 개발자의 '맷집'은 이런 진흙탕 싸움에서 길러지니까요.
오늘도 트래픽과 씨름하고 계실 모든 동료 개발자분들, 존경하고 응원합니다.
우리, 끈질기게 살아남읍시다.


