Spring JPA를 통해 Entity 클래스를 설정하면서 지연로딩이라는 단어를 많이 들어봤을 것입니다.이번 글에서는 Bean Class를 Lazy Loading 하여, 사용하지 전까지 ApplicationContext에 초기화하지 않는 방법에 대해 작성하겠습니다. Lazy란기본적으로 애플리케이션을 실행하면 ApplicationContext에 설정한 모든 bean이 생성되고 해당 bean의 종속성이 주입됩니다. 그에 반해, Lazy bean 정의가 구성된 경우 해당 bean은 사용할 때까지 생성되지 않고 종속성이 주입되지 않습니다.즉, 사용하기 전까지 ApplicationContext에 초기화하는 것을 지연한다! Lazy Initialization 설정을 통해 애플리케이션 시작 시 로드되는 클래스와 생성..
스프링 부트를 기반으로 테스트 코드 작성 시 자주 등장하는 테스트 어노테이션의 사용 상황과 기능에 대해 정리하고자 합니다. @SpringBootTest 어노테이션Annotation that can be specified on a test class that runs Spring Boot Based tests. @SpringBootTest 어노테이션은 스프링 부트 기반 테스트 시에 사용하는 어노테이션이다. 다음과 같은 기능과 특징을 가지고 있습니다. 1. Uses SpringBootContextLoader as the default ContextLoader when no specific @ContextConfiguration(loader=...) is defined. 💬 특정 @ContextConfigu..
OSIV - Open Session In ViewOSIV OnJPA에서 Entity Manager가 Hibernate에서 Session 역할을 수행합니다.spring.jpa.open-in-view: true (default)OSIV 전략은 트랜잭션 시작처럼 최초 데이터베이스 커넥션 시작 시점부터 API 응답이 끝날 때까지 영속성 컨텍스트와 데이터베이스 커넥션을 유지합니다. (Lazy Loading…) 지연 로딩은 영속성 컨텍스트가 살아있어야 가능합니다. (영속성 컨텍스트는 기본적으로 데이터베이스 커넥션을 유지합니다.)OSIV가 on인 경우에 Service 계층에서 @Trasanctional이 끝나도 데이터베이스 커넥션이 끊기지 않는다. 지연로딩과 같이 프록시 객체가 초기화되는 경우가 있으므로 사용자에게 ..
요약내용!@Transactional과 try-catch를 같이 사용하면 예외가 발생해도 트랜잭션이 자동으로 롤백되지 않는 문제가 있습니다. 이는 트랜잭션의 롤백은 @Transactional 메서드가 예외를 던질 때만 발생하고, try-catch로 예외를 잡아버리면 트랜잭션이 정상적으로 커밋되기 때문입니다. @Transactional와 트랜잭션 처리트랜잭션 처리는 한 번에 이루어져야 하는 작업의 묶음으로 전체가 완료되거나 실패되는 처리를 의미합니다. (트랜잭션 처리에서 일부 성공은 허용되지 않음)@Transactionalpublic void test() { aService.doA(); bService.doB(); cService.doC();}doA(), doB(), doC()를 순차적으로 실행할 때,..