
오랜만에 묵혀뒀던 개인 프로젝트 폴더를 열어본 적 있으신가요?
의욕 넘치게 시작했다가 현생이 바빠 잠시 덮어둔, 그 '토이 프로젝트' 말입니다.
딱 6개월 만에 코드를 수정하려고 npm install이나 빌드 명령어를 입력했는데.
화면 가득 빨간색 에러 로그가 폭포수처럼 쏟아지는 경험, 다들 한 번쯤 있으시죠?
분명 6개월 전에는 완벽하게 돌아갔던 코드인데 말입니다.
의존하던 라이브러리는 버전이 바뀌어 있고.
내가 쓰던 API 서비스는 정책이 변경되었거나 유료화되었고.
심지어 내 로컬 컴퓨터의 노드(Node.js) 버전이 올라가서 호환이 안 되기도 합니다.
결국 코드를 짜는 시간보다 환경 설정을 다시 잡는 데 주말을 다 써버리곤 하죠.
저도 주니어 시절엔 이런 상황이 단순히 제가 게을러서라고 생각했습니다.
"내가 꾸준히 업데이트를 안 해줘서 코드가 썩었구나."
그런데 10년 넘게 개발을 하다 보니 알겠더군요.
이건 제 성실함의 문제가 아니라, 소프트웨어의 '체온' 문제라는 것을요.
재미있는 이야기를 하나 들려드릴게요.
2004년의 어느 대학 생물학 강의실 풍경입니다.
교수님이 꽁꽁 얼어붙은 무언가를 들고 와서는 오버헤드 카메라(OHP) 위에 올려놓습니다.
학생들은 화면을 보고 깜짝 놀랍니다.
그건 바로 꽁꽁 언 '새끼 거북(Painted turtle)'이었거든요.
교수님은 아무 설명 없이 강의를 시작합니다.
시간이 흐르고 강의실의 온기에 얼음이 녹자, 화면 속의 거북이 아주 천천히 눈을 뜹니다.
그리고 다리를 조금씩 움직이더니, 강의가 끝날 즈음에는 화면 밖으로 기어 나갑니다.
이 거북은 대표적인 '냉혈 동물'입니다. 주변 환경이 차가워지면 신진대사를 극도로 낮춰서 얼어붙은 상태로도 생존합니다.
그러다 다시 따뜻해지면? 언제 그랬냐는 듯 깨어나 활동을 시작하죠.
반면 인간이나 쥐 같은 '온혈 동물'은 다릅니다. 항상 36.5도라는 체온을 유지해야만 살 수 있습니다.
체온이 조금만 떨어져도 생명이 위태롭습니다. 살아남기 위해서는 끊임없이 에너지를 태우고 활동해야 하죠.
제가 앞서 말한 '망가진 토이 프로젝트'들은 대부분 '온혈 소프트웨어'였습니다.
- 최신 유행하는 프레임워크.
- 복잡하게 얽힌 서드파티 의존성.
- 외부 서비스에 의존하는 CI/CD 파이프라인.
이런 프로젝트들은 개발자가 끊임없이 '체온'을 불어넣어 줘야만 살아있을 수 있습니다. 매달 패키지를 업데이트하고, 깨진 빌드를 고쳐주는 '열기'가 필요한 것이죠.
하지만 혼자 개발하는 사이드 프로젝트나, 자주 손대지 않는 내부 도구들은 그럴 여력이 없습니다. 우리는 일상에 치여 프로젝트를 '냉동실'에 넣어둘 수밖에 없으니까요.
그래서 온혈 소프트웨어는 냉동실에 들어가는 순간, 사실상 사망 선고를 받습니다. 6개월 뒤에 꺼내면 이미 죽어있는(빌드가 안 되는) 시체를 마주하게 되는 겁니다.
그렇다면 우리에게 필요한 건 무엇일까요?
바로 1년을 얼려뒀다 꺼내도 즉시 작동하는 '냉혈 소프트웨어'입니다.

냉혈 소프트웨어를 만드는 원칙은 생각보다 단순하지만, 요즘 트렌드와는 정반대일 수 있습니다.
첫째, '지루한 기술(Boring Technology)'을 사용하세요.
매주 업데이트되는 최신 프레임워크 대신, 10년 뒤에도 변하지 않을 기술을 선택하는 겁니다.
둘째, 외부 의존성을 극도로 경계하세요.
정말 필요한 라이브러리가 있다면, 패키지 매니저로 그때그때 다운로드하게 두지 마세요. 라이브러리 코드 자체를 프로젝트 저장소 안에 포함시키는 '벤더링(Vendoring)'을 고려해야 합니다. 인터넷이 끊겨도, 패키지 저장소가 사라져도 내 프로젝트는 빌드되어야 하니까요.
실제로 이 개념을 소개한 개발자의 블로그는 무려 12년 전에 만들어졌습니다. 놀랍게도 지금은 지원도 중단된 Python 2로 작성되어 있죠. 하지만 이 블로그는 지금도 아무 문제 없이 작동하고 배포됩니다. 외부 서비스에 의존하지 않고, 필요한 4개의 모듈을 저장소 안에 통째로 넣어버렸기 때문입니다.
12년 동안 거의 수정하지 않았지만, 여전히 쌩쌩하게 돌아갑니다. 마치 얼음 속에서 살아남은 그 거북이처럼 말이죠.
물론 현업의 대규모 서비스는 '온혈'이어야 합니다. 매일 수십 명의 개발자가 코드를 수정하고 배포하며 뜨거운 열기를 유지하니까요.
하지만 여러분의 소중한 개인 프로젝트나, 가끔 쓰는 유틸리티는 다릅니다. 화려함보다는 '생존'이 목표여야 합니다.
다음에 사이드 프로젝트를 시작할 때는 한 번쯤 고민해 보세요.
"이 프로젝트가 1년 뒤 냉동실에서 나왔을 때, 스스로 걸어갈 수 있을까?"
여러분의 코드가 거북이처럼 끈질긴 생명력을 갖길 바랍니다.


