성공의 역설, 밀려드는 파도

문과생 성시은의 AWS 정복기

by 혼북헌터 민짱

“대표님, 이거 대박입니다! 완전, 그냥, 미쳤어요! 터졌어요!”


월요일 오후, 이철민의 외침은 거의 비명에 가까웠다. 그의 손가락이 가리키는 사무실 중앙의 대형 모니터 속에는, 국내 최대 IT 커뮤니티 ‘Okky’의 자유게시판이 실시간으로 불타고 있었다. 그가 지난 금요일 퇴근 직전, “이거라도 한번 던져보죠”라며 장난처럼 올린 게시글 하나 때문이었다.


[제목: AI가 만들어주는 개발자 비애 짤방 (부제: 제발 야근 좀 그만…)]


‘커넥트-AI’의 소셜 콘텐츠 생성 기능을 활용해, ‘버그’, ‘서버 다운’, ‘PM의 기획 변경’ 같은 키워드를 입력하면 AI가 그에 맞는 절묘한 위로의 메시지와 함께 눈물 나는 짤방을 생성해주는 간단한 이벤트였다. 밑져야 본전이라는 심정으로 던진 미끼였지만, 주말 사이 야근과 버그에 시달리던 개발자들의 영혼을 정확히 저격했다.


‘좋아요’는 수백 개를 넘어섰고, 댓글 창은 그들만의 축제였다.

‘ㅋㅋㅋㅋㅋ 내 얘기잖아. AI가 나보다 날 더 잘 아네.’

‘이거 만든 사람 상 줘야 한다. 내일 출근길에 웃으면서 보게.’

‘이 스타트업 어디임? 당장 가서 돈쭐 내줘야겠다.’


“동시 접속자 300명 돌파! 400명! 대표님, 지금 신규 가입자가 1분에 10명씩 늘고 있어요! 미쳤다, 미쳤어!”


사무실의 공기는 그동안의 모든 고생을 보상받는 듯한, 달콤하고 짜릿한 흥분으로 가득했다. 성시은은 연신 새로고침을 누르며 치솟는 가입자 수에 입을 다물지 못했다. 박서준조차 평소의 돌부처 같던 표정을 풀고, “이 정도 트래픽은 괜찮을 겁니다. S3랑 VPC 덕분에 우리 EC2가 아주 쾌적해요. CPU 사용률 아직 40%대입니다”라며 드물게 긍정적인 전망을 내놓았다. 며칠 전까지만 해도 죽음의 문턱을 헤매던 회사가 맞나 싶었다. 성공은 이렇게 달콤한 것이었다.


“피자! 피자 시키자! 오늘은 내가 쏜다!”


이철민의 환호에 모두가 웃음을 터뜨렸다. 시은은 법인카드를 꺼내며 말했다. “아니, 오늘은 내가 쏠게요. 다들 고생했으니까. 제일 비싼 걸로 시켜요!”


하지만 그 달콤함은, 갓 배달된 피자의 온기가 식기도 전에 싸늘하게 사라졌다.


“어… 대표님. 사이트가… 왜 이러죠? 갑자기 좀 느려진 것 같은데요.”


마케팅 인턴 김민아 씨의 말에, 피자를 입에 넣으려던 모두의 움직임이 멎었다. 시선은 일제히 메인 모니터로 향했다. 방금 전까지 날아다니던 웹페이지의 로딩을 나타내는 파란색 막대가, 마치 늪에 빠진 것처럼 거북이처럼 기어가고 있었다. 커뮤니티의 댓글 창에는 새로운 종류의 글들이 실시간으로 달리기 시작했다.


‘서버 터졌나요? 갑자기 안 들어가짐.’

‘사람 좀 몰렸다고 이러네. 역시 스타트업은 못 믿겠다.’

‘아, 짤방 하나 만들려다 내 속이 터지겠네.’


“괜찮아요, 괜찮을 겁니다. 일시적인 현상일 거예요.”


박서준이 자신을 다독이듯, 혹은 팀원들을 안심시키듯 중얼거리며 키보드를 미친 듯이 두드렸다. 검은 터미널 창에 익숙한 명령어들을 입력했다. 그리고 그의 눈에 들어온 것은, 보고 싶지 않았던 현실이었다. EC2 인스턴스의 CPU 사용률 그래프가 붉은색 위험 수위(95%)를 넘어 100%의 천장에 머리를 박고 내려오지 않고 있었다. 마치 과로로 쓰러지기 직전, 마지막 남은 힘까지 쥐어짜는 심장의 박동 그래프처럼.


