강의

멘토링

로드맵

Inflearn brand logo image

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

ililil님의 프로필 이미지
ililil

작성한 질문수

재고시스템으로 알아보는 동시성이슈 해결방법

@modifying 이용한 동시성 제어

작성

·

113

·

수정됨

0

강의를 들은 뒤 동시성 제어를 위해 이것저것 알아보는 중 @Modifying을 이용하여 제어하는 방법이 있다는 것을 알았습니다.

언제 락을 걸어야 하고, 언제 어노테이션을 이용해야 하나요?

답변 2

0

최상용님의 프로필 이미지
최상용
지식공유자

ililil 님 안녕하세요.
@Modifying 가 뭔지 몰라서 찾아보았는데요.
해당 어노테이션은 동시성제어라기보다는 데이터의 수정이 있는것을 명시하기위해서 사용하는것 같아요.

 

어노테이션이랑은 무관하게 락은 여러스레드가 하나의 데이터에 접근하여 문제가 발생될것이라고 예상하는 지점에 진입하기 전에 걸고 데이터의 수정을 완료한 이후에 해제하면 될것같습니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. ililil님.

동시성 제어는 시스템의 실시간 성능과 데이터 일관성을 유지하기 위해 중요합니다. @Modifying 어노테이션은 Spring Data JPA에서 데이터베이스 데이터를 수정하기 위해 사용되며, 주로 @Query와 함께 사용되어 직접 쿼리를 실행할 수 있게 합니다. 하지만, 이는 직접적인 동시성 제어 수단이라기보다는 데이터베이스 수정 작업에 활용됩니다.

동시성 제어는 크게 두 가지로 나누어 생각할 수 있습니다:
1. 낙관적 락(Optimistic Locking):
- 데이터가 변경될 가능성이 적을 때 주로 사용됩니다.
- @Version 어노테이션을 통해 버전 정보를 이용하여 충돌을 감지하며, 충돌이 발생하면 트랜잭션을 되돌립니다.

  1. 비관적 락(Pessimistic Locking):
    • 데이터 충돌 가능성이 높을 때 사용되며 데이터 보호를 위해 데이터에 대해 배타적 잠금을 걸어 다른 트랜잭션 접근을 제한합니다.
    • JPA에서는 LockModeType.PESSIMISTIC_WRITE 등으로 지정할 수 있습니다.

@Modifying은 이러한 락들과 상관없이 데이터베이스의 변경을 가할 수 있도록 하는 역할을 하며, 주로 스프링 데이터 JPA와 함께 명시적인 데이터베이스 쿼리를 사용합니다.

아래는 관련된 동시성 제어 방법에 대해 더 이해를 도와줄 수 있는 몇 가지 질문 링크입니다. 이를 통해 동시성 제어의 다양한 측면에서 더 깊게 이해하실 수 있습니다:

  1. synchronized와 @Transactional: synchronized 키워드와 @Transactional의 사용 차이.
  2. Redis 분산락 질문: Redis를 활용한 분산 락과의 차이 및 성능 관련 논의.

보다 상세한 내용은 동시성 제어 및 데이터베이스 트랜잭션 관리에 대한 학습이 필요할 수 있습니다. 이것이 실습과 실제 적용이 필요한 이유이기도 합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

ililil님의 프로필 이미지
ililil

작성한 질문수

질문하기