본문 바로가기

toy-project8

[상품 주문 4편] 동시성 테스트 source 는 Github 에 있습니다. 목차는 상품 주문 에 있습니다. [상품 주문 4편] 동시성 테스트 Webflux, 코틀린, Redis, 분산락 공부를 위해 작성했습니다. 테스트 데이터 데이터를 아래와 같이 미리 만들었습니다. (Spring - schema.sql) Application 이 실행될 때, 아래 데이터가 INSERT 됩니다. id 는 productId, name 은 product_name, stock 은 재고입니다. insert into product (id, name, stock) values ('product1001', 'Product A', 1000), ('product1002', 'Product B', 2000), ('product1003', 'Product C', 3000).. 2023. 5. 8.
[상품 주문 3편] Redis 설명 source 는 Github 에 있습니다. 목차는 상품 주문 에 있습니다. [상품 주문 3편] Redis 설명 Webflux, 코틀린, Redis, 분산락 공부를 위해 작성했습니다. Redis 분산락 로직 설명 메소드를 실행 하기 전에 lock 을 획득하고, 메소드를 실행합니다. 메소드 실행이 끝나면 lock release 가 이루어집니다. 로직 개선 사항 jointPoint.proceed 부분이 비즈니스 로직을 실행하는 부분입니다. 해당 부분은 별도 트랜잭션으로 분리를 해야하는데, 비동기 + kotlin 환경에서 트랜잭션을 분리하는 방법을 찾지 못해 숙제로 남겨놨습니다. 트랜잭션을 별도로 분리해야하는 이유는 lock 을 거는 부분이 비즈니스 로직과 하나의 트랜잭션으로 묶여서 처리되면 안되기 때문입니다... 2023. 5. 8.
[상품 주문 2편] 비즈니스 로직 API 설명 source 는 Github 에 있습니다. 목차는 상품 주문 에 있습니다. [상품 주문 2편] 비즈니스 로직 API 설명 Webflux, 코틀린, Redis, 분산락 공부를 위해 작성했습니다. 비즈니스 로직 API 설명 상품 주문 API 를 호출 시, 재고 감소와 상품 주문 데이터가 생성됩니다. 상품 주문 (POST) 상품을 주문하는 API 입니다. 비즈니스 로직 설명 상품의 재고를 감소시킨 후에, 상품 주문 테이블에 INSERT 를 하는 로직입니다. 하나의 트랜잭션으로 처리됩니다. 또한, 동시성 이슈를 해결하기 위해 메소드 시작 전에 productId 를 기준으로 redis lock 을 잡고, 메소드가 끝날 때, lock 이 release 됩니다. Custom annotation (@Distribute.. 2023. 5. 8.
[상품 주문 1편] 개요 (Webflux, 코틀린, Redis, 분산락) source 는 Github 에 있습니다. 목차는 상품 주문 에 있습니다. [상품 주문 1편] 개요 (Webflux, 코틀린, Redis, 분산락) Webflux, 코틀린, Redis, 분산락 공부를 위해 작성했습니다. 상품 주문 기능 상품 주문 시, 동시성을 보장해줘야 합니다. (DB 데이터가 꼬이지 않아야 합니다) 상품 주문 시, 재고 관리가 되야 합니다. (동시 요청에 재고 데이터가 꼬이면 안됩니다) 상품 주문 시나리오 클라이언트에서 상품 주문 API 를 호출합니다. (동시성을 보장해줘야 합니다.) 간단하게 입력 파라미터는 상품 ID, User Id, 구매수량을 입력받도록 진행했습니다. 상품 주문 API 가 들어오면 Redis 를 통해 분산락을 잡고 내부에서 DB 처리를 합니다. 분산락을 잡을 때는.. 2023. 4. 5.