Ai! Jack!v2026.04.01-f12
← 홈GeekNews 인기

코드가 나빠지는 데는 한계가 없다

원문 보기GeekNews에서 보기
18 pointsby neo미국

AI 분석

•소프트웨어에는 건물 같은 물리적 붕괴 한계가 없다는 주장 → 작동 중에도 복잡성·성능 저하의 지속 누적 가능
•Amazon 주문 처리 조직 사례에서 지식 소실·미완료 재설계·기존 구조 위 계층과 인력 누적 지적
•재설계 검토 시 새 구조 도입뿐 아니라 기존 구조의 제거 완료 여부 확인 필요

검증 정보

출처
zachkehs.com
피드
GeekNews 인기
수집/분석 기준
2026. 9. 8. 오전 9:00
원문 확인
원문 열기

본문

•건물과 달리 소프트웨어에는 물리적 붕괴 한계가 없어 , 시스템이 계속 작동하는 동안에도 복잡성과 성능 저하가 끝없이 누적될 수 있음
•Amazon 주문 처리 조직에서는 지식 소실과 미완료 재설계 가 반복되면서, 기존 구조에 새 계층과 인력이 계속 남는 악순환이 이어짐
•시스템을 완전히 멈추는 변경은 빠르게 되돌려도, 그전에 품질을 악화시킨 수천 건의 변경은 남으므로 작동 여부가 코드 품질을 보장하지 않음
• 기술 부채에는 파산 같은 초기화가 없음 : 전면 재작성은 좀처럼 선택하기 어렵고, 별도 시스템을 만들어도 기존 사용 사례와 유지보수 의무는 사라지지 않음
•언젠가 재작성으로 해결할 수 있다는 믿음은 현재의 결정을 악화시키며, 코드 품질을 지키려는 지속적인 노력 을 대신할 수 없음

Amazon 주문 처리 조직에서 반복된 재설계

•대학 졸업 직후 Amazon에 입사해 접한 레거시 주문 처리 시스템 은 겉보기에는 데이터베이스에 정보를 기록하고, 다른 팀의 서비스에 유효성을 묻거나 장부 갱신을 요청하는 구조였음
•당시 동료들은 제대로 구현한다면 유능한 엔지니어 24명 이내 로 유지보수와 발전이 가능하다고 추산함
•실제 조직은 수백 명 규모로, 시스템 전체의 작동 방식을 배우는 일이 불가능할 만큼 커지고 복잡해진 상태였음
• 조직 지식의 소실 과 변경에 대한 두려움이 단순화를 가로막음
•몇 년 넘게 머무르는 사람이 드물어, 코드는 손대기 두려운 ‘유령이 나오는 묘지’로 가득했음
•주문 유형별 업무 규칙을 정한 사람들은 이미 떠났고, 규칙은 심하게 낡은 ‘살아 있는 문서’에 있거나 찾을 수 있는 어디에도 기록이 없었음
•시스템 상당 부분이 팀 경계 너머에 있고 코드 접근도 쉽지 않아, 동작을 직접 추적하기 어려웠음
•기존 시스템을 단순화하려는 노력도 충분한 보상을 받지 못함
•누락된 주문 처리는 얽힌 서비스 의존 관계의 다른 쪽에서 문제가 발생한 뒤 호출 알림 으로 드러남
•이 피드백 덕분에 시스템은 계속 운영됐지만, 변경하기 어렵고 성능도 매우 나빴음
•최신 Amazon 제품과 기능을 지원하는 새 계층은 계속 추가됐고, 기술 부채를 갚지 않는 조직은 ‘침몰하는 배’처럼 느껴졌음
• 아키텍처 개선 시도 는 늘 있었지만, 같은 실패 주기를 반복함
•새 관리자나 시니어 엔지니어가 문제를 발견하면 경영진도 개선에 동의했으나, 가용 엔지니어가 없어 인력과 팀을 추가함
•계속 바뀌는 시스템을 제대로 이해하려면 수년이 필요했지만, 조직 정치상 설계에 그렇게 오래 쓰기 어려워 불완전한 정보로 재설계를 시작함
•큰 문제를 해결해 승진하려는 동기와 승진을 오래 기다리고 싶지 않은 조급함도 작용함
•시도가 끝나면 새 구조의 잔재는 기존 아키텍처에 영구적으로 붙고, 주도 엔지니어는 승진한 뒤 떠나는 패턴이 이어짐
•마이그레이션은 너무 고통스럽고 인기가 없어 끝내지 못한 채, 늘어난 인력도 그대로 남음

