해결: 언제 PPC 캠페인을 중단하기로 결정합니까?

발행: (2026년 2월 10일 오후 04:09 GMT+9)
14 분 소요
원문: Dev.to

Source: Dev.to

Solved: 언제 PPC 캠페인을 중단할지 결정하시나요? 표지 이미지

Darian Vance

🚀 요약

TL;DR: 식별되지 않은 비용이 많이 드는 “좀비 마이크로서비스”(비유적으로는 현금을 태우는 PPC 캠페인)가 종종 알려지지 않은 종속성을 가진 채 클라우드 자원을 많이 소비하여 높은 청구서와 서비스 중단에 대한 두려움을 초래합니다. 이러한 서비스를 안전하게 폐기하기 위해 다음과 같은 방법을 사용할 수 있습니다:

  • 점진적 자원 축소 – “Strangle and Observe”
  • 철저한 종속성 매핑 – “Archaeological Dig”
  • 통제된, 되돌릴 수 있는 “Scream Test” 낮은 트래픽 기간에

🎯 핵심 요점

  • Strangle and Observe – 서비스에 할당된 리소스를 신중하게 축소(예: EC2 인스턴스 규모 축소 또는 cron 빈도 감소)하고 시스템 반응 및 알림을 모니터링하여 숨겨진 의존성을 드러내면서 즉각적인 위험을 최소화합니다.

  • Archaeological Dig – 관측 도구(DataDog, VPC 흐름 로그 등)를 사용해 인바운드/아웃바운드 트래픽 및 비즈니스 기능을 매핑한 뒤, 공식적인 폐기 계획을 수립하고 관련 인프라스트럭처‑코드를 제거합니다.

  • Scream Test – 문서나 로그가 전혀 없는 서비스의 경우, 먼저 스테이징에서 통제된 테스트를 실행하고, 그 다음 트래픽이 적은 운영 시간에 롤백 계획을 준비한 상태로 프로덕션에서 실행하여 직접적인 시스템 장애를 관찰함으로써 핵심 의존성을 식별합니다.

“좀비” 서비스와 레거시 프로세스로 클라우드 비용이 급증하고 있나요? 프로덕션 장애를 일으키지 않으면서 인프라를 안전하게 폐기하는 시점과 방법을 알아보세요.

My ‘PPC Campaign’ is a Zombie Microservice: When to Pull the Plug

I remember staring at the monthly cloud bill. It was a five‑figure number that made my stomach turn, and one line item stood out: a fleet of massive EC2 instances under a service named DataAggregator-PROD. They were costing us nearly $4,000 a month, just humming along.

I asked around. The new product manager had never heard of it. The junior devs thought it was “some legacy thing we don’t touch.” It was a ghost in the machine, a technical PPC campaign burning cash with zero measurable ROI.

The problem? No one knew for sure what would happen if we turned it off. This is a story I’ve seen play out at nearly every company I’ve worked for.

“왜”인가: 우리가 디지털 유령을 만드는 방법

이것은 사람을 비난하는 문제가 아니다. 성장, 우선순위 변화, 팀 교체의 자연스러운 결과이다. 2년 전에는 핵심이었던 프로젝트가 뒤처지고, 원래 개발자는 떠난다. 문서가—존재했다 하더라도—이제는 잊혀진 Confluence 공간의 죽은 링크가 된다. 우리는 몇 가지 주요 이유 때문에 이런 좀비 서비스를 남기게 된다:

ReasonExplanation
알 수 없는 것에 대한 두려움“만약 이 서비스가 조용히 결제 페이지를 구동하고 있는데 우리가 수백만 달러 규모의 장애를 일으킨다면 어떨까요?” 청구서를 계속 내는 것이 생산을 망친 사람이라는 위험을 감수하는 것보다 쉽다.
소유권 부재서비스가 모두의 것이라면, 사실 아무도 책임지지 않는다. 라이프사이클에 대한 명확한 소유자가 없으면, 그 서비스는 결국 기술 부채가 된다.
관찰성 부족어떤 서비스가 다른 서비스를 호출하고, 그 서비스가 또 무엇을 호출하는지 쉽게 파악할 수 없다면, 눈이 먼 채로 날아다니는 것이다. 완전히 이해하지 못하는 것을 자신 있게 폐기할 수 없다.

