인프런 커뮤니티 질문&답변

jdkjfkd fjfjdk님의 프로필 이미지

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

기본 키 매핑

시퀀스 방식에서 롤백시 시퀀스 문의

작성

·

277

10

시퀀스 방식에서는 시퀀스로부터 next value를 가져와서 

캐시에 엔티티를 캐싱한다고 했는데요

만약 커밋이 롤백 된다면 시퀀스도 다시 롤백 되는 걸까요?

그렇다면 시퀀스를 가져갔다가 롤백되는 사이에

다른 프로세스에서 시퀀스를 가져간 경우는 어떻게 될까요?

답변 2

18

김영한님의 프로필 이미지
김영한
지식공유자

jdkjfkd fjfjdk님 좋은 질문입니다^^!

사실 저도 과거 시퀀스나 채번 테이블을 다룰 때, 왜 꼭 구멍이 생겨야 할까? 하는 의문을 가진 적이 있습니다.

결국 서비스를 운영하면서 자연스럽게 이해하게 되었는데, 

만약 시퀀스를 받았는데 100번이면, 100번이라고 해서 로깅도 남기고 쭉 비즈니스를 이어가게 됩니다. 그런데 문제가 생기서 이 부분이 롤백되었는데, 시퀀스까지 롤백되면, 로그에는 다 100이라고 남아있겠지요. 그리고 다음 비즈니스 로직이 도는데, 시퀀스를 받으면 다시 100번이 됩니다. 여기서 로깅도 또 100이라고 남기게 되겠지요. 결과적으로 어떤 부분이 정상이고, 어떤 부분이 비정상 로깅인지 확인하기가 어려워집니다. 이게 로그 정도면 문제가 적은데, 이 롤백된 100번 시퀀스를 어디에 활용했다가 롤백되고, 다음 정상 케이스에서 다시 100번을 받게 되면... 정말로 이슈를 찾아가기 어려워집니다.

추가로 구현레벨도 궁금해서 하이버네이트 코드까지 파본적이 있는데, 비즈니스 로직의 트랜잭션이 롤백되도, 시퀀스는 롤백 없이 진행되도록 하기 위해 테이블 전략의 경우 별도의 커넥션을 받아서 사용할 정도로 코드가 만들어져 있었습니다.

작은 도움이 되셨기를 바랍니다. 감사합니다^^

2

자답입니다. 그냥 그 숫자는 구멍이 생긴답니다