스케줄 안정성을 위한 Temporal 도입 이유

우리는 출고지시 스케줄의 불안정성 고민 끝에 Temporal을 선택하게 되었습니다. 초기의 Jenkins crontab으로는 급증하는 물량과 요구 사항을 충족할 수 없었고, 이로 인해 발생하는 다양한 문제들에 직면하게 되었습니다. 이러한 이유로 우리는 Temporal을 도입하여 안정적이고 자동화된 시스템을 구축하려고 하였습니다.

실패 대응 시스템 구축의 필요성

무신사의 OMS(주문관리시스템)에서 출고지시의 중요성은 말할 필요도 없습니다. 이는 물류센터의 하루를 시작하는 신호이기도 하며, 스케줄의 실행이 실패할 경우 배송 지연으로 이어질 수 있습니다. 초기에는 Jenkins의 cron 스케줄로 충분했지만, 점차 물류량이 증가함에 따라 점점 더 많은 문제가 발생했습니다. Jenkins 기반 스케줄은 문제가 발생해도 자동으로 알려주지 않아 별도의 모니터링 job을 만들어야 했습니다. 하지만 이 모니터링조차 Jenkins의 한계로 인해 더 이상의 신뢰를 받을 수 없게 되었습니다. 우리는 어떻게든 이러한 실패를 보다 효과적으로 관리해야 할 필요성이 커졌고, 이를 통해 우리의 시스템이 실패에 민감하지 않도록 구축해야겠다는 결론에 도달했습니다. وقت이 지연되는 배달로 인해 고객의 신뢰를 잃는 것은 결코 바람직하지 않다는 것을 명심하며, 안정성을 위한 새로운 시스템이 절실히 요구되었습니다.


Temporal은 장기 실행되는 비즈니스 프로세스를 관리하는 데 적합한 솔루션입니다. 자동 재시도 및 상태 관리와 같은 기능이 있어, 우리가 기대했던 실패 대응 시스템을 구축하는 데 큰 도움이 될 것으로 판단하였습니다. 이 시스템은 단순히 스케줄을 실행하는 데 그치지 않고, 전체적인 비즈니스 프로세스를 아우르는 기능을 제공합니다. 따라서 출고지시 스케줄의 안정성을 보장하는 데 최적의 선택이었습니다.


결론적으로, 실패를 놓치지 않고, 재시도를 통해 실패한 지점에서 자동으로 복구될 수 있는 Temporal의 기능은 우리 팀의 운영 리스크를 현저히 줄여줄 것이라 기대합니다.

가시성 향상으로 인한 운영 효율성

출고지시에 문제가 발생하면 항상 로그를 따라가며 원인을 파악해야 했습니다. 처음에는 바로 Jenkins 콘솔 로그를 확인하였지만 상황이 복잡해질수록 로그 자료가 무수히 많아졌습니다. “이번엔 어디서 실패했을까?”라는 질문이 떠오르면 로그 기록을 뒤적여야 했고, 논리적으로 사고하는 것보다 로그를 따르는 것이 더 많은 시간을 요구하게 되었습니다. 이러한 불편함을 개선하기 위해선 명확한 가시성을 제공하는 시스템이 필요했습니다.


Temporal은 그 문제를 해결할 수 있는 솔루션을 제공해줍니다. 각 Activity의 input, output을 쉽게 확인할 수 있게 되어 있으며, 이를 통해 데이터의 흐름과 정책의 적용 여부를 한눈에 파악할 수 있습니다. 이처럼 Temporal에서 제공하는 사용자 인터페이스(UI)는 우리가 무엇에 문제가 있는지 빠르게 식별하는 데 큰 도움이 됩니다. 특히 각 Activity 간의 흐름을 명확히 해줌으로써, 장애 발생 시 대응 시간을 단축시키는 효과도 기대할 수 있게 되었습니다.


우리 팀에서는 Temporal을 도입한 후, 각 업무의 실행 이력을 보다 체계적으로 관리할 수 있게 되었고, 빠른 의사결정을 할 수 있는 기틀을 마련하게 되었습니다. 적시에 문제를 진단하고 대응할 수 있는 효율적인 시스템이 마련된 것은 팀에게 큰 신뢰감을 주었으며, 이러한 가시성 향상은 우리의 전체적인 운영 품질을 한층 더 끌어올려주는 계기가 되었습니다.

자동화로 인한 인력 부담 경감

과거에 Jenkins에서 스케줄이 실패하면, 우리는 직접 재실행해야 했습니다. 이 과정에서 원인 파악과 수동 재실행은 운영 인력에게 상당한 압박이었습니다. 일부 장애는 단순히 네트워크 오류가 원인이 되어도, 그 문제를 확인하고 수동으로 재실행하는 데 소요된 시간은 출고에 지장을 주었습니다. 이러한 수동 작업의 연속은 불필요한 부담을 가중시키며 운영 안정성을 저하시키는 주범이었습니다.


Temporal의 도입은 이러한 수동 작업을 자동화할 기회를 만들어 주었습니다. 이제 우리는 특정 조건 하에 필요한 작업을 손쉽게 재시도하도록 설정할 수 있게 된 것입니다. 내부적으로 설정된 자동 재시도 로직 덕분에, 예기치 않은 장애가 발생하더라도 단순한 수동 개입 없이도 시스템이 스스로 복구할 수 있는 구조로서의 변화를 이루게 되었습니다. 업무의 물리적 개입을 최소화함으로써, 팀원들은 더 중요한 전략적 업무에 집중할 수 있게 되었습니다.


자동화로 인해 인력의 부담이 경감된 덕분에, 우리의 팀은 더 많은 시간과 자원을 소비할 수 있는 더 중요한 문제들에 집중할 수 있게 되었습니다. 이러한 변화는 결국 운영의 효율성을 높이고, 물류 운영의 품질을 더욱 강화해줍니다. Temporal을 통해 우리는 “실패하지 않는 시스템”이 아닌 “실패해도 복구되는 시스템”을 구축하는 길로 한 걸음 나아갈 수 있었습니다.

우리는 Temporal의 도입으로 스케줄의 안정성과 운영 효율성을 획기적으로 개선할 수 있었습니다. 앞으로 출고지시 파이프라인 전체를 Temporal로 전환하는 작업에 나설 예정이며, 이를 통해 더욱 탄탄한 운영 구조를 구축할 계획입니다. 또한, 단순히 스케줄링에 그치지 않고, 전체 비즈니스 프로세스를 아우르는 시스템으로 발전하기 위해 지속적인 연구와 개선을 진행할 것입니다. 이번에 경험한 모든 것들이 향후 작업에 많은 도움이 되기를 바랍니다.

이 블로그의 인기 게시물

무신사머니 결제 시스템 연동의 안정성 및 혁신

매크로 코딩으로 시니어 성장의 벽 넘기

AI와 사람의 협업을 위한 VLMOps 어드민 구축기