inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 데이터 JPA

JPA Hint & Lock

도메인 락 관련 질문

442

정윤성

작성한 질문수 24

2

위와같이 Order와 Product Entity가 N:M매핑일 때

1.Order에 대해서 락을 걸고싶은데 이럴경우 OrderItem에 관해서도 락을 걸어주는게 맞는지 궁금합니다 ㅠㅠ

OrderItem까지 락을 걸어버리면 컬렉션에 값이 추가될때마다 업데이트 쿼리가 계속 늘어나가지고 성능적으로 문제가 생길거같아서..

2.애그리거트 단위로 락을 걸어주는게 좋은건가요 ??

JPA spring-boot spring java

답변 1

6

김영한

안녕하세요. 정윤성님

1. Order의 데이터만 변경하고, OrderItem의 데이터가 변경될 일이 없다면 당연히 Order에만 락을 걸주시면 됩니다.

하지만 그보다 앞서 꼭 락을 걸 필요가 있는가?에 대해서는 항상 의문을 가져야 합니다.

한 고객이 주문을 변경한다고 가정하면, 락이 크게 의미가 없는 것이지요. 그리고 고객과 관리자가 동시에 Order 데이터를 변경 한다고 가정해도, 확율상 너무 낮으면 꼭 락을 걸 필요가 있는지는 고민해봐야 합니다.

2. 애그리거트의 단위와 락은 무관합니다. 락은 정말 데이터를 동시에 변경하면 안되는 이슈가 있을 때만 보수적으로 사용해야 합니다.

추가로 실무에서 락은 최후의 보루 정도로 생각해야 합니다. 생각해보면 우리 일상의 거의 모든 곳에 락을 걸어야 하는데, 그렇지 않아도 서비스는 잘 동작합니다. 왜냐하면, 정말로 같은 시간에 같은 데이터를 변경하는 일은 거의 없기 때문입니다. 비즈니스상 크리티컬 하더라도 정말 동시에 같은 데이터를 수정하는 일을 매우 드뭅니다. 제 경험상 락을 풀어두어서 발생하는 이슈보다 락을 걸어서 발생하는 이슈가 더 많았습니다^^; 특히 데이터베이스에 따라서 동작하는 방식도 달라서 꼭 실무에서는 확인하고 검증해본 다음에 사용해야 합니다.

감사합니다.

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

67

1

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

105

3

MemberRepository 구현체

0

56

1

pdf 표현 질문드립니다.

0

60

1

로그가 남지 않는 문제.

0

79

1

테스트 라이브러리가 강의는 junit4가 맞나요??

0

70

2

pdf 파일과 차이점이 있는 것같은데 문제 없나요?

0

71

2

@PrePersist, @PreUpdate 호출 시점 질문드립니다.

0

91

2

Sort 인터페이스는 잘 사용 안하나요?

0

52

1

스캔대상 질문드립니다.

0

45

1

하이버네이트6에서의 최적화에 이은 질문

0

82

1

save() vs saveAndFlush DB 통신 횟수

0

52

1

순수 JPA 리포지토리 코드 수정부분

0

86

2

bulk연산 후 flush하는 이유를 모르겠어요

0

150

3

bulk insert 질문입니다.

0

176

2

교만했던 것 같아요.

0

145

1

RESTful 강의는 안하시는 건지 궁금합니다.

0

145

2

동적 테이블에 대한 질문

0

85

1

영속성 전이와 연관관계

0

130

2

강의 10:25 질문

0

73

1

단건 update 질문

0

95

2

엔티티 와 도메인의 경계

0

126

1

UsernameOnlyDto 타입 type mismatch 오류

0

119

1

Projection 개념과 데이터 전달과정에 대해 질문 있습니다.

0

136

1