“안돼….”


서준의 절망적인 속삭임과 동시에, ‘커넥트-AI’의 모든 화면에 떠오른 것은 익숙하지만 다시는 보고 싶지 않았던 메시지였다.


504 Gateway Time-out.


서버가 죽은 것은 아니었다. 심장은 뛰고 있었다. 하지만 밀려드는 수백, 수천 개의 요청에 응답할 힘을 완전히 잃어버린 것이다. 과로사 직전의 상태. 사무실의 축제 분위기는 순식간에 장례식장처럼 변했다. 방금 전까지 세상을 다 가진 듯 환호하던 이철민은 자신의 머리를 쥐어뜯었다.


“나 때문에… 나 때문에 망했어….”


고객들의 원성이 담긴 이메일과 SNS 메시지 알림이 사무실 곳곳에서 비명처럼 울려 퍼졌다. 성공의 파도에 올라탔다고 생각한 순간, 그 파도가 그들을 집어삼키고 있었다. 성공이, 그 어떤 실패보다 더 잔인한 모습으로 그들의 뒤통수를 내리치고 있었다.


그때, 아수라장 속에서 시은의 스마트폰이 낯선 번호로 울렸다. 받을 경황이 없었다. 하지만 끈질기게 울리는 벨소리에, 그녀는 마지못해 통화 버튼을 눌렀다. 혹시 투자자일까. 아니면 화가 난 고객일까.


“여보세요, 이노베이트 성시은입니다.”


“성 대표님? 반갑습니다. 타이탄 코퍼레이션의 한유라 팀장이라고 합니다.”


수화기 너머로 들려오는 목소리는 얼음처럼 차갑고 비단처럼 매끄러웠다. 타이탄 코퍼레이션. 업계 미팅에서 몇 번 이름을 들어본 적 있는, Microsoft Azure 기반으로 공공기관과 금융권 프로젝트를 싹쓸이하며 급성장한 중견 SI 업체였다.


“아… 네. 그런데 무슨 일로….”


“제가 저희 회사 모니터링 시스템으로 여러 스타트업들 트래픽을 관심 있게 지켜보거든요.” 그녀의 목소리에는 미세한 웃음기가 섞여 있었다. “오늘 ‘이노베이트’가 아주 인상적인 기록을 세우고 있더군요. 물론, 지금은 멈췄지만요.”


그녀는 모든 것을 알고 있었다. 시은의 심장이 차갑게 식었다.


“잠시… 긴급 점검 중입니다. 사용자가 너무 몰려서요.” 시은이 간신히 대답했다. 목소리가 떨리지 않게 안간힘을 썼다. 자존심이 불타는 것 같았다.


“그러시겠죠. 대표님, 이런 ‘성장의 고통(Growing Pains)’은 스타트업의 숙명 같은 겁니다. 특히 AWS처럼 직접 하나하나 다 챙겨야 하는 인프라를 쓰실 때는 더 그렇죠.”


그녀는 친절하게 위로하는 척, AWS를 은근히 깎아내렸다.


“저희 타이탄은 수많은 기업들의 그런 고통을 해결해드리며 성장해왔습니다. 저희의 Azure 기반 엔터프라이즈급 인프라라면, 이 정도 트래픽은 웃으면서 감당할 수 있습니다. 이미 모든 것이 갖춰져 있으니까요. 대표님처럼 젊고 유능한 분들이 인프라 걱정 같은 걸로 시간 낭비하는 게 안타까워서요.”


정중했지만, 그 말의 속뜻은 명확했다. ‘아마추어처럼 굴지 말고, 감당도 못 할 서비스는 우리 같은 프로에게 넘겨라.’


“혹시… 도움이 필요하시면 언제든 연락 주세요. 저희 전문가들이 대표님의 소중한 서비스를, 더 안정적이고 품격 있는 환경으로 안전하게 옮겨드릴 수 있으니까요.”


‘품격’이라는 단어가 시은의 가슴에 비수처럼 꽂혔다.


“관심은… 감사합니다만, 저희는 괜찮습니다. 이 정도는 저희가 해결할 수 있습니다.”


시은은 이를 악물고 전화를 끊었다. 괜찮지 않았다. 하나도 괜찮지 않았다. 외부의 적은 이미 우리의 실패를 발판 삼아 사다리를 오를 준비를 하고 있었다. 그녀는 떨리는 손으로 슬랙을 열었다. 마지막 남은 구명정, 안민준에게 보내는 SOS 신호였다.


