Rain Lag

5분 실패 장부: 코딩 실수를 성장의 모멘텀으로 바꾸기

하루를 마무리하는 5분짜리 간단한 의식으로, 버그와 실패를 학습·자신감·장기적인 개발자 성장의 강력한 엔진으로 바꾸는 방법을 소개합니다.

5분 실패 장부: 코딩 실수를 성장의 모멘텀으로 바꾸기

개발자라면 누구나 이런 순간을 겪어 봤을 겁니다. 암호 같은 에러 메시지, 계속 깨지는 테스트, 도무지 해결되지 않는 고집 센 버그를 멍하니 바라보는 순간 말이죠.

그럴 때 머릿속에 이런 생각이 스칠 수 있습니다.

“내가 실력이 더 좋은 개발자였다면, 이런 일은 안 생겼을 거야.”

하지만 프로그래밍은 그렇게 작동하지 않습니다.

코딩 실수는 당신이 못하는 개발자라는 증거가 아닙니다. 오히려 실력을 키우는 원재료입니다. 빠르게 성장하는 개발자와 제자리걸음처럼 느끼는 개발자의 차이는, 실패를 어떻게 다루느냐에서 갈리는 경우가 많습니다.

실수를 모멘텀으로 바꾸는 가장 단순하고 마찰이 적은 도구가 있습니다. 제가 부르는 이름은 **‘5분 실패 장부(Five-Minute Failure Ledger)’**입니다. 하루 끝에 잠깐, 오늘 무엇이 잘 안 되었는지, 어떻게 접근했고, 무엇을 배웠는지를 짧게 기록하는 작은 의식입니다.

딱 5분이면 됩니다. 그 보상은 수년 동안 복리로 쌓입니다.


코딩 실수는 ‘실력 판결문’이 아니다

먼저 마음가짐부터 바꿔야 합니다.

코드를 쓰는 한, 누구나 반드시:

  • 버그를 배포하고
  • API를 오해하고
  • 요구사항을 잘못 읽고
  • 엣지 케이스를 잊고
  • 잘 돌아가던 걸 깨뜨립니다

이건 완전히 정상입니다. 시니어 엔지니어도 끊임없이 실수합니다. 다만 경험이 쌓이면 달라지는 건:

  • 얼마나 빨리 눈치채는지
  • 얼마나 체계적으로 디버깅하는지
  • 얼마나 침착하게 대응하는지 입니다.

실수를 피해서 잘하게 되는 게 아닙니다. 실수를 처리(process) 하면서 잘하게 됩니다.

실수를 ‘내가 부족하다’는 증거가 아니라, 데이터로 대하기 시작하면 다음과 같은 문이 열립니다.

  • 새로운 패턴과 안티 패턴을 배우고
  • 디버깅 실력이 향상되고
  • 사용하는 도구와 스택에 대한 직관이 생깁니다

5분 실패 장부는 그 과정을 형식화해 주는 아주 간단한 방법입니다.


그냥 복붙으로 고치는 것 vs. 적극적으로 디버깅하기

두 가지 접근 사이에는 큰 차이가 있습니다.

  • Stack Overflow 답변을 맹목적으로 복사해 붙이는 것
  • 여러 자료를 찾아보며 의도적으로 디버깅하는 것

첫 번째 방식은 빠른 ‘해결’은 줄 수 있지만, 두 번째 방식만이 당신을 더 나은 엔지니어로 만듭니다.

적극적으로 디버깅할 때 우리는:

  • 에러 메시지를 대충 보지 않고 꼼꼼히 읽고
  • 무엇이 문제일지에 대한 가설을 세우고
  • 작은 변경을 시도하고 결과를 관찰하고
  • 공식 문서, 이슈 트래커, 블로그, Q&A 사이트 등 여러 출처를 찾아보고 비교·검증합니다.

이 과정은 결코 헛되지 않습니다. 디버깅 세션을 거듭할수록 우리 뇌는 점점 이렇게 학습합니다.

  • 자주 나오는 실패 패턴을 알아봅니다. (null reference, off-by-one 오류, race condition, 환경 설정 문제 등)
  • 특정 에러 메시지를 보면, 가능한 원인을 떠올릴 수 있습니다.
  • 자신만의 디버깅 도구 상자를 가지게 됩니다.

당신의 실수는 귀중한 학습 데이터입니다. 그 데이터를 놓치지 않고 붙잡아 두는 곳이 바로 실패 장부입니다.


에러 메시지를 ‘언어’처럼 읽는 법

처음 에러 메시지를 접하면, 마치 나를 공격하는 수수께끼처럼 느껴집니다. 그런데 시간이 지나면, 익숙해지는 외국어 문장처럼 보이기 시작합니다.

곧 이런 것들을 알아보게 됩니다.

  • 반복해서 보이는 키워드들: undefined, null, timeout, connection refused, permission denied, index out of range
  • 전형적인 구조: 메시지의 어느 부분이 문제 자체를 설명하고, 어느 부분이 위치를 가리키며, 어느 부분이 원인을 암시하는지
  • 스택 트레이스(stack trace): 프레임워크 내부 호출에서 내 코드까지 어떻게 역추적해야 하는지

