훈련은 실전처럼, 실전은…… 싫어요

Feb.16.2022 배민다움 배민다움
clipboard facebook twitter

APP

소설가가 입사했다

무라카미 하루키가 맥주 공장 이야기를 쓰고, 알랭 드 보통이 히드로 공항 이야기를 쓴 것처럼 소설가가 우리 회사 이야기를 쓴다면? 우리들이 좋아하는 이 시대의 젊은 작가. 소설가 박서련이 직접 경험하고 쓴 다섯 편의 우아한형제들 이야기


이렇게 시작해보면 어떨까…… 우아한형제들에서 제안한 글감과 가제 가운데에 이런 게 있었다. “흰 것은 코드요, 검은 것은 화면이다”. 반대인가? 까만 것이 코드고 하얀 것이 화면이었던가? 아무튼 그런 제하에 얼렁뚱땅 가짜 개발자 같은 걸로 우아한형제들에 위장 취업을 해 보는 내용. 그런데 그것도 뭘 조금이라도 알아야 하는 거지, 지금 보시다시피 저는 뭐가 까맣고 뭐가 하얀지도 잘 모릅니다. 뭐가 검고 뭐가 희냐면 저의 눈동자가 까맣고 이가 하얗…… 생각해보니까 그렇게 자신 있게 하얗지는 않은데 (적어도 튼튼은 합니다) 아무튼 이와 같이 저는 DNA에도 문과라고 새겨져 있을 그런 문과인이니까요, 이렇게 말하고 보니 오 문과가 DNA도 알아? 라고 하는 이과인 분들이 계실 것 같은 노파심에 덧붙이자면 제가 모든 문과인을 대표하지는 않으니까요…… 내가 모른다고 모든 문과인이 모르는 것은 아니 고 내가 아는 건 문과인 대부분 알고 있음을 미리 밝혀두며 새로운 이야기, 시작.


우선은 SRE팀으로부터 우아한형제들의 서비스 장애대응 프로세스에 대해 배웠다. 참고로 SRE팀, 즉 테크 기업 내 장애대응조직 자체는 우아한형제들만의 문화는 아니라고 한다. 구글에서 처음 도입했고, 우리가 이름을 아는 국내 포털사이트 기업에도 이제는 다 도입이 되어 있다는 모양. 우아한형제들만의 차별성을 꼽자면 끼니와 긴밀하게 연결되어 있는 분야 다 보니 오류 대응 타임 어택이 매우 중요하다는 점. 또한 대응 전문 팀을 꾸리다 보니 서비스 장애가 발생했을 때의 대응 알고리즘도 이제는 일목요연하게 갖추게 되었다고 한다.


🚒 “제 경우 가족들이나 친구들이 넌 대체 배민에서 무슨 일을 하냐고 하면 그냥 불 끄러 다닌다고 해요. 앱 소방관이라고 할 수 있겠죠.”

장애대응 업무 담당자로 일하는 주희님이 든 소방관 비유가 무척 직관적이고 이해가 잘 되어서 마음에 쏙 든 김에 계속 활용해보자. 배달의민족이라는 앱이 하나의 건물이라고 생각해보는 것이다. 작은 방의 한 부분에서 연기가 피어오르고 실내 공기가 탁해지기 시작하면 화재감지기가 알림을 울리겠지? 그러면 알림이 울린 방이 어디인가, 큰 불로 발생할 가능성이 있는가를 확인한 다음 달려가는 것이 건물의 자율/자체 소방대가 있다. 그리고 실제 화재 상황에서 불을 잘 끄려면 그에 못지않은 훈련이 필요한 법인데, 우아한형제들은 실제 건물에 위험 부담을 안기지 않기 위해 아예 따로 부지를 구입해 배달의민족과 똑같이 생긴 세트를 세운 다음 거기서 불을 피우고 끄는 훈련을 하고 있었다. 세트라곤 해도 실제 건물과 완전히 똑같이 만든 복제판인지라, 거기서 나는 화재는 얼마든지 오리지널에서도 발생할 수 있다. 그렇게 실제와 무섭도록 유사한 환경 속에서 진행되는 게 바로 모의장애훈련인 것이다.

