19,800원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨재고시스템으로 알아보는 동시성이슈 해결방법
테스트에 대한 질문이 있습니다.
강의를 듣고 몇 가지 테스트의 시간을 재보고 있습니다.예를 들어서 해당 제품의 갯수가 1000개이고 동시에 접속한 10만명이 해당 제품 구매를 클릭한 경우,@BeforeEachpublic void before () {stockRepository.saveAndFlush(new Stock(1L, 1000L));}위의 코드로 1000개의 제품을 미리 등록을 하였는데10만명의 사용자의 경우threadCount를 10만으로 해놓으면 되는 걸까요?아니면 쓰레드 풀을 Executors.newFixedThreadPool(100000)으로 해두면 되는 걸까요?또 그렇게 Stock의 갯수를 늘리게 되었을 때에 비관적 락의 경우SQL Error: 0, SQLState: null 이런 에러가 발생합니다. 구글링 했을 때에 hikari에서 연결 가능한 커넥션이 없어서 그런다는데 hikari pool size를 늘리면 되는 문제인가요?
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
좋아요나 조회수 등 동시성 처리 질문입니다.
사용자가 많지 않고 일반 커뮤니티 같은 경우에는 좋아요 개수가 많이 몰릴 일이 없다고 생각해서 PessimisticLock을 적용하려고 합니다. 제가 생각했을 땐 인스타나 그런 대규모 사이트의 좋아요는 PessimisticLock을 적용하면 성능 저하가 뚜렷하게 나타난다고 생각합니다. -> 레디스 사용이 베스트토이프로젝트 규모의 SNS는 PessimisticLock으로 구현하는게 비용도 들지 않고 데이터 정합성이 보장된다고 판단했습니다.혹시 제가 틀린 거나 더 나은 방법이 있을까요?항상 감사합니다! 아 추가로 newFixedThreadPool은 왜 32로 설정하는지도 궁금합니다!!
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
안녕하세요 강사님 save 메서드 사용 질문있습니다.
트랜잭션이 걸려있는 경우에stock.decrease(quantity)만 해줘도 영속성 컨텍스트에 있는 값을 가져와서 재고 감소가 가능한 걸로 아는데왜 save를 한 번 더 해주는 건지 이유가 궁금합니다.그리고 위에 제가 이해한 영속성 컨텍스트에 대한 내용도 맞을까요?
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
lettuce 를 이용할떄 stockService의 decrease 메서드는 정확히 어떤걸 사용하면 되는건가요?
테스트 코드 실행시 계속 돌기만 하는데 어떤 decrease를 사용해야 하는걸까요??
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
맥 사용자가 아닌 윈도우 사용자 분들은 docker redis 설치 어떻게 하셨나요?
docker desktop , mysql은 별개로 설치 되어 있긴 한데docker desktop으로도 mysql redis 설치가능한건가요??ㅠㅠ
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
RedissonClient null
TC에 문제가 있어 디버깅을 해보니RedissonClient가 null이네요.기본 url에 port인데 왜 이럴까요? ㅠㅠ
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
테스트 실패 후 tryLock waitTime 설정 변경 뒤 테스트 성공에 대한 질문
waitTime을 10초로 설정했어도 leaseTime이 1이기 때문에 테스트는 성공했어야 할 것 같은데 왜 실패하나요?그리고 waitTime을 10초에서 15초로 변경하면 왜 성공하나요?
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
동시성 제어 방법 채택 순서
안녕하세요강의를 듣던 중 궁금함이 생겨서 질문드립니다.msa 환경에서, 레디스를 사용할 수 있는 상황이라면 레디스를 사용하는 것이 제일 좋은 방법인가요? 아니면 db락을 사용하는 것이 더 좋을 수도 있나요? 만약 db락을 사용하는 것이 더 좋을 수도 있다면, 그 상황은 어떤 상황이 있을까요?
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
계속해서 데이터가 줄지 않고 100개로 나옵니다.
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended2023-08-02T14:04:15.469+09:00 DEBUG 24388 --- [ main] org.hibernate.SQL : insert into stock (product_id,quantity) values (?,?)Hibernate: insert into stock (product_id,quantity) values (?,?)2023-08-02T14:04:15.723+09:00 DEBUG 24388 --- [ main] org.hibernate.SQL : select s1_0.id,s1_0.product_id,s1_0.quantity from stock s1_0 where s1_0.id=?Hibernate: select s1_0.id,s1_0.product_id,s1_0.quantity from stock s1_0 where s1_0.id=?2023-08-02T14:04:15.788+09:00 DEBUG 24388 --- [ main] org.hibernate.SQL : select s1_0.id,s1_0.product_id,s1_0.quantity from stock s1_0Hibernate: select s1_0.id,s1_0.product_id,s1_0.quantity from stock s1_02023-08-02T14:04:15.802+09:00 DEBUG 24388 --- [ main] org.hibernate.SQL : delete from stock where id=?Hibernate: delete from stock where id=? org.opentest4j.AssertionFailedError: Expected :0Actual :100 이유가 뭔지 잘 모르겠습니다. 코드도 아무리 봐도 같습니다 ㅠㅠ
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
facade 패턴 적용 및 service 에서 락 재흭득 처리 후 문제 질문
facade 패턴 적용에 대한 질문 강의를 듣고 facade 패턴에 대해서 조금 공부해봤습니다.강의에서 facade 패턴을 적용한 이유가 락 흭득 관련한 반복 로직을 service 레이어에서 분리하기 위함이라고 이해했습니다. 현재 service 레이어에는 메서드가 하나라서 facade 에 메서드가 하나인 것인가? 라는 생각이 들었습니다.1. 락 처리(동시성 문제 처리)를 하는 메서드만 facade 로 분리를 해주는 것인가요? 2. 아니면 service 레이어에 있는 모든 메서드에 대해서 facade 패턴으로 분리한 클래스에 메서드 호출을 넣어야하는 것인가요?만약 1번이 맞다면 컨트롤러에서 일반 service layer 와 facade 둘다 컨트롤러에서 의존성을 갖고 있도록 해야할텐데 이는 컨트롤러에에서 락처리를 하는 facade.decrease 와 stockService.decrease 둘다 참조 가능한 것이 이상하다는 생각이 들었습니다.---이와 별개로 facade 를 적용하지않고 service 에서 decrease 에 대해 락 흭득 재흭득 처리를 하면 단순하게 아래 처럼 처리 할 수 있다고 생각했습니다..그랬더니 동시성 문제가 해결되지 않고 테스트를 돌려보니 51 만큼만 감소가 이루어 지더라구요... 이유가 뭔지 궁금합니다.@Service public class OptimisticLockStockService { private final StockRepository stockRepository; public OptimisticLockStockService(StockRepository stockRepository) { this.stockRepository = stockRepository; } @Transactional public void decrease(Long id, Long quantity) throws InterruptedException { while (true) { try { Stock stock = stockRepository.findByIdWithOptimisticLock(id); stock.decrease(quantity); stockRepository.saveAndFlush(stock); } catch (Exception e) { Thread.sleep(50); } } } }
- 해결됨재고시스템으로 알아보는 동시성이슈 해결방법
레디스 설정이 추가적으로 필요없는건가요?
도커를 통해 레디스 설치후 라이브러리 설정 외에 별로의 URL이나 주소를 매핑하지 않았는데 어떻게 자동으로 연결되는 걸까요 ?
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
레디스 라이브러리 장단점에 대해서 혼동이 있어서 질문드립니다.
강의 내용에 따르면 Redisson 을 사용하면 락 흭득 재시도를 기본으로 구성한다는 말씀을 해주셨습니다.RedissonLockStockFacade 예제를 보면decrease 메서드 내부에서 getLock 으로 락을 흭득하고 lock.tryLock() 호출을 통해 락을 잡는 다는 것으로 이해하였습니다.이 때 락 흭득 재시도를 lock.tryLock() 내부에서 이루어 지는 건가요??또한 lettuce 사용 시 락 흭득 재시도를 하는 과정은 while(!redisLockRepository.lock(key)) 를 통해서 스핀락 형태로 이루어지는건가요?
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
OptimisticLockStockService 에 @트랜잭션을 사용하지 않는경우
OptimisticLockStockService 에 decrease 메서드에 @트랜잭션을 사용하지 않는 경우 테스트 코드가 멈추지 않는 문제가 있었습니다.이런 경우 왜 그런건가요??
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
강의자료
강의자료 다운로드는 어디서 받나요??
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
Redis 추후 공부 법
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강의 잘 들었습니다!동시성 문제 해결방법으로도 그렇고,캐싱 용도로도 Redis를 활용하고 싶은데요,혹시 추천해주실 수 있는 Redis 공부 방법이 있으신지 질문 드리고 싶습니다! 감사합니다!
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
try~finally 구문을 사용하시는 이유가 궁금합니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요! 아주 사소한 질문인데요, LettuceLockStockFacde 서비스의decrease() 메소드 안에서 , Lock을 획득하신 이후에 재고감소 및 락 반환 로직을 try~finally 구문으로 감싸신 이유가 궁금합니다!제 생각에는 try~finally 구문으로 감싸지 않아도,순차적으로 수행될 것 같아서, 특별히 감싸신 이유가 있을까 싶어서 질문 드립니다! 항상 좋은강의 감사드리고, 앞으로 계획하시는 추후 강의도 기대하고 있겠습니다!
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
격리수준과 동시성에 대해서 질문 있습니다!
안녕하세요! 강의 너무 잘들었습니다.강의를 들으면서 느꼈던 궁금증들이 있습니다.동시성 문제에서 락을 하는 이유는 트랜잭션의 격리 수준으로는 해결할 수 없기때문에 하는건가요? 아니면 격리수준을 높이면 성능이 안나와서 락킹을 하는 건지 궁금합니다.Redis가 인메모리라 빠른건 많이 들었는데 실제 개발 환경이면 Redis나 MySQL이나 클라우드 환경을 사용할텐데, 이게 클라우드 서버에서 인메모리를 사용한다는 건가요? Redis나 MySQL이나 네트워크 I/O가 발생하는 것은 같은데 차이가 많이 큰지가 궁금합니다!너무 궁금한 내용이라 답변해주시면 감사하겠습니다!
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
안녕하세요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 제가 아직 초보라서 어떻게 적용을 해야될지 몰라서요repository를 사용하셨는데 저는 Dao를 사용하고있는데 어떻게 적용을 해야되는지 몰라서 여쩌 봅니다
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
처음 테스트시에 에러가 나오는데 모르겠네요
처음 테스트 하는데 이렇게 나옵니다.왜 이럴까요? ㅠㅠ
- 해결됨재고시스템으로 알아보는 동시성이슈 해결방법
named lock, datasource 분리
안녕하세요. 강의를 잘 듣고 있습니다. named lock 사용 시, datasource 분리(커넥션 풀 분리)를 하는게 맞다고 하셨고이유로는 커넥션이 고갈될 수 있기 때문이라고 하셨습니다..커넥션이 고갈되는 이유라면강의에서 한 것 처럼 커넥션 풀의 커넥션 수를 늘리면 되는 것 아닌가 해서요..DB 를 분리해야하는 이유라면 납득은 되는데 단순히 동일한 DB 를 사용하는데 datasource 를 분리해야하는 것은 잘 이해가 되지 않습니다.. 이와 관련한 자세한 설명 부탁드립니다. 감사합니다.