동시성을 고려하여 pessimisstic lock 을 통해 select 이후 해당 행에 대한 잠금을 수행하고, 업데이트 delete 등을 수행하였다.그렇다면,,? 서비스를 테스트할때는 어떻게 동시적으로 서비스를 수행하는 사용자에 대한 고려를 반영할 수 있을까 고민이 되었다.병렬처리를 위한 Java ExecutorService 와 Future 여러 스레드를 사용하여 비동기 작업을 수행하고 결과를 관리할 수 있도록 해주는 컴포넌트입니다.ExecutorService 와 그 역할Java 의 쓰레드 풀을 관리하는 서비스쓰레드의 생성, 실행 및 종료를 관리할 수 있다.int numberOfThreads = 100; ExecutorService executorService = Executors.newFixedThre..
출고 배송 도착 등의 로직을 별도 DB 에 구성해둘 수 있다.데이터베이스 구성데이터베이스에서는 Order와 OrderStatus 두 개의 테이블을 구성하여 주문과 주문 상태를 관리합니다.Order 테이블: 주문 관련 정보를 저장하며, ORDER_STATUS 필드를 통해 현재 주문의 상태를 기록합니다.OrderStatus 테이블: 가능한 주문 상태와 그에 대한 설명을 저장합니다. OrderStatus 테이블의 CODE_NAME 필드에 정의된 상태 값만이 Order 테이블의 ORDER_STATUS 필드에 기록될 수 있습니다.어플리케이션 로직어플리케이션에서는 ORDER_STATUS라는 ENUM 클래스를 사용하여 주문 상태를 관리합니다.ENUM 클래스: DB의 OrderStatus 테이블과 동일한 상태 값을 가..
현재 버전Java 11Spring Boot 2.7.xschema.sql-- 테이블 생성 SQL - SHOPPING_CART CREATE TABLE SHOPPING_CART ( `ID` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'pk값', `USER_ID` VARCHAR(200) NULL COMMENT '유저ID', `PRODUCT_ID` BIGINT NULL COMMENT '상품ID', `QUANTITY` INT NULL COMMENT '장바구니 상품 수량', `CREATED_DATE` TIMESTAMP NULL COMMENT '생성일', `UPDATED_DATE` TIMESTAMP NULL COMMENT '수정일', PRIMARY KEY (ID) );DB에 입력-- auto..
소개Mybatis 는 XML 매핑으로 진행하는 게 일반적이긴하다.하지만 어노테이션만으로도 XML 없이 쿼리를 정의할 수 있다.다만 , 동적쿼리는.. xml 파일을 별도로 정의해주긴해야한다.어노테이션 사용@Mapper @Repository public interface CartMapper { // ... @Results(value = { // ... }) @Select("SELECT ...") Cart selectCartByUserId(@Param("userId") String userId); }쿼리 정의@Select 어노테이션으로 SQL 쿼리를 정의하고, @Param 으로 쿼리 파라미터를 정의함결과 매핑@Results와 @Result 어노테이션을 사용하여 쿼리 결과를 도메인 객체에 매핑합니다.관계 매핑@..
SOFT DELETE ?? HARD DELETE??정의soft delete데이터를 실제로 삭제하지 않고,삭제된 것 처럼 표시하는 방법hard delete데이터를 DB에서 영구적으로 제거하는 방법장바구니의 특성사실 장바구니를 다시 복구할 일이 없다면 hard delete 를 수행해도 문제가 없을 것 같다하지만,! 혹여나 시스템상에서 사용자의 삭제 의도와 장바구니 ↔ 주문 로직간의 문제가 발생하는 경우 사용자의 의도 파악쉬운 디버깅을 위해 SOFT DELETE 를 수행하는 것이 어떨까 생각도 해보았다.삭제하는 경우 DELETED_DATE 컬럼이 처음에는 비어있다가, 날짜가 기입되는 경우 삭제된 걸로 데이터만 들고오게 하는 것이다.솔직히 굳이굳이 싶기도한데.. 혹시나 모르는 것 아닌가 일단 SOFT_DELET..
스크립트 파일 준비-- truncate.sql TRUNCATE TABLE your_table_name; -- schema.sql CREATE TABLE your_table_name ( ... );truncate.sql 파일 → schema.sql 로 table create 순서application.properties 파일에 스크립트 경로 설정spring.datasource.schema=classpath:truncate.sql,classpath:schema.sql Uploaded by N2T