본문으로 건너뛰기

버그 제보

이상한 점을 알려 주시면 고칠게요. 지금 보고 있는 페이지와 브라우저 정보가 함께 담겨요.

페이지:

Backend

개발자 머피의 법칙: 백엔드 방어 체크리스트

작성 2026. 10. 21.추가
목차8개 항목
출처와 참고

「개발자 머피의 법칙」을 바탕으로 재구성한 노트다.

머피의 법칙과 설계

머피의 법칙은 「잘못될 수 있는 것은 결국 잘못된다」는 경험칙이다. 서비스가 오래 돌고 사용자와 개발자가 많아질수록 「설마」가 일어날 확률은 1에 가까워진다.

설계에 쓰는 기준은 단순하다.

사고가 났을 때의 영향대응
감당할 수 없다 (돈, 개인정보, 데이터 손실)이미 일어난 것으로 보고 지금 막는다
감당할 수 있다서비스 성장 단계에 맞춰 차례로 대비한다

아래는 백엔드에서 반복해서 일어나는 사고를 영역별로 묶은 체크리스트다.

1. 입력은 믿지 않는다

함정막는 법
UI에 안내 문구가 있으니 이상한 값은 안 온다클라이언트 검증은 편의용이다. 서버에서 다시 검증한다 (할인율과 할인 금액 혼동, 존재하지 않는 날짜)
클라이언트가 보낸 금액·가격폼 값은 쉽게 조작된다. 서버에서 다시 계산하고, 외부 결제 시스템에 넘기는 값도 검증한다
동적 쿼리의 조건이 전부 빠짐조건이 비면 전체 조회가 된다. 배타적 조건 중 하나는 반드시 있는지 서버에서 확인한다
내부 API니까 이상하게 부르지 않는다내부 개발자도 실수한다. pageSize, 날짜 범위 같은 입력 상한을 둔다

2. 인증과 권한은 따로 본다

함정막는 법
로그인했으면 됐다인증(누구인가)과 인가(이 자원에 접근할 수 있나)는 다른 검사다. 본인 데이터인지 매번 확인한다
로그인 실패 횟수를 쿠키에 저장클라이언트가 바꿀 수 있는 곳에 둔 제한은 무력하다. 서버에서 세고, 캡차·알림도 서버 쪽에서 건다
현금으로 바꿀 수 있는 포인트·상품권우회 현금화가 되면 결제 수단과 같다. 결제 수준의 추가 인증을 건다

3. 운영 자원에 사람이 닿지 않게 한다

함정막는 법
ORM의 자동 스키마 생성(ddl-auto 등)이 운영에서 켜짐운영 DB 계정에서 DDL 권한을 뺀다. 스키마 변경은 마이그레이션 도구로만 한다
로컬 환경이 운영 메시지 큐에 붙음MQ도 저장소다. 로컬에서 운영 자원으로 가는 경로를 막는다
프로필을 잘못 골라 운영 API를 직접 호출반복되는 운영 작업은 인증·권한이 걸린 관리자 도구로 옮긴다
사내망이니 서버를 열어 둠기본은 비공개. 필요한 권한만 주고, 외부 노출은 프록시로 한정한다

4. 데이터 구조는 미래를 고려한다

함정막는 법
순차 PK를 32비트 정수로한계에 닿으면 연동된 모든 시스템을 고쳐야 한다. 64비트(Long)로 시작하고 외부 클라이언트의 타입도 확인한다
원격 캐시에 객체를 넣고 필드를 바꿈배포 중에는 신·구 버전이 섞여 캐시를 읽는다. 캐시 구조 변경은 DB 컬럼 변경처럼 신중히 한다. 캐시는 성능 테스트로 이득을 확인한 뒤 쓴다

5. 운영 신호를 믿을 수 있게 만든다

함정막는 법
배치가 실패하면 알림이 온다배치가 아예 실행되지 않으면 내부 알림도 울리지 않는다. 실행 여부를 외부에서 감시한다
에러가 나면 메일을 보낸다에러가 폭주하면 메일 서버와 네트워크가 같이 죽는다. 로그 전송은 별도 수집기·비동기 appender로 분리하고 알림 빈도를 제한한다
모든 알림을 한 채널에중요한 알림이 묻힌다. 중요도로 채널을 나누고, 중요 알림은 응답 확인을 필수로 한다

6. 실패를 전제로 한다

  • 롤백할 수 있게 배포한다. 웹 애플리케이션뿐 아니라 배치도 되돌릴 수 있어야 한다.
  • 단일 장애점(SPOF)을 없앤다. 서버는 언제든 죽는다.
  • 외부 시스템 장애를 가정한다. 호출하는 외부 API가 느려지거나 멈출 때 서킷 브레이커·타임아웃으로 전파를 끊는다.

정리

  • 클라이언트·내부 개발자·운영자 모두 실수한다. 검증과 권한은 서버와 시스템이 맡는다.
  • 인증과 인가는 별개의 검사다.
  • 운영 자원은 사람 손이 직접 닿지 않게 권한과 도구로 막는다.
  • 「안 돌았다」는 신호는 안에서 나오지 않는다. 외부에서 감시한다.

감당할 수 없는 사고는 확률이 낮아도 이미 일어난 일로 취급한다.

관련 노트: 안전한 시스템 설계, 복원력 패턴, 고가용성과 이중화, 장애 대응과 포스트모템, 개발자가 빠지는 함정 모음

원본 기록1

댓글

GitHub 계정으로 댓글을 남길 수 있어요.