개발자들이 쓰는 말 중엔 코드보다 일하는 방식을 가리키는 게 많다. 오늘 넷이 그렇다 — 곁가지에 홀리는 함정, 몇 번을 해도 안전한 반복, 내놓기 전에 내가 먼저 써보기, 내가 멈췄을 때 안전하게 멈추는 장치. 알아두면 협업할 때도 혼자 일할 때도 쓰인다.
요약
- 야크 셰이빙: 진짜 할 일을 하려다 곁가지가 꼬리를 물어 엉뚱한 데서 시간을 다 쓰는 것
- 멱등성: 몇 번을 실행해도 결과가 한 번 한 것과 같은 성질 (재시도해도 안전)
- 도그푸딩: 남에게 내놓기 전에 내가 먼저 사용자로 써보는 것
- 데드맨 스위치: 내가 “살아있다”는 신호를 멈추면 시스템이 자동으로 안전하게 정지하는 장치
- 넷의 공통점: 코드 용어 같지만 실은 집중·안전·정직·대비라는 일의 태도
| 용어 | 한 줄 뜻 | 일에서는 |
|---|---|---|
| 야크 셰이빙 | 곁가지가 꼬리를 물어 본질을 잃음 | 집중 |
| 멱등성 | 여러 번 해도 결과가 한 번과 같음 | 안전한 반복 |
| 도그푸딩 | 내놓기 전 내가 먼저 써봄 | 정직한 검증 |
| 데드맨 스위치 | 내가 멈추면 시스템이 안전하게 정지 | 실패 대비 |
1. 야크 셰이빙 (Yak Shaving)
차를 닦으려는데 호스가 없다. 호스를 사려니 마트 회원카드가 만료됐고, 갱신하려니 옆집이 빌려간 책을 돌려줘야 하고… 정신을 차려보니 동물원에서 야크 털을 깎고 있다. 정작 차는 그대로다.
이렇게 진짜 목표를 위해 시작한 곁가지 작업이 꼬리에 꼬리를 물어, 원래 일과 상관없어 보이는 데서 시간을 다 쓰는 것이 야크 셰이빙이다. MIT에서 나온 표현이라고 알려져 있다.
개발에서 흔하다. “버그 하나 고치자” → “그러려면 라이브러리 업데이트” → “그러려면 빌드 도구 교체” → 반나절째 환경 설정 중. 일상도 똑같다 — 글 하나 쓰려다 블로그 테마부터 손보고 있는 것.
빠져나오는 법: “지금 이게 원래 하려던 일에 정말 필요한가?”를 한 번 묻는다. 아니면 곁가지는 메모만 남기고 본 작업으로 돌아온다.
2. 멱등성 (Idempotency)
엘리베이터 버튼을 열 번 눌러도 한 번 누른 것과 똑같이 온다. 이게 멱등성이다 — 같은 동작을 여러 번 해도 결과가 한 번 한 것과 같은 성질.
원래 수학 용어(f(f(x)) = f(x))인데, 개발에선 특히 재시도 안전에서 중요하다. 결제 요청을 보냈는데 응답이 안 와 다시 보냈다고 하자. 멱등하지 않으면 두 번 결제된다. 멱등하면 같은 요청은 한 번만 처리된다 — 요청마다 붙이는 “멱등 키”로 구분한다.
구분도 쉽다. “삭제”는 멱등이다(이미 지운 걸 또 눌러도 여전히 지워진 상태). “1개 추가”는 멱등이 아니다(누를 때마다 늘어남).
왜 알면 좋나: 자동화·재시도가 들어가는 모든 곳(결제·알림·동기화)에서 “이게 두 번 실행되면 사고가 나나?”를 판단하는 기준이 된다.
3. 도그푸딩 (Dogfooding)
“자기 개밥 자기가 먹기(eat your own dog food).” 개사료 회사가 자기 개에게 그 사료를 먹이며 품질을 증명했다는 데서 나왔고, 1988년 마이크로소프트가 “우리 소프트웨어를 우리가 먼저 쓰자”는 뜻으로 퍼뜨렸다고 알려져 있다.
뜻은 단순하다 — 남에게 팔거나 내놓기 전에, 내가 먼저 사용자로 써보는 것. 직접 써봐야 버그도 잡고, 사용자가 어디서 불편한지 몸으로 안다.
핵심은 정직이다. 내가 안 쓰는 도구를 남에게 권하긴 어렵다. 반대로 내가 매일 쓰는 도구는 빠르게 좋아진다 — 불편하면 내가 제일 먼저 아프니까.
한 칸 더 — 도그푸딩은 “내가 써보기”까지다. 그다음 칸은 모르는 남이 써보는 것이고, 진짜 시험은 거기서 시작된다.
4. 데드맨 스위치 (Dead Man’s Switch)
기차 기관사가 운전 중 쓰러지면 어떻게 될까. 옛 기차엔 페달이 있었다. 기관사가 페달을 계속 밟고 있어야 기차가 달리고, 발을 떼면(쓰러지면) 기차가 자동으로 멈춘다. 이 장치가 데드맨 스위치다.
이름은 섬뜩하지만 발상은 단순하다 — 내가 멈췄을 때, 시스템이 알아서 안전하게 멈추는 것. 평소엔 “나 살아있다”는 신호를 계속 보내야 하고, 그 신호가 끊기면 최악을 가정하고 안전 쪽으로 작동한다.
개발·자동화에서 그대로 쓴다. 자동매매 봇이 응답을 멈추면 포지션을 자동으로 정리한다(안 그러면 시장이 급변해도 무방비). 서버가 주기적 “심장박동(heartbeat)”을 못 보내면 다른 서버가 대신 깬다.
왜 알면 좋나: 무인으로 도는 모든 것(봇·크론·자동화)에 “이게 죽으면 어떻게 안전하게 멈추지?”를 미리 심는 발상이다. 켜는 것보다 죽을 때를 설계하는 것이 진짜 안전이다.
한 줄 정리
세 용어는 코드가 아니라 태도를 가리킨다.
- 야크 셰이빙 → 곁가지에 홀리지 말고 본질에 집중하라
- 멱등성 → 반복·재시도해도 안전하게 설계하라
- 도그푸딩 → 내놓기 전에 내가 먼저 써봐라
- 데드맨 스위치 → 잘 돌 때가 아니라 죽을 때를 설계하라
이름을 알면 일이 어디서 새는지 가리킬 수 있다. 개발자와 대화할 때도, 혼자 일할 때도.