inflearn logo
강의

Course

Instructor

Complete in 6 weeks! 4 strategies to differentiate your backend resume - How to stand out among identical resumes

4-6. Transaction Practice - Resolving Coupon Concurrency Issues

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

Resolved

88

happyrichman

11 asked

0

1. 현재 학습 진도

 

2. 어려움을 겪는 부분

3. 시도해보신 내용

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

 

java spring mysql redis 이력서 카카오공채-채용

Answer 3

0

dingcodingco

아하 happy 님!! 열심히 공부하고 질문 남겨주셔서 감사합니다 ㅎㅎㅎ 같이 빠이팅해보시져!!

0

happyrichman

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

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

0

dingcodingco

아하 happy 님!! 열심히 공부하고 질문 남겨주셔서 감사합니다 ㅎㅎㅎ 같이 빠이팅해보시져!!

0

communityai8509

안녕하세요, 인프런 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를 사용하는 것도 가능하지만, 이는 일반적이지 않은 패턴입니다. 트랜잭션을 통한 데이터 일관성 보장이 선행되기 때문입니다.

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

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

조회속도 개선에서 더 개선하는 방법이 궁금합니다.

0

28

2

Build 관련 문제 (테스트 관련 문제)

0

43

2

인덱스 관련 질문 있습니다.

0

68

2

비관적 락 구현 방식 문의 건

0

70

2

외부 api 처리 방안에 대하여 궁금한 점이 있습니다.

0

90

2

네임드 락 사용 시 커넥션 풀을 분리하는 방법에 대한 질문

0

83

2

이벤트) 백엔드 기술면접 실전문제집

0

102

2

로컬에서 테스트 한 결과를 이력서에 써도 괜찮을까요?

0

131

2

데드락 발생 시, 외래 키를 제거하는 방법 관련 질문

0

87

2

Redis 캐싱을 도입하는데 db조회와 성능이 차이가 거의 없습니다.

0

112

2

k6 부하테스트 중인데 개선 전 성능이 너무 안나와서 고민

0

131

2

강의와 성능수치 비교

0

103

2

13강 강의 뒷부분의 과제 안내부분은 어디있나요?

0

51

2

이벤트 참가자 수 증가 후, save 메서드 호출 코드 질문

0

66

2

[수업 자료 질문] Cache Aside의 특징 문의

0

86

2

[수업자료 문의] RedisTemplate으로 SETNX 시 리턴값 문의

0

81

2

블로그에 학습 내용 정리 포스트를 올려도괜찮나요?

0

110

2

클라우드 환경 배포시 부하 테스트 방식에 대하여

0

137

2

k6 dashboad 안나오는 상

0

113

2

2-4 도커 빌드 에러가 계속 납니다.

0

297

2

AWS EC2에 도커 컨테이너가 동작하지 않을 때 확인 해야하는 것

0

115

2

성능 측정시

0

111

2

API 별 실행 쿼리 모니터링 구현 질문 있습니다.

0

85

2

이력서 작성에 대한 질문

0

114

2