본문 바로가기

Spring69

테스트 컨테이너(테스트) , FixtureMonkey TestContainers 도커 환경에서 테스트 환경을 구축하고, 단위 테스트 부터 통합테스트까지 할 수 있는 방법. 도커 환경에서 데이터베이스를 실행하여 테스트 환경을 쉽게 구축할 수 있게 해주는 라이브러리 개발 환경에 데이터베이스를 사용하지 않기 때문에 테스트 때문에 발생하는 더미 데이터를 줄일 수 있다. H2와 같은 인메모리 DB를 사용하는 것이 아니라서 실제 환경과 거의 비슷한 환경으로 데이터베이스를 테스트할 수 있다. 테스트가 느려지는 단점이 있다. 🤔 현업에서 Datasource 설정하는 방법 TestContainers 에서 제공하는 애노테이션으로 쉽게 구성할 수 있다고하지만, 현업에서는 애플리케이션을 작성할 때 데이터베이스 설정 부분을 Spring에서 제공하는 기본 설정으로만 구성하는 경우가.. 2024. 3. 6.
JPA 실무 용어 정리 + 프록시 + OSIV EntityManger 엔티티 매니저 란 영속성 컨텍스트 를 관리한다. 엔티티 매니저를 통하여 영속성 컨텍스트에 접근할 수 있다. 영속성 컨텍스트는 엔티티에 대한 조회, 수정, 삭제와 같은 API를 제공한다. PersistentceContext 영속성 컨텍스트는 엔티티를 보관하고 관리한다. 영속성 컨텍스트는 1차 캐시, 쓰기 지연, 더티 체킹과 같은 이점들을 제공 EntityManagerFactory 엔티티 매니저 팩토리는 애플리케이션 전역으로 하나만 만들고, 요청이 오면 엔티티 매니저를 만들어서 제공하는 역할을 한다. Session vs EntityManager EntityManager 는 JPA 스펙이고 Session 은 HIbernate에서 제공해주는 API다. 같다고 생각하면 된다. 영속성 컨텍스.. 2024. 3. 6.
JPA 리 오류들 체크 리스트 오해 풀기 실습하다보면 내가 생각한대로 JPA가 동작하지 않을때가 많죠??? 1. 쿼리 최적화 JPA 가 1차캐시(영속성 컨텍스트) 를 통해 필요없는 쿼리는 날라가지 않도록 쿼리를 최적화 해준다고 하는데…. 최적화가 안되고 Insert, Delete 쿼리가 다 DB로 날라가는 로그가 찍히는데 왜그런건가요? 쿼리 최적화를 발생시키기 위해서는 아래 3가지를 확인해봐야 합니다. 1. 먼저 해당 함수나 클래스가 Transaction 안에 포함되고 있는지 봐야합니다. @Transactional 으로 함께 감싸져 있어야만 쿼리 최적화가 동작합니다. Transaction 으로 포함되어있지 않으면 repository 메소드 내부에서만 Transcation 이 최적화됩니다. Transaction Propagation (.. 2024. 3. 6.
SpringData JPA, Example Probe ExampleMatcher(Query by Example) 받고싶은 예시객체를 만들어서 조건절로 사용하는 기술로 예제 객체를 가지고 쿼리를 만드는 개념입니다. 현업에서 잘 쓰지는 않아서 간단하게 짚고 넘어가겠습니다. 구성요소 Example Example은 Probe 과 ExampleMatcher 을 하나로 합친 것 이걸로 쿼리를 수행합니다. Probe Probe는 필드에 어떤 값들을 가지고 있는 도메인 객체 ExampleMatcher ExampleMatcher는 Prove? 에 들어있는 그 필드의 값들을 어떻게 쿼리할 데이터와 비교할지 정의한 것 기능 별다른 코드 생성기(QClass 같은)나 애노테이션 처리기(@Qeury같은) 필요 없이 그냥 쓰면된다. 도메인 객체가 수정되면 같이 반영됨 (필드나 함수를 그대로 쓰기때문에) 독립적인 인터페이스를 가져서 영향도가 .. 2024. 3. 6.