본문 바로가기
728x90

JPA13

[ JPA ] Java Persistence Query Language(JPQL , 객체 지향 쿼리 언어)(2) Intro 객체 지향 쿼리 언어에 대한 포스팅을 이어가 보겠습니다. 이전 포스팅에서 페이징 처리 함수까지 알아봤습니다. JPQL 문법에 대해 알아보시는 분들은 아래 포스팅을 참고해 주시면 도움이 될 거 같아서 올려보겠습니다. [ JPA ] Java Persistence Query Language(JPQL , 객체 지향 쿼리 언어)(1) Intro JPA는 엔티티 객체를 중심으로 개발하기 때문에 검색 쿼리 실행하면 테이블 대상이 아닌 엔티티 객체를 대상으로 요청을 보내야 한다. 하지만 모든 데이터베이스 데이터를 객체로 변환해서 drg2524.tistory.com 집합과 정렬 집합 함수와 정렬 기능은 SQL문 작성할 때 사용할 수 있는 함수들을 별도의 처리 과정 없이 사용할 수 있다. 예를 들어서 집합 함수.. 2024. 4. 11.
[ JPA ] Java Persistence Query Language(JPQL , 객체 지향 쿼리 언어)(1) Intro JPA는 엔티티 객체를 중심으로 개발하기 때문에 검색 쿼리 실행하면 테이블 대상이 아닌 엔티티 객체를 대상으로 요청을 보내야 한다. 하지만 모든 데이터베이스 데이터를 객체로 변환해서 검색하는 것은 불가능하며 애플리케이션이 필요한 데이터만 가져오려면 결국 검색 조건이 포함된 SQL을 사용해야 한다. 오늘은 검색 조건에 엔티티 객체를 대상으로 요청을 보내기 위한 객체 지향 쿼리 언어에 대해 알아보자. JPQL(Java Persistence Query Language) JPQL은 SQL을 추상화하여 사용하는 객체지향 쿼리 언어이다. 따라서 테이블을 대상으로 하지 않고 엔티티 객체를 대상으로 쿼리를 수행하며 추상화를 통해서 특정 데이터베이스 SQL에 의존되지 않게 개발할 수 있다. 실제 수행할 때는 .. 2024. 4. 3.
[ JPA ] 값 타입(Value Object) Intro JPA의 데이터 타입을 분류하면 엔티티 타입과 값 타입(Value Object)으로 구분할 수 있다. 엔티티 타입은 @Entity 애노테이션으로 정의하는 객체, @Entity를 붙여서 관리하던 클래스들이다. 이 타입들은 PK값으로 관리가 되기 때문에 데이터가 변해도 식별자로 지속적으로 추적이 가능하고 관리도 편리하다. 예를 들면 Member 테이블인 즉, 회원 엔티티가 있으면 회원의 주소 및 나이 값을 변경해도 식별자로 인식이 가능하다. 그에 반해 값 타입은 자바 기본 타입과 래퍼 클래스, 문자열처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체다. 식별자가 없고 값만 있으므로 변경 시 추적이 불가하다. 만약 int 타입의 값이 10이 있다고 가정해 보면 10이라는 값을 100으로 변경하면 .. 2024. 3. 29.
[ JPA ] 즉시 로딩과 지연 로딩(FetchType.LAZY or EAGER) Intro 이전 포스팅에서 프록시(Proxy)에 대한 글을 작성했습니다. 프록시(Proxy)는 이번 포스팅에서 즉시 로딩(EAGER)과 지연 로딩(LAZY)을 구현하는데 중요한 개념인데, 일단 원리는 미뤄두고 즉시 로딩(EAGER)과 지연 로딩(LAZY)에 대한 개념에 대해 먼저 알아보자. 예제 테이블로 Member와 Team이 있다고 가정해보자. Member를 조회할 때 Team도 함께 조회해야 할까? 비즈니스 로직에서 단순히 멤버 로직만 사용하는데 함께 조회하면, 아무리 연관관계가 걸려 있다고 해도 손해이다. JPA에서는 데이터를 조회할 때 즉시 로딩(EAGER)과 지연 로딩(LAZY) 두 가지 방식이 있다. 이 두 가지 방식을 간단하게 설명하면 즉시 로딩(EAGER)은 데이터를 조회할 때 연관된 데.. 2024. 3. 26.
[ JPA ] 프록시(Proxy) Intro 객체는 객체 그래프로 연관된 객체들을 자유롭게 탐색할 수 있다. 하지만 데이터베이스 매핑을 하는 엔티티 객체에서는 자유도가 떨어진다. 연관된 테이블의 데이터를 조회하기 위해서는 Join을 사용해서 진행해야 하기 때문이다. 자유로운 객체 그래프 탐색의 가능성으로 인해 연관된 모든 테이블을 조회하는 것은 비용이 따르는데, 실제로 연관된 테이블을 사용하지 않는다면 Join을 사용해서 조회한 결과를 가져오기 때문이다. 이 문제를 해결하기 위해 프록시가 등장하게 되었다. 연관된 객체를 처음부터 데이터베이스에서 조회하는 것보다 실제 사용하는 시점을 기준으로 데이터베이스를 조회할 수 있도록 해주고 자주 함께 사용하는 객체는 사용하는 시점이 아닌 해당 객체를 조회했을 때 바로 가져올 수 있도록 하는 방법도 .. 2024. 3. 21.
[ JPA ] 상속 관계 매핑 Intro 관계형 데이터베이스에는 객체 지향 언어에서 다루는 상속이라는 개념이 없다. 대신에 슈퍼타입 서브타입 관계라는 모델링 기법이 객체의 상속 개념과 가장 유사하다. ORM에서 이야기하는 상속 관계 매핑은 객체의 상속 구조와 데이터베이스의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현할 때는 3가지 방법을 선택할 수 있다. 각각의 테이블로 변환 각 테이블을 생성하고 조회할 때 조인을 사용한다. 통합 테이블로 변환 테이블을 하나만 사용해서 통합한다. (JPA에서는 단일 테이블 전략이라 한다.) 서브타입 테이블로 변환 서브 타입마다 하나의 테이블을 만든다. (JPA에서는 구현 클래스마다 테이블 전략이라 한다.) 세 가지 방법 모두 JPA를 통해 .. 2024. 3. 18.
728x90