목록전체 글 (155)
Rootable의 개발일기
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lVzmm/btstfQiyB0u/n2dKZu5piXEKfsh7zutqVK/img.png)
📌 인덱스란? 만약 다음과 같은 데이터베이스에서 age가 23인 사원을 찾아야 한다면 컴퓨터는 조건에 맞는 값을 찾을 때까지 검색을 계속할 것이다. 그런데 만약 데이터가 1억 개가 된다면 해당 데이터를 찾기 위해 오랜 시간이 걸리게 된다. 그래서 인덱스를 사용하여 타깃에 대한 빠른 접근을 도와준다. 인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조를 말한다. 📌 인덱스 구조 우리가 데이터를 찾을 때 단순히 값을 물어보는 것이 아니라 내가 찾는 값이 어떤 값보다 큰지 작은지 물어보면서 접근하는 것이 더 유리할 것이다. 예를 들어, 1에서 100까지 값이 있을 때 55라는 값을 찾기 위해 50보다 큰지 작은 지부터 물어보면서 접근하는 것이다. 이를..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bmXcJv/btsrDKp9Voc/m92EydhEsBKLk0hLeLMjXK/img.png)
📌 페치 조인이란 JPQL에서 성능 최적화를 위해 제공하는 기능으로 SQL 조인의 종류는 아니다. 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능으로 즉시 로딩(EAGER)과 같은 효과를 보여준다. 기본 형태 select m from Member m join fetch m.team 📌 예제 회원과 팀은 다음과 같은 관계에 있다. 둘을 조인하면 아래와 같은 결과가 나온다. 위 관계에서 현재 지연 로딩이라고 할 때, 아래와 같은 코드를 실행하면 쿼리가 몇 번 나가게 될까 영속성 컨텍스트가 빈 상태에서 회원 1이 속한 팀 A를 질의한다. 회원 2는 이미 팀 A를 질의한 상태이므로 영속성 컨텍스트에서 값을 찾을 수 있다. 마지막으로 회원 3은 영속성 컨텍스트에 없으므로 다시 DB에 팀..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bQOWkd/btsrvXwOkMH/ak2ZZ3PGHikHRN7EebBCY0/img.png)
📌 값 타입 컬렉션(Collection Value Type) 값 타입을 하나 이상 저장할 때 사용한다. 데이터베이스는 컬렉션을 같은 테이블에 저장하지 않기 때문에, 실행하면 컬렉션을 저장하기 위한 별도의 테이블이 생성된다. 📌 사용 방법 🔎 저장 서로 다른 테이블임에도 불구하고 Member만 persist해도 함께 저장되었다. 그 이유는 값 타입은 Entity의 생명 주기에 의존하기 때문에 Entity를 저장하면 함께 저장되기 때문이다. 💡 값 타입 컬렉션은 영속성 전이 + 고아 객체 제거 기능을 필수로 가진다. 🔎 조회 값 타입 컬렉션은 기본적으로 지연 로딩 전략을 사용한다. 이렇게 지연 로딩을 사용하는 이유는 @ElementCollection의 FetchType이 LAZY가 기본으로 되어 있기 때문이..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/OE9nR/btsrv0twRnT/Z9S8riwIkCibGTTdJfWBK0/img.png)
📌 임베디드 타입(Embedded Type)이란 주로 기본 값 타입을 모아서 새로운 값 타입을 직접 정의하는 것을 말하며, 복합 값 타입이라고도 한다. 임베디드 타입을 포함한 모든 값 타입은 값 타입을 소유한 Entity에 생명 주기를 의존한다. 🔎 예제 Member 엔티티에서 날짜와 관련된 속성, 주소와 관련된 속성처럼 특정 주제와 관련된 값 타입들을 묶어 새로운 값 타입을 정의할 수 있다. 📌 사용 방법 임베디드 타입도 Proxy를 사용하기 때문에 기본 생성자가 필요하다. 더보기 임베디드 타입 Proxy Reference: https://jiwondev.tistory.com/231 JPA #9 값 타입, 컬렉션, 임베디드 타입 JPA에서는 2가지 데이터 타입을 제공한다. @Entity 는 데이터가 변..