1. OSIV(Open Session In View) 란?? OSIV(Open Session In View)은 영속성 컨텍스트 관리 영역을 뷰(View)까지 확장하는 기능이다. Open Session In View라 불리는 이유는 JPA의 구현체인 Hibernate 에서 EntityManager의 구현체로 Session 을 사용한다. JPA에서는 OEIV(Open-EntityManager-In-View) 로 부르지만 통상적으로 Open-Session-In-View 로 부른다. 2. Spring-Boot 의 프로퍼티 기반 OSIV 설정 과정 Spring-Boot 는 프로퍼티를 기반으로 한 자동 설정을 지원한다. JpaBaseconfiguration 추상 클래스의 nested static class 인 Jp..
1. Background 이전 참여했던 프로젝트 중에 transform() 을 사용하는 로직에서 발생했던 내용 기록용 글이다.예시 코드의 프로젝트 환경은 Spring Boot 2.7.15, QueryDSL 5.0 이다. (1) 샘플 코드를 확인해보자. 문제는 querydsl 에서 제공하는 transform() 메서드를 사용하는 과정에서 connection leak 이 발생했다. connection pool 은 DB에 쿼리 요청이 완료된 connection 을 다시 회수하지만 반환되지 않는 문제가 발생하며 JDBC ConnectionException 을 반환하였다. 아래는 쿼리 예시이다. (실제 코드 대신 유사한 코드를 작성한 샘플이다.)@Repository@RequiredArgsConstructorp..
1. 스왑 영역(swap area) 스왑 영역이 도입되기 이전에는 한정된 물리 메모리 공간으로 인해 많은 프로세스를 관리할 수 없었다. 이를 해결하기 위한 방법으로 보조기억장치 공간을 활용하는 방법이었고 이 공간을 스왑영역(swap area) 이라 부른다. 스왑영역은 사용하지 않는 프로세스를 보조기억장치 일부 영역에 임시로 저장하는 공간이며, 오랜 기간 사용하지 않는 프로세스는 스왑 아웃(swap out) 하여 보조기억장치로 프로세스 정보를 보내고, 프로세스 정보를 가져올 경우 스왑 인(swap in) 하여 메모리(RAM) 로 프로세스 정보를 가져온다. 스왑 영역을 활용하면 운영체제(OS)가 한정된 물리 메모리 공간 보다 더욱 많은 프로세스를 관리할 수 있어 더욱 많은 프로세스의 동시 실행이 가능하다...
1. 문제 상황 친구와 토이 프로젝트를 하며 테스트를 위한 데이터를 추가하고자 @Sql annotation 을 적용하고자 했다. 하지만 테스트 데이터가 들어가지 않는 이유를 찾기 위한 삽질 로그를 기록하고자 한다. 2. Background[1] SpringBootTest.WebEnvironment.RANDOM_PORT 사용 실제 개발 환경과 유사한 환경을 위해 RANDOM_PORT 를 설정했다. 해당 옵션을 설정하면 클라이언트와 서버가 분리되어 멀티 스레드 환경이 된다. 그러므로 Thread Local 기반으로 동작하는 @Transactional 을 사용하여 롤백 처리를 할 수 없다.롤백을 해야 하는 이유는 테스트 격리(Isolated Test) 을 위함이다. 테스트 격리는 공유 자원을 사용하는 여러 테..