최상용
수강생수
5,692
수강평수
449
강의평점
4.8
안녕하세요. 지식공유자 최상용입니다.
많은 오픈소스에 기여한 경험이 있는 현직 백엔드 개발자입니다.
- Spring Data Mongo Contributor
- querydsl Contributor
- grpc-kotlin Contributor
- ksp Contributor
- mybatis Contributor
강의
수강평
게시글
질문&답변
안녕하세요 강사님 질문있습니다.!!
정인호님 안녕하세요.제가 이해한게 맞다면 OrderConfirmEvent 를 발행하면 재고, 쿠폰, 적립금을 한번에 처리를 한다고 이해를 했는데요.이렇게 되면 예외를 핸들링하기가 힘들어지기때문에 순차적으로 진행을 할 것 같습니다.예를들어 OrderConfirmEvent 를 발행하면 재고를 감소시키고 재고감소에 성공하면 쿠폰을 소진시키고 주문이 정상적으로 되면 적립금을 주는식으로 개발을 할 것 같습니다.병렬로 수행하게 되면 다른작업들이 끝났는지 안끝났는지 검사를 해야하는 로직을 추가해야 하기때문에 로직이 복잡해질것 같기때문입니다.만약 병렬로 수행을 해야한다면 실패이벤트를 받았을 때 다른 이벤트들이 종료되었는가? 에 대한 체크를 해야 할 것 같습니다.쿠폰이 실패되었을 때 재고는 처리되었는지? -> 재고가 처리되어있지 않다면 기다렸다가 다시 처리 감사합니다.혹시 또 질문이 있으시다면 댓글로 남겨주세요!
- 0
- 2
- 14
질문&답변
테스트 코드
퓨퓨님 안녕하세요.어떤것을 테스트하는것이 목적인가? 를 생각해보면 좋을것 같습니다.비즈니스로직을 검증할 때 저는 카프카 발행을 했는가? 정도만 검증을 하는편입니다.컨슈머쪽은 로직에 대한 테스트를 하는편입니다.통합테스트는 별도로 진행하진 않았는데 필요하다면 진행할 수 있을것 같습니다.대부분의 경우엔 카프카 메시지 발행여부정도와 실제로 동작하는지 확인하는정도로만 했던것 같습니다.감사합니다.
- 0
- 2
- 22
질문&답변
낙관적 락을 사용할 떄 차이점
문수님 안녕하세요!강의에서는 낙관적락을 사용한다는것을 명시적으로 나타내기 위해서 삽입하였습니다!어노테이션은 필요에따라 사용하시면 될 것 같습니다!감사합니다
- 0
- 2
- 40
질문&답변
동시성 검증 코드에 관한 문의
DevelopersNan 님 안녕하세요!좋은질문 주셔서 감사드립니다.1차적으로는 코드내에 Thread.sleep 같은 코드를 일시적으로 추가해서 경합이 발생할 수 있도록 코드를 제어할 수 있을듯합니다.하지만, 이것도 완벽한 방법은 아니기 때문에 실제로 많은 환경에서의 케이스를 테스트 하고싶으시다면 부하테스트 툴을 활용할 수 있을 것같습니다.많은 트래픽을 받을 수 있도록 서버를 세팅해놓고 부하테스트 툴을 통해 많은 트래픽을 유발시킨 후, 데이터가 의도한 대로 저장이 되었는지 확인해볼 수 있을듯합니다.감사합니다.
- 0
- 2
- 35
질문&답변
consumer가 topic을 전부 사용하기 전에 사용자에게는 쿠폰이 발급된것으로 확인하는 과정에서 발생가능한 문제.
황준성님 안녕하세요.말씀해주신것과 같이 kafka 를 사용하게 되면 잠시동안 쿠폰이 생성되지 않는 케이스가 있을 수 있습니다.말씀해주신 방법으로 해결할수는 있겠으나, 여러가지 케이스를 고려해보았을때 복잡도가 높아지는 경우가 있을 수 있을듯합니다. 조금의 딜레이도 허용되지 않는 서비스라면 앞에 대기열을 만든 후 디비가 처리할 수 있을만큼의 트래픽만 받을 수 있도록 제어하는 방법을 많이 사용합니다. 감사합니다.
- 0
- 1
- 34
질문&답변
Optimistic Lock 사용이유
백종인님 안녕하세요.강의에서 사용했던 분산락은 1개의 주문에 대한 처리를 보장하기 위하여 사용하였습니다.A 상품의 재고가 5개가 있다고 가정해보고 1번 주문이 A 상품을 4개구매, 2번 주문이 B 상품을 2개구매 한다고 가정해보겠습니다. 분산락은 1번주문과 2번주문이 각 1번씩 주문되는것을 보장해줍니다. 하지만 A 상품의 재고는 보장해주지 못합니다. -> A 상품이라는 리소스에 여러개의 접근이 '동시에' 가능하기 때문입니다. A상품이라는 리소스에 여러개의 접근이 동시에 가능한것을 방어하기 위하여 optimistic lock 을 활용하였습니다.감사합니다.
- 0
- 2
- 40
질문&답변
단일연산
ililil 님 안녕하세요.단일 데이터베이스를 사용한다면 말씀해주신대로 디비의 트랜잭션과 쿼리문을 통해 제어를 할 수 있습니다.다만, update stock quantity = quanity - ? where quantity - ? >= 0 과 같이 where 문이 추가되어야 할 것 같네요. 강의에서는 동시성을 제어하는 여러가지 방법을 소개하기 위해 '재고' 라는 예제를 선택한것이고 재고만을 관리하는 로직이라면 말씀하신대로 트랜잭션과 쿼리를 활용하여 제어를 할 수 있습니다. 다만, 비즈니스 로직이 복잡해져서 유니크키를 사용할 수 없는상황이거나 다수의 데이터소스를 사용하는경우에 락을 사용할 수 있다고 이해해주시면 좋을것 같습니다.감사합니다.
- 0
- 2
- 33
질문&답변
쿠폰에 관련되어서 좀 더 참고할만한 자료가 있을까요?
김백곰님 안녕하세요.제가 잠깐 구글로 찾아봤을때 아래와 같은 게시글들이 있네용https://oliveyoung.tech/2023-08-07/async-process-of-coupon-issuance-using-redis/https://oliveyoung.tech/2023-09-18/oliveyoung-coupon-rabbit/한국자료는 위의 자료들이 있을것같고 coupon system design 이라고 검색을 하시면 해외의 글들도 보실 수 있을듯합니다!감사합니다.
- 0
- 2
- 37
질문&답변
예시 코드 질문 드립니다
팔꿈님 안녕하세요. 늦어져서 죄송합니다.소스코드를 git 에 올려놓았습니다!https://github.com/sangyongchoi/distributed-transaction섹션별로 브랜치로 나누어놓았습니다.
- 0
- 3
- 63
질문&답변
노트에 노션페이지 공유가 없습니다.
아라레님 안녕하세요.좋은말씀 감사합니다. 노션페이지를 접근할 수 있도록 노트에 공유하였습니다!
- 0
- 2
- 42






