삼십 대에 핀란드에서 시작하는 개발자 인턴
소프트웨어 분야에서 내가 개발자로 진득하게 남아 있기 위해 필요한 건 무엇보다 강력한 맷집이다. 너무나 당연하지만 잊고 있었던 이 메시지를 어제와 오늘 벌어졌던 큰 사건 하나로 깨닫는다.
이번 업무는 데이터 베이스 모델을 건드려야만 하는 일이었다. 진짜 내가 해도 되는 일인지, 혹시나 잘못된다면 프로덕트에 큰 타격을 줄 수 있으므로 시니어 개발자에게 확인차 다시 물어봤다. "이거 진짜 내가 해도 괜찮은 일이야?"
시니어 개발자는 문제없다고, 한번 해보라고 도전정신을 심어줬고 그렇게 나는 데이터 베이스 관련 업무를 시작했다. 업무를 마치고 시니어에게 코드 리뷰를 부탁했는데, 나보다 1년 정도 더 일한 다른 인턴에게 내 코드 리뷰를 시켰다. 사실 이게 헬게이트를 여는 열쇠였는데 그때는 단순한 기능 추가라 나도 전혀 문제 될 게 없을 거라고 생각했다. 리뷰를 마치고 평소대로 코드를 마스터 브랜치로 merge 하고 파이프라인을 무사 통과하는 걸 지켜보았다. 그런데 서비스 사이트를 들어가 확인해 보니 서버가 다운된 것이 아닌가. 정말 아차! 싶었고 바로 시니어 데브옵스에게 알렸다. 데브옵스가 Not good, not good 이라며 연달아 에러 메시지들을 캡처해서 보내는데 알림벨이 울릴 때마다 맨탈이 털털 나가기 시작했다. 상황이 좋지 않다는 걸 인지할 수 있었고, 이번주 내내 부족하다고 느꼈던 개발자로서의 재능에 확인 도장을 받는 기분이었다.
맨탈이 무너진 건 스크럼 미팅 때였다. 평소처럼 오늘 있었던 일을 공유하는데, 내 코드를 리뷰를 했던 인턴이 개발자 공유 문서에 ㅇㅇ의 티켓을 merge 하고 나서 서버가 다운됐다는 노트를 남기고 미팅에는 참석하지 않았다. 지금 생각해 보면 그 당시 나는 주눅 들지 않고 문제를 제기했어야 했다. 핵심 원인이 확인되지 않은 상황에서 문제를 언급할 때 티켓 넘버가 아닌 내 이름을 올리는 건 옳지 않다고 말이다. 사고의 원인은 모른 채 모든 화살을 내가 맞는 느낌이었다. 스크럼 미팅이 끝나자마자 쏟아지는 눈물을 멈출 수가 없었다. 진짜 내 길이 아닌가, 도대체 나에게 맞는 길은 뭔가, 세상 참 어렵다며 혼자 슬픈 결말의 소설을 써 내려가고 있었다.
한참 욕실에 박혀 울고 있는데 문득 이건 아니지 싶었다. 이 일로 인턴이 잘리더라도 문제의 원인이라도 제대로 알아야지 억울하지 않을 것 같았다. 그렇게 업무가 끝나고 밤늦게까지 컴퓨터에 매달려 Prisma ORM 문서를 읽고 타임라인을 작성해 갔다. 그리고 문제의 원인과 함께 가능한 복구 가능책을 정리해서 오늘 아침에 정리해서 팀원들에게 공유했다. 정리한 솔루션대로 문제 해결을 시도해 보니 서비스가 원활히 다시 작동되었다.
결론적으로 말하면 문제의 원인은 내가 아닌 다른 인턴의 코드에 있었다. 내가 아침에 타임라인을 공유했을 땐 이미 다른 개발자들도 인지하고 있는 듯했다. 다른 인턴의 코드가 서비스에 반영되었을 때부터 서버에 문제가 생겼는데, 공교롭게도 내 코드를 merge 하고 스스로 문제를 발견한 공교로운 타이밍이 모두가 나를 의심하게 만든 것이다.
어제 나는 내 인턴쉽과 이 업에서의 끝을 생각하며 잠을 설치며 슬픔을 장식하고 있었는데, 오늘 아침 다른 인턴을 보니 무슨 일이 있었나 싶을 정도로 굉장히 평범했다. 나에게 Do not worry, no sweat.이라고 말하는데 사건의 당사자가 저렇게 마음이 편할 수 있다니. 새삼 그의 쿨함이 부러웠다. 그리고 저 친구는 아무리 비슷한 문제를 만나도 꿋꿋하게 오래갈 수 있겠다는 생각이 들었다.
쫄보인 나에게 어렵겠지만 어제오늘 일로 마음 단단히 먹어야겠다. 딱히 좋아하는 것도, 잘하는 것도 없는 상황에서 이 정도의 일로 내 업의 끝을 상상하는 건 비현실적이다. 쉬운 길이 아니라고는 알고 있지 않았나. 그동안 했던 일들과 비교해 보면 지금 참 좋은 환경에서 성격에 잘 맞는 일을 하고 있는 거다. 진짜 개발의 맛을 볼 때까지 일하고 싶다면, 아무리 맞아도 맞는 게 별거냐 싶게 벌떡 벌떡 일어나는 오뚝이처럼 무덤덤할 수 있는 맨탈이 필요하다.