미해결
자바 ORM 표준 JPA 프로그래밍 - 기본편
SEQUENCE와 WS,WAS의 동시성 해결 관련 질문
안녕하세요? 강의의 기본 값 매핑 부분에서 GeneratedValue에 대해 수강 중에 질문이 생겼습니다.
1. sequence 전략을 사용하게 되면 미리 값을 증가 값 만큼 땡겨서 사용한다고 배웠는데요, 동시성 문제가 일어나지 않을 수 있는 이유는 여러 웹서버가 동시에 호출 하면 증가 값 만큼 가져올때 서로 다른 범위가 할당 되기 때문이라고 이해했습니다.
예로 두 대의 서버가 동시에 요청하고 증가값이 50이라면 A는 1~50 B는 51~100 범위를 할당 받는 거죠. 마치 pk 버퍼라고 할까요?
그리고 웹 서버가 중단 될 경우. 즉, A를 중간에 내려버리면 25까지 썻다고 하면 26~50은 사용 불가라고 이해했습니다..
이때 db 관련 값은 WAS에서 처리하니깐 WAS에 값을 저장하는게 더 좋아 보이는데요. WS에 저장하는 이유가 있을까요?
그러니깐 코드는 하나고 하나의 코드를 여러대의 서버에서 사용하는데 서버 당 WAS가 하나씩 연결 되어 있고 디비에서 sequnce 땡겨오는 건 WAS가 하고 값 저장은 WS가 하는 식으로 둘이 같이 협력하는 방식인건가요?
2. 뿐만 아니라, sequnce 값을 맨 처음이거나 시작 값+allocationSize을 넘어서면 두 번의 조회 쿼리를 통해 시작값과 상한값을 알게 되는데 이때 동시성 문제가 생길 수 있지 않나요? 예를 들자면! allocationSize가 50이라고 할때
A가 들가서 첫 조회 쿼리로 1받고 다음 조회 쿼리로 상한인 50을 받기 직전에
B가 들가서 첫 조회 쿼리로 51을 받고 두 번째 조회 쿼리로 상한인 100을 받았는데
이때 A의 두번째 조회 쿼리가 날라가서 100을 받아버리면 A는 1~100을 사용하게 되는 문제가 생길 거 같은데, 차라리 두 번의 조회 쿼리보다 한번의 조회 쿼리 이후에 db에서 설정한 allocationSize를 보고 자신의 상한을 아는 것이 더 좋을 거 같지 않나요?
3. 추가적으로 WS와 WAS는 1대1 관계인가요? N:M 관계는 될 수 없는 걸까요?
좋은 하루 보내세요!