분류 전체보기

🌱 문제 상황@RequiredArgsConstructor@UseCasepublic class BidUseCase { private final BidRepository bidRepository; @Transactional public void deleteBid(User user, Long bidId) { Bid bid = bidRepository.findById(bidId).orElseThrow(() -> NOT_FOUND_BID); bid.cancel(); bidRepository.delete(bid); log.info(bid.getStatus().name()); }}@SQLDelete(sql =..
🌱 문제 상황Bid 엔티티는 낙관적 락을 위해 @Version 필드를 사용 중이다.@SQLDelete 어노테이션을 사용해 Soft Delete를 하고 있다.Bid 엔티티를 삭제하려고 할 때 다음과 같은 SQL 오류가 발생했다.could not delete: [core.domain.bid.Bid]; SQL [UPDATE bid SET is_deleted = 1 WHERE id = ?]SQL Error: 90008, SQLState: 90008Invalid value "2" for parameter "parameterIndex" [90008-214]o.h.engine.jdbc.spi.SqlExceptionHelper : Invalid value "2" for parameter "parameterInde..
·Back-end
- JDK: openjdk 17 버전- Spring Boot: 3.0.1- Spring Security: 6.0.1- Gradle 언어: Groovy⛓️ Security Filter ChainSecurity Filter Chain은 Spring Security에서 HTTP 요청의 다양한 보안 기능을 제공하기 위한 여러 종류의 필터들의 모음이다. 기본적으로 제공하는 필터들이 있고, 사용자가 만든 커스텀 필터도 필터 체인으로 등록하여 사용할 수 있다. 각 필터는 특정한 보안 작업을 수행하고 다음의 필터로 요청을 전달하는데, FilterChainProxy를 통해 필터 체인이 관리되며 요청이 적절한 필터로 전달된다.🌲 ApplicationContext 초기화ApplicationContext 초기화 과정은 Sp..
🌱 문제 상황멀티스레드 테스트에서 테스트 데이터 초기화를 위해 @Transactional을 사용했을 때 @BeforeEach를 통해 초기화한 데이터 조회가 안 되는 문제가 발생하였다.@Transactional@SpringBootTestclass OrderUseCaseTest { @Autowired private OrderUseCase orderUseCase; // ... @BeforeEach void initData() { userService.create(user); productService.create(product); bidService.create(bid); } @Test @DisplayName("판매 입찰에 대한..
🌱 문제 상황판매 입찰에 관련된 구매 입찰 생성 로직@RequiredArgsConstructor@UseCasepublic class BidUseCase { private final BidRepository bidRepository; @Transactional public void order(User user, OrderRequestDto request) { Bid sellBid = bidRepository.findFirstByProductIdAndPriceAndStatusOrderByCreatedAtAsc( request.productId(), request.price()).orElseThrow(() -> NOT_FOUND_BID_WITH_COND..
·Back-end
이 글은 멀티 모듈을 적용하는 "방법"이 아닌 "어떤 기준"으로 모듈화를 적용했는지에 대한 글이다. 💦 기존 구조chaewsstoreadminappcoreadmin과 app 서버가 있고 공통으로 사용하는 코드들을 core 모듈에 모아놓은 구조이다. 문제점1. 의존성공통 모듈에 너무 많은 의존성이 생기게 되었다. Spring Security, JPA 등 프로젝트에서 사용하는 대부분의 의존성이 공통 모듈로부터 시작되었다. 문제는 애플리케이션들이 사용하는 의존성은 다를 수 있는데 스프링 부트의 특징인 AutoConfiguration을 통해 필요하지 않은 기능들이 자동으로 추가되어 최적화되지 못한 코드가 되게 된다. 2. 공통 설정해당 구조라면 admin과 app 모듈의 설정까지 모듈에 두는 상황이 된다. 공..
Annotation-specified bean name 'authController' for bean class [com.chaewsstore.controller.AuthController] conflicts with existing, non-compatible bean definition of same name and class [com.chaewsstore.apis.auth.controller.AuthController]🌱 문제 상황멀티모듈 구조 변경으로 많은 파일들을 이동하고 삭제하는 과정 중 ConflictingBeanDefinitionException이 발생했다. 에러에서 어느 경로에서 중복이 발생하는지 알려주고 있지만 내 프로젝트 파일에는 저런 경로가 없다는 것이 문제였다 ㅎㅎ😅사진에서 볼..
·Back-end
1️⃣ Gradle PluginJava Plugin이란?Gradle을 이용해 Java 또는 Spring 프로젝트를 구성할 때 build.gradle 파일의 dependency 영역에 필요로 하는 라이브러리와 프레임워크의 의존성을 주입받는다.repositories { mavenCentral()} dependencies { implementation "org.projectlombok:lombok" annotationProcessor "org.projectlombok:lombok" testImplementation "org.projectlombok:lombok" testAnnotationProcessor "org.projectlombok:lombok"}해당 포맷으로 필요로하는 ..
·Back-end
🐣 실전! 멀티 모듈 프로젝트 구조와 설계 | 인프콘 2022"왜" 멀티 모듈 프로젝트 구조가 중요할까?잘못 구성시 추후 변경이 어려움프로젝트 초기에 이루어져야 하는 일련의 설계 과정개발 생산성에 막대한 영향"무엇"을 기준으로 멀티 모듈 프로젝트 구조를 나누어야 하는가?경계 안에서 의미를 가질 수 있는 그룹을 정의하고 나누는 것이 가장 중요 (Bounded Context)역할, 책임, 협력 관계가 올바른지 다시 생각"어떻게" 실전 모듈 프로젝트를 구현해야 하는가?프로젝트가 커지고 있다면 다시 경계를 나누고 그 기준으로 소스 저장소를 분리Infra(외부) 라이브러리에는 Data 관련 구현 지향서비스 구현은 각자 역할에 맞게 각각 구현될 수 있음(공통으로 한쪽에 구현 X)시스템 레벨 구현이 실제 서비스 애..
서채리
'분류 전체보기' 카테고리의 글 목록