끝나는 것은 코드의 악화인가, 사업인가

•퇴사 약 3년 뒤 , 해당 조직에서 6년간 근무 하고 최근 회사를 떠난 옛 동료와 대화했을 때도 같은 재설계 주기가 반복된 상태였음
•서로 다른 시기에 떠난 두 사람 모두 조직을 ‘침몰하는 배’에 빗댔지만, “어디서, 어떻게 끝나는가”라는 질문은 코드와 회사를 구분해야 답할 수 있음
• 사업은 침몰할 수 있지만 , 나쁜 소프트웨어가 사업에 미치는 영향은 여러 요인에 달려 있음
•Amazon처럼 현금 흐름이 풍부한 회사는 일부 내부 부실이 수익에 유의미한 영향을 주기 전까지 견딜 수 있음
•소프트웨어 품질에 더 민감한 사업 모델에서는 나쁜 소프트웨어가 경쟁사에 기회를 줄 수 있으며, LLM도 이 점을 바꾸지 않음
• 소프트웨어에는 물리적 붕괴 한계가 없음
•건물이나 다리는 층과 방을 끝없이 추가하면 무너지지만, 추상적 영역에 있는 소프트웨어는 같은 제약을 받지 않음
•간접 참조 계층을 더하거나 성능을 더 낮추는 일이 언제든 가능하므로, 코드의 악화는 끝없이 이어질 수 있음
•‘침몰하는 배’나 ‘무너지는 건물’처럼 끝을 암시하는 비유는 이 차이를 가림
•소프트웨어가 아예 작동하지 않을 수도 있지만, 실무에서는 그런 치명적 변경만 빠르게 되돌리는 경우 가 많음
•그전에 코드를 악화시킨 수천 건의 변경은 되돌리지 않으며, 소프트웨어는 계속 ‘작동’함
•되돌릴 단일 변경이 없더라도, 불어난 운영 비용이 소프트웨어의 편익을 넘거나 무엇을 배포해도 장애가 나 개발 속도가 0에 가까워질 수 있음
•어느 경우든 코드가 가상의 최저점에 도달하기 훨씬 전에 사업이 무너짐

기술 부채에는 파산이 없다

•나쁜 소프트웨어가 사업에 주는 부담은 실제 위협이며, 좋은 조직이 코드 품질 에 주의를 기울이는 이유임
• 기술 부채 는 부채가 끝없이 복리로 늘 수 있다는 점에서 더 나은 비유지만, 역시 완전하지 않음
•금융 부채에는 파산이라는 강제 초기화가 있음
•소프트웨어에서 이에 대응하는 전면 재작성은 좀처럼 선택할 수 없음
•Amazon 같은 초대형 기업이 택할 수 있는 가장 가까운 대안은 별도 경로(side-channel) 임
•팀을 분리해 새로운 사용 사례에 필요한 최소 기능만 갖춘, 기존 시스템과 완전히 분리된 시스템을 구축함
•이후 새로운 사용 사례를 이 단순한 별도 시스템으로 더 많이 보낼 수 있음
•기존 사용 사례는 모두 남아 있으므로, 구형 시스템도 계속 유지보수해야 함
•앞으로 어느 시스템을 사용할지 결정할 때마다 조직 차원의 새로운 고통이 생기므로, 파산처럼 과거를 지우는 초기화는 아님

초기화에 대한 기대 대신 지속적인 품질 관리

