[JPA] 영속성 컨텍스트, 엔티티 생명주기, @Transactional
·
Programming/JPA
우아한테크코스 레벨 2에서 학습한 내용을 정리한 글입니다. 💭 들어가며JPA를 처음 배웠을 때는 영속성 컨텍스트라는 개념이 잘 와닿지 않아, 완전히 이해하지 못한 채 사용했었다. 하지만 Spring Data JPA를 사용하면서 영속성 컨텍스트가 어떻게 작동하는지 감을 잡으면서 장점을 체감하게 되었고, 왜 굳이 애플리케이션도 아니고 DB도 아닌 중간 영역에 데이터를 한 번 더 저장하는지 이해하게 되었다. 이번 글에서는 이를 복습하고 정리해보고자 한다. ✅ 영속성 컨텍스트와 엔티티 매니저▶ 영속성(Persistence)사전적 의미는 "오래 계속되는 성질"이라고 한다.데이터를 DB에 지속적으로 저장할 수 있는 성질이다. ▶ 영속성 컨텍스트(Persistence Context)영속성 컨텍스트는 엔티티를 관리..
[JPA] N+1 문제와 해결 방법
·
Programming/JPA
우아한테크코스 레벨 2에서 학습한 내용을 정리한 글입니다. 💭 들어가며JPA를 처음 배웠을 때도 N+1 문제라는 용어를 들어본 적은 있었지만, 정확한 의미는 알지 못했다. 이번에 JPA를 심화 학습하며 실제로 해당 문제를 직접 마주하게 되었고, 공부해야 할 필요성을 느꼈다. 이에 N+1 문제가 무엇인지 알아보고, 이를 해결하는 방법과 공부 중에 들었던 의문점들을 정리해 보고자 한다. ✅ N+1 문제란한 번의 쿼리로 가져온 엔티티가 지연 로딩(Lazy Loading) 설정 때문에 추가로 N개의 쿼리를 발생시키는 문제이다. ✅ 발생 원인▶ 지연 로딩(Lazy Loading)지연 로딩은 연관 관계가 설정된 엔티티가 즉시 로딩되지 않고, 실제 접근 시점에 쿼리가 날아간다.지연 로딩은 당장 필요하지 않은 ..
[JPA] JPQL 중급 문법 - 객체지향 쿼리 언어 JPQL (2)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 경로 표현식JPQL에서는 점(.)을 사용하여 객체의 값에 접근할 수 있다. 이처럼 점(.)을 이용해 객체 그래프를 탐색하는 것을 경로 표현식이라고 한다.select m.username //상태 필드from Member m join m.team t //단일 값 연관 필드 join m.orders o //컬렉션 값 연관 필드where t.name = '팀A'🔽 경로 표현식 종류상태필드(state field): 단순히 값을 저장하기 위한 필드 (예: m.username)연관필드(association field): 연관관계를 위한 필드단일 값 연관 필드: 객체 간의 단일 연관 관계를 나타내는 ..
[JPA] JPQL 기본 문법 - 객체지향 쿼리 언어 JPQL (1)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ JPQL이란?JPQL(Java Persistence Query Language): 엔티티 객체를 조회하기 위해 설계된 객체 지향 쿼리 언어 ▶ 특징JPQL은 데이터베이스의 테이블이 아닌 엔티티 객체를 대상으로 하는 쿼리 언어이다.SQL을 추상화했기 때문에 특정 데이터베이스 시스템에 의존하지 않는다.SQL과 유사한 문법을 가지며, JPQL은 내부적으로 SQL로 변환되어 실행된다. ▶ 기본 문법select_문 ::=        select_절        from_절        [where_절]        [groupby_절]        [having_절]        ..
[JPA] 값 타입 컬렉션 - 값 타입 (4)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 값 타입 컬렉션값 타입을 하나 이상 저장할 때 List나 Set과 같은 Collection을 사용한다. 하지만 DB에는 Collection을 하나의 테이블에 저장할 수 없기 때문에 Collection을 저장하기 위한 별도의 테이블이 필요하다.방법: @ElementCollection, @CollectionTable🔽 값 타입 컬렉션 코드 @Entity public class Member { ... //값 타입 컬렉션 @ElementCollection @CollectionTable(name = "ADDRESS", joinColumns = @JoinCol..
[JPA] 값 타입 비교 - 값 타입 (3)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 값 타입의 비교자바가 제공하는 객체 비교는 동일성 비교, 동등성 비교 2가지가 있다. 1️⃣ 동일성(identity) 비교인스턴스의 참조 값을 비교한다. == 사용해서 비교하는 방법이다. 2️⃣ 동등성(equivalence) 비교인스턴스의 값을 비교한다. equals() 사용해서 비교하는 방법이다. ▶ 값 타입의 동등성, 동일성Address a = new Address("서울시", "종로구", "1번지");Address b = new Address("서울시", "종로구", "1번지");Address 값 타입을 a == b로 동일성 비교하면 둘은 서로 다른 인스턴스이므로 결과는 거짓이다.하지만 이것은 기대하는 결과가..
[JPA] 값 타입과 불변 객체 - 값 타입 (2)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ 값 타입과 불변 객체▶ 문제: 값 타입 공유 참조임베디드 타입 같은 값 타입을 여러 Entity에서 공유하면 위험하다.Embedded 타입 같이 직접 정의한 값 타입은 객체 타입이기 때문에 값을 대입하면 참조 값이 공유된다.🔽 값 타입 공유 참조 문제 발생 코드Address address = new Address("city", "street", "zipcode");member1.setAddress(address);member2.setAddress(member1.getAddress()); //회원1의 address 값을 공유위 코드는 회원1이나 회원2가 이후 주소를 변경하면 함께 변경되기 때문에 문제가 생긴다. ▶..
[JPA] 기본값 타입과 임베디드 타입 - 값 타입 (1)
·
Programming/JPA
해당 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍을 참고하여 작성한 글입니다. ✅ JPA의 데이터 타입JPA의 데이터 타입을 크게 2가지로 나누면 엔티티 타입과 값 타입으로 나눌 수 있다.엔티티 타입@Entity로 정의하는 객체데이터가 변해도 식별자로 지속해서 추적이 가능하다.예: Member Entity의 키나 나이 값을 변경해도 식별자로 인식 가능하다.값 타입int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체식별자가 없고 값만 있으므로 변경 시 추적이 불가능하다.예: 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체된다.엔티티 타입의 특징값 타입의 특징식별자 O생명 주기 관리공유식별자X생명 주기를 엔티티에 의존공유하지 않는 것이 안전(복사해서 사..
soeun2537
'jpa' 태그의 글 목록