배민은 서비스 장애를 어떻게 없앴나

A매치 축구대회나 프로야구 코리안시리즈와 같은 대형 스포츠 이벤트가 있을 때 나는 경기 시작 한참 전에 치킨을 배달시키곤 했었다. 너무 빨리 주문하는 바람에 막상 경기가 시작됐을 때는 치킨을 이미 다 먹어버렸을 때도 많았다.

경기 시간에 맞춰 치킨을 주문하지 않았던 데에는 이유가 있다. 막상 경기 시간이 다가오면 배달앱이 열리지 않을 때가 많았기 때문이다. 대형 스포츠 이벤트가 있을 때면 사람들은 삼삼오오 모여 배달앱으로 음식을 주문했고, 몰려든 트래픽을 견디지 못하고 배달앱이 셧다운 되는 경우가 많았다. 배달의민족이 셧다운 되면 사람들이 요기요로 몰려가서 요기요가 다운됐고, 요기요가 무너진 이후에는 배달통도 접속되지 않을 때가 잦았다.

그런데 요즘은 치킨을 미리 주문하지 않는다. 배달의민족(이하 배민)이 다운되는 일이 웬만해서는 없기 때문이다. 과거에는 배민이 할인쿠폰이라도 뿌리는 날에는 여지없이 서비스가 오락가락 했지만, 이제는 어떤 강력한 쿠폰에도 배민 서비스는 쉽게 무너지지 않는다.

배민 서비스에서 왜 갑자기 장애가 사라졌을까?

17일 온라인에서 열린 배달의민족 기술 컨퍼런스인 ‘우아한콘서트(이하 우아콘)’에서 그 해답을 들을 수 있었다. 우아한형제들 김영한 배민서비스개발팀장은 배민 서비스에서 장애를 없애기 위해 노력한 지난 5년의 활동을 공유했다.

2020 우아콘에서 발표하는 김영한 팀장

마이크로서비스와 클라우드, 배민을 멈추지 않게 하다


김 팀장에 따르면, 배민 서비스에서 장애가 최소화 된 것은 클라우드 기반의 마이크로서비스아키텍처(MSA)를 도입한 덕분이다.

5년전 배민 서비스는 거대한 모놀리틱 아키텍처였다. 서비스 전체가 하나의 구조로 구성돼 있었다는 의미다. 모놀리틱 아키텍처에서는 서비스의 일부분에 장애가 생겨도 서비스 전체가 멈추곤 했다.

“단적인 예로 어떤 장애가 있었냐 하면, 리뷰 테이블에 뭔가 문제가 있었어요. 그런데 이게 DB 리소스 전체에 자꾸 영향을 주는 거예요. 리뷰와 관련된 DB 테이블들이 뭔가 밀리면서 결국 전체 시스템이 다 밀려 장애가 났어요. 사실 생각해 보면 리뷰에 장애가 나더라도 고객이 주문하는 건 아무 영향이 없어야 하잖아요?”

이런 일들이 반복되면서 배민 IT 조직은 MSA 도입을 결심했다. MSA는 시스템을 레고블록과 같은 마이크로서비스로 쪼개서 조합해 만드는 아키텍처다. MSA는 한 서비스의 문제가 다른 서비스에 영향을 최소화하도록 만들 수 있다. 예를 들어 주문 시스템에 장애가 생겨도 이용자들이 앱에서 음식점을 검색해서 전화주문이라도 하도록 만들 수 있다.

배민은 MSA의 도입과 함께 클라우드(아마존웹서비스)로의 이전도 병행했다. 2016년 언젠가 배민이 치킨을 7000원 할인해주는 이벤트를 선착순으로 벌인 적이 있다. 이런 이벤트는 고객확장을 위해 꼭 필요하지만 IT 부서 입장에서는 재앙에 가깝다. 평소보다 수십, 수백배 트래픽이 급증하기 때문이다.

치킨 7000원 이벤트가 벌어지자 배민 서비스는 뻗었다. 준비한다고 했지만 생각보다 더 많은 트래픽이 몰려든 것이다. 문제는 이 이벤트가 그날 끝나는 것이 아니었다는 점이다. 다음날에도 다다음날에도 이벤트는 이어져야 했다. IT 담당자들은 대책을 세워야 했다. 하루만에 급하게 서버를 구해다 시스템을 구성할 수는 없다. 급박해진 배민 IT부서의 선택은 AWS였다. 원래 AWS로 넘어가기 위해 준비를 하고 있던 시점이었다.