[성시은] : 민준 님. 저희… 성공 때문에 망하게 생겼습니다.


답장은 거의 즉시 도착했다. 하지만 그 내용은 위로가 아니었다.


[안민준] : 축하드립니다. 드디어 진짜 ‘유재석이 다녀간 인기 맛집’이 되셨군요.


[성시은] : 놀리지 마세요. 지금 손님들이 가게 문을 부술 기세란 말입니다. 가게 앞은 아수라장이고요.


[안민준] : 당연하죠. 대표님 가게는 지금 문이 하나뿐이니까요. 아무리 주방장이 날고 기어도, 수백 명의 손님들이 좁은 문 하나로 한 명씩밖에 못 들어오는데 어떻게 장사를 합니까?


그의 말에 시은은 고개를 들었다.


[성시은] : 문이… 하나라고요? EC2 인스턴스가 하나라서요?


[안민준] : 네. 지금 ‘커넥트-AI’라는 맛집 앞에는 손님들이 백 미터 넘게 줄을 서 있는데, 문도 하나, 주문받는 계산대도 하나뿐인 겁니다. 그러니 입구에서부터 병목이 생길 수밖에요.


[성시은] : 그럼… 문을 여러 개 만들어야 하나요?


[안민준] : 정확합니다. 하지만 더 중요한 게 있습니다. 문을 여러 개 만들어도, 손님들이 어느 문으로 들어가야 할지 모르면 우왕좌왕하다 더 큰 혼란이 생기겠죠. 이제 대표님 가게 입구에 아주 똑똑한 ‘지배인’을 한 명 세워야 합니다. 그 지배인은 밀려드는 손님들을 보고, 비어 있거나 가장 빨리 빠질 테이블이 어디인지 즉시 파악해서 손님들을 그쪽으로 안내해주는 역할을 할 겁니다.


그가 또다시 링크 하나를 공유했다. ELB (Elastic Load Balancer). ‘탄력적인 부하 분산 장치’라는, 이름만 들어서는 도무지 감이 잡히지 않는 단어였다. 하지만 ‘손님을 빈 테이블로 안내하는 지배인’이라는 비유를 듣는 순간, 시은의 머릿속에 희미한 길이 보이기 시작했다.


▶ 5화 기술 TIP

트래픽 스파이크 (Traffic Spike): 성공적인 마케팅 캠페인, 언론 보도, SNS 바이럴 등으로 인해 웹사이트나 앱의 접속량이 짧은 시간 안에 폭발적으로 증가하는 현상입니다. 스타트업에게는 성장의 기회이자, 준비되지 않은 인프라에는 치명적인 위기가 될 수 있습니다.

단일 장애점 (Single Point of Failure, SPOF): 시스템 전체에서, 하나의 구성 요소가 고장 나거나 한계에 부딪히면 전체 시스템이 멈추게 되는 지점을 의미합니다. 5화의 ‘이노베이트’에게는 단 한 대뿐인 EC2 인스턴스가 바로 단일 장애점이었습니다. 아무리 다른 부분이 튼튼해도, 가장 약한 한 부분이 무너지면 모든 것이 무너집니다.

504 Gateway Time-out: 게이트웨이 또는 프록시 역할을 하는 서버가 상위 서버(여기서는 EC2)로부터 정해진 시간 내에 응답을 받지 못했을 때 발생하는 에러입니다. 502 에러가 ‘주방에서 불이 났거나, 주방장이 이상한 소리를 낸다’는 의미라면, 504 에러는 ‘주방장이 살아는 있는데, 주문이 너무 밀려서 내 주문을 쳐다보지도 못하고 있다’는 의미에 가깝습니다. 서버가 죽은 것은 아니지만, 과부하로 인해 정상적인 서비스가 불가능한 상태입니다.

로드 밸런서 (Load Balancer): ‘부하 분산 장치’라는 이름 그대로, 외부에서 들어오는 네트워크 트래픽(부하)을 여러 대의 서버(EC2 인스턴스)에 균등하게 분배(분산)해주는 장치 또는 기술입니다. 한 서버에 트래픽이 몰리는 것을 방지하여 시스템의 전반적인 처리 속도와 안정성을 높여줍니다. 안민준의 ‘손님을 빈 계산대로 안내하는 지배인’ 비유가 로드 밸런서의 핵심 역할입니다. AWS에서는 Elastic Load Balancing (ELB) 이라는 서비스로 제공됩니다.

keyword
월, 수, 금 연재