본문 바로가기

분류 전체보기

(461)
JPA, 영속성 컨텍스트의 이점 (트랜잭션을 지원하는 쓰기 지연) 영속성 컨텍스트를 사용하면 5가지의 이점을 얻을 수 있다. • 1차 캐시 • 동일성(identity) 보장 • 트랜잭션을 지원하는 쓰기 지연 (transactional write-behind) • 변경 감지(Dirty Checking) • 지연 로딩(Lazy Loading) 1차 캐시에서 설명했던 것과 유사한 부분이다. 트랜잭션을 지원하는 쓰기 지연이란 알기 쉽게 말해서 query는 commit하는 시점에 날린다는 것이다. memberA와 memberB를 1차 캐시에 저장하는 persist 명령어를 사용하면, 쓰기 지연 SQL 저장소에 query문을 임시로 저장한다. commit 하는 시점에 쓰기 지연 SQL 저장소에 저장되어 있는 query들을 날려버린다. commit 하는 시점에 query를 모아서 ..
JPA, 영속성 컨텍스트의 이점 (영속 엔티티의 동일성 보장) 영속성 컨텍스트의 이점 앞서 영속성 컨텍스트의 이점은 5가지가 존재한다고 하였습니다. • 1차 캐시 • 동일성(identity) 보장 • 트랜잭션을 지원하는 쓰기 지연 (transactional write-behind) • 변경 감지(Dirty Checking) • 지연 로딩(Lazy Loading) 이번에는 영속성 컨텍스트의 두번째 이점인 동일성 보장에 대해 알아보도록 하겠습니다. 동일성 보장 java 컬렉션에서 값을 가져 올때 동일한 주소 값을 가져오듯이, 같은 reference를 불러오면 동일성을 보장해줍니다. 이는 1차 캐시가 존재하기 때문에 가능한 것입니다. 코드를 먼저 살펴보도록 하겠습니다. package hellojpa; import javax.persistence.EntityManager;..
JPA, 영속성 컨텍스트의 이점 (1차 캐시) 영속성 컨텍스트에 대해서 명확하게 알게되면 JPA가 내부적으로 어떻게 돌아가는지 알 수 있다. 앞서 영속성 컨텍스트는 EntityManager을 이용할 수 있는 공간이라고 하였다. 영속성 컨텍스트를 사용하면 5가지의 이점을 얻을 수 있다. • 1차 캐시 • 동일성(identity) 보장 • 트랜잭션을 지원하는 쓰기 지연 (transactional write-behind) • 변경 감지(Dirty Checking) • 지연 로딩(Lazy Loading) 1차 캐시 ( db 조회 횟수를 줄일 수 있다) jpa 영속성 컨텍스트는 어플리케이션과 database 사이에 존재한다. 중간에 존재하면서 얻는 이점 중 한가지인 1차 캐시에 대해 알아보자. 캐시라는 말에서 알 수 있듯이 데이터의 정보를 잠시 저장하고 있는..
영속성 컨텍스트 영속성 컨텍스트 영속성 컨텍스트는 JPA를 이해하는데 가장 중요한 용어다. 영속성 컨텍스트에 대해서 명확하게 알게되면 JPA가 내부적으로 어떻게 돌아가는지 알 수 있다. JPA를 쓰게되면 EntityManagerFactory와 EntityManager에 대해서 먼저 알아봐야 한다. 고객의 요청이 올 때마다 EntityManagerFactory를 이용하여 EntityManager를 생성하는데, EntityManager는 내부적으로 데이터 베이스 커넥션을 사용해서 db를 사용하게 된다. 그렇다면 영속성 컨텍스트는 무엇인가? 영속성 컨텍스트는 "엔티티를 영구 저장하는 환경" 이라는 뜻으로 EntityManager.persist(entity) 라는 명령어를 통해서 영속성 컨텍스트에 entity를 저장한다. (d..
1 객체는 객체대로 설계 관계형 데이터베이스는 관계형 데이터베이스대로 설계 ORM 프레임워크가 중간에서 매핑 같은 트랜잭션 안에서는 칸은 엔티티를 반환 - 약간의 조회 성능 향상 트랜잭션을 커밋할 때까지 INSERT SQL을 모음 empersist(memberA) em.persist(memberB) em.persist(memberC) 메모리에 쌓았다가 커밋하는 순간 INSERT SQL을 모아서 보낸다. 지연 로딩 : 객체가 실제 사용될 때 로딩 즉시 로딩: JOIN SQL로 한번에 연관된 객체까지 미리 조회 (멤버를 가져오는 순간 항상 팀을 같이 가져온다면, 조회 할 때 한번에 가져와 라고 조회를 하면 된다. 옵션 하나로 설정이 가능하다.)
Bean (싱글톤의 개념과 사용시 주의점) 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 요청을 할 때마다 Controller, Service, Repository를 생성하면 메모리 낭비가 심하기 때문에, 스프링에서는 싱글톤으로 객체를 가지고 있다. 싱글톤이란 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. @Configuration과 싱글톤 @Configuration은 @Bean에 추가 설정을 줘서 싱글톤으로 만들지 않는 이상 무조건 빈에 대해 싱글톤을 보장한다. 아래 코드를 살펴 보자. @Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberReposi..
스프링 컨테이너 (BeanFactory, ApplicationContext) BeanFactory 스프링 컨테이너의 최상위 인터페이스다. 스프링 빈을 관리하고 조회하는 역할을 담당한다. getBean() 을 제공한다. 지금까지 우리가 사용했던 대부분의 기능은 BeanFactory가 제공하는 기능이다. ApplicationContext BeanFactory 기능을 모두 상속받아서 제공한다. 애플리케이션을 개발할 때는 빈은 관리하고 조회하는 기능은 물론이고, 추가적으로 부가기능이 생겼습니다. BeanFactory를 직접 사용할 일은 거의 없으며, 실질적으로는 부가기능이 포함된 ApplicationContext를 사용할 것이다. BeanFactory나 ApplicationContext를 스프링 컨테이너라 한다고 합니다.
빈 조회하기 빈 조회할 일은 거의 없을 것이다. 여기서 알아 둘 것은 상속 관계에서 부모 타입의 빈을 조회하면, 자식 타입도 함께 조회한다는 것만 알아두고 넘어가자 빈 조회 컨테이너에 등록된 모든 빈 조회 스프링 컨테이너에 실제 스프링 빈들이 잘 등록 되었는지 확인해보자. class ApplicationContextInfoTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); @Test @DisplayName("모든 빈 출력하기") void findAllBean() { String[] beanDefinitionNames = ac.getBeanDefinitionNames(); for (St..