코드베이스에 있는 타임폭탄 (그리고 나도 마찬가지)

발행: (2026년 2월 23일 오전 03:07 GMT+9)
10 분 소요
원문: Dev.to

Source: Dev.to

번역할 텍스트가 제공되지 않았습니다. 번역이 필요한 본문을 알려주시면 한국어로 번역해 드리겠습니다.

모든 것을 설명하는 숫자

당신의 뇌는 작업 기억에 한 번에 4~7개의 청크 정도의 정보를 담을 수 있습니다. 이는 나에게도, 당신에게도, 그리고 지금까지 함께 일한 가장 뛰어난 시니어 개발자에게도 동일합니다. 이것은 기술적인 문제가 아니라 생물학적인 한계입니다.

이제 생각해 보세요: 여러분이 관리하는 코드베이스에는 얼마나 많은 암묵적인 상호작용이 있을까요? 5만 줄? 20만 줄? 아니면 반 백만 줄?

수천 개의 보이지 않는 의존성을 가진 시스템을, 7개의 스레드만 실행되는 프로세서로 모니터링하려고 하고 있습니다. 이것은 불가능합니다.

내가 수십 번 본 주기

나는 22 년 동안 소프트웨어를 다뤄왔다. 패턴은 언제나 같다:

  • Month 1 — 설계자는 모든 것을 명확하게 설계한다. 결정이 말이 된다. 모두가 같은 방향을 본다.
  • Month 6 — 설계자는 아직 남아 있지만, 왜 30 초 타임아웃을 선택했는지 기억하지 못한다. “뭔가 이유가 있었을 거야.”
  • Month 12 — 원래 엔지니어 세 명 중 두 명이 떠났다. 타임아웃의 이유는 그들과 함께 사라졌다. 남은 것은 설명 없는 // don't change this 라는 주석뿐이다.
  • Month 18 – 능력 있는 새 개발자가 “30 초는 터무니없다”며 타임아웃을 5 초로 바꾼다. 새벽 3시, 프로덕션이 중단된다. 왜 그런지 아무도 모른다.

문제는 새 개발자가 아니다. 문제는 컨텍스트가 시간에 따라 살아남지 못한다는 것이다.

밤새도록 나를 괴롭힌 실패들

순진한 훅

전역 리스너를 DOM에 추가하는 usePopup()이 있습니다. 깔끔하고, 테스트도 되었으며, 코드 리뷰도 통과했습니다. 하지만 이 훅이 100개의 컴포넌트에서 사용되었습니다. 이제 페이지 어디를 클릭하든 100개의 리스너가 모두 작동합니다. 개별 코드 리뷰로는 이 문제를 잡을 수 없습니다—각 리뷰는 자신이 본 하나의 사용 사례만 보기 때문입니다.

function usePopup() {
  document.addEventListener('click', handleClick);
}

유령 캐시

합리적인 리팩터링으로 객체 생성 방식을 바꾸었습니다. 기능은 동일하지만 레퍼런스가 달라졌습니다. ===에 의존하던 캐시가 더 이상 동작하지 않게 된 것이죠. 테스트는 통과하고, 앱도 크래시되지 않습니다. 대신 매주 조용히 느려지다가, 세 달 뒤에 누군가 티켓을 열 때까지 눈에 띄지 않습니다.

// Before
const obj = getConfig(); // cached by reference

// After
const obj = { ...getConfig() }; // new reference, cache miss

우아한 N+1

ORM을 사용한 루프가 읽기에는 아름다운 코드를 만들지만, 실제로는 50개의 별도 SQL 쿼리를 실행합니다. 개발자는 우아함을 보고, 데이터베이스는 폭격을 받습니다.

for user in users:
    print(user.profile.email)  # triggers a separate query per user

패턴은 언제나 같습니다: 문제는 당신이 작업하고 있는 추상화 수준에서는 보이지 않는다. 여러 레벨을 동시에 바라볼 필요가 있는데, 당신의 4~7개의 메모리 청크는 이를 허용하지 않습니다.

AI가 실제로 게임을 바꾸는 순간

