19,800원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
pessimisticLock이 동작하지 않습니다.
synchronized decrease test 코드에서 stockService 변수를 pessimistic 변수로 바꿔주기만 했는데 synchronized decrease test는 제대로 동작하고pessimisticLock decrease test 코드는 동작하지 않습니다. 어디가 문제일까요?application.yml 코드도 강의자료와 같습니다.개발환경이 윈도우 환경이라 원래 깔려있던 mysql을 사용했는데 이게 문제일까요?
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
트랜잭션 단위로 락걸기
강의를 듣다가 궁금한 점이 생겨 질문드립니다.다음과 같은 상황이 존재합니다.가용한 stock 조회stock 점유위의 사례 같은 경우에는 하나의 트랜잭션 단위로 lock을 걸어야할 거 같습니다.transaction isolate 옵션이 아닌, transaction 단위나 메소드 단위로 lock을 걸 수 도 있나요??
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
무한루프
안녕하세요 강사님 해당 강의 실습하던 도중에 에러 발생하여 질문드립니다.테스트코드 실행시 무한로딩에 걸리게 되며 쿼리도 날아가지 않는 상황이 발생하였습니다.해당 부분은 어떤 에러인가요?? ㅜㅜ도와주시면 감사하겠습니다.소스코드는 https://github.com/brinst07/stock_example에 업로드했습니다.
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
pessimistic lock이 동작하지 않습니다.
해당 강의 듣고 실습하던 도중에 발생하여 질문드립니다.강사님께서 올려주신 소스코드를 확인했는데도 똑같은 문제가 발생합니다.한번 실행해본 결과는 쿼리에 for가 붙지 않아 jpa dialect 문제인거같아 수정하고 실행해도 동일한 문제가 발생하였습니다.어떤 문제인지 궁금하여 질문드립니다.해당 소스코드는 git에 업로드하였습니다.https://github.com/brinst07/stock_example
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
하나의 프로세스만 사용한다는 의미
안녕하세요 우연 찮게 강의를 보게 되었는데 도움이 많이 됩니다. 감사합니다! 미천한 실력이라 기초적인 질문 하나 하고싶습니다. synchronized가 하나의 서버, 하나의 프로세스에서만 적용된다는 의미는 예를들어, 스프링부트로 하나의 어플리케이션을 뛰운다는 단위인가요? 하나의 서버에서 여러 어플리케이션을 뛰운다면 synchronized는 각 어플리케이션에서만 동기화가 적용되는 것일까요 ?
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
낙관락시 트랜잭션 질문
안녕하세요. 트랜잭션 관련 질문이 있습니다.강의와 똑같이 코드를 따라한 후, OptimisticLockStockFacade의 decrease메서드에 Transactional 어노테이션을 달아주면, 수량이 99에서 더이상 업데이트 되지 않고 무한루프를 돌면서 쿼리가 계속 날라가더라고요.위 상황이 발생하는 이유에 대해 알 수 있을까요?
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
오류 질문
안녕하세요 강사님.테스트가 진행하다가 멈춰버리네요. 강사님 강의에는 전파전략이 있고 깃헙에는 또 없으신데... 어느게 맞는건가 싶기도 합니다... https://github.com/dkaskgkdua/stock제 깃헙에 저장된 소스입니다.
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
분산락 관련 질문입니다.
안녕하세요 좋은 강의 감사드립니다.이전까지 알아보았던 락들은 분산락이 아닌 것인가요?만약 아닌 것이라면 다중 서버 환경에서 동시성 문제를 해결하기 위해서는 위의 방법들이 아닌 분산락을 사용하여야 하는 것인지 궁금합니다. 추가로 동시성 관련 질문이 하나 있습니다.다중 서버 환경에서 게시판 등에서 조회수 기능을 동시성 문제 없이 해결하고 싶으며, 다음과 같이 구현하고자 합니다.(조회수라 어느정도 누락되어도 상관 없다고 하실 수 있겠지만, 목표는 하나도 누락되지 않게 하는 것입니다!)조회 요청이 들어오면 레디스에 조회수 증가분을 올린 이후, 특정 시간마다 배치처리를 통해 반영하고자 합니다.이때 다음 두 의문점이 있습니다.먼저 다중 서버 환경에서 레디스 증가분을 올리는 경우, 이 경우에도 동시성 문제가 발생할 수 있을 것 같습니다. 이를 해결하기 위해서는 이곳에도 분산락을 걸거나 increment()를 사용하여 동기적으로 처리해야 할 거 같은데 저의 생각이 맞는 것인지, 맞다면 다른 방법은 없는지 궁금합니다.두번째는 레디스 조회수 증가분을 배치처리를 통해 반영시키는 경우, 해당 작업 사이에 조회수 증가가 되어버리면 해당 증가분은 누락될 것 같습니다. 이를 해결하기 위해서는 배치처리를 할 때 레디스에 Lock을 걸어야 할 것 같습니다. 그런데 그렇게 된다면, 배치처리가 진행되는 그 순간동안은 레디스가 블로킹되어 있기에 게시글 조회가 이루어지지 않을 것 같습니다. 이정도는 감수하고 사용하거나, 혹은 카프카 등을 활용하여 이벤트로 처리하는 방법도 있을 것 같은데, 이러한 방법이 모두 사용 가능한 것인지, 더 나은 방법은 없는지 궁금합니다. 너무 많은 질문을 하는 것 같아 죄송합니다. 좋은 강의 정말 감사합니다.
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
Redisson 테스트 코드 실패
Redisson 테스트 코드 실패예제 따라해도 테스트 코드 실패클론 받아서 테스트 코드 실행해도 실패.뭐가 문제일까요?
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
테스트 코드 실패
Redisson 테스트 코드 실패하고 있습니다.똑같이 따라서 코딩했는데도 실패해서프로젝트 클론 받아서 실행해도 테스트 코드는 실패합니다..뭐가 잘못됬을까요?
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
StockService - synchronized 질문이여
안녕하세요 이전 강의부분에서 쓰셨던 decrease 메서드에 synchronized 는 작성안해도 Named Lock이 성공하는 케이스가 되던데, 어떤 이유가 있어서 안빼신건지 궁금합니다 ..
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
Propagation.REQUIRES_NEW 를 사용하는 이유가 무엇인가요?
안녕하세요! 선생님.다른 락에서는 트랜잭션에 Propagation.REQUIRES_NEW 를 사용하지 않았는데 namedLock 에서는 왜 사용하나요?
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
synchronized 키워드 후 테스트 실패나는 이유
안녕하세요. 실패하는 이유를 간략하게 설명하셨는데 그 이유가 혹시 스프링의 aop 동작인 proxy 때문인가요?저는 트랜잭션을 지우면 값이 decrease 되지 않고 100이 됩니다.트랜잭션이 없기 때문에 100이 되어야 하는거 아닌가요?
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
MySQL과 Redis의 성능에 관하여 문의드립니다.
MySQL의 특징으로 어느 정도의 트레픽까지는 문제없이 활용 가능하다라고 설명해주셨는데 어느 정도를 수치로 말씀해주실 수 있을까요?그리고 Redis가 MySQL보다 절대적으로 성능이 뛰어난지, 아니면 특정 트래픽 이상부터 성능이 뛰어난게 체감이 되는건지도 궁금합니다.그리고 성능이라고 표현하신게 비용 대비 퍼포먼스인지, 속도만 놓고봤을 때 더 빠르다인지 모호한 감이 있어서 구체적으로 말씀해주시면 정말 감사하겠습니다.좋은 강의 촬영해주셔서 감사합니다. 다음 강의도 기대하고 있겠습니다!
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
redis 라이브러리별 케이스에 관하여 문의 드립니다
redis를 활용한 사례를 처음 접하여서 강의 중 말씀해주신 '재시도가 필요하지 않은 경우', '재시도가 필요한 경우'가 명확히 떠오르지 않습니다 괜찮으시다면 간단한 예를 들어서 설명해주시면 감사하겠습니다
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
네임드락 코드 관련 질문
NamedLockStockFacade 클래스 decrease() 메서드에 @Transactional 이 안들어가도 되나요?@Transactional이 빠진 코드면 getLock()과 releaseLock()이 사용하는 커넥션이 달라지는 걸로 알고 있습니다.
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
Cannot execute statement in a READ ONLY transaction. 에러
다음과 같이 메소드를 선언하고 test를 수행하면 public interface StockRepository extends JpaRepository<Stock, Long> { @Lock(LockModeType.PESSIMISTIC_WRITE) @Query("select s from Stock s where s.id =:stockId") Optional<Stock> findById(@Param("stockId") Long stockId); } Caused by: java.sql.SQLException: Cannot execute statement in a READ ONLY transaction. at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916) at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:972) at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52) at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:57) ... 109 more 위와 같은 에러가 발생하는데요...어떻게 해결할 수 있나요?
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
학습내용 정리
안녕하세요, 강의 감사합니다! :D 혹시 학습한 내용 정리글이나 코드를 공개로 작성해도 되는지 여쭤보고 싶습니다
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
Spring Data Redis 관련 질문
안녕하세요 강의 잘 보고 있습니다. 현재 RedisTemplate이용해서 프로젝트를 진행중인데 궁금한점이 생겨 질문 드립니다 RedisTemplate의 Watch() 메소드는 낙관적 락 기반으로 동작하며 1번의 exec() 혹은 외부 트랜잭션에서의 변경만 허용하는 것으로 알고 있습니다. 만약 Watch()로 감시중이었던 Redis의 Key에서 추가적인 변경이 일어나면 변경되지 않는 것으로 알고있구요 그러면 이것 역시도 낙관적 락 기반 동작이기 때문에 실패 시 Retry관련 로직을 구현해줘야 하는 부분일까요?? 제 생각은 추가적인 변경 시 진행중이던 로직이 취소되기 때문에 Retry를 해줘야 할 것 같은데 RedisTemplate의 watch를 사용한 여러 깃헙 프로젝트를 찾아봐도 retry관련부분을 구현한걸 찾기가 힘들어 질문드립니다 감사합니다
- 미해결재고시스템으로 알아보는 동시성이슈 해결방법
테스트코드 실행 시 에러 문의
강사님이 작성하신 코드대로 따라친 것 같은데 결과가 동일하게 나오지 않고 테스트 코드에서 실패합니다 해결할 수 있는 힌트를 알려주시면 감사하겠습니다