이런 패턴 인식은 저절로 생기지 않습니다. 반복 노출 + 되짚어 보기를 통해 생깁니다.

  1. 에러를 본다.
  2. 조사한다.
  3. 원인을 찾는다.
  4. 고친다.
  5. 다음으로 넘어간다.

문제는, 대부분 우리는 3번과 4번을 기록하지 않고 그냥 흘려보낸다는 겁니다. 그래서 각 버그는 개별적인 ‘일회성 수업’으로 끝나 버리고, 지식이 축적되지 않습니다.

여기서 버그/실패 일지가 등장합니다.


실패 장부란 무엇이며, 왜 써야 할까?

실패 장부(Failure Ledger) 는, 특히 인상 깊거나 고통스러웠던 실수를 적어두는 단순한 전용 공간입니다.

예를 들면:

  • 해결하는 데 오래 걸린 버그
  • 처음에는 전혀 이해가 되지 않았던 에러
  • 반복해서 저지르는 설정 실수
  • 라이브러리·도구·인프라에서 예상 밖으로 튀어나온 함정(gotcha)

모든 오타나 사소한 실수까지 전부 적을 필요는 없습니다. 그러면 금방 부담스럽고 지칩니다. 대신, 무언가를 분명히 배우게 만든 실패들을 기록합니다.

장부를 두는 형태는 아무거나 좋습니다.

  • 하나의 마크다운 파일 (failure-ledger.md)
  • 노션, Obsidian, OneNote 같은 노트 앱
  • 개인 레포지토리의 위키
  • 심지어 종이 노트

형식도 아주 가볍게 가면 됩니다. 각 실패마다 이런 것만 적어두면 충분합니다.

  • 날짜
  • 상황 (무엇을 하려다가 그랬는가?)
  • 증상 (에러 메시지나 예상치 못한 동작)
  • 근본 원인 (파악한 뒤에)
  • 해결 방법 (어떻게 수정했는가)
  • 교훈 (앞으로 기억하고 싶은 점)

예시:

날짜: 2026-01-06
상황: /users API 엔드포인트에 페이지네이션 추가
증상: 요청 시 500 에러 발생, TypeError: 'NoneType' object is not subscriptable
근본 원인: 일부 사용자에서 profileNone 인데, 코드에서 profile["avatar"] 가 항상 존재한다고 가정함
해결: null 체크 및 기본 아바타 추가, profile 필드가 optional임을 스키마 문서에 반영
교훈: optional 관계를 절대 non-null로 가정하지 말 것. 타입 힌트와 테스트로 강제하기

이런 기록이 6개월 치만 쌓여도, 사실상 당신의 스택과 업무 흐름에 딱 맞춘 개인용 디버깅 백과사전이 됩니다.


하루를 마무리하는 5분 루틴

핵심은 이 습관을 너무 작게 만들어서, 빼먹기가 더 어려운 상태로 만드는 것입니다.

코딩을 마무리하는 시점에, 단 5분만 실패 장부에 투자합니다. 루틴은 이렇습니다.

  1. 오늘 하루를 훑으며 마찰 지점을 떠올린다
    스스로에게 묻습니다: “오늘 어디에서 막혔지?” 아직 해결되지 않은 것이어도 괜찮으니, 일단 적어둡니다.

  2. 특기할 만한 실패/버그 1~3개를 고른다
    사소한 것까지 다 적지 않습니다. 다음과 같은 것에 집중합니다.

    • 예상보다 시간이 오래 걸렸던 것
    • 나를 놀라게 한 것
    • 내 이해의 빈틈을 드러낸 것
  3. 간단한 메모로 정리한다
    템플릿은 이 정도면 충분합니다: 상황 → 증상 → 근본 원인 → 해결 → 교훈. 그냥 불릿 포인트로 써도 됩니다.

  4. 내일의 ‘첫 번째 한 걸음’을 적는다
    아직 고장 난 상태라면, 내일 아침에 할 딱 한 가지 다음 행동을 정의해 둡니다.

    • if 문 앞에 X에 대한 로그 추가하기”
    • “최소 재현 예제(minimal repro)로 버그 다시 만들기”
    • “Y 함수의 엣지 케이스 관련 문서 읽기”
  5. 의도적으로 하루를 닫는다
    마지막으로 짧게 되뇌어 봅니다: “오늘 실패에서 뭔가를 배웠다.”
    이 작은 마음가짐이, 버그와 나 자신에 대한 평가를 분리하는 데 도움이 됩니다.

끝입니다. 5분.


장부를 돌아볼 때, 학습이 ‘복리’로 붙는다

진짜 마법은 시간이 지나 장부가 두꺼워질수록 나타납니다.