🚒 “실제 장애상황 대응 경험이 많고 장래 장애상황에서도 주도적으로 해결을 맡는 분들을 ‘키맨’이라고 부르는데, 키맨들과 경험이 풍부한 시니어 개발자들은 제외하고, 문제상황 경험이 적은 신규 분들, 주니어 개발자분들을 주로 모의장애훈련에 참여시키고 있어요. 모의장애훈련의 목표는, 기술에 통달하자는 방향은 아니거든요. 더 중요한 건 다른 팀과의 소통, 본인이 목격한 문제를 알리고 공유하는 방법과 능력을 키우는 거죠.”

하긴 우아한형제들에 입사할 정도인데 개발 능력이 별로일 리는 없겠지. 체력이 좋은 건 소방관이 되기 위한 기본 조건이지만, 체력만 좋아서는 소방관이 되기 어렵다는 말처럼 들렸다. 사고 현장에서 사람들을 대피시키고 동료와 신속하게 역할을 나누는 소통 능력도 그에 못지않게 중요한 것은 생각해보면 당연한 일이었다.

“그러면 소방훈련을 할 때처럼 모든 구성원이 다 함께 참여를 해야 하나요? 일 년에 몇 번 정도 모의장애훈련을 하겠다, 그런 목표가 있나요?”

🚒 “실제 업무에는 늘 실시간 모니터링이 필요하기 때문에 회사의 모든 구성원이 동시에 훈련에 참여하는 것은 무리지만 업무 관계상 긴밀하게 연결되어 있는 부서들이 함께 모의장애 훈련을 하는 경우는 많고요. 또 어떤 장애상황이든 항상 소통에 참여해야 하는 커뮤니케이션 부서들은 거의 모든 모의장애훈련에 협조하는 편이죠. 문제상황에서의 소통을 원활하게 하는 게 모의장애훈련의 목표니까요.”

듣고 보니 그것도 그랬다, 내 방에서 난 불은 옆방에도 번질 수 있으니 가까운 방 사람들이 모여서 대피와 불 끄는 법을 배우는 것이 효율적일 터. 개념이 잡힐 듯 말 듯해서 모의장애훈련 실제 사례에 대해 듣고 싶다고 요청하자, 주희님이 실제 모의장애훈련에 참여한 설계자 한 분, 참여자 한 분을 대표로 연결해주었다.

먼저 설계자 수영님이 직접 설계한 오류를 소개했다.

🚒 “발생 가능한 오류 여러 개를 동시다발적으로 일으켰어요. 주문 과정을 상상해 보세요.

사용자는 앱을 열고, 주문을 하죠. 주문을 접수해서 프랜차이즈 본사에 전달하는 게 우리 앱의 정상적인 응답인데, 이 주문이 성공한 주문인지 그렇지 않은지 확인할 수 없게 했어요. 주문 유효성 확인 차단이 첫 번째 장애.”



“두 번째 장애는 뭐였죠?”

두 번째 장애 설명은 참여자 영일님이 맡았다.



🚒 “동시에, 브랜드관이라는 탭에서도 오류가 발견됐어요. 그날 할인율이 가장 높은 메뉴와 쿠폰을 노출해주는 기능이 있는데, 그게 나타나지 않는다는 VoC(Voice of Customer, 고객 의 소리) 가 중간에 치고 들어오더라구요.”

과몰입이 특기인 내게는 영일님의 말씀에서 ‘어떻게 그러실 수가 있어요’라는 메시지가 투명도 20% 정도로 겹쳐 들렸는데 설계자인 수영님은 전혀 동요하지 않는 눈치였다.

🚒 “첫 번째 장애를 발견하고 해결하고 있는 참에 새로운 유형을 보고하는 VoC가 툭 치고 들 어오니 멘탈이…… 바사삭.”

영일님은 웃으며 말씀하셨지만 역시나 투명도 20% 정도의 눈물이 뺨 위를 질주하는 듯 한…… 착시가 있었다.

🚒 “이전에 실제로 발생했던 장애를 어떻게 해결했는지에 대한 정보를 복기해보는 게 멘탈을 잡는 데에 도움이 됐어요. 이런 규모의 불이 이런 장소에서 났을 때 이렇게 접근하니 효율적으로 해결이 되더라. 그런 기록들이 있거든요.”