그래서 여러분은 비용이 많이 들고 신비로운 프로세스에 얽매이게 된다. 아마 쓸모 없을지도 모르지만, 이를 끊는 위험이 너무 크게 느껴진다. 이제 우리 팀이 실제로 어떻게 해결하는지 단계별로 살펴보자.

수정 방안: 신중한 조정부터 계산된 도박까지

1. 빠른 해결 – ‘스트랭글 앤 옵저브(스트랭글 및 관찰)’ 방법

정치적 자본이나 전체 조사를 할 시간이 부족할 때 내가 가장 먼저 쓰는 방법이다. 약간은 억지스럽지만 효과적이다. 서비스를 죽이는 것이 아니라 굶겨서 비용을 낮춘다. 목표는 비용을 최소화하고 누가 소리를 지르는지 보는 것이다.

  • 오토스케일링 그룹 – 원하는/최소/최대 인스턴스 수를 하나로 줄이고, 가능한 가장 작은 인스턴스 유형을 사용한다.
  • 데이터 파이프라인 – 크론 스케줄을 매시간에서 새벽 3시 하루 한 번으로 바꾼다.

서비스는 여전히 “실행 중”이므로 긴장한 이해관계자를 안심시킬 수 있지만, 비용은 급락한다. 이제 대시보드를 매의 눈으로 지켜라. 상위 혹은 하위 서비스에서 새로운 오류 급증이 나타나는지, 지원 티켓 대기열을 확인하고, “XYZ 보고서가 느려졌나요?” 같은 속삭임을 들어라.

프로 팁: 이 작업을 하기 전에 알림 설정이 최상인지 확인하라. legacy‑api‑gw‑01이 작은 인스턴스 때문에 503 오류를 내기 시작하면, 고객이 불만을 제기하기 전, 즉시 알아야 한다.

2. 영구적인 해결 – ‘고고학적 발굴’

이것이 “올바른” 방법이다. 시간과 노력이 들지만 위험을 없애고 기술 부채를 제대로 정리한다. 탐정이 되어 서비스의 디지털 흔적을 추적한다.

여기서 가장 좋은 친구는 관측 도구다—예를 들어 DataDog, New Relic, Honeycomb 혹은 VPC 흐름 로그CloudWatch 메트릭을 깊이 파고드는 것이다. 다음 세 가지 질문에 답해야 한다:

  1. 누가 이 서비스를 호출하는가? (인바운드 트래픽)
  2. 이 서비스가 무엇을 호출하는가? (아웃바운드 트래픽)
  3. 어떤 비즈니스 기능을 수행하는가? (“그게 무슨 의미인가?”)

다음 작업을 수행한다:

  • 의존성 지도를 만든다.
  • 공식적인 폐기 계획을 초안한다.
  • 해당 서비스를 이용하는 모든 팀에 계획을 전달한다.
  • 폐기 윈도우를 예약하고, 인프라‑코드와 연계된 자원을 제거한다.

3. 계산된 도박 – ‘스크림 테스트’

문서나 로그가 전혀 없는 서비스의 경우, 통제된 테스트를 실행할 수 있다:

  1. 테스트 준비 – 스테이징 환경에서 서비스를 비활성화하거나 스로틀링한다. 중요한 것이 깨지지 않는지 확인한다.
  2. 프로덕션 저트래픽 윈도우 – 알려진 트래픽이 적은 시간대(예: 주말 밤)에 프로덕션에서 동일한 변화를 적용한다.
  3. 롤백 계획 – 즉시 “되돌리기”가 가능하도록 준비한다(예: Terraform 적용으로 리소스 복구, 혹은 서비스를 재활성화하는 빠른 스크립트).

