Hotfix는 급하게

by 박정욱

오류는 성장의 씨앗이었다


작년에 회사에서 있었던 일이다. 한 탐원이 실수로 테스트용 서버를 멈추게 만들었다. 무한반복에 빠진 처리가 서버를 마비시키고 있었고, 그 후배는 어쩔 줄 몰라 했다. 3년 전의 나였다면 어떻게 이런 실수를 할 수 있는 거지 생각하고 혼냈을지도 모른다. 하지만 지금은 다르다. 차분하게 서버를 다시 시작하고 무한반복 구간을 수정해준 후, 괜찮다고 말해주었다. 그 팀원의 얼굴에서 긴장이 풀리는 것이 보였다.


돌이켜보면 가장 많은 것을 배운 순간들은 모두 긴급상황이었다. 평온한 일상에서는 그냥 정해진 루틴을 따라가면 되지만, 예외 상황에서는 빠르게 판단하고 결정해야 한다. 그 과정에서 우리는 더 깊이 생각하게 되고, 더 넓은 관점을 갖게 된다. 그리고 마치 근육이 무거운 것을 들어올릴 때 더 강해지는 것처럼 더 단단해진다.


첫째딸이 열이 났을 때 응급실에서 보낸 날들이, 지금 둘째딸의 컨디션을 더 정확하게 파악할 수 있게 해준다. 신입 때 데이터를 모조리 날리거나 서버를 다운 시켜 진땀을 흘리며 고쳤던 그 경험이 지금 후배들에게 "괜찮다"고 말해줄 수 있는 여유를 만들어준다. 모든 실패와 당황과 불안이 결국은 더 나은 부모, 더 나은 동료로 만들어주는 재료였던 것이다.


이렇게 급한 대응을 해야할 때 기존의 절차를 무시하고 바로 서비스에 적용하는 것을 hotfix라고 한다. hotfix가 자주 필요하다는 것은 좋지 않은 신호이지만, 그 hotfix에 경험들이 우리를 더 단단하게 만들어준다는 것도 사실이다. 완벽한 프로그램이란 없고, 완벽한 육아란 없다. 다만 예외 상황들을 잘 헤쳐나갈 수 있는 여유와 지혜가 있을 뿐이다. 그리고 그 여유와 지혜는, 수많은 새벽 두 시의 급한 대응들이 선물해준 것이다.



빨간 알림창이 뜨던 그 밤에


어느날 자정, 침묵을 깨뜨린 것은 회사 메신저의 알림음이었다. 반듯하게 누워 있던 아내 옆에서 나만 벌떡 일어나 핸드폰을 확인했다. 우리 서비스를 24시간 감시하는 모니터링 시스템이 보내온 메시지에는 빨간색 경고 표시와 함께 "접속자 급증으로 서버 과부하"라는 절망적인 문구가 떠 있었다. 수만 명의 사람들이 동시에 우리 앱을 사용하려고 하는데, 서버가 감당하지 못해서 아무도 로그인조차 할 수 없는 상황이었다.


이것이 바로 개발자들이 가장 두려워하는 'hotfix' 상황이다. 마치 고속도로에서 갑자기 차가 멈춰서 응급처치를 해야 하는 것처럼, 운영 중인 서비스에서 긴급하게 발생한 문제를 즉시 해결해야 하는 상황을 말한다. 평상시라면 여러 번 점검하고, 동료들과 충분히 상의한 후에야 서비스에 반영할 코드를, 지금은 혼자서 떨리는 손으로 직접 적용해야 한다.


관리자 화면을 켜자마자 빨간 경고 메시지들이 폭포수처럼 쏟아진다. "접속 시간 초과", "서버 용량 부족", "처리 실패". 내 심장도 이 경고들과 같은 리듬으로 뛰기 시작했다. 서버를 더 늘리고, 서버 자원을 더 늘리며 하나의 서버가 동시에 처리할 수 있는 접속자 수를 기존보다 5배로 급히 늘리고, 당장 필요 없는 기능들을 임시로 차단한 후, 떨리는 마음으로 적용 버튼을 눌렀다. 잘못하면 전체 서비스가 완전히 멈출 수도 있지만, 지금 상황에서는 이것 말고는 다른 선택지가 없었다. 어찌어찌 그날 밤은 지나갔다.



38.5도의 공포와 눈물


