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

wony님의 프로필 이미지
wony

작성한 질문수

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

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

해결된 질문

작성

·

342

·

수정됨

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();
        }

    }
}

답변 1

0

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

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

감사합니다.

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

감사합니다!

wony님의 프로필 이미지
wony

작성한 질문수

질문하기