“AWS로 이전하는 기간을 한달로 계획을 잡아놨었는데 당장 다음날 (이벤트를) 해야 하니까 장비를 당장 수급할 수도 없고 해서 한달 계획했던 게 하루만에 IDC에서 AWS로 이전을 하는 기적이 일어납니다.”

눈앞에 있는 당장의 문제는 해결했지만 배민의 레거시 시스템이 가진 근본적인 문제는 여전히 남아있었다. 장애는 때때로 일어났다. 배민 서비스에 장애가 발생하면 음식점주는 당장 매출이 줄어들고, 이용자들의 불만은 폭주한다. 배민 영업사원과 고객센터도 괴로워진다.

“‘배민이 장애에 진짜 민감한 시스템이구나’라는 것에 대한 공감이 되게 컸어요. 그리고 진짜 생존을 위해서 MSA를 해야 하는구나라는 인식을 하게됐습니다.”


경영진의 판단


배민은 생존을 위해 모놀리틱 아키텍처를 MSA로 바꾸어야 했다. 이는 시스템 전체를 갈아엎는다는 의미이며, 그 기간동안 모든 시스템 개발자와 엔지니어들이 여기에 투입돼야 한다는 얘기다.

경영진 입장에서는 쉽지 않은 판단이다. 아키텍처를 갈아엎는 동안 IT부서가 다른 과제를 할 수 없기 때문이다. 당장 100억~200억원을 벌 수 있는 비즈니스적 과제가 있다고 해도 그 기간동안은 진행될 수 없다.

하지만 당시 배민 경영진은 시스템 아키텍처를 재설계 하는 것이 더 중요하다는 판단을 내렸고, 배민은 MSA 도입에 돌입했다. 이후 2018년부터 배민 서비스에서 가장 중요한 ‘주문’을 시작으로 마이크로서비스가 하나씩 만들어졌다.

이외에도 배민 아키텍처에는 여러가지 특징이 있다. 그중 하나는 마이크로서비스들이 이벤트 기반으로 연결돼 있다는 점이다. 예를 들어 주문이 들어오면 주문 시스템은 주문이 들어왔다는 이벤트를 발생시키고 끝난다. 주문 시스템이 다른 시스템에 정보를 API로 직접 넘겨주는 것을 최소화 한 것이다.

이 역시 장애를 막기 위한 조치다. 예를 들어 한 서비스가 다른 서비스에 정보를 넘겨주려고 하는데 다른 시스템이 장애가 발생하면 넘겨 주어야 하는 서비스도 영향을 받게 된다. 마이크로서비스를 API로 연결하는 것도 장애 위험이 있는 것이다. 이 때문에 배민은 이벤트 기반의 MSA를 선택했다. 이벤트 기반으로 연결할 경우 데이터 동기화라는 새로운 숙제가 생기지만 시스템의 안정성을 더 우선시한 판단을 했다.

CQRS 아키텍처를 선택한 것도 하나의 특징이다. CQRS는 ‘시스템의 상태를 변경하는 작업(명령)’과 조회하는 작업을 분리하는 것을 의미한다. 배민은 핵심 비즈니스 명령이 있는 시스템과 조회 중심의 사용자 서비스를 분리했다.

“배달의민족은 굉장히 거대한 CQRS 시스템으로 되어 있습니다. 그래서 성능이 중요한 고객 접점의 외부 시스템, 비즈니스 명령이 많은 내부 시스템으로 딱 분리가 되어 있고요. 시스템은 API나 이벤트 방식으로 연동이 됩니다.”

이런 식으로 2019년 배민은 완전히 MSA로의 전환을 마쳤다. 그리고 우리는 치킨이 먹고 싶을 때 주문을 못해서 발을 동동 구르는 일이 거의 없어졌다.

그러나 김 팀장은 모든 기업이 MSA를 도입할 필요는 없다고 조언했다. 그는 “(MSA를 도입하고) 데이터 싱크를 맞추고 이러다 보면 제가 볼 때 비용이 10배 정도는 더 든다”면서 “그런 것들을 상쇄하고 남을 만큼의 어떤 가치가 있는 경우에 MSA로 넘어가는 게 좋다고 생각한다”고 말했다.

글. 바이라인네트워크
<심재석 기자>shimsky@byline.network

관련 글

2 댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다