반응형 All Posts174 [Spring boot jpa] 연관된 엔티티 불러올때 LazyInitializationException 발생하는 문제 해결 지연 로딩하려 할 때 세션/entityManager이 닫혀 LazyInitializationException이 발생하는 문제 @OneToMany 관계에서 fetch의 기본값은 LAZY이다.@OneToMany(mappedBy = "house", cascade = CascadeType.ALL)private List rooms = new ArrayList();원인지연 로딩(Lazy Loading) 관련 오류FetchType.LAZY는 엔티티 관계에서 연관된 다른 엔티티를 지연 로딩 방식으로 로딩하겠다는 의미이다.그러나 지연 로딩을 사용하는 엔티티가 프록시 객체로 반환되기 때문에, 실제로 해당 엔티티가 사용될 때까지 로딩되지 않는다.이 때문에, 관계된 엔티티가 사용될 때 LazyInitializationExce.. 2025. 1. 25. [Spring boot jpa] 찜/좋아요 삭제시 연관된 엔티티도 같이 삭제되는 문제 해결 상황사용자가 특정 House에 대해 찜을 해제하려고 할 때, Pin 엔티티가 삭제되어야 하는데, 의도치 않게 User와 House 엔티티까지 삭제되는 문제가 발생했습니다.원인@ManyToOne 관계에 설정된 cascade = CascadeType.ALL은 부모 엔티티에서 발생하는 모든 영속성(Persistence) 작업(예: PERSIST, MERGE, REMOVE 등)을 연관된 자식 엔티티에도 전파하도록 지정한다.house와 user는 @ManyToOne 관계에서 Pin과 연관되어 있으며, CascadeType.ALL로 설정되어 있습니다. 따라서 Pin 삭제 시 JPA는 이 연관된 엔티티들도 함께 삭제하도록 동작한다.pinRepository.deleteByUserAndHouse(user, house);.. 2025. 1. 25. [Spring boot] SQL 예약어와 테이블 이름 충돌 문제 해결 Hibernate를 사용하여 Spring Boot 프로젝트를 개발할 때, 데이터베이스 테이블 이름이나 컬럼 이름이 SQL 예약어와 겹치는 경우 문제가 발생할 수 있습니다. 예를 들어, user라는 테이블 이름을 사용하면, user는 SQL에서 예약어로 사용되기 때문에 Hibernate가 생성하는 SQL 쿼리에서 오류가 발생할 수 있습니다.원인 SQL 예약어는 데이터베이스에서 특정한 의미를 가지고 있는 단어들입니다. 예약어를 테이블이나 컬럼 이름으로 사용하면, Hibernate가 자동으로 생성한 SQL 쿼리에서 예약어로 인식되어 충돌을 일으킬 수 있습니다. 예를 들어, user라는 테이블 이름을 사용하면, SQL 쿼리에서 "user"로 감싸지지 않으면 예약어로 간주되어 오류가 발생할 수 있습니다. 해결 .. 2025. 1. 25. [Spring boot] DataJpaTest를 이용한 Repository 테스트와 여러 문제 해결 JPA를 활용한 Repository 테스트를 작성할 때, 실제 데이터베이스와 상호작용하는 테스트가 필요할 때가 많습니다. 이를 위해 H2와 같은 인메모리 데이터베이스를 사용하여 테스트 환경을 구축할 수 있습니다. 이때, @SpringBootTest와 같은 전체 애플리케이션 컨텍스트를 로딩하는 대신, @DataJpaTest를 사용하여 JPA 관련 컴포넌트만 로드하는 방법이 효과적입니다. 또한, @Transactional을 사용하여 테스트 후 데이터베이스 상태가 롤백되도록 보장할 수 있습니다. 이 포스트에서 다루는 문제 해결은 다음과 같습니다. (트러블 슈팅 경험)DataJpaTest이용시 의존받는 일부 bean를 로드하지 못하는 문제 해결@Autowired 어노테이션을 이용시 해당 인스턴스의 상태공유가 안.. 2025. 1. 25. [Spring boot] @Scheduled 어노테이션을 사용한 스케줄링이 작동하지 않는 문제 해결 Spring에서 주기적으로 작업을 실행하고 싶을 때 @Scheduled 어노테이션을 사용하면 매우 유용합니다. 예를 들어, Redis 큐에서 일정 시간 간격으로 메시지를 처리해야 할 때 @Scheduled을 활용해 스케줄링을 구현할 수 있습니다. 하지만, 이 어노테이션을 사용했음에도 불구하고 메서드가 주기적으로 실행되지 않는 문제가 발생할 수 있습니다. 문제 상황다음은 @Scheduled 어노테이션을 사용하여 Redis 큐에서 메시지를 2초마다 가져오는 작업을 수행하는 코드입니다@Component@RequiredArgsConstructor@Slf4jpublic class TourQueueScheduler { private final TourQueueProcessor tourQueueProcessor.. 2025. 1. 25. [Spring Boot] 멀티-모듈 프로젝트 build시 common 모듈의 의존성 받지 못하는 문제 해결 Spring Boot 프로젝트에서 공통 모듈(common)을 사용하여 엔티티와 DTO를 관리하는 것은 코드 재사용성을 높이고 유지 보수를 용이하게 하는 좋은 방법입니다. 그러나 이 방식에서 발생할 수 있는 문제가 있습니다. 바로 common 모듈에 정의된 JPA 엔티티를 다른 모듈(예: producer나 consumer)에서 사용할 때 발생하는 오류입니다.IDE에서는 정상적으로 인식되지만, 빌드 후에는 엔티티를 찾을 수 없다는 오류가 발생할 수 있습니다. (그래서 당황해서 삽질을 많이 합니다.) 예시 파일 구조Roomie/├── common/ # 공통 모듈 (엔티티, DTO 등)│ ├── build.gradle│ ├── src/│ │ └── main/│ .. 2025. 1. 24. [Gradle] common을 사용하는 멀티-모듈 프로젝트에서 순환참조 문제 해결 및 최적화 Spring Boot 프로젝트에서 여러 모듈을 관리할 때, 순환참조 문제는 자주 발생할 수 있는 이슈 중 하나입니다. 특히, 멀티 모듈 프로젝트에서는 공통 모듈(common)과 다른 모듈들(producer, consumer) 간의 의존성을 관리하는 데 주의가 필요합니다. 이번 글에서는 common 모듈에서 순환참조 문제를 해결한 방법을 다뤄보겠습니다.문제의 원인producer나 consumer에서 common 모듈을 사용하는 것은 자연스러운 일입니다. common 모듈은 여러 모듈에서 공통으로 사용하는 클래스나 설정을 포함하고 있기 때문에 다른 모듈들이 이를 의존하는 구조입니다. 하지만 문제는 common 모듈에서 producer나 consumer에 대한 의존성을 추가하려고 할 때 발생합니다.이렇게 의존.. 2025. 1. 24. 이전 1 2 3 4 5 ··· 25 다음