첫째딸이 돌이 막 지났을 때였다. 평소보다 보채더니 점심 먹은 후 갑자기 축 늘어져 있었다. 이마를 짚어보니 뜨겁게 달아오르고 있었다. 체온계를 갖다 대니 38.5도. 그 순간 마치 새벽에 서버 다운 알림을 받았을 때처럼 머릿속이 하얘졌다. 이게 바로 육아판 긴급대응이 필요한 순간이었다.


"어떡하지, 어떡하지." 혼잣말을 중얼거리며 급하게 해열제를 찾았다. 소아용 해열제는 몇 시간 간격으로 줘야 하는지, 몇 ml를 줘야 하는지 겉포장지를 여러 번 읽고 또 읽었다. 미지근한 물수건으로 몸을 닦아주고, 10분마다 체온을 재고, 인터넷에서 "돌아기 고열 응급실"을 검색했다. 검색 결과는 나를 더 공포에 떨게 했다. 마치 처음 만나는 에러 코드 앞에서 온라인 질문 사이트를 뒤지는 초보자 같았다.


밤 아홉시가 되어도 열이 39도를 넘나들었다. 결국 119로 전화를 걸었다. 119에서는 당직 소아과 의사에게 통화 연결을 해줬으며 의사에 판단하에 구급차를 보내주겠다고 했다. 나는 마음이 조급하고 당황스러운데 아무 일 아니라는 식의 의사의 태도와 언행은 서운하면서 불쾌하기까지 했다. 그래도 전문가니까 의사의 지시대로 이행했다. 지금이라도 응급실로 뛰어 가야하나 싶었다. 처음 겪는 상황에서는 모든 것이 세상이 무너지는 듯한 비상사태처럼 느껴졌다. 작은 체온 변화조차 치명적인 시스템 오류처럼 다가왔다.



둘째에게서 배운 차분함의 미학


둘째딸이 태어나고 세 돌이 지난 어느 일요일 오후, 역시나 38.5도의 열이 찾아왔다. 하지만 이번에는 달랐다. 일단 둘째딸의 전체적인 상태부터 살폈다. 눈빛은 또렷한지, 놀 때는 잘 노는지, 물은 잘 마시는지, 소변 색깔은 어떤지. 마치 컴퓨터 전체의 상태를 점검하는 숙련된 기술자처럼 차근차근 체크했다.


"아, 이 정도면 괜찮겠네." 해열제를 먹이고 수분을 충분히 섭취하게 한 후, 하룻밤을 지켜봤다. 새벽에 한 번 깨서 체온을 재어보니 37.8도로 떨어져 있었다. 다음 날 아침에는 약효가 떨어져 열이 다시 올라갔고 해열제를 먹기 전에 일반 소아과에서 간단한 진료를 받았다. 의사도 "잘 관리하셨네요"라고 말했다.


이것이 바로 초보자와 숙련자의 차이였다. 처음 일을 배우는 사람은 작은 문제에도 세상이 무너지는 것처럼 당황한다. 오류 메시지를 읽는 것조차 두렵고, 혹시라도 더 큰 문제를 일으킬까 봐 아무것도 건드리기 무섭다. 하지만 경험이 쌓인 사람은 "아, 이거구나" 하며 웃으면서 원인을 찾아보고, 어디서 문제가 생겼는지 추론하며, 차분하게 해결책을 찾는다.


첫째딸을 키우며 겪었던 수많은 밤샘과 걱정과 노력들이 이제는 든든한 안전장치가 되어 있었다. 언제 정말 병원에 가야 하는지, 언제 집에서 지켜봐도 되는지를 구분할 수 있는 여유가 생겼다. 그 여유는 경험이라는 이름의 지식 창고에서 나온 것이었다.



완벽하지 않아도 돌아가는 시스템의 지혜


개발을 하면서 가장 절망적이면서도 가장 성장하는 순간이 있다. 바로 내가 완벽하다고 생각했던 프로그램에서 예상치 못한 오류가 터져 나올 때다. 3개월 동안 공들여 만든 시스템에서 특정 유저에게만 이상 현상이 생긴다던지, 꼼꼼하게 점검한 검색 기능이 특정 단어에서만 오류를 뱉는다던지. 그럴 때마다 완벽한 프로그램이란 존재하지 않는다는 것을 깨닫게 된다. 그리고 우리가 할 수 있는 최선은 예외 상황에 유연하게 대응할 수 있는 회복력을 기르는 것이라는 걸 배운다.


