문과생 성시은의 AWS 정복기
금요일 밤 10시. ‘이노베이트’의 사무실은 고요한 전쟁터 같았다. 창밖 지축의 밤은 깊은 어둠에 잠겨 있었지만, 사무실의 불은 대낮처럼 환했다. 중앙의 화이트보드에는 ‘DB 마이그레이션 작전 계획: 코드명 ‘심장 이식’’이라는 비장한 제목 아래, 알아볼 수 없는 다이어그램과 타임라인, 그리고 롤백(Rollback) 시나리오까지 빽빽하게 그려져 있었다.
박서준은 지휘관처럼 화이트보드 앞에 서서 마지막 점검을 하고 있었다. 그의 눈은 피로에 지쳐 있었지만, 이상하게도 지난 몇 주간 그를 짓누르던 무기력함 대신 날카로운 생기가 돌았다. 이철민은 여러 개의 검은 터미널 창을 띄운 채, 전투를 앞둔 특수부대원처럼 손가락을 풀며 키보드 위에 손을 얹고 있었다. 성시은은 갓 내린 커피와 산더미처럼 쌓인 샌드위치를 들고 두 사람에게 다가갔다.
“두 분, 괜찮으세요? 시작도 전에 쓰러지실 것 같은데. 지금이라도 한숨 주무시는 게….”
“괜찮습니다.” 박서준이 돌아보며 말했다. 그의 목소리에는 긴장감과 함께 묘한 흥분마저 섞여 있었다. “오히려… 후련합니다. 드디어 이 지긋지긋한 빚을, 이 썩은 심장을 도려낼 수 있으니까요.”
이철민도 거들었다. 그의 얼굴에서도 평소의 장난기는 찾아볼 수 없었다. “대표님, 걱정 마세요. 제가 옆에서 형님 잘 보좌하겠습니다. 이번 수술, 메스. 완벽하게 끝내 보죠.”
어색했던 두 사람의 관계가 공동의 적, ‘기술 부채’와 ‘알고리듬’이라는 외부의 위협 앞에서 극적으로 회복되고 있었다. 시은은 안도하며 물었다.
“그래서… 지금부터 정확히 뭘 하는 거죠? 제가 도울 일은 없을까요? 코드는 못 짜도, 뭐… 커피라도 계속 타 올게요.”
“지금부터 저희는 ‘달리는 자동차의 엔진을 교체하는 수술’을 시작할 겁니다.” 서준이 화이트보드를 가리키며, 시은이 이해할 수 있는 언어로 차근차근 설명했다. “기존 EC2 인스턴스 안에 우리가 직접 설치해서 쓰던 낡고 힘없는 데이터베이스 엔진의 모든 데이터를, AWS가 24시간 완벽하게 관리해주는 최신형 고성능 엔진 RDS로 옮기는 작업입니다.”
그는 말을 이었다. “가장 중요한 건 데이터의 정합성입니다. 옮기는 과정에서 단 하나의 데이터라도 유실되거나 변경되면, 그건 재앙이거든요. 고객의 결제 정보가 사라지거나, 후원 기록이 뒤섞일 수도 있어요. 그래서 일단 기존 DB를 ‘읽기 전용’으로 바꾸고, 서비스를 점검 상태로 돌립니다. 그리고 그 순간의 데이터를 사진 찍듯 복사본을 뜨는 ‘스냅샷’ 작업을 합니다. 그리고 그 사진 파일을, 새로 만들어 둔 RDS에 그대로 부어 넣는 거죠. 이 작업이 몇 시간이나 걸릴지… 아무도 모릅니다.”
“그럼 그동안 서비스는 완전히 멈추는 건가요?”
“네. 그래서 사용자가 가장 적은 주말 밤을 택한 겁니다. 저희가 홈페이지에 공지 올린 대로, 내일 아침 9시까지는 모든 작업을 끝내고 서비스를 정상화해야 합니다. 그게 데드라인입니다.”
시은은 마른침을 삼켰다. 그녀가 할 수 있는 일은 두 사람을 믿고, 기도하는 것뿐이었다.
“자, 그럼… 시작하겠습니다. 서비스 점검 모드로 전환합니다.”
박서준의 선언과 함께, 이철민이 스크립트 실행 명령어를 입력했다. ‘커넥트-AI’의 모든 페이지가 ‘서비스 점검 중입니다. 더 나은 모습으로 찾아뵙겠습니다.’라는 안내문으로 바뀌었다. 이제 돌아올 수 없는 강을 건넜다.
데이터 이전 작업이 시작되었다. 모니터 화면에 데이터 전송률을 나타내는 숫자들이 빠르게 올라가기 시작했다. 작전은 순조롭게 진행되는 듯했다. 새벽 1시, 2시… 시간은 흘러갔고, 데이터 이전 진행률을 나타내는 파란색 막대그래프는 꾸준히 오른쪽으로 나아갔다.
하지만 새벽 3시가 넘었을 때, 문제가 터졌다.
“형, 속도가… 속도가 갑자기 10분의 1로 줄었어요. 예상 완료 시간이… 12시간으로 나오는데요?”
이철민의 다급한 목소리에 잠시 눈을 붙이려던 박서준이 달려왔다. 파란색 막대그래프가 달팽이처럼 기어가고 있었다. 이 속도라면 아침 9시는커녕, 내일 저녁에도 끝나지 않을 기세였다. 최악의 시나리오였다.
“젠장… 특정 테이블에서 병목이 생긴 것 같아. 과거에 잘못 설계했던 로그 테이블이야. 인덱스가 완전히 꼬였어.” 서준이 머리를 쥐어뜯었다. “이거 해결하려면 마이그레이션을 처음부터 다시 시작해야 해. 그럼 시간은….”
절망적인 침묵이 사무실을 감쌌다. 시은의 손발이 차갑게 식었다. 이대로 서비스는 하루 종일 멈추게 될 것이다. ‘행복한 동행’은 물론, 모든 고객의 신뢰를 잃게 될 터였다.
그때, 이철민이 번뜩이는 눈으로 말했다.
“형, 방법이 하나 있어요. 위험하긴 한데… 안민준 님이 말했던 거요. DMS(Database Migration Service). 일종의 데이터 이사 전문 업체 같은 거요. 이걸 쓰면 서비스 중단 없이 실시간으로 데이터를 복제하고 동기화할 수 있어요. 우리가 직접 포장하고 나르는 게 아니라, 포장이사 전문가에게 맡기는 거죠.”
“DMS는… 나도 알지.” 서준의 목소리는 패배감에 젖어 있었다. “하지만 우린 테스트 한번 안 해봤잖아. 설정 하나만 잘못해도 데이터가 통째로 날아갈 수 있어. 이건 그냥 이사가 아니라, 국보급 문화재를 옮기는 거라고. 너무 위험해.”
“이대로 가면 어차피 약속 시간 못 지켜요! 그럼 고객 신뢰는 바닥이고, ‘행복한 동행’은 바로 계약 해지할 겁니다. 형!” 이철민이 처음으로 서준의 어깨를 잡았다. “지금 우리한테 안전한 길은 없어요. 덜 위험한 길만 있을 뿐이라고요!”
두 사람의 눈이 허공에서 부딪혔다. 시은은 깨달았다. 지금은 리더의 결단이 필요한 순간이라는 것을. 그녀는 두 사람에게 다가가 말했다.
“철민 님 말을 따르죠.”
“대표님!” 서준이 놀라 그녀를 바라봤다.
“서준 님 말이 맞아요. 위험하겠죠. 하지만 철민 님 말도 맞아요. 이대로 가면 우린 어차피 죽어요. 전 실패하더라도, 아무것도 안 하고 죽는 것보다 뭐라도 해보고 죽는 쪽을 택하겠어요.”
그녀는 두 사람의 눈을 똑바로 바라보았다. “그리고 전 두 사람을 믿어요. 서준 님의 꼼꼼함과 철민 님의 돌파력이면, 해낼 수 있을 거예요.”
시은의 단호한 신뢰에, 서준은 더 이상 반대하지 못했다. 그는 말없이 고개를 끄덕였다.
두 사람은 다시 컴퓨터 앞에 앉았다. 이번에는 이철민이 마우스를 잡고 주도하고, 박서준이 그의 옆에서 매뉴얼을 꼼꼼하게 검토하며 더블 체크했다. DMS는 그들의 예상을 뛰어넘는 괴물이었다.
복잡했던 데이터 이전 과정을 몇 번의 클릭만으로 자동화해주었고, 실시간으로 원본 DB와 RDS의 데이터가 동기화되는 과정을 눈으로 보여주었다. 마치 전문 이사업체 팀이 나타나 순식간에 짐을 싸고, 옮기고, 정리까지 해주는 것 같았다.
동이 트기 시작할 무렵, 모든 데이터가 오차 없이 RDS로 복제되었다. 이제 마지막 단계만 남았다. ‘커넥트-AI’의 두뇌가 바라보는 데이터베이스의 주소를, 낡고 삐걱거리던 텃밭에서, 신선하고 체계적인 마켓컬리 물류센터로 바꾸는 작업.
박서준이 마지막 엔터 키를 눌렀다. 서비스가 잠시 멈췄다가, 다시 살아났다. 시은이 떨리는 손으로 관리자 페이지에 접속했다. 모든 데이터가 그대로였다. 아니, 이전보다 훨씬 빨랐다. 데이터베이스를 조회하는 모든 작업의 응답 속도가 마법처럼 빨라져 있었다.
“됐어… 해냈어! 우리가 해냈다고!”
이철민이 의자에서 벌떡 일어나 소리쳤다. 박서준은 안도의 한숨과 함께 의자 깊숙이 몸을 묻었다. 그의 입가에 아주 오랜만에 진짜 미소가 번졌다. 시은의 눈에는 뜨거운 눈물이 고였다.
그들은 달리는 자동차의 엔진을 교체하는 데 성공했다. 이제 그들의 자동차는 더 이상 덜컹거리지 않을 것이다. 더 빠르고, 더 멀리 나아갈 준비가 되었다.
그때, 안민준의 메시지가 도착했다.
[안민준] : 심장 이식 수술은 잘 끝났나 보군요. 환자 상태는 어떻습니까?
[성시은] : 네! 환자는… 이전보다 훨씬 건강해졌습니다! 심장이 막 두 배로 뛰는 것 같아요!
[안민준] : 좋습니다. 그럼 이제 환자에게 영양제를 좀 맞춰주죠. 심장이 아무리 좋아도, 혈액순환이 빨라야 진짜 건강한 거니까요.
그는 ‘ElastiCache’라는 링크를 보내왔다.
“엘라스티캐시… 인메모리 캐시 서비스.” 서준이 나지막이 말했다. “자주 쓰는 데이터를 DB까지 가지 않고, 훨씬 빠른 메모리에 임시로 저장해두는 기술입니다. 도서관(RDS)에서 제일 인기 있는 책 몇 권을, 대출 데스크 바로 옆에 따로 빼놓는 것과 같죠. 그럼 사람들이 책 찾으러 서가 깊숙이 들어갈 필요 없이 바로바로 빌려갈 수 있으니… 속도는 더 빨라지겠네요.”
박서준은 더 이상 농사짓는 요리사가 아니었다. 그는 이제 온전히 ‘요리’에만 집중할 수 있는, 어떻게 하면 음식을 더 맛있고 빠르게 내어갈 수 있을지 고민하는 진정한 셰프가 되어 있었다.
관리형 데이터베이스 (Managed Database): 클라우드 제공업체(AWS, Azure, GCP 등)가 데이터베이스 서버의 설치, 패치, 백업, 모니터링, 고가용성 구성 등 복잡하고 반복적인 운영 업무를 자동화하여 제공하는 서비스입니다. 개발자는 데이터베이스를 ‘운영’하는 부담에서 벗어나 애플리케이션 ‘개발’에만 집중할 수 있습니다.
RDS (Relational Database Service): AWS의 대표적인 관리형 관계형 데이터베이스 서비스입니다. MySQL, PostgreSQL, MariaDB, Oracle, SQL Server 등 널리 사용되는 대부분의 데이터베이스 엔진을 지원합니다. 클릭 몇 번으로 이중화 구성(Multi-AZ)이나 읽기 전용 복제본(Read Replica) 생성이 가능하여 안정성과 성능을 쉽게 확장할 수 있습니다.
데이터베이스 마이그레이션 (Database Migration): 기존 데이터베이스를 새로운 시스템으로 이전하는 과정입니다. 서비스 중단 시간을 최소화하고 데이터의 손실이나 변형 없이 안전하게 옮기는 것이 핵심입니다. 소설에서처럼 서비스 중단이 어려운 경우, 실시간으로 데이터를 복제하고 동기화하는 전문적인 도구가 필요합니다.
DMS (Database Migration Service): AWS에서 제공하는 데이터베이스 마이그레이션 전용 서비스입니다. 최소한의 다운타임으로 데이터베이스를 AWS로 이전할 수 있도록 돕습니다. DMS는 초기 데이터 전체 복사 이후 발생하는 변경 사항을 실시간으로 대상 데이터베이스에 복제(Change Data Capture, CDC)하는 기능을 제공합니다.
ElastiCache: AWS에서 제공하는 완전 관리형 인메모리 캐시 서비스입니다. Redis 또는 Memcached 엔진을 지원합니다. 데이터베이스에서 자주 조회되는 데이터를 훨씬 빠른 메모리에 임시로 저장(캐싱)해 둠으로써, 데이터베이스의 부하를 줄이고 애플리케이션의 응답 속도를 획기적으로 향상시킵니다.