POOOLING FOREST
13년 된 씽크패드를 24시간 스트리밍 서버로 되살린 이야기 - 13년 된 2011년형 씽크패드를 배치 스크립트 하나로 24시간 스트리밍 서버로 되살린 프로젝트를 통해, 엔
Engineering & Tech

13년 된 씽크패드를 24시간 스트리밍 서버로 되살린 이야기

13년 된 2011년형 씽크패드를 배치 스크립트 하나로 24시간 스트리밍 서버로 되살린 프로젝트를 통해, 엔지니어링의 본질과 문제 해결을 위한 유연한 태도를 조명합니다.

김영태

테크리드

안녕하세요. 풀링포레스트 테크리드 김영태입니다.

개발자로 일하다 보면 최신 기술 스택에 매몰되기 쉽습니다. 쿠버네티스(Kubernetes)로 컨테이너를 관리하고, 테라폼(Terraform)으로 인프라를 코드화하는 멋진 세상에 살고 있으니까요. 하지만 가끔은 아주 원초적이고 투박한 기술이 가장 강력한 해결책이 될 때가 있습니다. 오늘은 최근 깃허브에서 발견한 아주 흥미로운 프로젝트 하나를 소개하며, 우리가 '레거시(Legacy)'라고 부르는 낡은 시스템을 다루는 태도에 대해 이야기해보고자 합니다. 바로 2011년산 씽크패드(ThinkPad)를 24시간 스트리밍 서버로 굴리는 이야기입니다.

솔직히 말해, 2011년 모델이라면 지금 기준으로 '유물'에 가깝습니다. 인텔 샌디브릿지 시절의 CPU를 달고 있는 이 노트북으로 24시간 내내 비디오 스트리밍을 돌린다는 건, 사실상 고문이나 다름없죠. 하지만 현업에서도 이와 비슷한 상황은 비일비재합니다. 절대 죽으면 안 되는 중요한 배치가 돌아가는 서버가, 알고 보니 10년 전 도입된 온프레미스 장비였다는 괴담 같은 이야기는 꽤 흔하니까요.

이 프로젝트의 주인공이 겪은 문제는 명확했습니다. VLC 미디어 플레이어를 이용해 영상을 송출하는데, 몇 분만 지나면 오디오가 끊기거나(Audio Stutter), CPU가 과열되어 쓰로틀링(Throttling)이 걸리는 현상이었습니다. 하드웨어 스펙이 낮으니 리소스가 금방 고갈되고, 열을 식히기 위해 CPU는 성능을 강제로 낮추고, 결국 스트리밍 품질이 박살 나는 악순환이 반복된 것이죠.

보통 이런 상황에서 우리는 어떻게 대응할까요? 아마도 OS를 경량 리눅스로 교체하거나, VLC의 버퍼 사이즈를 미세 조정하거나, 아니면 "이 장비는 가망이 없다"며 폐기를 건의했을 겁니다. 저 역시 풀링포레스트 초창기에 노후화된 이미지 처리 서버를 보며 비슷한 막막함을 느꼈던 기억이 납니다. 아무리 코드를 최적화해도 물리적인 한계를 넘기는 어려웠거든요.

그런데 이 프로젝트의 해결책은 의외로 간단하고 강력했습니다. 바로 배치 스크립트(Batch Script)였습니다.

작성자는 'ThinkPad Stream Sentinel'이라는 거창한 이름의 스크립트를 만들었습니다. 원리는 단순합니다. 복잡한 모니터링 툴을 쓰는 대신, 윈도우 배치 파일 하나가 VLC 프로세스를 감시합니다. 그리고 오디오가 끊기거나 시스템이 버벅거리는 징후가 보이면, 즉시 VLC 비디오 소스를 리셋해버리는 방식입니다. 말 그대로 "껐다 켜기"를 자동화한 셈입니다.

:: 개념적인 의사 코드(Pseudo-code)입니다.
:LOOP
    스트리밍_시작
    대기 (문제가 발생할 즈음까지)
    프로세스_종료_및_리셋
    GOTO LOOP

어찌 보면 무식해 보일 수 있습니다. 우아한 예외 처리가 아니라 강제 리셋이라니요. 하지만 결과적으로 이 13년 된 노트북은 24시간 멈추지 않고 스트리밍을 지속할 수 있게 되었습니다. CPU가 과열되어 쓰로틀링에 걸리기 직전에 프로세스를 환기시켜 버리니, 시스템이 '숨 쉴 틈'을 얻는 것입니다.

저는 이 투박한 .bat 파일에서 엔지니어링의 본질을 봤습니다. 우리가 구축하는 거창한 MSA(Microservices Architecture) 환경의 'Self-Healing(자가 치유)' 메커니즘도 결국 이 원리와 맞닿아 있습니다. 파드(Pod)가 응답하지 않으면 킬(Kill)하고 다시 띄우는 것, 메모리 누수가 발생하면 재시작하는 것. 도구만 세련되어졌을 뿐, "불안정한 상태를 빠르게 초기화하여 가용성을 확보한다"는 원칙은 변하지 않았습니다.

풀링포레스트 팀원들에게도 자주 하는 말이 있습니다. "도구의 화려함보다 문제 해결이 우선이다." 때로는 수천 줄의 우아한 코드보다, 상황에 딱 맞는 10줄짜리 쉘 스크립트가 훨씬 안정적일 수 있습니다. 특히 리소스가 극도로 제한된 환경이나, 더 이상 유지보수하기 힘든 레거시 시스템을 다룰 때는 더욱 그렇습니다.

저도 주니어 시절에는 모든 것을 완벽한 아키텍처로 짜 맞추려다 골머리를 앓곤 했습니다. 하지만 실무는 교과서와 다릅니다. 당장 서비스가 돌아가게 만드는 '생존'이 우선일 때가 많습니다. 그럴 땐 2011년산 씽크패드를 살려낸 저 배치 파일처럼, 조금 투박하더라도 확실하게 작동하는 방법을 선택하는 용기가 필요합니다.

여러분도 혹시 회사 구석에서, 혹은 집 창고에서 먼지 쌓인 장비나 레거시 코드를 보며 한숨 쉬고 계시진 않나요? 최신 기술을 도입할 수 없다고 좌절하기보다, 지금 가진 도구로 어떻게든 생명력을 불어넣을 방법이 없을지 고민해 보세요. 의외의 해답은 가장 기본적이고 오래된 기술 속에 숨어 있을지 모릅니다. 13년 된 노트북도 훌륭한 스트리밍 서버가 될 수 있는 것처럼 말이죠.

오늘도 묵묵히 돌아가는 여러분의 서버와 서비스들을 응원합니다.

지금 읽으신 내용, 귀사에 적용해보고 싶으신가요?

상황과 목표를 알려주시면 가능한 옵션과 현실적인 도입 경로를 제안해드립니다.