콘텐츠로 이동

왜 이 체크리스트인가

만드는 것과 운영하는 것은 다른 기술이다. 기능이 돌아가는 앱을 만드는 데 성공한 사람도, 실제 사용자와 실제 돈이 걸리는 순간부터는 전혀 다른 종류의 문제를 만난다. 그리고 이 문제들은 대부분 사고가 난 뒤에야 존재를 알게 된다.

이 문서는 그 수업료를 미리 내지 않기 위한 체크리스트다. 두 파트, 13개 항목이다.

파트 1은 데이터와 코드 안쪽의 사고다.

  1. DB 백업과 복구 리허설 — 백업은 복구에 성공해본 적이 있어야 백업이다
  2. 삭제는 기록이다 — 진짜 지우면 분쟁에서 증명할 수단이 없다
  3. 권한은 서버에서 끝난다 — 버튼 숨기기는 보안이 아니다
  4. 외부 API는 실패한다 — 결제·문자·메일은 항상 성공하지 않는다
  5. 로그 없으면 추측뿐 — 장애 원인을 알 수 없으면 대응도 없다
  6. 시간대를 정하라 — 저장은 UTC, 표시는 사용자 시간대
  7. 돈은 정수로 센다 — 소수점 금액은 언젠가 어긋난다

파트 2는 인프라와 운영, 즉 코드 바깥의 사고다.

  1. 시크릿은 코드 밖에 — 커밋된 키는 몇 분 안에 악용된다
  2. 롤백 없는 배포는 편도행 — 되돌릴 수 있어야 배포다
  3. 봇과 어뷰즈는 기본값 — 공개된 순간 트래픽의 상당수는 사람이 아니다
  4. 청구서가 서비스를 죽인다 — 종량제의 장애는 과금 폭탄으로 온다
  5. 의존성도 공급망이다 — 내 코드가 안전해도 패키지가 뚫리면 같이 뚫린다
  6. 다운을 고객이 먼저 알게 하지 마라 — 로그는 알림이 아니다

각 장은 같은 구조다. 어떤 사고가 나는지, 왜 나는지, 배포 전에 무엇을 확인해야 하는지. 지금 만들고 있는 것이 있다면 한 장에 3분씩, 한 시간 안에 전부 점검할 수 있다.