🚀 2026 스타트업 컨퍼런스

도저히 못 봐줄 레거시 코드 앞에서 '리팩토링 병'을 고치고 팀의 영웅이 되는 법

도저히 못 봐줄 레거시 코드 앞에서 '리팩토링 병'을 고치고 팀의 영웅이 되는 법

Poooling·2026년 1월 6일·3

스타트업에서 대기업으로 이직 후 겪은 레거시 코드에 대한 면역 거부 반응과, '마이크로키메라리즘' 개념을 통해 깨달은 진정한 리팩토링 및 공생의 가치를 공유합니다.

솔직히 고백하겠습니다. 스타트업 야생에서 대기업으로 이직한 첫 달, 저는 일종의 '면역 거부 반응'을 앓았습니다.

화려한 네임밸류 뒤에 숨겨진, 10년 묵은 레거시 코드들을 마주했을 때의 충격은 아직도 생생합니다. 제 눈에 그 코드들은 제거해야 할 '암덩어리'나 다름없었습니다. 변수명은 알 수 없는 약어로 가득했고, 비즈니스 로직은 스파게티처럼 엉켜 있었으니까요.

"이걸 싹 다 갈아엎어야 우리가 삽니다."

팀장님께 패기롭게 말했습니다. 하지만 그건 제 오만이었습니다. 최근 읽은 생물학 기사 하나가 제 부끄러운 과거를 정통으로 때리더군요. 오늘은 '마이크로키메라리즘(Microchimerism)'이라는 개념을 통해, 우리가 남의 코드를(혹은 과거의 내가 짠 코드를) 어떻게 바라봐야 하는지 이야기해 보려 합니다.

1. 내 몸속에 남의 세포가 산다? : 개발자의 '면역 반응' 오류

최근 네이처(Nature)에 실린 기사를 보면 '마이크로키메라리즘'이라는 흥미로운 현상이 나옵니다. 임신 중 태아의 세포가 태반을 넘어 엄마의 몸으로 이동하고, 그 세포가 수십 년 동안 엄마의 심장, 폐, 뇌 속에 살아남는다는 것입니다.

기존 면역학의 관점에서 '나(Self)'와 '남(Non-self)'은 철저히 구분되어야 합니다. 남의 세포가 들어오면 면역 체계가 공격해서 없애는 게 정상이죠. 개발자들도 비슷합니다.

우리는 타인의 코드를 본능적으로 '비자기(Non-self)'로 인식하고 공격합니다.

제가 딱 그랬습니다. 입사 초기, 정체를 알 수 없는 복잡한 분기문(if-else) 덩어리를 보고 "이건 안티 패턴이야"라며 걷어냈습니다. 결과는 참혹했습니다. 그 코드는 특정 결제 모듈의 Race Condition(경쟁 상태)을 막기 위해 선배 개발자가 피땀 흘려 박아놓은 안전장치였습니다.

배포 직후, 트래픽이 몰리는 점심시간에 결제 누락 건이 발생했습니다. 롤백을 하며 등줄기에 식은땀이 흘렀습니다. 저는 시스템을 '치료'하려다 오히려 '면역 쇼크'를 일으킨 꼴이었습니다.

2. 흉터를 치료하는 이방인 : 레거시의 재발견

기사는 더 놀라운 사실을 전합니다. 엄마 몸에 남은 태아의 세포들이 단순히 기생하는 게 아니라, 상처가 났을 때 혈관이나 피부 세포로 변해서 치유를 돕는다는 것입니다.

개발자로 치면, 우리가 그토록 욕하던 '스파게티 코드'가 사실은 서비스의 생존을 지탱해 온 핵심 로직일 수 있다는 뜻입니다.

레거시는 '기술 부채'이기 이전에 '생존의 증거'입니다.
그 복잡한 코드는 수많은 장애와 고객 클레임, 그리고 비즈니스 요구사항 변경이라는 풍파를 견디며 살아남은 결과물입니다. 마치 엄마 몸속에서 상처를 치유하던 태아 세포처럼, 그 코드가 있었기에 회사가 망하지 않고 지금까지 버틴 것이죠.

이 깨달음을 얻은 후, 저는 접근 방식을 180도 바꿨습니다.

3. 공생을 위한 생존 전략 : Strangler Fig 패턴과 AI

이제 저는 레거시를 무작정 도려내지 않습니다. 대신 '공생'하는 법을 택했습니다.

첫째, git blame을 하기 전에 맥락(Context)을 먼저 파악합니다.
이전 작성자가 왜 이렇게 짰을지, 당시의 비즈니스 상황이 어땠을지를 먼저 고민합니다. 주석이 없다면 커밋 로그라도 뒤져봅니다. "쓰레기 코드네"라고 비난하기 전에, 그 코드가 막아주고 있는 잠재적 버그가 무엇인지 파악하는 게 우선입니다.

둘째, '빅뱅 리팩토링' 대신 '교살자 패턴(Strangler Fig Pattern)'을 사용합니다.
마이크로키메라 세포가 기존 조직과 섞여 살듯, 새로운 MSA 구조를 도입하더라도 기존 모놀리식(Monolithic) 시스템을 한 번에 죽이지 않습니다. 트래픽을 아주 조금씩, 점진적으로 새로운 쪽으로 옮기며 구/신 시스템이 당분간 공존하게 만듭니다.

셋째, AI를 새로운 '이주 세포'로 받아들입니다.
최근 저는 Cursor나 Claude 같은 AI 도구를 적극적으로 활용합니다. 어떤 분들은 AI가 짜준 코드를 "내 것이 아닌 코드"라며 찝찝해합니다. 하지만 마이크로키메라리즘의 관점에서 보면, AI의 코드는 우리 생산성을 높이고 빈틈을 메워주는 '외부에서 유입된 유용한 세포'입니다. 중요한 건 그 코드가 '누구의 것'이냐가 아니라, 시스템 전체의 건강(안정성)에 기여하느냐입니다.

마치며: 우리는 모두 키메라(Chimera)입니다

그리스 신화 속 키메라는 사자, 염소, 뱀이 섞인 괴물입니다. 하지만 현대 개발 조직에서 우리는 모두 키메라입니다.

여러분이 지금 유지보수하고 있는 그 시스템에는, 퇴사한 김 대리의 코드, 옆자리 이 과장의 코드, 그리고 3년 전 미숙했던 여러분 자신의 코드가 뒤섞여 있습니다.

이 모든 것이 합쳐져 하나의 거대한 생명체처럼 서비스를 지탱합니다. 남의 코드를 볼 때 '제거 대상'이라고만 생각하지 마세요. 어쩌면 그 코드가 가장 위급한 순간에 여러분을 구해줄 수도 있으니까요.

오늘도 묵묵히 레거시와 싸우고 계신 모든 개발자분들, 부디 너무 미워하지 말고 가끔은 그 끈질긴 생명력을 인정해 주시길 바랍니다. 우리는 혼자서 완벽할 수 없기에, 서로의 코드가 섞여야만 비로소 온전해집니다.

Poooling
PooolingAuthor

Poooling님의 다른 글

댓글 0

첫 번째 댓글을 남겨보세요!