mysql 데이터가 순차적으로 들어가지 않고 널뛰기 해도 괜찮을까?
why does autoincrement increase on failed insert
배경
- 카카오톡 알림톡 기능을 사용해서 기부자에게 알림톡을 보내고 있다.
- 인포뱅크(카카오 알림톡 협력 업체) 서버에 접속되지 않아 Timeout 이 발생했음
문제
기존 코드는 기부 등록 API 를 호출하면 하나에 트랜젝션이 카카오톡 알림톡발송이 실패하면 rollback 되도록 되어있었다
앞으로는..
알림톡 보내는 방식을 재 설계하여 의존성을 느슨하게 해서 알림톡 업체가 장애가 나더라도 기부는 동작되도록 변경해야 한다
궁금한점..
해당 이슈 발생시 db 에는 rollback 되어 데이터가 쌓이지 않았다. insert 가 실패했는데 id 값이 증가되었다 id 는 autoincrement 로 생성된다 왜 증가되었지? 또한 이렇게 데이터가 널뛰었을때 문제는 없는건가?
결론
id는 식별을 위한 것이다 id는 기계적으로 만들어지는 대체키이다 식별이 목적이라면 비동기 적으로 id 가 생성되며 다른 id 와 다른것은 정상적이고 일을 잘 하고 있는 것이다 ( 관계형 데이터 베이스를 쓸때 id 를 정하는 기준 대체키 자연키 ex) 주민등록번호,siteCode
자연키: 바뀔 수 있는 것 대체키:시스템적으로 id 부여하는 것
id 는 식별하는 용도로 유효 id 도 있을 수 있다
식별성에는 문제가 없다) 왜 이럴까? 의 질문을 모두 문제일거라 생각하지 말자
참고
https://stackoverflow.com/questions/2787910/why-does-mysql-autoincrement-increase-on-failed-inserts https://suhwan.dev/2019/06/09/transaction-isolation-level-and-lock/