Table of contents
Intro
실수로 인해 발생하는 장애를 방지하기 위해 개인적인 규칙과 셋업을 기록합니다.
- SQL 쿼리는 직접 짠 뒤 AI 검증 -> 한 명 이상 같이 검증 -> 실행시간 남기고 -> update, delete 는 select 로 한 번 보고 explain 건 뒤 수행한다.
- 날짜에 약하기때문에
- 기존 db 의 타임존 정책을 명확히 이해하고(우리는 UTC default)
- db type, spring boot converter, 비교인자 확인(mysql data type)
- 유틸만들면 윤년 테스트 필요.
- 최소 40개 이상 월 초, 말 포함. 테스트 코드 작성한다.
- 경계값 테스트를 위해 1월 1일, 12월 31일, 2월 29일 등을 포함한 다양한 날짜를 테스트한다.
SHOW VARIABLES LIKE 'sql_safe_updates';
,SET sql_safe_updates=1;
로 update, delete 시 where 절이 없으면 db 에서 에러나게 한다.- 공통 유틸은 여러 곳에서 사용되기때문에 테스트코드에 집착한다. 특히 날짜와 관련된 유틸은 다양성을 엄청 많이 만들어서 테스트 해봐야함.
- KST, UTC 타임존 모든 경우로 테스트
- 만약 잘못되었을 때 롤백을 어떻게 할 수 있는지까지 미리 문서화 해놓는다. 롤백을 하지 않더라도 이런거 미리 생각해놓으면 실수를 줄일 수 있다.
- 직접 db insert 수행 시 mysql sequence max(id) 셋업해서 auto increment 방해받지 않도록.
- failover 을 생각하면서 MQ consumer 로직을 설계한다. 이 떄 로드테스트 무조건 해줘야함. 스트레스 문제는 항상 테스트 이전엔 잘 안보임.
- 왠만한건 다 로그를 남긴다. 찾기쉽게 키워드 const 로 관리해도 좋음.