5. 자주 하는 실수 (Tip)
실수 1: PK 나 UNIQUE 없이 MAX + 1 만 쓴다
번호가 겹쳐도 오류가 나지 않아 중복 주문이 조용히 생깁니다. 주문번호 컬럼에는 PK 나 UNIQUE 를 두고, 중복 오류를 받으면 재시도하는 코드까지 함께 둡니다.
실수 2: 읽은 뒤에 UPDATE 한다
SELECT last_no 로 값을 읽고 나중에 UPDATE ... SET last_no = 읽은값 + 1 을 하면 MAX+1 과 같은 틈이 생깁니다. last_no = last_no + 1 로 UPDATE 를 먼저 하거나 SELECT ... FOR UPDATE 로 잠근 뒤에 씁니다.
실수 3: 채번 행을 오래 잡는다
채번 UPDATE 뒤에 외부 API 호출이나 긴 계산을 하면 다른 요청이 모두 그 행 앞에서 기다립니다. 채번은 트랜잭션의 마지막에 가깝게 하거나 짧은 트랜잭션으로 끝냅니다. 잠금 상세는 대용량·배치 카테고리에서 다룹니다.
실수 4: 채번 행을 만드는 경쟁을 잊는다
그날 첫 요청 두 개가 동시에 행이 없음을 확인하고 INSERT 하면 한쪽이 PK 오류를 받습니다. 오류를 받으면 UPDATE 부터 다시 하도록 처리합니다. 자정 전에 다음 날 행을 미리 만들어 두는 방법도 있습니다.
실수 5: 구멍 허용 여부를 정하지 않고 방식을 고른다
번호가 비면 안 되는 업무에 시퀀스나 분리 커밋을 쓰면 감사 때 빈 번호를 설명해야 합니다. 반대로 비어도 되는 업무에 묶음 방식을 쓰면 대기만 길어집니다. 방식보다 요구를 먼저 정합니다.