Ch14. 컬렉션 부가기능
·
JPA 프로그래밍
14.1 컬렉션자바 컬렉션 인터페이스의 특징Collection자바가 제공하는 최상위 컬렉션Set중복을 허용하지 않는다순서를 보장하지 않는다List순서가 있는 컬렉션이다순서를 보장하고 중복을 허용한다MapKey, Value 구조로 되어 있는 특수한 컬렉션이다14.1.1 JPA와 컬릭션하이버네이트는 컬렉션을 효율적으로 관리하기 위해 엔티티를 영속 상태로 만들 때 원본 컬렉션을 감싸고 있는 내장 컬렉션을 생성해서 이 내장 컬렉션을 사용하도록 참조를 변경한다하이버네이트는 이런 특징 때문에 다음처럼 즉시 초기화해서 사용하는 것을 권장한다Collection members = new ArrayList(); 14.1.2 Collection, List@Entitypublic class Parent{ @Id @Genera..
Ch13. 웹 앱 영속성 관리
·
JPA 프로그래밍
컨테이너 환경에서 JPA가 동작하는 내부 동작 방식을 이해하고, 컨테이너 환경에서 웹 애플리케이션을 개발할 때 발생할 수 있는 다양한 문제점과 해결 방안을 알아보자13.1 트랜잭션 범위의 영속성 컨텍스트 13.1.1 스프링 컨테이너의 기본 전략스프링 컨테이너는 트랙잭션 범위의 영속성 컨텍스트 전략을 기본으로 사용한다트랜잭션의 범위와 영속성 컨텍스트의 생존 범위가 같다는 뜻이다 트랜잭션 범위의 영속성 컨텍스트 전략은 다양한 위치에서 엔티티 매니저를 주입받아 사용해도 트랜잭션이 같으면 항상 같은 영속성 컨텍스트를 사용한다여러 쓰레드에서 동시에 요청이 와서 같은 엔티티 매니저를 사용해도 트랜잭션에 따라 접근하는 영속성 컨텍스트가 다르다스프링 컨테이너는 스레드마다 각각 다른 트랜잭션을 할당한다. 따라서 같은 엔..
Ch12. 스프링 데이터 JPA
·
JPA 프로그래밍
12.1 스프링 데이터 JPA 소개스프링 데이터 JPA는 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트이다 데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만 작성해도 개발을 완료할 수 있다public interface MemberRepository extends JPAResponse{ Member findByUsername(String username);}스프링 데이터 JPA 적용12.1.1 스프링 데이터 프로젝트스프링 데이터 프로젝트는 데이터 저장소에 대한 접근을 추상화해서 개발자 편의을 제공하고 지루하게 반복하는 데이터 접근 코드를 줄여준다12.4 쿼리 메서드 가능인터페이스에 메서드만 선언하면 해당 메서드의 이름으로 적절한 JPQL 쿼리를 생성해서 실행한다 스프..
Ch10. 객체 지향 쿼리 언어 (10.5 네이티브 SQL, 10.6 객체지향 쿼리 심화)
·
JPA 프로그래밍
JPQL 은 특정 데이터베이스에 종속적인 기능은 지원하지 않는다- 특정 데이터베이스만 지원하는 함수, 문법, SQL 쿼리 힌트- 인라인 뷰(From 절에서 사용하는 서브쿼리), UNION, INTERSECT- 스토어드 프로시저다양한 이유로 JPQL을 사용할 수 없을 때 JPA는 SQL을 직접 사용할 수 있는 기능을 제공하는데 이것을 네이티브SQL이라고 한다네이티브 SQL은 개발자가 직접 정의한느 것이다. 네이티브 SQL을 사용하면 엔티티를 조회할 수 있고 JPA가 지원하는 영속성 컨텍스트의 기능을 그대로 사용할 수 있다 10.5.1 네이티브 SQL 사용String sql = "SELECT * FROM users WHERE status = :status";List users = entityManager.c..
Ch10. 객체지향 쿼리 언어 (10.4 QueryDSL)
·
JPA 프로그래밍
QueryDSL은 쿼리를 문자가 아닌 코드로 작성하고, 쉽고 간결하며 그 모양도 쿼리와 비슷하게 개발할 수 있다 10.4.2 시작public void queryDSL(){ EntityManager em = emf.createEntityManager(); JPAQuery query = new JPAQuery(em); QMember qMember = new QMember("m"); //생성되는 JPQL의 별칭이 m List members = query.from(qMember) .where(qMMeber.name.eq("회원1") .orederBy(qMember.name.desc()) .list(qMember);}엔티티 매니저를 생성자에 넘..
Ch10. 객체지향 쿼리 언어 (10.3 Criteria)
·
JPA 프로그래밍
10.3 CriteriaCriterial 쿼리는 JPQL을 자바 코드로 작성하도록 도와주는 빌더 클래스 API이다문자가 아닌 코드로 JPQL을 작성하므로 문법 오류를 컴파일 단계에서 잡을 수 있고 문자 기반의 JPQL보다 동적 쿼리를 안전하게 생성할 수 있다하지만, 코드가 복잡하고 장황해서 직관적으로 이해가 힘들다10.3.1 Criteria 기초//JPQL : select m from Member mCriteriaBuilder db = em.getCriteriaBuilder(); //Criteria 쿼리 빌더 //1번//Criteria 생성, 반환타입 지정 //2번CriteriaQuery cq = cb.createQuery(Member.class);Root m = cq.from(Member.class);..
Ch10. 객체지향 쿼리 언어 (10.1 객체지향 쿼리 소개, 10.2 JPQL)
·
JPA 프로그래밍
JPQL은 가장 중요한 객체지향 쿼리 언어이다! 10.1 객체지향 쿼리 소개10.1.1 JPQL 소개JPQL(Java Persistence Query Language)엔티티 객체를 조회하는 객체지향 쿼리이다SQL을 추상화해서 특정 데이터베이스에 의존하지 않는다SQL보다 간결하다10.1.2 Criteria 쿼리 소개Criteria는 JPQL을 생성하는 빌더 클래스이다!Criteria의 장점은 문자가 아닌 query.select(m).where(...) 처럼 프로그래밍 코드로 JPQL을 작성할 수 있다는 점이다그렇기 때문에 컴파일 시점에 오류를 발견할 수 있다동적 쿼리를 작성할 때 유용하다Criteria가 가진 장점이 많지만 모든 장점을 상쇄할 정도로 복잡하고 장황하다. 따라서 사용하기 불편한 건 물론이고,..
Ch.9 값 타입
·
JPA 프로그래밍
9.1 기본값 타입@Entitypublic class Member{ @Id @GeneratedValue private Long id; private String name; private int age;}기본값 타입 9.2 임베디드 타입(복합 값 타입)임베디드 타입(embedded type)- 새로운 값 타입을 직접 정의해서 사용하는 것 @Entitypublic class Member{ @Id @GeneratedValue private Lond id; private String name; @Embedded Period workPeriod; //근무 기간 @Embedded Address homeAddress; //집 주소}값 타입 적용 회원 엔티티 @Embedda..
인덱스 설계 & 파티션 설계 (6)
·
데이터 모델링/04. 물리 모델링
인덱스 설계와 파티션 설계는 SQL 튜닝 부분을 확인해주세요! 인덱스 설계: https://developer-soyun.tistory.com/category/SQL%20%ED%8A%9C%EB%8B%9D/Ch03%20%EC%9D%B8%EB%8D%B1%EC%8A%A4%20%ED%8A%9C%EB%8B%9D 'SQL 튜닝/Ch03 인덱스 튜닝' 카테고리의 글 목록developer-soyun 님의 블로그 입니다.developer-soyun.tistory.com 파티션 설계https://developer-soyun.tistory.com/125
성능을 고려한 데이터 구조 (5)
·
데이터 모델링/04. 물리 모델링
집계/요약 테이블 추가처리할 데이터 양을 줄이는 방법대량의 데이터를 실시간으로 읽어, 일부 데이터를 집계하는 경우 집계 테이블을 추가할 수 있다컬럼 추가성능 문제 때문에 정규화의 장점을 일부 포기하고, 반정규화하거나 중복 컬럼을 추가해야 하는 경우도 있다부모 테이블에서 인조 식별자를 기본키로 설계한 경우, 기본키를 상속받으면서 본질 식별자에 해당하는 컬럼 추가자주 조회 조건으로 사용하는 컬럼을 자식 테이블에 추가하는 경우중복컬럼 추가양쪽 테이블에 분산된 조회 조건을 한 쪽 테이블에서 같이 체크하여 처리범위를 줄일 수 있도록 데이터 구조를 변경부모 테이블 중복 컬럼 추가부모 테이블에서 자식 테이블의 집계된 값이나 최종 데이터 값을 가지고 있다면, 매번 자식 테이블에서 최소/최대, 건수/합계, 최종 데이터 ..