“또 다른 장애는 어떤 게 있었나요?”

나머지 오류들을 설명하는 역할은 수영님이 맡았다.

🚒 “원래는 수많은 요청을 동시에 받아들이고 처리해주어야 하는 서버 프로세스를 인위적으로 줄여서, 실제 처리 가능한 수보다 훨씬 많은 요청이 몰려드는 상황을 만들었어요. 이건 코드를 확인해서 처리 가능한 프로세스를 늘리는 솔루션을 유도한 거고요. 내친김에 네 번째까지 말씀드리면 업체 재고 확인 기능을 고장 냈어요. 정상적인 경우에는 재고가 다 소진되면 자동으로 품절로 전환되고 더는 주문을 할 수 없도록 바뀌는데, 재고 확인 기능에 문제가 생기면 품절된 메뉴인데도 계속 주문을 받아들이게 되죠.”

평온한 모습으로 본인이 설계한 엄청난 에러들을 소개하는 수영님이 놀랍게 느껴졌지만, 진행 양상에 대해 듣고 나니 이해가 한결 수월해지는 듯했다. 그러고 나니 훈련 참여자의 심정이 궁금해졌다.

“모의장애훈련을 할 때는 일정만 알려주고 구체적인 시간은 알려주지 않는다고 들었어요. 지금부터 훈련 시작합니다, 하고 알려주시나요? 아니면 실제처럼 그냥 바로 상황에 돌입하게 되나요? 다 하고 나서는 어떤 느낌이 드셨나요?”

🚒 “오후 2시였나요, 2시 5분이었던가요…… 그 사이쯤이었나 봐요, 첫 번째 장애가 발견된 게. 터지고 나서야 아 지금부터구나, 하고 알았어요. 앞서 말씀드린 것처럼 여러 가지 장애가 동시다발적으로 발생했고, 슬랙 메신저에 제 이름을 멘션한 메시지가 동시다발적으로 올라오니까 띠링띠링띠링띠링 숨 쉴 틈 없이 알람이 이어졌고. 그렇게 되니까 훈련이니까 너무 긴장하지 말자는 마음가짐은 까맣게 잊혀지고 심장이 미친 듯이 두근거리기 시작했어요. 실제 장애를 맞닥뜨렸어도 그렇게까지 긴장되진 않았겠다 싶을 정도로.”

‘실제 장애 상황에도 그렇게 긴장되진 않았겠다’는 감상이 귀에 팍 꽂혔다. 바로 그 느낌을 알게 하려고 모의장애훈련을 하는 게 아닐까? 실전에서의 당황을 줄이기 위해.

주희님이 보충 설명을 해주었다.

🚒 “네, 말씀하셨듯이 훈련 참가자들이 모의장애훈련을 인지해야 하니까 일정까지는 알려줘요. 하지만 언제나 장애는 예고 없이 찾아온다는 점을 감안해 훈련 시작은 불시에, 어디까지나 불시에 합니다. 실제로 누적된 장애 대응 사례보다 훨씬 난이도가 높게 설계하는 것도 사실이에요. 서비스 장애를 대하는 태도에 긴장감을 부여하기 위한 의도도 있지만, 훈련이 너무 빨리 끝나버리면 정말 중요한 소통과 연락 훈련이 전혀 되지 않기 때문이라는 이유가 더 큰 것 같아요. 소통 훈련은 아무리 강조해도 모자라니까요. 영일님이 본인을 찾는 슬랙 멘션이 몰려들어서 긴장되었다고 하셨잖아요, 실제 장애발생 상황에서도 충분히 그럴 수 있거든요. 장애 등급의 위험성이 높지 않은 경우는 괜찮지만, 규모가 크고 파급력이 있는 장애가 발생하면 우아한형제들의 개발자란 개발자는 모두 이 장애에 대응해야 하는데, 그 말은 무슨 뜻이겠어요? 장애를 주요하게 맡는 부서에 우리 회사에 다니는 모든 개발자의 질문이 집중된다는 거죠. 개발자들만이 아니에요. 하물며 홍보팀에서도 연락이 와요. 지금 앱에 오류가 발생했다며 언론사에서 인터뷰를 요청했는데 어떻게 설명하면 될까요? 이런 질문이 충분히 올 수 있다는 거예요. 이렇게 몰려드는 메시지에도 당황하지 않는 것 또한 연습이 필요해요. 그래서 모의장애훈련 상황에서는 일부러 슬랙 메시지를 더 많이 보내기도 해요. 아주 사소한 것까지 꼬치꼬치 질문하면서요.”

