디자인 패턴 전에 알아야 할 안티패턴 — 2편: 아키텍처와 프로세스
Spaghetti Code, Big Ball of Mud, Lava Flow, Golden Hammer, Premature Optimization, Reinventing the Wheel — 시스템과 개발 문화 차원의 안티패턴
210 posts · 10 categories · 2026
Spaghetti Code, Big Ball of Mud, Lava Flow, Golden Hammer, Premature Optimization, Reinventing the Wheel — 시스템과 개발 문화 차원의 안티패턴
Magic Number, God Object, Long Method, Feature Envy, Shotgun Surgery, Primitive Obsession, Cargo Cult — 언어와 프레임워크를 가리지 않고 등장하는 대표 안티패턴 전체
vi, Vim, Neovim, nano는 뭐가 다른가. 계보와 설계 철학부터 실무에서 뭘 고를지, 폐쇄망 서버에 에디터를 어떻게 들고 갈지까지 정리한 터미널 에디터 전체 지형도.
알려진 해법이 있는데도 같은 구조가 반복되는 이유. Conway의 법칙, 도구 우선 선택, 지연 도착하는 비용, 중앙화와 분산의 진자. 시리즈 완결.
로그만 있는 분산 시스템에서 장애 원인을 못 찾는 이유. 로그·메트릭·트레이스의 역할 분담, Correlation ID, 카디널리티 폭발, 알림 피로.
CSV 내보내기 하나가 무관한 엔드포인트의 p99까지 올리는 이유. CPU가 이벤트 루프를 붙잡는 네 가지 통로, 동시성 없는 async, 스트림과 백프레셔.
스케일 아웃된 함수가 DB 커넥션을 고갈시키는 이유, 콜드 스타트의 네 단계, Lambda Pinball, 그리고 서버리스가 오히려 정답인 경우.
하위 서비스 하나가 느려지자 전체가 멈추는 동기 호출 사슬. 재시도 증폭, 캐시 동시 만료, 커넥션 풀 도미노와 각 방어책의 대가.
DB 저장과 이벤트 발행을 나란히 쓰는 다섯 줄이 깨지는 방식, 2PC가 후퇴한 이유, Saga의 전제, Transactional Outbox와 멱등 소비자.
컬럼 하나를 못 바꾸는 공유 DB와 명사로 쪼갠 Entity Service의 함정. 경계를 변경 이유로 긋고 데이터 중복을 결합도의 값으로 치르는 법.
기능 하나에 서비스 일곱 개가 같은 날 배포되는 구조. 함께 바뀌는 것을 세어 진단하고 Modular Monolith로 후퇴하는 탈출 경로.
Chatty Interface, 버전 없는 API, Over-fetching이 한 화면에 모이는 이유와 유스케이스 기반 엔드포인트·런타임 계약으로 계약을 고정하는 법.
네트워크 호출을 함수 호출처럼 쓴 대가. 분산 컴퓨팅의 여덟 가지 오류를 장애 시나리오로 번역하고 타임아웃·재시도·멱등성을 API의 1급 요소로 만든다.
비즈니스 규칙이 게이트웨이 미들웨어에 숨는 순간. ESB의 실패가 API 게이트웨이로 되살아나는 구조와 게이트웨이의 책임을 문서로 고정하는 법.
스토어드 프로시저에 로직이 숨은 Smart DB의 청구서, Oracle에서 PostgreSQL로 갈 때 돌아오는 비용, 무엇을 DB에 남길지의 기준.
필드 하나에 파일 일곱 개를 건드리는 pass-through 계층과 새는 계층의 비용. 규칙은 계층 수가 아니라 의존 방향이다.
같은 검증이 세 곳에 흩어지는 Transaction Script의 한계와, 불변식을 타입으로 밀어 넣는 Parse, don't validate 접근.
나쁜 커밋 하나 없이 1,800줄 파일이 되는 과정. 응집도·결합도를 형용사가 아닌 기준으로 말하는 법과 이음매를 찾아 경계를 되살리는 순서.
안티패턴의 엄격한 정의(해법이 두 개 있어야 한다), 코드 스멜·실패 사례와의 구분, 판별 체크리스트, 그리고 16편 시리즈의 지도.
GoF 패턴 23개가 실제 프론트엔드 라이브러리 코드에서 어떤 모습으로 살아있는지 추적하고, 사라진 것들은 왜 사라졌는지 밝힌다. 시리즈 완결.
blog92@web:~$ exit