본문 바로가기

전체 글89

Redis 를 이용해서 재고를 관리해보자! https://robin00q.tistory.com/107 글에서 이어집니다! 참고 : (선물하기 시스템의 상품 재고는 어떻게 관리되어질까?) https://techblog.woowahan.com/2709/ DB 에 걸리는 Lock 을 어떻게 해결할까? RDBMS 를 통해 재고관리를 하는 경우, 해당 상품(혹은 옵션) 의 재고를 증가/감소시키려면 필연적으로 해당 Row 에 Lock (동시성 이슈) 을 걸 수 밖에 없다. option_id option_name stock purchaseable (구매가능여부) 1 아디다스 슬리퍼 102 YES 2 아디다스 저지 34 YES option_id 가 1인 row 에 여러 쓰레드가 접근하여, stock 을 증가/감소 시키더라도, 동시에 이를 수행할 수 없기에 하나.. 2022. 8. 3.
Kafka 를 이용해서 Eventually Consistency 를 구현해보자! 주문, 결제, 재고의 상태를 맞춰보자! 예시) 결제를 완료하면, 주문의 상태를 결제대기 -> 배송준비, 재고를 한개 감소 하는 로직이 있다고 가정해본다. 1. 만약 주문과 결제의 DB 를 같은 서버의 인스턴스에서 접근가능하다면, 하나의 트랜잭션에 묶여 아래처럼 구현될 것 같다. @Transactional public void finishPayment() { paymentRepository.save(payment); orderRepository.findById(payment.getOrderId()); order.paymentFinished(); prodRepository.findById(payment.getProductId()); prod.minusStock(); } public class Order { .. 2022. 6. 27.
[Kotlin] 생성자 호출 순서 스포 주 생성자 (Primary Constructor) 호출 Init 블록 호출 보조 생성자 (Secondary Constructor) 호출 Kotlin 의 주 생성자 (Primary Constructor) 클래스 명 옆에 있는 옆에 괄호로 쌓여져있는 변수들을 주 생성자라고 한다. 클래스는 오직 하나의 주 생성자를 가질 수 있다. 자바로 디컴파일되면 생성자가 생성되는 모습이다. // kotlin class PrimaryClass(val a1: Int, val a2: Int) // Decompiled Java public final class PrimaryClass { private final int a1; private final int a2; // getters.. public PrimaryClass(.. 2021. 12. 5.
[Kotlin] If 와 When 은 Expression 이다. IF 자바의 IF 문은 Statement (문) 이고 코틀린의 IF 문은 Expression (식) 이다. Expression VS Statement Expression => 값을 생성한다. Statement => 값을 생성하지 않는다. 코틀린에서의 if 는 아래처럼 값을 생성하여 할당할 수 있다. -> Expression val kotlinIf = if(true) 1 else 2 자바에서의 if 는 값을 생성하여 할당할 수는 없다. Expression 과는 다르게 내가 직접 return 을 명시해줘야 한다. public static void main(String[] args) { int a = statement(true); } private static int statement(boolean bool).. 2021. 12. 5.