KRWP 임대 - 백엔드와 프론트엔드 연결 중
안녕하세요 @realmankwon입니다.
KRWP 프론트엔드단과 백엔드단을 연결 중에 있습니다.
임대에 대한 이자를 입금하는 방식은 키체인을 이용하게 될 것이기 때문에 관련해서 경험한 이슈를 해결하는 것이 가장 중요한 부분이었습니다.
그 부분이 SVC 보팅에서 자주 발생하는 키체인 전송시 2중 전송이 되는 것입니다.
동일 블럭 내에 2건의 동일한 전송이 이루어지기 때문에 2건 중에 한건은 처리를 시키면 안 됩니다.
또한 장애 발생시 이전 블럭부터 재실행을 하게 될때가 있는데 이때 반환한 건을 재반환하는 경우가 발생할 수 있습니다.
정리하면 다음과 같습니다.
- 임대 처리 시에 동일 건 발생할 경우 1건은 반환 처리
- 장애 발생 시 반환한 건에 대해서 재반환되지 않도록 처리
이 부분을 위해서 많은 고민을 했는데 오늘 혼육을 하면서 정리가 되었습니다.
1 ) 프론트엔드 단에서 전송 - 임대 건에 대한 ID, 임대 수량 메모로 전송
2 ) 전송이 정상적으로 완료가 되면 DB 에 임대 건에 대한 ID, 임대 수량 저장
3 ) 백엔드 단에서 전송 내역을 조회 후 DB 에 해단 건이 입력 되었는지 여부 확인
- 전송 내역 O, DB 정보 O - 임대 실행
- 전송 내역 O, DB 정보 X - 전송 내역 반환
- 전송 내역 X, DB 정보 O - 10분 내에 전송이 없으면 DB 삭제
4 ) 3의 케이스 외에도 임대수량이 모자랄 경우 반환 처리
이를 위해서는 전송을 받은 내역과 임대 처리 내역을 별도로 관리해야 될 것 같습니다.
전송 받은 내역은 블럭 번호, 트랜잭션 ID 를 키값으로 해서 저장을 하면 깔끔하게 해결이 됩니다.
스팀엔진 전송 API 다시 한번 확인해 보니 트랜잭션 ID 가 친절하게 있었습니다.
전송 받은 내역에 임대 처리 혹은 반환 처리를 저장하고 임대 처리 내역에 해당 블럭 번호와 트랙잭션 ID 를 저장하면 맵핑이 완벽하게 이루어 집니다.
장애 발생시에도 이전 블럭부터 다시 재처리하게 할지라도 이미 발생했던 전송 건에 대해서는 중복으로 처리되거나 반환되는 경우도 원천적으로 차단이 될 것 같습니다.
SVC 도 트랜잭션 ID를 조만가 추가하여 보완해야겠습니다. ^^