그런 거구나…… 이 지점에 이르러 모의장애훈련의 목표와 시행방식이 보다 명쾌하게 이해되는 듯한 느낌을 받았다.
설계자 수영님이 덧붙인 말씀도 같은 맥락으로 받아들일 수 있을 듯했다.

🚒 “설계자인 제가 봐도 제한시간 1시간 안에 다 해결하긴 조금 빠듯한 장애들이었어요. 그 시간 내에 해결 못한다고 페널티가 주어지거나 하진 않죠. 다만 참여자들에게 ‘이 시간 내에 해결하겠다’는 목표 설정이 있어야 실제상황에서도 신속하게 대응할 수 있지 않을까 해요. 사실 전체 훈련 진행시간은 총 두 시간으로 잡아요. 이유를 설명해 드리자면, 우선 장애를 인위적으로 일으키는 것 자체가 쉽지 않기 때문이에요. 스위치로 형광등 불을 켜고 끄는 것처럼 손쉽게 일어나는 게 아니거든요, 의외로. 그동안의 데이터와 케이스 누적으로 시스템이 이미 많이 튼튼해졌기 때문에 장애를 만드는 것도 어렵다는 말씀이에요. 그래서 모의 장애 적용에 일단 최대 30분 정도를 드리고……”

내진 및 방화가 든든하게 설계된 멀쩡한 건물을 사람 손으로 망가뜨리는 건 확실히 어렵겠지. 끄덕끄덕.

🚒 “말씀하신 것처럼 훈련 자체를 진행하는 데에 드는 시간이 물론 제일 넉넉하게 부여되고요. 그게 1시간이에요. 장애 상황이 모두 해결된 다음에는 설계자, 참여자, 그리고 이 과정을 지켜본 이들 모두가 ‘회고’ 과정에 참여해요. 남는 시간은 모두 여기에 쓰고요. 이 모든 과정을 합쳐서 2시간을 넘기지 않는 이유는 모의장애 해결에 너무 많은 시간을 소요할 경우 참여자들이 체력적으로도 정신적으로도 탈진하기 때문입니다. 영일님 말씀처럼 실제 장애 상황보다도 더 큰 집중력과 긴장감을 요구하는 과정인데, 참여자들이 이 집중을 너무 길게 가져가도록 만들면 모의장애훈련 이후 업무에 차질이 생길 수 있다는 거죠. 주어진 시간 이내에 모의장애 상황을 다 해결하지 못하는 경우도 물론 있어요. 그럴 때는 참여자들을 책망하는 게 아니라 일단 시니어 개발자들이 해결하는 모습을 보여주고 회고 과정에서 해결책을 더 잘 논의해보는 방향으로 훈련을 마무리지어요.”

하긴 참여자들이 아무리 주니어 개발자라지만, 주어진 시험시간 내에 문제를 다 풀지 못 한 학생이 아니지 않은가. 당장 다음 순간에라도 실제 상황에 투입될 준비가 된, 어엿한 프로들이지. 그런 사람들이 가짜 화재를 진압하지 못해 불을 두려워하게 만들어버리는 건 회사 입장에서 분명한 손해겠지.

“모의장애훈련 설계를 할 때 ‘있을 법한 장애’라는 건 어떤 기준으로 정해지는 걸까요? 역시 실제 누적된 데이터?”

