관리 메뉴

공부한것들을 정리하는 블로그 입니다.

DB 시퀀스를 통한 일련번호 채번 시 주의(중복채번, 다중DB) 본문

경력 실무경험/실무 주제

DB 시퀀스를 통한 일련번호 채번 시 주의(중복채번, 다중DB)

호 두 2023. 4. 27. 16:22
반응형

* 해당 글은 계속 수정 예정입니다.
최초 작성일 2022.12.12
마지막 수정일 2023.04




# 현금영수증 서비스?

현금영수증 서비스는 현금성 결제에 대한 국세청 영수증을 발급해주는 서비스이다.

실시간 계좌이체, 가상계좌 등 현금성 결제 성공 후 서비스가 호출되는 경우도 있고, (이 경우 트랜잭션/ID가 연계)

현금영수증 서비스만 단독으로 호출되는 경우가 있다. (이 경우 트랜잭션/ID가 독립 부여)

현금영수증은 배치 스케줄러를 통해 익일 새벽에 대상건을 파일로 만든 뒤, 국세청으로 FTP 송수신하여 처리되며 서비스가 일단락 된다.


# 일련번호가 중복채번되면?

만약, 현금영수증 서비스에서 DB 시퀀스를 이용해 승인번호(승인취소번호) 채번되고 있다고 가정하면

일련번호가 중복채번 될 경우 익일 국세청으로부터 오류응답을 받게 될 것이다.

DB의 기본키/복합키가 잘 설계되었다면, 일련번호가 중복채번 되더라도 DB Insert 자체에는 문제가 없을 것이다.
(DB의 키는 유니크한 값이더라도 외부에 종속적인 값은 사용하면 안됨 ex) 주민등록번호(x))


# 발생 사유

이런 문제는 다중 DB를 사용하는 환경에서 DB 시퀀스를 각자 가질 경우 발생 가능하다.

주기상으로 중복채번 되지 않도록 시퀀스 넘버를 관리해놓을 테지만.

이를 주기적으로 수행하는것이 아니라면, 결국 중복되는 값이 채번되는 시퀀스 넘버에 도달하게 되기 때문이다.



이에 대한 해결법은,

시퀀스 넘버를 관리하는 것을 주기적으로 수행(혹은 자동화) 하는 것이 있고.

로직 상으로는 배치 내에서 값을 검증하는 방법도 있겠으나,

성능을 고려하여 모든 일련번호를 조회하는 상황은 피하는 것이 좋을 것이다.
(각 시퀀스의 당일 처음 시퀀스들만 이용해 비교한다거나)




후처리는,

DB 보정작업을 통해 일련번호를 신규채번한 번호로 변경해주고,

배치 스케줄러의 조건에 맞도록 날짜 컬럼들 역시 변경해준다.

국세청의 응답을 저장하는 필드가 있다면.

배치 로직상 DB 보정작업시 실패응답 또한 초기화해줘야 되는지 여부도 확인이 필요 할 수 있다.



# 참고

1. 본인 블로그 : (참고사례)

https://drsggg.tistory.com/730

 

(참고사례)DB 시퀀스를 통한 번호 채번 시 주의(중복채번, 다중DB)

공부한것들을 정리하는 블로그 입니다. (참고사례)DB 시퀀스를 통한 번호 채번 시 주의(중복채번, 다중DB) 본문

drsggg.tistory.com

 

 

 

 

반응형
Comments