현실을 넘어
close
프로필 배경
프로필 로고

현실을 넘어

  • 분류 전체보기
    • 자바
      • 일반
      • 알고리즘
      • 객사오
      • 스프링입문객체지향
      • 리팩토링
      • 스프링부트3
      • JPA
      • QueryDsl
      • Spring Security
    • 코틀린
      • 코틀린인액션
      • 알고리즘
    • 일 관련 삽질
    • JIRA
    • 도메인주도개발
    • DB
      • Mysql
    • MQ
      • Apache Kafka
    • Docker-Kubernetes
    • GITHUB
    • REST API
    • 리눅스
  • 홈
  • 태그
  • 방명록

[리팩토링]동시성을 가지는 서비스에 대한 테스팅 - ExecutorService 와 Future

동시성을 고려하여 pessimisstic lock 을 통해 select 이후 해당 행에 대한 잠금을 수행하고, 업데이트 delete 등을 수행하였다.그렇다면,,? 서비스를 테스트할때는 어떻게 동시적으로 서비스를 수행하는 사용자에 대한 고려를 반영할 수 있을까 고민이 되었다.병렬처리를 위한 Java ExecutorService 와 Future 여러 스레드를 사용하여 비동기 작업을 수행하고 결과를 관리할 수 있도록 해주는 컴포넌트입니다.ExecutorService 와 그 역할Java 의 쓰레드 풀을 관리하는 서비스쓰레드의 생성, 실행 및 종료를 관리할 수 있다.int numberOfThreads = 100; ExecutorService executorService = Executors.newFixedThre..

  • format_list_bulleted 자바/리팩토링
  • · 2023. 10. 10.
  • textsms

[리팩토링]출고 → 배송 → 도착 순서 보장을 어떻게 할 수 있을까?

출고 배송 도착 등의 로직을 별도 DB 에 구성해둘 수 있다.데이터베이스 구성데이터베이스에서는 Order와 OrderStatus 두 개의 테이블을 구성하여 주문과 주문 상태를 관리합니다.Order 테이블: 주문 관련 정보를 저장하며, ORDER_STATUS 필드를 통해 현재 주문의 상태를 기록합니다.OrderStatus 테이블: 가능한 주문 상태와 그에 대한 설명을 저장합니다. OrderStatus 테이블의 CODE_NAME 필드에 정의된 상태 값만이 Order 테이블의 ORDER_STATUS 필드에 기록될 수 있습니다.어플리케이션 로직어플리케이션에서는 ORDER_STATUS라는 ENUM 클래스를 사용하여 주문 상태를 관리합니다.ENUM 클래스: DB의 OrderStatus 테이블과 동일한 상태 값을 가..

  • format_list_bulleted 자바/리팩토링
  • · 2023. 10. 8.
  • textsms

[리팩토링]Spring boot 2.7 에서 schema.sql 한글 깨짐

현재 버전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..

  • format_list_bulleted 자바/리팩토링
  • · 2023. 10. 7.
  • textsms

[리팩토링] Mybatis 에서 XML 사용하지 않는 방법 (동적쿼리는 불가능..)

소개Mybatis 는 XML 매핑으로 진행하는 게 일반적이긴하다.하지만 어노테이션만으로도 XML 없이 쿼리를 정의할 수 있다.다만 , 동적쿼리는.. xml 파일을 별도로 정의해주긴해야한다.어노테이션 사용@Mapper @Repository public interface CartMapper { // ... @Results(value = { // ... }) @Select("SELECT ...") Cart selectCartByUserId(@Param("userId") String userId); }쿼리 정의@Select 어노테이션으로 SQL 쿼리를 정의하고, @Param 으로 쿼리 파라미터를 정의함결과 매핑@Results와 @Result 어노테이션을 사용하여 쿼리 결과를 도메인 객체에 매핑합니다.관계 매핑@..

  • format_list_bulleted 자바/리팩토링
  • · 2023. 10. 7.
  • textsms

[리팩토링] 장바구니 기능의 경우 SOFT DELETE 와 HARD DELETE 중에 뭘 사용해야할까?

SOFT DELETE ?? HARD DELETE??정의soft delete데이터를 실제로 삭제하지 않고,삭제된 것 처럼 표시하는 방법hard delete데이터를 DB에서 영구적으로 제거하는 방법장바구니의 특성사실 장바구니를 다시 복구할 일이 없다면 hard delete 를 수행해도 문제가 없을 것 같다하지만,! 혹여나 시스템상에서 사용자의 삭제 의도와 장바구니 ↔ 주문 로직간의 문제가 발생하는 경우 사용자의 의도 파악쉬운 디버깅을 위해 SOFT DELETE 를 수행하는 것이 어떨까 생각도 해보았다.삭제하는 경우 DELETED_DATE 컬럼이 처음에는 비어있다가, 날짜가 기입되는 경우 삭제된 걸로 데이터만 들고오게 하는 것이다.솔직히 굳이굳이 싶기도한데.. 혹시나 모르는 것 아닌가 일단 SOFT_DELET..

  • format_list_bulleted 자바/리팩토링
  • · 2023. 10. 7.
  • textsms

[리팩토링]__**Spring Boot에서 여러 SQL 스크립트 순차적 실행하기**__

스크립트 파일 준비-- 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

  • format_list_bulleted 자바/리팩토링
  • · 2023. 10. 2.
  • textsms
  • navigate_before
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • navigate_next
공지사항
  • ㅇ
전체 카테고리
  • 분류 전체보기
    • 자바
      • 일반
      • 알고리즘
      • 객사오
      • 스프링입문객체지향
      • 리팩토링
      • 스프링부트3
      • JPA
      • QueryDsl
      • Spring Security
    • 코틀린
      • 코틀린인액션
      • 알고리즘
    • 일 관련 삽질
    • JIRA
    • 도메인주도개발
    • DB
      • Mysql
    • MQ
      • Apache Kafka
    • Docker-Kubernetes
    • GITHUB
    • REST API
    • 리눅스
최근 글
인기 글
최근 댓글
태그
  • #객사오
  • #Kotlin
  • #JPA
  • #자바
  • #알고리즘
  • #도메인주도개발
  • #리팩토링
  • #객체지향
  • #ddd
  • #QueryDSL
전체 방문자
오늘
어제
전체
Copyright © 쭈미로운 생활 All rights reserved.
Designed by JJuum

티스토리툴바