꿈에서 디버깅을 하고 있었다
새벽에 깨서 노트북을 켜고 코드를 확인한 이야기
새벽 3시 47분에 눈이 떠졌다
꿈을 꿨다. 꿈에서 나는 회사 모니터 앞에 앉아 있었다. 화면에 빨간 에러 메시지가 떠 있었다. TypeError: Cannot read properties of undefined (reading 'map'). 이 에러를 고치려고 콘솔을 열고 데이터를 확인하는데, 데이터가 자꾸 바뀌었다. 배열이었다가 null이었다가 숫자가 됐다. 꿈이니까 당연히 비논리적인데, 꿈속의 나는 진지하게 디버깅하고 있었다.
눈이 떠졌다. 새벽 3시 47분. "잠깐, 그 에러 진짜 있지 않나?" 하는 생각이 들었다. 어제 퇴근 전에 PR을 올렸는데, edge case를 안 처리한 것 같은 불안감이 밀려왔다.
노트북을 켰다
이불 속에서 5분을 고민했다. "내일 출근해서 확인하면 되지." 근데 잠이 안 왔다. 불안해서. 결국 노트북을 켜고 코드를 열었다.
const items = data?.results?.map(item => item.name);이 줄이었다. data?.results까지는 옵셔널 체이닝을 썼는데, results가 빈 배열이 아니라 undefined인 경우를 생각 안 했다. API가 결과가 없으면 results 키 자체를 안 보내는 경우가 있다. 꿈에서 본 에러가 맞았다. (정확히 같은 에러는 아니지만 비슷한 문제였다.)
수정은 간단했다. data?.results?.map(...) 에 ?? []를 붙이거나, 위에서 분기 처리를 하면 된다. 3분 만에 고쳤다.
근데 이걸 새벽 3시 47분에 할 일이었냐 하면 아니다.
이런 일이 처음이 아니다
돌아보면 꿈에서 코딩을 한 적이 꽤 있다.
사건 1. 3년 차 때 대규모 리팩토링을 하던 시기. 꿈에서 git merge conflict를 해결하고 있었다. 끝없이 충돌이 나는데 해결해도 해결해도 새 충돌이 생기는 악몽. 땀을 흘리면서 깼다.
사건 2. 배포 전날 밤. 꿈에서 프로덕션 서버가 다운되는 걸 봤다. 대시보드에 빨간 그래프가 치솟는 장면. 다음 날 배포는 문제없이 됐다. 꿈은 그냥 불안이었다.
사건 3. 이번 건. 꿈에서 본 에러가 실제로 있었던 유일한 경우.
왜 꿈에서 코딩을 하는 걸까
심리학적으로 꿈은 낮에 처리하지 못한 정보를 뇌가 정리하는 과정이라고 한다. 개발자는 낮에 코드를 계속 생각하니까 꿈에서도 나오는 게 자연스럽다고 볼 수 있다.
근데 문제는 꿈에서까지 코딩하면 뇌가 쉬는 시간이 없다는 거다. 자면서도 일하고 있는 거잖아. 수면의 질이 안 좋을 수밖에 없다.
동료한테 물어봤더니 "나도 그런 적 있다"는 사람이 6명 중에 4명이었다. 생각보다 많다. 한 동료는 "꿈에서 정규표현식을 쓰고 있었다"고 했는데 그건 좀 무섭다.
이건 번아웃의 신호일 수도 있다
새벽에 깨서 코드를 확인하는 건 정상이 아니다. 이걸 "열정적이다"고 포장하면 안 된다. 퇴근 후에도 일 생각을 못 놓는 건 경계가 무너진 거다.
최근에 야근이 좀 잦았다. 배포 일정이 빡빡해서 주 3회는 9시까지 남았다. 이 시기에 꿈에서 코딩을 하는 빈도가 높아진 것 같다. 상관관계가 있다고 보는 게 맞겠다.
시도하고 있는 것들
퇴근 후에 코드를 안 보려고 노력 중이다. 슬랙 알림을 퇴근 후에 끈다. (근데 가끔 켜본다. 습관이 안 고쳐진다.) 잠들기 전에 기술 관련 콘텐츠를 안 보려고 한다. 유튜브 알고리즘이 코딩 영상을 추천하는데 이걸 넘기는 게 어렵다.
가장 효과가 있는 건 잠들기 전에 소설을 읽는 거다. 킨들로 소설을 20분 정도 읽으면 뇌가 코드 모드에서 이야기 모드로 전환된다. 그날 밤은 꿈에서 코딩을 안 하는 확률이 높다. (체감이라 데이터는 없다.)
그래서 그 PR은
다음 날 출근해서 PR을 업데이트했다. 수정 커밋을 하나 추가. 코드 리뷰에서 아무도 그 부분을 지적하지 않았다. 내가 새벽에 안 고쳤으면 머지됐을 수도 있다.
근데 꿈이 알려줬으니까 고친 거다. 이걸 감사해야 하나, 걱정해야 하나. 둘 다인 것 같다.
오늘은 금요일이다. 주말에는 등산을 가기로 했다. 등산하는 날은 꿈에서 코딩을 안 하더라. 몸이 피곤하면 뇌가 다른 걸 생각할 여유가 없나 보다.