육아도 정확히 같다. 아무리 책을 탐독하고 선배 부모들의 조언을 구해도, 우리 아이만의 고유한 특성과 예측 불가능한 상황들은 계속해서 찾아온다. 갑자기 밤새 울어대는 수면 퇴행이 온다던지, 어제까지 잘 먹던 밥을 오늘부터는 절대 안 먹겠다고 한다던지, 아무 이유 없이 어린이집에 가기 싫다며 현관에서 뒹군다던지. 그럴 때마다 우리는 부모로서의 hotfix를 한다.


하지만 지금은 그 모든 예외 상황들이 사실은 아이가 성장하고 있다는 신호라는 것을 안다. 마치 사용자가 늘어나면서 생기는 서버 부하가 서비스가 커지고 있다는 증거인 것처럼. 완벽하게 통제된 환경에서는 진짜 성장이 일어나지 않는다. 예측 불가능한 상황들을 헤쳐나가면서, 아이도 부모도 함께 더 단단해진다.



그때 그 새벽이 만든 오늘의 여유


이제는 새벽에 회사 메신저 알림이 와도 예전처럼 심장이 터질 듯 뛰지 않는다. 일단 알림 내용을 차분히 읽어보고, 문제의 심각성을 확인하고, 영향 범위를 파악한다. 정말 모든 사용자가 서비스를 이용할 수 없는 치명적인 상황인지, 아니면 일부 기능에만 영향을 주는 경고 수준인지를 먼저 판단한다. 만약 진짜 긴급상황이라면 여전히 잠옷 차림으로 컴퓨터 앞에 앉아 문제를 해결한다. 하지만 단순히 느린 처리나 일시적인 부하 증가라면 "내일 아침에 확인하자"며 다시 잠자리에 든다.


아이들도 마찬가지다. 첫째딸과 둘째딸이 밤에 갑자기 깨서 울어도 이제는 울음소리만 들어도 대략적인 상황 파악이 가능하다. "응애응애" 하는 짧은 울음은 보통 기저귀고, "으아앙"하는 긴 울음은 배가 고프거나 어디 아픈거고, "끙끙" 거리는 것은 그냥 잠꼬대다. 아이 하나하나의 신호 패턴을 읽을 수 있게 된 것이다.


요즘 팀원들이 사소한 오류에도 당황하며 도움을 요청해올 때면 괜히 잘난 척하고 싶은 마음이 들 때도 있다. "아, 그거? 별거 아니야." 하고 말하고 싶지만, 그러지 않는다. 대신 그때 내가 얼마나 당황했었는지, 얼마나 많은 밤을 새워가며 비슷한 문제들과 씨름했는지를 이야기해준다. 그리고 "괜찮다, 나도 그랬어"라고 말해준다. 지금의 여유는 당연한 것이 아니라 수많은 실패와 경험이 쌓여서 만들어진 것이라는 걸 알기 때문이다.



버그는 성장의 기회였다


돌이켜보면 가장 많은 것을 배운 순간들은 모두 Hotfix 상황이었다. 평온한 일상에서는 그냥 정해진 루틴을 따라가면 되지만, 예외 상황에서는 빠르게 판단하고 결정해야 한다. 그 과정에서 우리는 더 깊이 생각하게 되고, 더 넓은 관점을 갖게 되고, 더 단단해진다.


개발에서도 그렇고 육아에서도 그렇다. 처음에는 모든 예외 상황이 두렵고 힘들다. 하지만 그런 상황들을 하나씩 겪어내면서, 우리는 조금씩 성장한다. 더 나은 시스템을 만들고, 더 여유로운 부모가 된다. 그리고 언젠가는 새로운 개발자나 새로운 부모들에게 "괜찮다, 나도 그랬어"라고 말해줄 수 있는 사람이 된다.


결국 Hotfix가 자주 필요하다는 것은 좋지 않은 신호이지만, 그 Hotfix 경험들이 우리를 더 단단하게 만들어준다는 것도 사실이다. 완벽한 시스템이란 없고, 완벽한 육아란 없다. 다만 예외 상황들을 잘 헤쳐나갈 수 있는 여유와 지혜가 있을 뿐이다. 그리고 그 여유와 지혜는, 수많은 새벽 두 시의 급한 대응들이 선물해준 것이다.