🚒 “말씀하신 대로 실제 사례들 중 대표적으로 여겨지는 케이스가 일종의 기출문제처럼 고안되기도 해요. 꼭 실제 발생했던 사례가 아니어도 있을 법한 장애를 만드는 건 경험이 풍부한 개발자들에게는 어렵지 않은 과제라고 생각하고요. 개발자로서의 경험이 많다, 라는 말은 곧 수많은 장애에 부딪쳐봤다는 의미거든요. 장애가 발생할 수 있는 경우에 대한 상상력이 뛰어나단 뜻도 되죠. 또, 설계자로서 생각해봤을 때 이걸 해결하면 확실히 공부가 되겠다, 자산이 되겠다 싶은 걸 기준으로 장애를 만드는 경우도 많은 것 같아요. 그래서 여담인데 회고에서 나온 말 중 저는 이게 기억에 남아요. ‘저 이제 마음 놓고 휴가 가도 되겠네요!’ 심혈을 기울여 만든 오류를 참여자들이 멋지게 해결했을 때 설계자들이 공통적으로 느끼는 감상이 아닐까 싶어요.”

모의장애훈련과는 별 상관이 없는, 아니다, 굳이 따지자면 이용자로서 아예 무관한 것은 아니지만 어쨌든 직접적인 이해당사자는 아닌 나에게도, 그건 역시 뿌듯한 감상으로 들렸다. 그렇지, 그래서 훈련을 하는 거겠지. 그 훈련의 이익은 다른 누구도 아닌 우아한형제들의 구성원 당사자들에게, 또한 나 같은 이용자들 모두에게 돌아가는 거니까 소홀할 수 없는 거겠지.

이야기가 끝나가는 시점, 혹시 모의장애훈련 도중 실제 시스템에 장애가 발생한 경우는 없나요? 그렇게 질문하자 놀랍게도 있다는 답이 돌아왔다.

🚒 “아무리 훈련이 중요해도 실제로 난 불을 끄는 것보다 급할 수는 없죠. 그런 경우에는 모의장애훈련을 바로 중단하고 실제 장애 상황에 돌입해요. 모의장애훈련 다음날 장애상황을 맞닥뜨린 팀도 생각보다 많아요. 물론 힘든 상황이지만, 오히려 좋다는 반응이 나오곤 했어요. 아 어제 모의장애훈련에서 연습이 참 잘 됐나봐, 문제상황 공유와 전파가 참 빠르고 좋다. 그런 자체 평가도 있고요.”

가슴에 오른손을 얹고 남은 한 손으로 타자를 치면서 말하건대 나는 우아한형제들의 장애대응 업무와 모의장애훈련의 의의에 대해 이만하면 잘 알게 됐다고 자부한다. 누가 내게 시험지를 내밀며 모의장애훈련의 프로세스에 대한 이 쪽지시험에서 90점 이상 맞아야 한다는 협박을 할 일은 절대로 없을 것이고, 만일 누가 내게 작가님 배민하고 일한 적 있다면서요? 어떤 일 하셨어요? 라고 물어볼 경우 아 이러이러한 글을 썼고 그중 제일 까다롭게 여겨진 글의 주제는 우아한형제들이 자체적으로 진행하는 모의장애훈련이었는데요 모의장애훈련이란 뭐냐면요, 하고 설명할 수는 있는 상태이며, 이 정도가 딱 내게 요구된 이해도였을 거라는 믿음이 있다. 애초에 이 글의 목적은 “누구나 이해할 수 있는 테크 이야기”이고 그건 테크 문외한 중의 문외한, 선택된 문외한(나)만이 할 수 있는 역할이었을 거라는 굳센 믿음……

그러니 이 글을 읽으신 테크 문외한 여러분, 제가 소설가로서의 역할을 잘 해냈음을 증명하는 척도는 여러분이 모의장애훈련에 대해 얼마나 이해했는가에 달려있습니다. 이 글을 다 읽고 뭐 대충 이해했다고 말한다 해서 우리 중 한 사람이 별안간 설계자나 참여자가 되어 모의장애훈련을 겪어야 하는 일 같은 것은 없으니 그냥 부담을 내려놓고 이해만 해 주시면 됩니다.

뭐 재미 차원에서 간절한 척 말하고는 있지만 사실 그렇게 신경 쓰이지는 않는다. 왜?
나는 이해했으니까.
내가 이해할 수 있으면 어떤 문과인이나 이해할 수 있다.

즉, 당신도 할 수 있다! 최신 테크 따라잡기.


감사합니다. (박수 주세요)


또 다른 에피소드가 궁금하다면?