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

정윤성님의 프로필 이미지
정윤성

작성한 질문수

실전! 스프링 데이터 JPA

JPA Hint & Lock

도메인 락 관련 질문

작성

·

373

2

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

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

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

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

답변 1

5

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

안녕하세요. 정윤성님

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

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

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

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

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

감사합니다.

정윤성님의 프로필 이미지
정윤성

작성한 질문수

질문하기