Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Table of contents

  1. Intro

Intro

실수로 인해 발생하는 장애를 방지하기 위해 개인적인 규칙과 셋업을 기록합니다.

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