Back-end/TroubleShooting

[JPA] N+1 문제 발생 지점 찾아 해결하기이전 글에서 N+1 문제와 해결 방법에 대해 정리해보았다. [JPA] N+1 문제 해결 방법N+1 문제란?N+1 문제는 ORM(객체-관계 매핑) 기술에서 특정 객체를 조회할 때, 그 객체와 연관된 다른 객체들도 각각chaewsscode.tistory.com이전 글에서 application.yml의 logging 설정을 통해 SQL 쿼리에 바인딩되는 파라미터 값을 확인할 수 있었다.spring: jpa: show-sql: true properties: hibernate: format_sql: truelogging: level: org: hibernate: SQL: debug type...
1️⃣ N+1 문제와 해결 방법이전 글에서 N+1 문제와 해결 방법에 대해 정리해보았다. [JPA] N+1 문제 해결 방법N+1 문제란?N+1 문제는 ORM(객체-관계 매핑) 기술에서 특정 객체를 조회할 때, 그 객체와 연관된 다른 객체들도 각각 조회되면서 N번의 추가 쿼리가 발생하는 문제를 말한다. N+1 문제는 단일 쿼리로chaewsscode.tistory.com해결 방법 간단 요약Fetch Join 사용JPQL의 join fetch를 사용하여 부모 엔티티를 조회할 때 연관된 엔티티를 함께 가져온다.@Query 어노테이션을 사용하여 메서드를 작성해야 한다. 배치 사이즈 설정Hibernate의 배치 사이즈 설정을 통해 연관된 엔티티를 한 번의 쿼리로 가져오도록 최적화한다.application.yml에..
🌱 문제 상황Update Failed remote: Total 104 (delta 38), reused 97 (delta 35), pack-reused 0 (from 0) bad object refs/heads/feature#52 2 ... did not send all necessary objectsdevelop 브랜치를 Update 하려고 하니 해당 에러가 발생했다. 🌱 해결 방안이 문제는 디렉토리 내의 파일 이름에 "2"가 추가되어 발생하는 문제이다. Git 저장소가 아이클라우드로 관리되는 경우 간혹 발생할 수 있는 문제인 것 같다. 레포지토리 터미널에 git gc 명령어를 입력하면, 저장소 내에서 문제가 되는 객체나 참조를 찾아낸다.rm 명령어를 통해 잘못된 참조를 삭제하면 문제가 해결..
🌱 문제 상황2024.07.24 - [Back-end] - [Spring Boot] 멀티모듈에 JaCoCo + JaCoCo Report Aggregation 적용하기 [Spring Boot] 멀티모듈에 JaCoCo + JaCoCo Report Aggregation 적용하기macOSIntelliJ IDEAJava 17Spring Boot 3.xGroovy📄 JaCoCoJaCoCo 플러그인 적용JaCoCo :: Maven Plugin에서 JaCoCo의 최신 버전을 확인할 수 있다.처음에는 build.gradle에 JaCoCo 태스크를 설정했으나, 너무 복잡해져서 별도chaewsscode.tistory.com이전에 멀티모듈 + JaCoCo Report Aggregation을 사용하여 테스트 커버리지를 확인..
🌱 문제 상황멀티모듈 프로젝트 테스트를 하던 중 도메인 모듈에서 @DataJpaTest를 사용하니 아래와 같은 에러가 발생했다.java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test @DataJpaTest를 사용할 때, 스프링 부트는 애플리케이션이 어떻게 시작될지에 대한 정보를 제공하는 @SpringBootApplication 또는 @SpringBootConfiguration이 붙은 클래스를 통해 하위 패키지를 @ComponentScan 및 @EntityScan 등의 작업을..
🌱 문제 상황현재 내 프로젝트는 이렇게 멀티모듈로 구성되어 있다.admin 모듈과 app 모듈은 애플리케이션을 실행하는 모듈이며, core.domain 모듈 패키지에 있는 Entity를 모두 스캔하여 Bean으로 등록해야 한다. @SpringBootApplication@ComponentScan(basePackages = {"com.chaewsstore.core.domain"})public class AdminApplication { public static void main(String[] args) { SpringApplication.run(AdminApplication.class, args); }}AdminApplication 클래스에 선언되어 있는 @SpringBootApp..
🌱 문제 상황@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..
🌱 문제 상황멀티스레드 테스트에서 테스트 데이터 초기화를 위해 @Transactional을 사용했을 때 @BeforeEach를 통해 초기화한 데이터 조회가 안 되는 문제가 발생하였다.@Transactional@SpringBootTestclass OrderUseCaseTest { @Autowired private OrderUseCase orderUseCase; // ... @BeforeEach void initData() { userService.create(user); productService.create(product); bidService.create(bid); } @Test @DisplayName("판매 입찰에 대한..
서채리
'Back-end/TroubleShooting' 카테고리의 글 목록