강의

멘토링

커뮤니티

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

happyrichman님의 프로필 이미지
happyrichman

작성한 질문수

6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법

4-6. 트랜잭션 실습 - 쿠폰 동시성 문제 해결

멀티스레드 상황인데 currentParticipants 가 AtomicInteger가 아닌 이유?

작성

·

16

0

1. 현재 학습 진도

  • 몇 챕터/몇 강을 수강 중이신가요?

    4-6. 트랜잭션 실습 - 쿠폰 동시성 문제 해결

     

  • 여기까지 이해하신 내용은 무엇인가요?

 

2. 어려움을 겪는 부분

  • 똑같이 멀티스레드 환경인데 successCount 는 AtomicInteger로 세팅되어 있고, currentParticipants 는 AtomicInteger가 아닌 이유가 궁금합니다. 이렇게 되면 Java단에서부터 currentParticipants++할 때 동시성 문제가 발생하지 않을까요?

3. 시도해보신 내용

 GPT에 물어보니 AttributeConverter 사용하면 JPA에서도 AtomicInteger를 쓸 수 있다고 합니다.

 

답변 2

0

happyrichman님의 프로필 이미지
happyrichman
질문자

아 currentPariticipants++ 가 DB 에서 가져온 값을 1 증가시키는 코드였네요. 제가 코드를 잘못 봤습니다.

질문 삭제가 안 되어서 그냥 놔두겠습니다.

0

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

질문 주신 내용을 보면 멀티스레드 환경에서 successCountAtomicInteger로 설정되어 있는 반면, currentParticipants는 그렇지 않은 이유에 대해 궁금해하시는 것 같습니다.

AtomicInteger 사용 이유

AtomicInteger는 멀티스레드 환경에서 안전하게 값을 증가시키거나 감소시키기 위해 사용되는 클래스입니다. 이는 내부적으로 CAS(Compare-And-Swap) 연산을 사용하여 스레드 간 경쟁 상황에서도 스레드 안전하게 값을 수정할 수 있도록 보장합니다. 따라서, 여러 스레드가 동시에 접근하여 값을 변경하는 경우에는 AtomicInteger 같은 원자적 연산을 제공하는 클래스를 사용하는 것이 일반적입니다.

currentParticipants가 AtomicInteger가 아닌 이유

하지만 모든 멀티스레드 환경에서 AtomicInteger를 사용하는 것은 아닙니다. 예를 들어, currentParticipants와 같은 변수는 데이터베이스와의 트랜잭션에 의해 관리될 수 있습니다. 이 경우 JPA나 데이터베이스의 락과 같은 매커니즘을 통해 안전하게 값이 변경되기 때문에 Java 애플리케이션 레벨에서 AtomicInteger를 사용할 필요가 없을 수도 있습니다.

  1. 트랜잭션 범위 관리: currentParticipants가 데이터베이스의 컬럼이기 때문에 트랜잭션 내에서 일관성이 보장됩니다. 데이터베이스의 트랜잭션 격리 수준에 따라 적절하게 동시성 문제가 해결될 수 있습니다.

  2. 단순 뷰 업데이트: currentParticipants가 여러 곳에서 동시에 업데이트되지 않는 경우라면, 굳이 AtomicInteger를 사용할 필요가 없다고 판단할 수 있습니다. 즉, 해당 값은 논리적으로 비즈니스 로직 외에 변경되지 않는다면 개발자는 Atomic 클래스를 사용하지 않을 수 있습니다.

JPA와 AtomicInteger

GPT에서 언급된 것처럼 AttributeConverter를 사용하여 JPA에서 AtomicInteger를 사용하는 것도 가능하지만, 이는 일반적이지 않은 패턴입니다. 트랜잭션을 통한 데이터 일관성 보장이 선행되기 때문입니다.

유사한 주제의 질문과 답변을 확인하시려면, 전과 유사한 문제를 다룬 여기를 참고해 보십시오. 이는 비관적/낙관적 락 및 트랜잭션 처리를 이해하는 데 도움을 줄 것입니다.

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

happyrichman님의 프로필 이미지
happyrichman

작성한 질문수

질문하기