주 1회 또는 격주로 장부를 훑어보면, 다음과 같은 효과가 생깁니다.

  • 반복 패턴을 발견한다

    • “환경 변수 설정을 자꾸 틀린다.”
    • “프론트엔드 버그의 대부분이 인덱스(off-by-one)나 stale state 문제네.”
  • 익숙한 증상을 금방 알아본다
    같은 에러 메시지를 다시 봤을 때, 당황하기보다 이렇게 생각하게 됩니다.
    “이거 본 적 있어. 지난번엔 migration이 빠져 있어서 그랬지.”

  • 더 빠르고 침착하게 대응한다
    이미 원인과 해결책을 기록해 뒀기 때문에, 똑같은 문제에 매번 처음부터 삽질할 필요가 없습니다.

  • 집중적으로 공부할 주제를 정할 수 있다
    한 달 치 실패를 모아 보니 대부분이 데이터베이스 migration이나 비동기 코드에서 나온다면, 다음에 무엇을 공부해야 할지는 명확해집니다.

실패 장부는 거울과 같습니다. 현재 약점도 비추지만, 성장 궤적도 보여 줍니다. 몇 페이지만 넘겨 봐도, 예전에는 몇 시간 걸리던 문제가 이제는 사소해 보이면서, 스스로에 대한 자신감이 조금씩 올라갑니다.


오늘의 실수로 내일의 일을 설계하기

이 루틴의 덤 같은 장점은, 계획 능력이 좋아진다는 점입니다.

다음 날을 ‘백지 상태’로 시작하는 대신, 이미 맥락과 모멘텀을 가지고 시작하게 됩니다.

  • 어떤 버그가 아직 남아 있는지 알고 있고
  • 까다로운 문제에 대해, 이미 정의된 ‘다음 한 걸음’이 있으며
  • 어제 무엇을 배웠는지 기억하고 있습니다.

이 덕분에 다음과 같은 상황을 피할 수 있습니다.

  • 같은 오해로 계속 빙빙 도는 것
  • 아무 작업이나 건드리다 미완성인 채로 이것저것 옮겨 다니는 것
  • 막 발견한 엣지 케이스를 다음 날 바로 잊어버리는 것

시간이 지날수록 하루하루가 이렇게 이어집니다.

  • 오늘의 문제가 내일의 학습 주제를 정하고
  • 내일의 학습이 다음 주의 디버깅 시간을 줄이며
  • 다음 주에 줄어든 디버깅 시간이 더 깊은 일에 쓰일 수 있게 해 줍니다.

이것이, 작지만 꾸준한 성찰이 지속적인 개선(continuous improvement) 으로 이어지는 방식입니다.


루틴을 꾸준히 이어가기 위한 실용적인 팁

마찰을 줄이는 몇 가지 요령입니다.

  • 코드 치는 곳 가까이에 장부를 둔다
    VS Code에서 생활한다면, 레포나 워크스페이스 안에 failure-ledger.md 파일 하나를 두세요.

  • 아주 작은 고정 템플릿을 쓴다
    매번 같은 헤딩을 복붙해서 쓰면 됩니다. 과하게 예쁘게 만들려다 시작도 못 하는 상황을 피하세요.

  • 반복 알림을 설정한다
    캘린더 알림이든, 휴대폰 알람이든 하나 정해서 “5분 실패 장부”라고 적어 두세요.

  • 말도 안 될 만큼 작게 시작한다
    하루에 단 1개의 항목만 적어도 충분히 가치 있습니다. 완벽함보다 꾸준함이 훨씬 중요합니다.

  • 철저히 ‘나만 보는 기록’으로 다룬다
    이건 성과 평가를 위한 데이터가 아니라, 나를 위한 성장 도구입니다. 안전하다고 느껴질수록 더 솔직하게 쓸 수 있습니다.


마무리: 실패를 ‘연료’로, 아닌 ‘심판’으로 보기

코드를 쓰는 한, 실수는 계속 나옵니다. 그건 당신의 결함이 아니라, 복잡한 시스템과 인간의 뇌가 가진 본질적인 특성입니다.

당신을 개발자로서 정의하는 것은, 실수 그 자체가 아니라 어떻게 대응하느냐입니다.

5분 실패 장부는 버그와 실수를 구조화된 학습, 더 빠른 디버깅, 꾸준한 자신감으로 바꿔 줍니다. 하루에 요구하는 건 거의 없지만, 시간이 지날수록 당신만의 문제 해결 지도가 점점 그려집니다.

완벽한 시스템이 필요하지 않습니다. 필요한 건, 실패와 그 안에 담긴 교훈을 기록하기 시작하는 것뿐입니다.

오늘 밤, 에디터를 닫기 전에 새 노트를 하나 열고 이렇게 적어 보세요.

Failure Ledger – Day 1

버그 하나만 적으세요. 무엇이 잘 안 되었는지, 무엇을 배웠는지만 간단히 남기면 됩니다. 그리고 내일 다시 와서 그 위에 한 줄을 더 얹어 보세요.

이렇게 실수가 모여서, 결국 당신의 모멘텀이 됩니다.

5분 실패 장부: 코딩 실수를 성장의 모멘텀으로 바꾸기 | Rain Lag