나는 과대광고가 많다는 것을 알고 있다. 소프트웨어 분야에서 AI에 대한 약속의 절반은 마케팅이라는 것도 안다. 하지만 AI가 수행하는 한 가지는 지금까지 존재했던 어떤 도구와도 구조적으로 다르다:

거대한 컨텍스트 윈도우

코드 한 줄을 바꾸면 AI는 그 함수를 호출하는 47 modules를 모두 볼 수 있고, 그 중 어느 것이 referential equality에 의존하는지 확인하며, 당신의 “simple fix”가 코드베이스 다른 쪽에서 조용히 무언가를 깨뜨릴지 감지한다. 더 똑똑해서가 아니라 활성 작업 메모리가 더 많기 때문이다.

지칠 줄 모르는 감시

금요일 오후 5시, 월요일에 배포가 예정돼도 코드 리뷰는 더 피상적으로 진행된다. 한 주에 100번째 PR의 경우, 관심도는 첫 번째 PR보다 낮아진다. AI는 PR #1PR #100에 동일한 수준의 검토를 적용한다. “이번은 다르다”도, “그냥 핫픽스다”도 없다.

조직 기억

“왜 이 서비스는 30 s 타임아웃을 가지고 있지?” — 새로운 개발자는 모른다, 2년 된 Slack 스레드는 검색에 나타나지 않는다. 역사를 접근할 수 있는 AI는 기억한다: “INC‑4521, 2024 년 3월, 콜드 스타트가 최대 25 s까지 걸리는 스팟 인스턴스.”

하지만 잠깐 — 인간은 여전히 대체 불가능합니다

누구든 내가 AI가 개발자를 대체할 거라고 생각하기 전에: 그렇지 않을 겁니다.

AI는 패턴을 따르고 위반을 감지하는 데는 뛰어나지만, 새로운 패러다임을 창조하지는 못합니다. 시장 창이 3주 안에 닫히기 때문에 당신이 그 기술 부채를 받아들이고 있다는 사실을 알지 못합니다. “결제 팀이 화요일에 배포하니 월요일에 배포하지 말라”는 것도 모릅니다. 지난 블랙 프라이데이에 무슨 일이 있었는지도 알지 못합니다.

판단력, 창의성, 비즈니스 맥락, 조직 내 지식 — 그것들은 여전히 우리에게 있습니다.

진정한 파트너십

미래는 “devs vs. AI.”가 아니다. 다음과 같다:

  • AI는 일관성과 규모를 담당한다 — 위반을 감지하고, 메모리를 유지하며, 연쇄 영향을 확인하고, 피로 없이 감시한다
  • 인간은 판단과 창의성에 집중한다 — 무엇을 만들지 결정하고, 전략적 트레이드‑오프를 수행하며, 새로운 것을 발명하고, 조직 정치에 대처한다

자부심 때문에 이를 거부하는 팀(“I can review everything myself”)은 엔트로피가 더 빨리 쌓인다. 이는 그들이 더 못된 개발자라서가 아니라, 고정된 인지 한계를 가진 인간이 복잡성이 증가하는 상황에 직면하기 때문이다.

시계는 똑딱이고 있다

코드베이스가 18 개월 이상이라면, 엔트로피는 이미 존재합니다. 문제는 그것이 존재하는가가 아니라, 지속적으로 이를 해소할 수 있는 시스템을 갖추고 있는가입니다.

또는 수십만 줄을 감시하기 위해 인간 기억의 4‑7개의 조각에 의존하고 있는가 하는 것이죠.

다이어그램, 차트, 그리고 상세한 기술 예시를 포함한 확장 버전을 여기에서 작성했습니다: stickybit.com.br/codebase-timebomb/

레거시 코드베이스를 유지하고 있다면(그리고 누가 그렇지 않겠어요?), 읽어볼 가치가 있습니다.

0 조회
Back to Blog

관련 글

더 보기 »

Microservices 가장 많이 묻는 면접 질문

마이크로서비스란 무엇인가? !마이크로서비스 개요 https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c3tfqm8jud1ctsr8taoo.png 마이크로서비스는 ...와 어떻게 다른가?