추리물에서 종종 등장하는 ‘다잉 메시지’를 아시나요? 피해자가 마지막 힘을 짜내 바닥에 단서를 적어두고, 이 단서를 기반으로 사건을 풀어나가는 그런 이야기 말입니다. 알쏭달쏭한 기호 하나만 남겼다면, 탐정은 이야기 내내 그 뜻을 두고 씨름합니다. 아무것도 남기지 못했다면, 완전 범죄가 되기도 합니다.
프로그램에도 다잉 메시지가 있습니다. 무언가 잘못되어 더는 나아갈 수 없을 때, 프로그램은 죽기 직전에 한마디를 남깁니다. 우리가 컴퓨터를 쓰다 한 번쯤 마주쳤을, 그 알 수 없는 ‘에러 메시지’입니다. 그리고 이 마지막 한마디에도 잘 남기는 것과 못 남기는 것이 있습니다.
아무 말 없이 죽는 프로그램
가장 답답한 것은 이렇다 할 말 없이 멈추는 프로그램입니다. 그저 “오류가 발생했습니다” 한 줄만 띄우고 죽어버립니다. 단서 없는 다잉 메시지입니다. 이런 메시지를 받은 개발자는 막막합니다. 무엇이 잘못됐는지, 어디서 멈췄는지, 왜 그랬는지 알 길이 없으니까요. “어딘가 아파요”라고만 말하고 쓰러진 환자 앞에 선 의사처럼, 도와주고 싶어도 손쓸 방법을 찾지 못합니다.
그런데 이보다 더 고약한 경우가 있습니다. 아무 말도 없이, 멈추지도 않고, 잘못된 채로 계속 돌아가는 프로그램입니다. 개발자들은 이것을 ‘조용한 실패(silent failure)‘라 부릅니다. 겉으로는 멀쩡히 돌아가는 듯 보이지만, 속으로는 틀린 결과를 묵묵히 내놓고 있는 상태입니다. 아무런 신호가 없으니 문제가 있다는 걸 눈치채는 사람도 없고, 그렇게 잘못은 한참을 곪다가 훨씬 더 큰 사고로 터집니다. 차라리 그 자리에서 요란하게 멈춰 섰다면 일찌감치 손쓸 수 있었을 텐데 말입니다.
그래서 개발자들 사이에는 이런 감각이 있습니다. 실패는 조용한 것보다 시끄러운 편이 낫다. 문제를 감추고 버티는 것보다, 드러내고 멈추는 편이 안전하다는 것입니다. 잘못됐으면, 잘못됐다고 분명히 말해야 합니다.
404, 500, 503
사실 우리는 프로그램의 다잉 메시지를 생각보다 자주 봅니다. 인터넷을 쓰다 마주치는 그 숫자들이 바로 그것입니다. 그리고 같은 죽음이라도, 숫자마다 남기는 말의 결이 다릅니다.
가장 낯익은 건 404입니다. “찾으시는 페이지를 찾을 수 없습니다.” 무언가 잘못됐다는 신호치고는 꽤 친절한 다잉 메시지입니다. 무엇이 왜 안 됐는지 짚어주니까요. 그 주소에 그런 건 없다고요. 하도 자주 마주치다 보니, 404 화면을 아기자기하게 꾸며 두는 사이트도 많습니다. 실패를 감추기는커녕, 그 자리를 아예 하나의 볼거리로 만들어 둔 것입니다.
500은 성격이 다릅니다. “서버 내부 오류(Internal Server Error).” 서버 안쪽 어딘가에서 무언가 터졌다는 말인데, 정작 그게 뭔지는 알려주지 않습니다. 사용자도, 때로는 개발자마저도, “속에서 뭔가 잘못됐구나”까지밖에 알 수 없습니다. 이렇게 입을 다물고 있으니, 개발자는 프로그램이 평소에 적어둔 속기록, 곧 로그를 뒤져 진짜 사연을 캐내야 합니다. 404가 범인의 이름을 적어둔 다잉 메시지라면, 500은 “으윽” 소리 하나만 남기고 쓰러진 쪽입니다.
503은 또 다릅니다. “지금은 서비스를 이용할 수 없습니다(Service Unavailable).” 이건 고장 신고라기보다 공지사항에 가깝습니다. 어딘가 부서졌다기보다, 지금 이 순간 감당할 몫을 넘어섰다는 뜻입니다. 사람이 한꺼번에 몰리는 명절 기차표 예매나 공연 티켓 오픈 때 보셨을 수도 있습니다. 망가져서 못 하는 게 아니라, “지금 벅차니 조금 뒤에 다시 와 달라”고 말하는 것입니다. 흔히 ‘서버가 터졌다’ 라고 표현하는 것이 대부분 이 사례에 포함됩니다.
숫자 몇 개일 뿐이지만, 남기는 메시지는 저마다 다릅니다. 하나는 무엇이 없는지 콕 집어 말해주거나 아무 메시지도 못하고 쓰러지기도합니다. 나머지 하나는 아예 지금 벅차다고 솔직히 말하기도합니다. 이 외에도 약속된 에러코드는 아주 많습니다. 잠깐 재미있는 이야기를 해볼까요, 이 에러코드들을 몇가지 알고 있다면, 설령 영어를 못하더라도 숫자 3개만으로 미국인 개발자와 마치 SOS 신호처럼 간단한 의사소통을 할 수 있을지도 모릅니다. 404 (못 찾겠음!) 이라고요. 이 정도 유머에 배꼽 잡고 웃으셔야 개발자들이랑 친해지실 수 있을지도 모릅니다. 재미 없는 농담은 이쯤 할게요.
메시지를 잘 남기는 법
그렇다면 잘 남긴 다잉 메시지는 어떤 모습일까요. 그것은 시끄럽게 죽는 데 그치지 않고, 정확하게 죽습니다.
좋은 에러 메시지에는 대개 이런 것들이 담깁니다. 무엇을 하려다 실패했는지, 왜 실패했는지, 어디서 멈췄는지. 잘 만든 것은 여기에 한 가지를 더 얹기도 합니다. 어떻게 하면 고칠 수 있는지까지요.
프로그래밍 언어들이 그 좋은 예입니다. 예전의 무뚝뚝한 도구들은 코드에 문제가 있으면 그저 “문법 오류”라고만 뱉고 멈췄습니다. 어디가 왜 틀렸는지는 개발자가 알아서 찾으라는 식이었습니다. 요즘의 친절한 언어들은 다릅니다. “몇 번째 줄의 이 부분이 이래서 문제인데, 혹시 이걸 뜻한 건 아니냐”고 되물어 줍니다. 세미콜론 하나가 빠졌을 뿐인데 온 코드가 통째로 멈췄을 때, 바로 그 빠진 지점을 손가락으로 짚어주는 것입니다. 어떤 다잉 메시지는 범인이 걸어온 길까지 고스란히 남겨둡니다. 개발자들이 ‘스택 트레이스’라 부르는 것이 그렇습니다. 프로그램이 죽는 순간, 자기가 어디서 출발해 어디를 거쳐 여기까지 왔는지, 그 발자국을 되짚어 남기는 흔적입니다.
이런 메시지를 받은 개발자는 헤매지 않습니다. “아, 이 파일을 못 찾아서 이 줄에서 멈췄구나. 경로를 고치면 되겠다.” 문제의 정체가 손에 잡히니, 손 봐야 할 지점도 눈에 들어옵니다.
여기에 에러 메시지의 핵심이 있습니다. 좋은 메시지와 나쁜 메시지를 가르는 기준은, 그것이 얼마나 정중하거나 보기 좋으냐가 아닙니다. 그것을 본 사람이 도울 수 있느냐입니다. “그냥 안 돼요”라고 남기고 죽은 프로그램은 누구도 구할 수 없습니다. 어디가 왜 아픈지 모르니까요. 반면 “이것 때문에, 여기서, 이렇게 멈췄어요”라고 남긴 프로그램은, 그 한마디로 구조신호를 보내는 것이기도 합니다.
잘 무너질 줄 안다는 것
프로그램만 그런 것은 아닙니다.
누군가 고민을 털어놓을 때를 떠올려 봅니다. “나 요즘 너무 힘들어.” 이 말을 들으면 마음은 쓰이지만, 정작 무엇을 어떻게 해줘야 할지는 알기 어렵습니다. 안타까운 마음에 등을 두드려 주는 것 말고는, 손 내밀 자리가 잘 보이지 않습니다. “어딘가 아파요”라는 말만으로는 의사도 처방을 내리지 못하는 것과 같습니다.
그런데 같은 사람이 이렇게 말한다면 어떨까요. “이번 달에 일이 몰린 데다 잠까지 못 자서, 요즘은 사소한 일에도 자꾸 무너진다.” 그제야 듣는 사람은 도울 자리를 찾습니다. 일을 좀 나눠 지든, 하루 쉬라고 붙들든, 우선 잠부터 자라고 하든요. 무엇이 왜 힘든지가 드러나야, 비로소 도움도 방향을 잡습니다.
우리가 도움을 받지 못하는 까닭은, 흔히 생각하듯 우리가 약해서가 아닙니다. 자신이 어떻게 힘든지를 정확히 옮기지 못해서인 경우가 많습니다. 막연한 호소는 허공으로 흩어지지만, 구체적인 이야기는 사람을 불러 세웁니다. 그러니 잘 남긴다는 것은, 자기 상태를 정직하게 들여다보고 그것을 남이 알아들을 말로 옮겨내는, 꽤 어렵고 성숙한 능력입니다. 프로그램이 죽는 순간 제대로 된 다잉 메시지를 남기려 애쓰듯, 우리도 잘 무너지는 법을, 잘 도움을 청하는 법을 익힐 수 있습니다.
다시 처음으로 돌아가 봅니다. 가장 위험한 것은 시끄럽게 죽는 쪽이 아니라, 아무 말 없이 잘못된 채로 버티는 쪽이었습니다. 사람도 그렇습니다. 괜찮은 척 견디며 속으로 곪아가는 편이, 어느 지점에서 딱 멈춰 서서 “나 지금 잘못되어 가고 있다”고 말하는 편보다 위험합니다. 조용한 실패는 누구의 도움도 부르지 못한 채, 더 큰 무너짐으로 이어지니까요.
물론 아무 때나 아무렇게나 큰 소리를 내라는 말은 아닙니다. 프로그램이 사소한 일까지 요란하게 굴면, 정작 중요한 한마디가 그 소음에 묻혀버립니다. 중요한 건 소리의 크기가 아니라 정확함입니다. 무엇이, 왜, 어떻게 잘못됐는지를 빠짐없이 전하는 것. 그것이 자신을 구하고, 남이 손 내밀 자리를 열어두는 일입니다.
잘 만든 프로그램은, 잘 작동하는 법만큼이나 잘 멈추는 법을 압니다. 그리고 잘 멈춘다는 것은, 죽는 순간까지 제 상태를 말로 남길 줄 안다는 뜻이기도 합니다. 그렇게 남긴 다잉 메시지가, 도리어 다시 일어설 실마리가 되어 줍니다. 우리가 남기는 말들도 그럴 수 있다면, 무너지는 일이 조금은 덜 두려워지지 않을까요.
댓글 (0)
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요.