전체 글24 Chap.13 웹 애플리케이션과 영속성 관리 스프링이나 J2EE 컨테이너 환경에서 JPA를 사용하면 컨테이너가 트랜잭션과 영속성 컨텍스트를 관리해주므로 애플리케이션을 손쉽게 개발할 수 있다. 하지만 컨테이너 환경에서 동작하는 JPA의 내부 동작 방식을 이해하지 못하면 문제가 발생했을 때 해결하기 쉽지 않다. 이번 장을 통해 컨테이너 환경에서 JPA가 동작하는 내부 동작 방식을 이해하고, 컨테이너 환경에서 웹 애플리케이션을 개발할 때 발생할 수 있는 다양한 문제점과 해결 방안을 알아보자. 더보기 J2EE (Java 2 Entrerprice Edition)? J2EE는 자바 기술로 기업환경의 어플리케이션을 만드는데 필요한 스펙들을 모아둔 스펙 집합입니다. https://cheershennah.tistory.com/74 13.1 트랜잭션 범위의 영속성 .. 2021. 7. 30. Chap.12 스프링 데이터 JPA 12.1 스프링 데이터 JPA 소개 - 스프링 데이터 JPA는 스스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트다. 이 프로젝트는 데이터 접근 계층을 개발할 때 지루하게 반복되는 CRUD 문제를 세련된 방법으로 해결한다. 우선 CRUD를 처리하기 위한 공통 인터페이스를 제공한다. 그리고 리포지토리를 개발할 때 인터페이스만 작성하면 실행 시점에 스프링 데이터 JPA가 구현 객체를 동적으로 생성해서 주입해준다. 따라서 데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만 작성해도 개발을 완료할 수 있다. CRUD를 처리하기 위한 공통 메소드는 스프링 데이터 JPA가 제공하는 org.springframework.data.jpa.repository.JpaRepository 인터.. 2021. 7. 19. Chap.10 객체지향 쿼리 언어 - 2 10.3 Criteria - Criteria 쿼리는 JPQL을 자바 코드로 작성하도록 도와주는 빌더 클래스 API다. - Criteria를 사용하면 문자가 아닌 코드로 JPQL을 작성하므로 문법 오류를 컴파일 단계에서 잡을 수 있고 문자 기반의 JPAL보다 동적 쿼리를 안전하게 생성할 수 있는 장점이 있다. 하지만 실제 Criteria를 사용해서 개발해보면 코드가 복잡하고 장황해서 직관적으로 이해가 힘들다는 단점도 있다. - Criteria는 결국 JPQL의 생성을 돕는 클래스 모음이다. 따라서 내용 대부분이 JPQL과 중복되므로 사용법 위주로 알아보자. // JPQL: select m from Member m CriteriaBuilder cb = em.getCriteriaBuilder(); // Cri.. 2021. 7. 5. Chap.10 객체지향 쿼리 언어 - 1 - 객체 지향 쿼리 소개 - JPQL - Criteria - QueryDSL - 네이티브 SQL - 객체지향 쿼리 심화 10.1 객체지향 쿼리 소개 - 식별자로 조회 EntityManager.find() - 객체 그래프 탐색 ex. a.getB().getC() - 데이터는 데이터베이스에 있으므로 SQL로 필요한 내용을 최대한 걸러서 조회해야 한다. 하지만 ORM을 사용하면 데이터베이스 테이블이 아닌 엔티티 객체를 대상으로 개발하므로 검색도 테이블이 아닌 엔티티 객체를 대상으로 하는 방법이 필요하다. JPQL은 이런 문제를 해결하기 위해 만들어졌다. - JPQL 특징 : 테이블이 아닌 객체 대상으로 검색하는 객체지향 쿼리 : SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. : JPA는 JP.. 2021. 6. 19. Chap.9 값 타입 JPA의 데이터 타입을 가장 크게 분류하면 엔티티 타입과 값 타입으로 나눌 수 있다. 엔티티 타입은 @Entity로 정의하는 객체이고, 값 타입은 int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체를 말한다. 엔티티 타입은 식별자를 통해 지속해서 추적할 수 있지만, 값 타입은 식별자가 없고 숫자나 문자같은 속성만 있으므로 추적할 수 없다. - 기본값 타입 > 자바 기본 타입 (ex. int, double) > 래퍼 클래스 (ex. Integer) - 임베디드 타입 (복합 값 타입) - JPA에서 사용자가 직접 정의한 값 타입 - 컬렉션 값 타입 9.1 기본값 타입 - 식별자 값이 없고 생명주기도 엔티티에 의존한다. - 값 타입은 공유하면 안된다. 9.2 임베디드 타.. 2021. 6. 19. Chap.8 프록시와 연관관계 관리 프록시와 즉시로딩, 지연로딩 - 객체는 객체 그래프로 연관된 객체들을 탐색한다. 그런데 객체가 데이터베이스에 저장되어 있으므로 연관된 객체를 마음껏 탐색하기는 어렵다. JPA 구현체들은 이 문제를 해결하려고 프록시라는 기술을 사용한다. 프록시를 사용하면 연관된 객체를 처음부터 데이터베이스에서 조회하는 것이 아니라, 실제 사용하느 시점에 데이터베이스에서 조회할 수 있다. 하지만 자주 함께 사용하는 객체들은 조인을 사용해서 함께 조회하는 것이 효과적이다. JPA는 즉시 로딩과 지연 로딩이라는 방법으로 둘을 모두 지원한다. 영속성 전이와 고아 객체 - JPA는 연관된 객체를 함께 저장하거나 함께 삭제할 수 있는 영속성 전이와 고아 객체 제거라는 편리한 기능을 제공한다. 프록시 - 엔티티를 조회할 때 연관된 엔.. 2021. 6. 3. 이전 1 2 3 4 다음