[Spring] 동시성처리(비관적, 낙관적 잠금)

proman·2022년 11월 3일
1

Spring

목록 보기
1/3
post-thumbnail

🧶 알아야되는 이유!

멀티스레딩 환경에서 0.1 초정도 차이로 인한 동시적인 케이스에서 데이터 불일치 현상 발생 방지를 위하여!

🧦 비관적 잠금

@Lock - JPA에서 제공 (말그대로 충돌을 비관적(자주 발생)으로 보는경우)

  • DB락 이용
  • 데이터 정합성 중요한 경우

ex)

  • 주문 등록시 (재고가 1인상태에서 두명이 주문후 재고가 0이 되었으나 둘다 결제되어버리는상황 방지)
  • 음식점 자리 결제, 비행기 자리 예약하는 경우 (자리 및 해당시간 충돌 상황 방지)
  • 학교 유명교수 수강자리가 10자리인데 500명의 학생이 수강신청을 하는 경우
  • 콜라보 한정판 상품이 5개 정도 있는데 1000명의 인원이 구매시도 하는 경우 등

👜 낙관적 잠금

@Version - JPA에서 제공 (말그대로 충돌을 낙관적(잘 안일어남)으로 보는경우)

  • 커밋시점에서 버전확인 (비관적보다 성능상 이점)
  • 롤백후 에러 (클라이언트 입장에서 재시도 필요)

ex)

  • 그룹웨어 기업정보 변경시 (시스템관리자와 기업관리자 정보변경시 변경되었다는걸 인지하고 확인필요)
  • 브랜드음식메뉴 가격변경 후 매장메뉴 반영한다음에 가격변경시 (변경되었다는걸 인지하지 못하고 변경 방지)
  • 게시글 글 변경시 (Confluence 사용시 경험가능)

🥼 참고

@Transantion 고립단계 지식필요

  • Spring Batch에도 동시성 상황 고려를 위해 고립단계 최상 Serializable 기본값

0개의 댓글