시스템 동작을 관찰한다. 알림이 울리지 않고 티켓도 생성되지 않으면, 해당 서비스가 진짜 고아임을 증명한 것이며 퇴역시켜도 된다.

마무리 생각

Zombie microservices는 급격한 성장의 숨겨진 비용입니다. 계층적 접근 방식을 적용하면—위험이 낮은 “strangle”부터 시작해 철저한 “archaeological dig”로 진행하고, 필요할 경우 제어된 “scream test”를 수행함으로써—생산에 지장을 주지 않으면서 이러한 비용 중심을 안전하게 폐기할 수 있습니다.

핵심 요점: 두려움 때문에 죽은 무게에 계속 비용을 지불하지 마세요. 가시성, 점진적 축소, 그리고 체계적인 롤백 계획을 활용해 유령 서비스를 깔끔하고 비용 효율적인 아키텍처로 전환하세요. 🚀

Source: https://techresolve.blog/nuclear-scream-test

‘핵’ 옵션: 스크림 테스트

솔직히 말하자면, 때때로 문서도 없고 로그도 없으며 시간도 없습니다. 서비스는 불투명한 상자이고, 고고학 발굴에는 몇 달이 걸릴 수 있습니다. 이런 드문 경우에, 통제된 “스크림 테스트”를 수행할 수 있습니다.

이것은 무모한 행동이 아니라 계산된 위험입니다.

  1. 스테이징 환경 – 서비스를 종료하고 전체 스프린트 동안 꺼 둡니다. QA 팀이 아무것도 눈치채지 못한다면 첫 번째 증거를 확보한 것입니다.

  2. 프로덕션 – 외과적 타격처럼 계획합니다:

    • 트래픽이 적은 시간대(예: 토요일 새벽 2시)에 유지보수 창을 공지합니다.
    • 롤백 계획을 준비합니다—단일 명령어나 버튼 클릭으로 서비스를 다시 온라인 상태로 복구할 수 있어야 합니다.
    • 서비스를 종료하고 기다립니다.
    • 1시간이 지나도 아무 일도 일어나지 않으면 어느 정도 확신을 가질 수 있습니다.
    • 1주일이 지나도 아무 일도 일어나지 않으면 매우 확신할 수 있습니다.
    • BI 팀이 분기 보고서 실패로 3주 뒤에 연락한다면, 답을 얻은 것입니다. 서비스를 일시적으로 복구하고 영구적 해결 방법으로 전환하면, 이제 알려진 의존성을 가지고 진행할 수 있습니다.

경고: 이 옵션은 신중히 사용하십시오. 잘못될 경우 신뢰를 손상시킬 수 있습니다. 하지만 때때로 깊이 뿌리박힌 기술 부채를 해결하고 유령 비용을 끊는 유일한 방법일 수 있습니다.

예시 Terraform Plan (목표)

# module "legacy_data_aggregator" {
#   source = "./modules/ec2-cluster"
#   ...
# }

# The above module will be removed in release v3.45.0 on 08/15.
# Ticket: DEVOPS-1234
# Reason: Service has been superseded by the 'realtime-metrics-api'.
# Contact: #devops-team on Slack

Darian Vance

👉 TechResolve.blog에서 원문 읽기


내 작업을 지원해주세요

이 글이 도움이 되었다면, 커피 한 잔 사주세요:

👉

Back to Blog

관련 글

더 보기 »

컴퓨터가 드디어 듣게 되었다

당신이 원하는 것을 아는 바텐더 컴포스텔라에 있는 어느 바—어느 바인지 말하지 않을게요, 그렇지 않으면 모두가 가서 망쳐버릴 테니까—에서 바텐더가 n...