inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

redisson lock을 AOP로 변경하는 경우 실무 사용 방법 문의드립니다!

해결된 질문

410

wony

작성한 질문수 4

0

강사님 안녕하세요!

해당 강의 수강 후 실무에 재고 동시성 처리 코드를 개발하고 있는데 궁금한 부분이 있어서 문의드립니다!

 

redisson lock 으로 구현하였는데, 중복 코드가 많아서 AOP로 작업 작업을 하려합니다.

aop를 작업 하는 경우 facade가 아니라 stockService에 직접 어노테이션을 추가하는 형태로 하는게 맞을지 혹시 해당 부분은 실무에서 사용하실때 어떤 형태로 하시는지 문의드립니다.

구글 검색을 하다보니 AOP로 트랜잭션 new로 한다는 이야기가 있는데 실무에서 어떻게 쓰셨는지 궁금해서 문의드립니다!

감사합니다!

 

@Component
public class RedissonLockFacade {

    private RedissonClient redissonClient;
    private StockService stockService;

    public RedissonLockFacade(RedissonClient redissonClient, StockService stockService) {
        this.redissonClient = redissonClient;
        this.stockService = stockService;
    }

    public void decrease(Long id, Long quantity) {
        RLock lock = redissonClient.getLock(id.toString());

        try {
           boolean available = lock.tryLock(10, 1, TimeUnit.SECONDS);

           if (!available) {
               System.out.println("lock 획득 실패");
               return;
           }

           stockService.decrease(id, quantity);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        } finally {
            lock.unlock();
        }

    }
}

java spring 동시성

답변 1

0

최상용

wony 님 안녕하세요.
AOP 로 작업을 하시게 된다면 facade class 는 사라지고 service class 에 어노테이션을 붙이는 형태로 작업이 될 것 같습니다.
어떻게 하는 것이 정답이다! 는 정해지지 않은 문제인 것 같습니다.
저는 별도로 AOP 는 사용하지 않았으며 Lock 을 위한 기능을 담은 class 를 생성하고 그 Class 를 활용하여 락을 제어하는식으로 사용하였습니다.

감사합니다.

1

wony

감사합니다!

레디선 테스트코드에서 채널이름은 없어도 되는건가요?

0

40

2

낙관적 락을 사용할 떄 차이점

0

118

2

동시성 검증 코드에 관한 문의

0

91

2

단일연산

0

69

2

낙관적락vs. 레디스락

0

106

2

안녕하세요. 레디슨 질문있습니다..!!

0

66

2

@Lock(OPTIMISTIC)이 필요한 이유

0

89

2

get_lock 의 timeout이 3000초 이던데 너무 긴거 아닌가요?

0

128

2

DataSource Hikari 사용 이유

0

145

2

saveAndFlush 사용 이유 문의

0

111

3

비관적 락 VS 네임드 락

0

158

3

application.yaml 에 redis 정보

0

99

2

왜 클래스 이름에 Facade 가 붙나요?

0

181

2

@Transactional 으로 인한 동시성 문제 발생 원인이 궁금합니다.

0

218

2

@modifying 이용한 동시성 제어

0

168

2

DB락과 분산락

0

260

2

NamedLock 테스트 실패

0

186

2

테스트에서 트랜잭션 어노테이션 질문 있습니다.

0

171

2

optimistic Lock 재시도 질문입니다.

0

229

2

낙관적 락 테스트 실패

0

239

2

오류?

0

1624

4

LettureLockStockFacadeTest에서 오류가 발생합니다.

1

267

2

Pessimistic Lock 전체 테스트 오류 문의

0

357

3

비관적 락 vs 레디스(Lettuce)락 비교 관련 질문

0

458

2