• 완전 초기화라는 탈출구 가 있다고 믿으면 기술 부채를 뒤로 미루는 일이 덜 심각하게 느껴짐
•곧 재작성으로 해결할 수 있다는 기대는 현재의 의사결정을 악화시키지만, 실제로는 그 탈출구가 없음
•‘무너지는 건물’이나 ‘침몰하는 배’를 비유로 쓰려면, 소프트웨어는 끝없이 무너지고 침몰할 수 있음 을 전제로 해야 함
•프로젝트 관리자가 기술 부채를 처리하도록 강제하는 자연적인 한계는 없음
•소프트웨어를 높은 품질로 유지하려면 침몰을 멈추기 위한 노력을 직접 기울여야 함

댓글 3개

lim8603

구구절절 다 올른말이지만, 개선할 능력이 있어도

조직 구조와 보상체계를 빼먹을 수는 없어요.

특히 제조업에서는 “제가 이렇게 저렇게 해서 SW부채를 해결했습니다.” 라고 한들 알아 듣는 사람이 없고,

성과로 인정해주지 않는 문화라면 굳이 어렵고 도전적이고 알아주지 않는 일에 뛰어들기란 쉽지 않습니다.

그래서 매출에 얼마만큼의 영향을 미쳤지?

그래서 뭐가 더 좋아졌다고? 얼만큼의 경쟁력이 더 생겨서 판매에 도움이 댓나?

즉시 효과가 발생하는, 눈에 보이는 일을 한 사람에게 성과나 공이 돌아가는 조직과 문화에서는 이런 진실된 논의가 많이, 아주 많이 퇴색되는걸 많이 보기도 하고 실제 겪기도 했죠. 더욱이 이런 일을 시작하는 것 자체도 어려울 수 있는 조직문화도 많아요.

기술과 개발에만 신경써도 힘든데, 정치도 잘해야되고 지금 하는 일의 포장도 그럴싸하게 잘해야 되니까 배로 힘든 일이네요.

roxie

지금도 유효한 얘기일까요

neo

Lobste.rs 의견들

•이해하지 못하는 비즈니스 로직을 보고 “아키텍처를 다시 설계하면 명확해질 것”이라고 생각하는 게 늘 의아함

재설계하려면 먼저 시스템을 이해해야 함

재설계는 고급 작업처럼 들리지만, 기존 시스템의 기능을 이해하는 일은 허드렛일처럼 들리는 게 문제임

제대로 이해하고 나면 구조를 바꿀 아이디어도 떠오르겠지만, 재작성을 주장하는 상당수는 그 단계까지 가지 못함

•반대로, 비즈니스 로직을 이해하는 가장 효율적인 방법이 코드베이스 분석 은 아닐 수도 있음

레거시인 만큼 핵심 정보에 잡음이 많이 섞여 있기 때문임

그런데 문서도 없고 초기 개발자들마저 떠났다면 막막해짐

•그래서 부분적으로 교체하는 접근 이 거의 항상 더 나음

끝을 알 수 없는 재작성에 매달리지 않아 사업적으로도 합리적이고, 이미 충분히 이해한 부분부터 교체할 수 있음

•내가 그저 순진한 젊은이일 수도 있지만, 때로는 전부 걷어내고 처음부터 다시 만드는 일 이 필요하다고 느낌

물론 사업 환경에서는 기존 코드베이스를 버리기 전에 새 시스템부터 만들어야 할 것임

•내 경험상 전면 재작성이 성공하는 경우는 극히 드묾

기존 시스템이 기술 부채에 빠져 회생 불가능하다고 선언하고, 새 팀을 꾸려 처음부터 다시 만들기 시작함

하지만 기존 시스템은 핵심 사업을 계속 운영하므로 변경이 멈추지 않음

곧 폐기될 시스템을 맡은 개발자들은 새 기능을 최소한의 노력으로 추가하게 되고, 기술 부채는 더 쌓임

새 팀은 야심 차고 다소 순진한 상태에서 출발함

