inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

안녕하세요 분산환경 질문이있습니다

해결된 질문

306

작성자 없음

작성한 질문수 0

0

스프링서버 3대가 scale-out 되어있는 상황이고 DB는 하나를 쓰고있습니다.
3대의 스프링서버에서 5분에 한번 실행되는 스케줄링 서비스로, DB에서 좋아요 많은순으로 5개씩 가져옵니다
이때 3대의 서버가 동일한 게시글을 가져와야해서, 락의 필요성을 느꼈는데 저는 redis 분산락 말고는 해결방법이 잘 떠오르질 않더라구요.

서버1 select -> 그 사이에 좋아요 update -> 서버2 select -> 서버3 select
위같은 상황이 발생해 서버 1과 2,3이 다른 결과를 select 할수도 있을것 같은데 비관,낙관적 락과 네임드락으로 해결할수 없다고 판단했는데 생각이 맞을까요?

java spring 동시성

답변 1

1

최상용

scan 님 안녕하세요.
말씀하신 상황에 대해 정확하게 인지를 하지는 못하였으나 강의에서 나온 락으로는 해결할 수 없을 것 같습니다.
테이블 단위의 락을 획득함으로써 해결할수는 있겠으나 이는 권장되지 않는 방법입니다.

다른 방법으로 해결을 해보시는 것이 좋을 것 같습니다.

예를들어 배치프로그램을 사용하여 주기적으로 select 하여 5개의 게시물의 id 를 데이터베이스 (또는 레디스) 에 일시적으로 저장을 한 후 스케줄링 서비스에서는 저장된 5개의 게시물의 id 를 사용한다.

정확한 상황은 잘 모르겠으나 위와 같은 방법으로 해결할 수 있지않을까 생각해봅니다.

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

0

43

2

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

0

120

2

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

0

94

2

단일연산

0

70

2

낙관적락vs. 레디스락

0

108

2

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

0

67

2

@Lock(OPTIMISTIC)이 필요한 이유

0

90

2

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

0

132

2

DataSource Hikari 사용 이유

0

147

2

saveAndFlush 사용 이유 문의

0

113

3

비관적 락 VS 네임드 락

0

160

3

application.yaml 에 redis 정보

0

99

2

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

0

185

2

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

0

219

2

@modifying 이용한 동시성 제어

0

168

2

DB락과 분산락

0

260

2

NamedLock 테스트 실패

0

186

2

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

0

172

2

optimistic Lock 재시도 질문입니다.

0

230

2

낙관적 락 테스트 실패

0

239

2

오류?

0

1627

4

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

1

268

2

Pessimistic Lock 전체 테스트 오류 문의

0

360

3

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

0

460

2