본문 바로가기
카테고리 없음

레거시 코드와의 동행: 낡은 시스템을 대하는 개발자의 자세

by notes9107 2026. 8. 2.

레거시 코드와의 동행: 낡은 시스템을 대하는 개발자의 자세

입사 첫 주, 저에게 맡겨진 업무는 15년 묵은 주문 처리 시스템의 유지보수였습니다. 최신 기술 스택을 자유롭게 써보게 해줄 거라 기대했던 저는, 세상에 존재하는 모든 전역 변수를 다 끌어다 쓰는 거대한 함수 하나와 마주했습니다. 함수 하나가 천 줄이 넘어갔고, 중간중간 죽은 코드와 알 수 없는 매직 넘버가 즐비했습니다. 그 당시에는 절망스러웠지만, 지금 돌아보면 레거시 코드는 개발자에게 가장 훌륭한 스승 중 하나였다고 생각합니다.

레거시 코드는 왜 생겨나는가

레거시 코드는 단순히 오래된 코드가 아닙니다. 현재의 비즈니스 규칙이 왜 그렇게 됐는지 아무도 설명하지 못하는 코드, 새로운 요구사항이 닥칠 때마다 조금씩 덧붙여진 패치의 집합체입니다. 중요한 건 "오래됐다"는 사실보다 "왜 이렇게 됐는지 아무도 모른다"는 사실입니다. 사람이 떠나고 문서는 사라지고 코드만 덩그러니 남았을 때, 우리는 비로소 레거시와 마주하게 됩니다. 결국 레거시는 기술의 문제가 아니라 지식 전달의 실패에서 비롯됩니다. 오늘날의 코드가 내일의 레거시가 되지 않으려면, 지금 이 순간부터 왜 이런 결정을 했는지 기록하는 습관이 필요합니다.

무작정 갈아엎는 건 최악의 선택

레거시를 만나면 누구나 가장 먼저 "처음부터 다시 만들자"라는 생각을 하게 됩니다. 저도 주문 로직을 처음부터 새로 쓰겠다고 큰 결심을 했었죠. 결과는 참혹했습니다. 고객이 수년간 체득한 미묘한 예외 처리, 계절마다 달라지는 판촉 규칙, 내부적으로만 통하는 특별한 계산 방식은 어디에도 문서화되어 있지 않았습니다. 새로 만든 시스템은 반짝였지만, 정작 핵심 로직은 롤백하고 결국 예전 코드를 읽어내는 데만 두 달을 썼습니다. 그 경험 이후 저는 "옛것은 멍청해서가 아니라 필요해서 남아있다"는 말을 좌우명처럼 여기게 됐습니다. 무작정 새로 쓰는 것은 회귀할 수 없는 위험한 도박입니다.

코드를 읽는 일도 훈련이 필요하다

레거시를 이해하는 최고의 방법은 아주 오래된 코드를 여러 번 읽어보는 것입니다. 처음엔 지저분한 변수명과 수백 줄짜리 함수가 읽기 싫었지만, 읽다 보면 당시 개발자가 풀려고 했던 문제와 남겨진 흔적들이 조금씩 보이기 시작했습니다. 주석이 없는 코드에도 "여기선 왜 이렇게 처리했을까"를 스스로 질문하며 흐름을 그려보고, 직접 실행해보고, 중간값을 찍어보면서 조금씩 이해했습니다. 지금은 신규 프로젝트를 맡을 때도 코드를 읽는 시간을 절대 아끼지 않습니다. 코드 리딩은 단순히 남의 코드를 훑어보는 행위가 아니라, 그 코드에 담긴 의사결정의 역사를 읽는 작업입니다.

테스트가 곧 유일한 안전망이다

레거시 코드를 건드릴 때 가장 무서운 건 "이걸 고쳤더니 저기서 터졌다"는 연쇄 파괴입니다. 수정 전에 반드시 테스트부터 만들기 시작했습니다. 기존 동작을 그대로 검증하는 특성 테스트, 현재의 결과값을 스냅샷처럼 떠두는 테스트부터 시작했습니다. 당장은 보기 흉하고 지저분해도, 이 안전망 덕분에 리팩토링을 할 때 마음 놓고 작업할 수 있었습니다. 테스트가 있으면 "이걸 바꿔도 되나"를 수없이 고민하는 대신 "바꾸고 테스트가 말해준다"는 자신감을 얻습니다. 레거시 앞에서는 화려한 테크닉보다 조용하고 꾸준한 테스트가 진짜 무기입니다.

작은 개선을 쌓아가는 인내

레거시를 하루아침에 정리할 수는 없습니다. 저는 "캠프파이어 규칙"이라는 원칙을 정했습니다. 어떤 코드를 수정하러 갔을 때, 그 주변을 캠핑장을 떠나기 전보다 조금이라도 깨끗하게 만들고 오자는 규칙입니다. 함수 하나를 분리하고, 이상한 변수명을 고치고, 중복된 로직 하나를 제거하는 식이었습니다. 특별한 기술이 아니라면 누구나 실천할 수 있지만, 6개월이 지나니 그 작은 개선들이 쌓여 전체 코드의 품질이 눈에 띄게 좋아졌습니다. 레거시 개선은 단거리 경주가 아니라 마라톤이라는 걸 몸으로 깨달은 순간이었습니다.

레거시 코드는 결코 제거해야 할 적이 아니라 이해하고 길들여야 할 동반자입니다. 오래된 시스템을 만지면서 저는 최신 기술보다 더 중요한 것이 "읽는 힘"과 "인내심"이라는 것을 배웠습니다. 누군가에게는 지루한 유지보수가, 누군가에게는 최고의 성장 기회가 될 수 있습니다. 당신이 지금 마주한 낡은 코드가 부끄럽게 느껴진다면, 사실 그것은 당신이 앞으로 더 단단해질 수 있는 기회의 땅입니다.