on-call의 진짜 비용은 페이지 횟수가 아니다
대기 시간·심리 비용·수면 부채까지 합산해야 on-call의 실제 가격이 나온다
페이지가 0건인 날도 소진된다
지난달 on-call 주간에 PagerDuty 알림은 딱 세 번 울렸다. 새벽 2시, 새벽 4시 반, 그리고 오전 7시. 숫자만 보면 ‘조용한 주’다. 근데 그 주 금요일, 나는 아무것도 하기 싫었다.
문제는 페이지 횟수가 아니었다. 잠들기 전 15분마다 폰을 확인하는 습관, 샤워를 5분 안에 끝내야 한다는 긴장감, 술 한 잔을 마시려다 멈추는 순간들 — 이게 다 비용이다. 알림이 안 울려도 뇌는 대기 상태를 유지한다. 그 상태 자체가 사람을 깎아낸다.
- 주간 on-call 중 ‘아무 일도 없었던’ 5일 동안에도 업무 집중력이 평소 대비 체감상 30% 떨어진 주간이 있었다. 특별한 이유 없이 PR 리뷰가 느렸고, 코드보다 슬랙 알림 탭을 더 자주 열었다. 원인을 뒤늦게 알았는데, 그냥 ‘on-call 상태’였다.
- 대기 비용은 정규 근무 시간 이후에 더 크다. 퇴근 후 친구 만나는 약속을 잡지 못하고, 주말에 서울 외곽으로 나가는 계획을 반사적으로 접게 된다. 이게 분기로 쌓이면 사교 반경이 좁아진다. 실제로 내가 on-call 전담 로테이션을 처음 맡던 해에 약속 취소율이 눈에 띄게 늘었다.
새벽 알림 한 번의 실제 무게
새벽 3시 페이지를 받으면 그날이 끝난다. 말 그대로. 긴급 대응 자체는 40분이면 마무리됐어도, 이후 다시 잠들지 못한 채로 오전 9시 회의에 앉아 있으면 그날 의사결정의 질이 다르다.
막상 해보면 새벽 대응 후 재입면 성공률이 생각보다 낮다. 아드레날린이 가시는 데 한 시간이 걸리고, 그 사이에 ‘아까 내가 올바른 판단을 한 게 맞나’ 하는 반추가 시작된다. 그날 오전을 반수면 상태로 보내고, 저녁에 일찍 자면 리듬이 틀어져 다음날도 이상하다. 페이지 한 번이 이틀을 잡아먹는 구조다.
- 올해 1분기에 새벽 2시~5시 사이 알림이 주당 평균 1.4회 발생한 주간이 있었다. 그 3주 동안 팀 내 코드 리뷰 평균 응답 시간이 평소 4시간에서 11시간으로 늘었다. 타이밍이 겹쳤을 수 있지만, 당사자들은 다들 ‘그 주는 머리가 안 돌아갔다’고 회고했다.
- 대응 자체보다 사후 반추가 더 피곤하다. ‘내가 저 결정을 틀리면 어떡하지’를 새벽에 혼자 처리한 스트레스는 근무 기록에 남지 않는다. 그게 쌓이면 번아웃이지, 단순 과로가 아니다.
심리 비용을 팀이 보지 못하는 이유
대부분의 팀이 on-call 비용을 페이지 건수 × 평균 대응 시간으로 계산한다. 이 공식은 절반도 안 맞는다.
실제로 피로를 유발하는 건 해결 시간보다 불확실성이다. ‘오늘 밤 울릴까 안 울릴까’를 모른다는 것. 예측 불가능한 스트레스가 예측 가능한 야근보다 훨씬 더 빨리 사람을 소진시킨다는 건 수면 연구 쪽에서도 오래된 얘기다. on-call은 구조적으로 불확실성을 설계에 내장하고 있다.
- 팀 리드가 on-call 부담을 ‘건수’로만 보면, 조용한 주에 소진된 팀원을 발견하지 못한다. 나도 한때 ‘이번 주는 별로 없었잖아’라고 말했다가 팀원한테 ‘대기 자체가 힘든 거예요’라는 말을 들었다. 틀린 말이 아니었다.
- 로테이션 간격이 짧을수록 회복 주간이 사라진다. 4인 로테이션에서 2인이 동시에 빠지면 나머지 둘이 격주 on-call을 돌아야 한다. 회복 주간 없이 2주에 한 번 꼴이면 누적 피로가 선형이 아니라 가속도가 붙어서 쌓인다.
수면 부채는 복리로 쌓인다
수면 6시간이 사흘 이어지면 인지 능력 저하가 24시간 무수면과 비슷하다는 건 이미 검증된 얘기다. on-call 주간엔 폰을 무음으로 끄지 못하니, 수면 깊이 자체가 달라진다.
직접 해보니, 알림이 없어도 새벽에 두세 번 얕은 수면에서 깼다. 몸이 조건 반사를 학습한 거다. on-call이 끝난 다음 주에도 그 습관이 사흘은 남아 있었다. 기술적으로 비번이어도 수면의 질은 on-call 주간의 연장선에 있었다.
- 수면 부채를 회복하는 데 걸리는 시간이 쌓인 시간보다 길다. 3일 얕은 수면은 하루 푹 자서 해결되지 않는다. 이걸 팀 로테이션 설계에 반영한 팀을 본 적이 거의 없다.
- on-call 종료 후 최소 48시간의 ‘경계 해제 버퍼’가 필요하다고 생각한다. 그냥 다음날 바로 정상 출근하는 구조는, 피로가 완충 없이 다음 스프린트로 이어지는 구조다.
그래서 실제로 바꾼 것 두 가지
비용을 정확히 보기 시작하면 설계가 달라진다. 우리 팀에서 실제로 적용한 건 소박하지만 차이가 났다.
첫째, on-call 주간에는 신규 기능 PR 머지를 기본으로 동결했다. on-call 담당자가 새 배포를 건드릴 인지 여유가 없다는 전제를 팀 기준으로 못 박았다. 처음엔 속도가 느려지는 것 같았는데, 배포 후 사고가 줄면서 전체 on-call 부하가 내려갔다.
둘째, 페이지 건수 외에 ‘대기 피로 지수’를 격주 회고에 1~5점 자기 보고로 넣었다. 숫자가 정확할 필요는 없다. 팀이 언어화할 수 있게 되는 것 자체가 목적이다. 말이 생기면 보이기 시작하고, 보여야 설계를 바꿀 수 있다.
- 신규 배포 동결 룰을 넣고 나서, on-call 주간 긴급 롤백 빈도가 절반으로 줄었다. 규모가 작은 팀이라 통계라고 부르기도 뭐하지만, 그 주간 담당자의 심리적 부담이 확실히 다르다고 했다.
- 자기 보고 지수는 팀원이 솔직하게 쓰려면 심리적 안전감이 전제다. 점수를 낮게 써도 불이익이 없다는 걸 리드가 먼저 행동으로 보여줘야 돌아간다.
다음 한 가지
on-call 로테이션 주간 직후에 ‘회복 반차’를 팀 캘린더에 기본 블록으로 박아두기 — 말로만 해왔는데, 이번 분기엔 실제로 넣는다.
🛒 이 글과 어울리는 추천 상품
위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.