객체지향 쿼리의 필요성 이전 까지 단순 조회는 find findAll 수준의 단순 조회 였지만 조건을 부여하기에는 한계가 있었다. 이러한 문제로 들장한 개념이 객체지향 쿼리 이다. JPQL(Java Persistence Query Language) ? JPA의 구성요소중 하나이며 SQL문법을 추상화 시킨 객체지향 쿼리이다. 객체 중심의 문법인 만큼 특정 DB에 의존하지 않는다. 엔티티 조회, 묵시적 조인, 다형성 지원으로 SQL 보다 간결하다. 왜 개발자들은 JPA를 두고 JPQL를 사용할까? JPA 문법은 CRUD 명령어 처리에서 효율적인 명령어 기능을 제공하지만 검색 명령어에 대해서는 비효율적으로 작동한다. 객체중심의 JPA는 검색을 할때도 테이블이 아닌 엔티티 객체를 대상으로 검색해야하는데 DB의 ..
진영을 나누어 보자 영속성 기능아래 DB를 연결하는 방식은 두가지로 나뉜다. SQL Mapper는 SQL을 명시해줘야 한다. ex) MyBatis, JDBC Template 객체를 통해 간접적으로 데이터베이스를 다루며 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다. ex) JPA, Hibernate 🌠 ORM (Object - Relational - Mapping) 객체와 DB를 매핑하는 기술로 객체와 테이블을 자동으로 매핑해서 패러다임의 불일치 문제를 자동으로 해결해준다. SQL 중심의 매핑이 아닌 자바 클래스 위주의 매핑이다. 즉, 객체라는 특성과 ORM 메서드가 사용되며 영속성의 기능을 가지고있는 기술이다. ☄ 자주 틀리는 문제 - 모든 자동 매핑이 ORM은 아니다! ..
Spring Data 페이징 스프링 데이터는 JPA 쿼리 메소드에 페이징과 정렬 기능을 사용할 수 있도록 2가지 특별한 파라미터를 제공한다. org.springframework.data.Sort : 정렬기능 org.springframework.data.Pageable : 페이징 기능 (Sort 포함) Page 타입 Page 메소드는 페이징 기능을 제공하기 위해 검색된 전체 데이터 컨수를 조회하는 count 쿼리를 추가로 호출한다. // count 쿼리 사용 Page findByName(String name, Pageable pageable); // count 쿼리 사용 안 함 List findByName(String name, Pageable pageable); 페이지 조건 걸기 PageRequest p..
ORM에서의 객체 연관 매핑 연관 관계의 핵심 키워드 방향 매핑 방식에는 크게 단방향 / 양방향 방식이있다. 단방향 한쪽 방향으로의 접근이 가능한 매핑으로 회원 -> 팀 혹은 팀 -> 회원 방식 양방향 양방향 으로의 접근이 가능한 매핑으로 회원 팀 서로의 객체를 참조하는 방식이다. 단, 이러한 관계는 객체 관계에서만 가능하고 테이블 관계는 항상 양방향 상태이다. 다중성 다대일 / 일대다 / 일대일 / 다대다 연관관계 주인 객체를 양방향 연관관계로 만들면 연관관계의 주인을 정해야한다. 테이블과 객체의 연관관계 차이 객체 객체는 필드(멤버변수)로 팀 객체와 연관관계를 맺는다. 테이블 테이블은 외래 키로 연관관계를 가진다. 여기서 확인해야 할 것은 테이블은 외래키를 가지게 된다면 자동으로 양방향 테이블을 가지..
준영속 상태의 지연 로딩 문제를 해결 영속성 컨텍스트 전략을 기본으로 사용하는 스프링에서는 트렌잭션이 Service 계층에서 시작하여 끝나는 시점에서 영속성 컨텍스트 또한 함께 종료된다. 준영속 상태에서는 변경감지와 지연로딩이 되지 않는다. 준영속 상태의 지연로딩 View 계층에서 엔티티를 사용할 경우 관련된 엔티티도 함께 사용해야 하는데 만일 초기화 되지 않은 프록시를 준영속 상태에서 호출할 경우 문제가 발생한다. 이러한 문제를 해결 하기 위해 JPA는 두 가지 방식을 제안하고 있다. 뷰가 필요한 엔티티를 미리 로딩해 두는 방법 OSIV를 사용하여 엔티티를 항상 영속 상태로 유지하는 방법 뷰가 필요한 엔티티를 미리 로딩해 두는 방법 글로벌 페치 전력 수정 JPQL 페치 조인 강제 초기화 A. 글로벌 페..
상속 관계 매핑 관계형 데이터베이스에는 객체지향 언어에서 다루는 상속이라는 개념이 없다. 대신에 슈퍼타입 서타타입 관계라는 모델링 기업이 객체의 상속 개념과 가장 유사하다. 슈-서 논리 모델 테이블 구현 슈퍼타입-서브타입 논리 모델을 실제 모델인 테이블로 구현할 때는 3가지 방법이 있다. 각각의 테이블로 변환 (조인 테이블 전략) 각각을 모두 테이블로 만들고 조회할 때 조인을 사용한다. 통합 테이블로 변환 (단일 테이블 전략) 테이블을 하나만 사용해서 통합한다. 서브타입 테이블로 변환 (구현 클래스 테이블 전략) 서브 타입마다 하나의 테이블을 만든다. 1. 조인 테이블 전략(InheritanceType.JOINED) 엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아서 기본 ..
프록시 지연로딩 연관되어 있는 엔티티를 조회할 경우 불필요한 정보까지 모든 엔티티를 불러오는 것은 현명한 방법은 아니다. JPA에서는 효율적인 데이터 호출을 위해 데이터 베이스 조회를 지연하는 지연로딩 방식을 제공한다. 프록시 등장 개념 지연로딩 기능을 사용하려면 실제 엔티티 객체 대신에 직접 연관 엔티티를 호출하기 전까지 DB 조회를 지연할 수 있는 가짜 객체 (프록시)가 필요했다. 프록시 특징 최초 한번만 초기화 할 수 있다. 츠록시는 원본 엔티티를 상속받은 객체이다. 프록시 객체가 초기화 되면 실체 객체에 점근할 수 있는 권한이 생긴다. 영속성 컨텍스트에 찾는 엔티티가 이미 있으면 DB를 조회할 필요가 없으므로 em.getReference()를 호출해도 프록시가 아닌 실체 엔티티를 반환한다. 초기화..
JPA의 데이터 타입을 분류한다면 엔티티 타입 과 값 타입 나눌 수 있다. 엔티티 타입은 @Entity로 정의하는 객체이고, 값 타입은 int, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체를 말한다. 값 타입은 다음 3가지로 나눌 수 있다. 기본 값 타입 차바 기본 타입(int, double ...) 래퍼 클래스(Integer ...) 임베디드 타입 컬렉션 값 타입 임베디드 타입 새로운 값 타입을 직접 정의해서 사용할 수 있는 값 타입의 일종으로 객체와 테이블을 세밀하게 매핑하는 것이 가능하다. 또한 정의한 값 타입에 의한 재사용성과 높은 응집도를 가질 수 있다. 엔티티 타입 특징 식별자(@Id)가 있다. 엔티티 타입은 식별자가 있고 식별자로 구별 할 수 있다. 생명 주기 생성하고,..
JPA 에서의 식별과 비식별 DB 테이블 관계는 외래키 포함 여부에 따라 식별과 비식별로 구분한다. 식별 관계 부모 테이블의 기본키를 받아 자식 테이블이 기본키 + 외래키로 사용하는 관계 비식별 관계 부모테이블의 기본키를 받아 자식 테이블이 외래키로만 사용하는 관계 비식별은 또 다시 필수와 선택으로 나뉜다. 필수적 비식별 외래키에 NULL을 허용하지 않는다. 필수적 연관관계를 가진다. 선택적 비식별 외래키에 NULL을 허용한다. 연관관계를 선택적으로 선택한다. 식별 비식별 장단점 식별 관계의 장점 데이터의 정합성 유지를 DB에서 한번 더 할 수 있다 자식 테이블에 데이터가 존재한다면 부모 데이터도 반드시 존재한다고 보장할 수 있다 식별 관계의 단점 요구사항이 변경되었을 경우 구조 변경이 어렵다 자식 객체..
ORM에서의 객체 연관 매핑 연관 관계의 핵심 키워드 방향 매핑 방식에는 크게 단방향 / 양방향 방식이있다. 단방향 한쪽 방향으로의 접근이 가능한 매핑으로 회원 -> 팀 혹은 팀 -> 회원 방식 양방향 양방향 으로의 접근이 가능한 매핑으로 회원 팀 서로의 객체를 참조하는 방식이다. 단, 이러한 관계는 객체 관계에서만 가능하고 테이블 관계는 항상 양방향 상태이다. 다중성 다대일 / 일대다 / 일대일 / 다대다 연관관계 주인 객체를 양방향 연관관계로 만들면 연관관계의 주인을 정해야한다. 테이블과 객체의 연관관계 차이 객체 객체는 필드(멤버변수)로 팀 객체와 연관관계를 맺는다. 테이블 테이블은 외래 키로 연관관계를 가진다. 여기서 확인해야 할 것은 테이블은 외래키를 가지게 된다면 자동으로 양방향 테이블을 가지..
- Total
- Today
- Yesterday
- OOP
- 디자인패턴
- 스프링
- 알고리즘
- 수학
- 자바
- 백준
- nginx
- Solid
- C언어
- 프로그래머스
- 자격증
- security
- CS
- Spring
- 스프링부트
- kakao
- interview
- Algorithm
- 면접
- 릿코드
- spring-cloud
- java
- docker
- springboot
- JPA
- 그래프
- ajax
- Matlab
- 매트랩
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |