DDL 스키마 입력값 미검증 버그 핫픽스
목차
RENAME_TABLES.sql에서 존재하지 않는 테이블 주석 처리
2026-01-17 핫픽스. 운영 중에 발견된 이슈라 빠르게 처리해야 했음.
버그 분석 과정
이슈 리포트 받고 나서 먼저 로그부터 뒤졌음. 스택 트레이스 보고 어디서 터지는지 위치 잡은 다음에 역으로 올라가면서 원인을 찾았음.
DDL 스키마에서 외부 입력을 그대로 사용하는 부분이 있었는데, 그 값이 예상 범위를 벗어나는 경우에 대한 처리가 없었음.
수정 포인트
// Before: 검증 없이 바로 사용
process(input.getValue());
// After: null-safe + 유효성 검증 후 사용
if (input == null || input.getValue() == null) {
return defaultResponse();
}
process(input.getValue());
| 구분 | 내용 |
|---|---|
| 수정 파일 | 1개 |
| 버그 유형 | 입력값 유효성 미검증 |
| 영향 레이어 | DDL 스키마 |
| 수정 방식 | 방어적 프로그래밍 |
핫픽스는 빠르게 패치하고 배포하는 게 중요하지만, 근본 원인이 코드 구조 문제인 경우에는 별도로 리팩토링 티켓을 남겨두는 편임. 임시 방편으로 막아두고 나중에 제대로 고치는 방식. 이번 건도 수정 범위를 최소화해서 사이드 이펙트 위험을 줄이는 방향으로 처리했음.
디버깅 과정에서 배운 것
버그를 잡는 과정 자체에서도 배우는 게 있었음. 처음엔 원인을 잘못 짚어서 관계없는 코드를 한참 들여다봤는데, 결국 로그를 꼼꼼히 보고 데이터 흐름을 따라가는 방식으로 찾아냈음.
유효한 디버깅 전략:
1. 로그부터 확인 — 스택 트레이스와 입출력 값을 먼저 봄
2. 재현 조건 좁히기 — 어떤 입력에서 발생하는지 확정
3. 이진 탐색 방식 — 문제가 있는 코드 범위를 절반씩 줄여나감
4. 가정을 검증 — '아마 이럴 것이다'가 아니라 실제로 찍어보기
이 순서를 지키면 디버깅 시간이 확실히 줄어듦. 다음
댓글 0
첫 댓글 달아줘.