작성
·
287
0
동시간데 저장을 제어 하는 방법을 문의 드립니다
안녕하세요 토비님 ~
시스템을 사용하는 유저가 해외 각지역에 많이 있고
어떤 오더정보가 있다고 가정하겠습니다
한국유저가 어떤 오더 금액적인부분 조회 하고 저장을 시도합니다
거의 동시간데에(0. 몇초차이로)
일본유저가 동일 오더를 금액적인부분조회 하고 저장을 시도합니다
한국유저가 오더저장을 하던
일본유저가 오더저장을 하던 저장하는데
비지니스로직때문에 2~5 초 의 긴 시간이 걸리기 때문에
한국유저 , 일본유저는 차후에 서로 본인이 기대했던 값이
틀리게 저장이 됩니다
이런 동시성 저장 문제를 방어 해결하기 위해서
저장 프로세스 로직이나, 자바 기술적인 부분을 어떻게 적용 해야 할까요?
이런문제는 배치성 자바로직을 돌릴때도 마찬가지입니다
동일 데이터를 동시간데에
한국유저가 자바배치 작업을 수행하고
거의 동시간데에(0. 몇초차이로)
일본유저가 자바배치 작업을 수행 할수 있습니다
(참고로, 제가 우선 경험한 부분을 말씀드리면
저장되는 순서 히스토리성을 관리를 해야 하는 경우는
저장하기 전에 데이터베이스에 락관련테이블하나 만들고
사용자가 저장하기전에
나 저장 할꺼야 하고 락관련테이블에 레코드를 넣고 시작 합니다 )
감사합니다 수고하세요.
--█●●--------------------------------------------
#동시
#동시성
#방어
#로직
#방법
#부트
#스프링
#스프링부트
#spring
#sping-boot
#springboot
#토비
--█●●--------------------------------------------
답변 1
1
이런 문제는 모든 요청 처리를 강제로 직렬화하거나(앞의 요청을 처리하기 전에는 뒤의 요청은 다 대기), DB의 트랜잭션 고립 레벨 또는, 저장 기술의 락(낙관적인 락 등)을 이용해서 차단할 수 있습니다. 말씀하신 직접 작업 수행 순서를 관리하는 방법도 가능합니다. 다만, 그 작업 중에 에러가 나거나해서 락이 안 풀리는 문제가 있을 수 있습니다.
토비님 답변 감사드립니다
고맙습니다. 수고하세요!