본문 바로가기

전체 글359

[상품 주문 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.
[테스트 및 리팩토링 8편] fixture-monkey 정리 source 는 Github 에 있습니다. 목차는 테스트 & 리팩토링 목차 에 있습니다. [테스트 및 리팩토링 8편] fixture-monkey 정리 fixture-monkey 테스트 데이터를 만들어주는 오픈소스입니다. 나중에 찾아볼 용도로 정리했습니다. source 자바, gradle 환경 에서 실행했습니다. (Java17) gradle 설정하는데 시간이 오래걸렸는데 처음에는 fixture-monkey-starter 만 설치하면 관련 plugin 은 전부 import 되는줄 알았는데, 그게 아니였습니다. 그래서 그냥 서드 파티 관련 gradle 설정을 전부 넣어버렸습니다. 아래 중에 필요한 서드 파티 설정만 추가하시면 될 것 같습니다. 주의사항으로는 FixtureMonkey 를 통해 데이터를 만들 때,.. 2023. 5. 5.
[ETC 4편] git stash, cherry-pick 정리 목차는 ETC 목차 에 있습니다. [ETC 4편] git stash, cherry-pick 정리 나중에 볼려고 정리했습니다. git stash 현재 stash_test 라는 branch 에서 작업하고 있습니다. 작업을 하다가 develop branch 에서 작업을 해야 합니다. 이럴 때, stash 를 사용하면 좋습니다. stash 를 사용하면 현재 작업중인 것을 스택에 저장해놨다가 나중에 꺼내쓸 수 있습니다. git stash example git check stash_test // do something git stash // 명령어 수행 git stash list // stash 한 스택 목록 가져오기. git checkout develop // do something git checkout sta.. 2023. 4. 26.
[테스트 및 리팩토링 7편] TestContainer Example source 는 Github 에 있습니다. 목차는 테스트 & 리팩토링 목차 에 있습니다. [테스트&리팩토링 7편] TestContainer Example TestContainer 란? DB, 큐, 메시지 브로커 등을 제공해주는 가상 컨테이너입니다. Java, Kotlin 과 같은 JVM 기반에서 동작하며, Docker 를 필요로 합니다. docker-compose 는 언어와 관계 없이 사용할 수 있으며, TestContainer 는 코드 레벨에서 제어할 수 있습니다. 코드에서 제어할 수 있기에 docker 만 떠있다면 테스트 코드에 container 기동, 중단 로직을 넣어서 테스트를 수행할 때, 한 번에 수행할 수 있는 특징이 있습니다. 소스 설명 Spring boot, spring data jpa, .. 2023. 4. 22.