처음에는 새로 만드는 덕에 속도가 빠르지만, 시간이 갈수록 대체 대상의 동작과 범위를 누구도 완전히 이해하지 못한다는 사실이 드러남

애초에 문서화와 테스트가 잘되어 있었다면 교체할 필요도 없었을 것임

몇 달, 심하면 몇 년 동안 가치를 내놓지 못하면 출시 압박이 커짐

결국 기존 기능 일부만 처리하거나, 거의 방치된 기존 시스템에 넣기 어려웠던 새 기능만 담당하는 형태로 출시하게 됨

이제 운영 환경에는 아무도 손대기 싫은 낡은 시스템과, 몇 가지 기능만 처리하면서 코드의 80%는 언젠가 기존 시스템을 대체하려고 대기 중인 새 시스템이 함께 존재함

회사가 인내심을 잃지 않고 작업을 계속 허용해 주면 그나마 다행임

시간이 길어지고 기존 시스템이 끈질기게 계속 돌아갈수록 “우선순위가 바뀌었다”며 교체 작업을 중단할 위험이 커짐

결국 하나였던 시스템이 둘로 남게 됨

이 과정을 책임 있게 완수하는 방법을 다룬 글 중 가장 좋았던 것은 Will Larson의 Migrations: the sole scalable fix to tech debt 임

다음에 비슷한 상황을 만나면 기존 시스템의 자동화 테스트를 최대한 보강 한 뒤, 필요한 부분을 겨냥한 리팩터링으로 원하는 구조에 도달할 수 있는지 살펴보라고 강하게 권할 것임

많은 경우 처음부터 새로 만들겠다는 유혹보다 이쪽의 성공 가능성이 훨씬 높다고 봄

•Marriane Bellotti의 Kill It With Fire: Managing Aging Computer Systems (And Future Proof Modern Ones) 를 읽어보면 흥미로울 것임
•이런 “유령이 출몰하는 묘지” 같은 코드베이스를 몇 번 돌아다녀 봄

몇 군데를 보고 나면 명확한 책임자 없이 여러 사람의 손을 거친 시스템 을 알아볼 수 있게 됨

근본적으로 도메인 경험과 연속성이 있어야 시스템이 더 단순하고 짜임새 있어짐

사람들은 대개 기능을 추가하며 기여하려 하지만, 기능마다 제약과 불변 조건이 늘어나 시스템의 일관된 구상이 흐려짐

덧붙이기는 쉽고 제거를 정당화하기는 훨씬 어려워서, 여러 사람을 거칠수록 개념적 일관성이 약해짐

“지금 전부 고치자”는 태도는 통하지 않음

변수 이름을 바꾸고, 알아낸 사실을 코드에 주석으로 남기고, 작업 절차를 문서화·자동화해 지식이 살아남게 하고, 테스트로 동작을 파악하고 변경 시에도 유지되게 하는 작은 개선의 축적 은 효과가 있음

이해가 깊어지고 자동화 테스트가 보강되면 더 큰 변경도 안전하게 할 수 있음

핵심 참고서는 Feathers의 Working Effectively with Legacy Code와, 훨씬 덜 알려진 Object-Oriented Reengineering Patterns 임

문제는 급한 불을 끄기 시작하자마자 진척 소식을 들은 사람들이 “더 안전해진” 코드베이스에 뛰어들어 다시 기능을 추가하려 한다는 데 있음

그러다 무엇을 출시해도 다른 곳이 깨지는 지경이 되어 개발 속도가 0에 가까워짐

이런 시스템은 대개 “붕괴”하지 않음

코드 변경 비용이 커지고 변경 속도와 정확성이 떨어져 사람들이 손대기를 피하게 됨

기능은 시스템 바깥에 덧붙여지고, 문제가 연동 코드로 서서히 번지며, 그 팀들에서도 인력 교체가 일어나면 악화가 가속됨

•이런 상황을 제대로 고치도록 유도하거나 애초에 발생하지 않게 하려면 조직·경영 차원 에서 무엇이 바뀌어야 하는지 궁금함

관련 아이템