Spring

· Spring/JPA
영속성 전이(CASCADE)영속성 전이 란 특정 엔티티를 영속성(persist) 상태로 만들 때 연관된 엔티티도 함께 영속성 상태로 만드는 것을 의미합니다. JPA(Java Persistence API)는 CASCADE 옵션을 통해 영속성 전이 기능을 제공합니다. 예를 들어 Person 엔티티와 Child 엔티티가 있다고 가정하겠습니다. 두 엔티티는 서로 양방향 관계를 가집니다.@Entitypublic class Parent { @Id @GeneratedValue private Long id; @OneToMany(mappedBy = "parent") private List childList = new ArrayList();}@Entitypublic class Child { @I..
· Spring/JPA
JPA(Java Persistence API)는 엔티티를 조회할 때 즉시 로딩(EAGER)과 지연 로딩(LAZY) 2가지 방식이 있습니다. 즉시 로딩은 엔티티를 조회할 때 연관된 엔티티까지 한 번에 가져오며, 지연 로딩은 엔티티 조회 시 연관된 엔티티를 가져오지 않고, 필요한 시점에 가져오는 방식입니다. FetchType이란?JPA가 엔티티를 조회할 때, 해당 엔티티와 연관관계를 맺은 엔티티를 어떻게 가져올지 설정하기 위함입니다. JPA는 사용자가 직접 쿼리를 생성하지 않아도 엔티티의 필드를 보고 상황에 맞게 쿼리를 생성합니다. 따라서 하나의 엔티티에 연관관계를 맺은 엔티티 매핑되어 있다면 같이 조회할 것인지 따로 조회할 것인지 선택할 수 있습니다. 따로 설정하지 않을 경우 default 값은 다음과 같..
· Spring/JPA
연관관계를 맺은 엔티티를 모두 포함시켜 조회하는 경우 비효율적일 수 있습니다. 굳이 불필요한 정보까지 조회하기 위해 쿼리가 복잡해지면 성능에도 영향을 끼칠 수 있기 때문입니다. JPA(Java Persistence API)는 이러한 문제를 대비하여 지연 로딩과 프록시를 제공합니다. 지연 로딩은 연관된 엔티티를 실제로 필요할 때까지 로딩을 지연시키는 방식으로, 성능을 향상하고 불필요한 쿼리를 방지합니다. 프록시는 실제 엔티티 대신 사용되며, 필요한 경우 실제 엔티티를 가져오게 됩니다. 프록시(Proxy)지연 로딩을 이해하려면, 먼저 프록시의 개념을 이해해야 합니다. JPA는 EntityManager를 통해 엔티티를 조회하는 메서드를 제공합니다. 앞으로 EntityManager를 em으로 축약하여 부르겠습니..
· Spring/JPA
관계형 데이터베이스는 객체처럼 상속이라는 개념이 대부분 존재하지 않습니다. 그나마 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사합니다. 상속관계 매핑이란 객체의 상속 구조와 데이터베이스의 슈퍼타입 서브타입 관계를 매핑하는 것입니다. 이번 포스팅을 통해 상속관계 매핑을 물리 모델로 구현하는 방식을 정리하고자 합니다. 슈퍼타입 서브타입 논리 모델객체지향 프로그래밍에서는 모델링과 구현이 상속을 활용하여 일치시킬 수 있지만, 데이터베이스는 상속을 직접적으로 지원하지 않아서 논리적인 모델과 물리적인 모델 간의 차이가 발생합니다. JPA(Java Persistence API)는 이러한 객체지향과 데이터베이스 간의 패러다임 불일치를 해결하기 위해 상속 관계를 물리적인 데이터베이스 모델로 매핑하..
· Spring/JPA
JPA(Java Persistence API)를 이해하는 데 어려움을 겪는 이유 중 두 가지는 영속성 컨텍스트의 작동 메커니즘과 연관관계 매핑입니다. 이번 포스팅에서는 연관관계 매핑에 대해 정리해보고자 합니다. JPA는 객체 지향 프로그래밍과 데이터베이스 간의 패러다임 불일치를 해결하기 위해 설계되었습니다. 이를 통해 객체지향적인 개발 방식을 지원하며, 연관관계 매핑은 이러한 패러다임 불일치를 해소하고 객체지향적인 개발을 용이하게 합니다. 연관관계 정의 규칙 연관관계를 매핑할 때 고려해야 할 사항은 다음과 같이 3가지로 구분됩니다. 방향: 단방향, 양방향 (객체 참조) 연관관계의 주인: 양방향 관계에서 관리 주체가 되는 엔티티 (FK를 가지는 테이블) 다중성: 다대일(N:1), 일대다(1:N), 일대일(..
· Spring/JPA
이번 포스팅에서 엔티티 매핑의 핵심적인 역할을 하는 기본키(Primary Key)에 대해 살펴보겠습니다. 기본키는 데이터베이스에서 각 행을 식별하는 데 사용되는 고유한 식별자입니다. 이는 엔티티와 매핑된 객체를 고유하게 식별하고 관계를 맺을 때 중요한 역할을 합니다. @Id @Id는 엔티티의 주요 식별자를 표시하는 역할을 수행합니다. 즉 데이터베이스 테이블의 기본 키(pk)와 객체의 필드를 매핑시켜 줍니다. 일반적으로 @GeneratedValue와 같이 사용되며 @Id만 사용할 경우 기본 키를 직접 할당해주어야 합니다. @Id를 적용할 수 있는 타입은 다음과 같습니다. 자바 기본형 (int, long, ...) 자바 래퍼형 (Integer, Long, ...) String Date (java.util),..
· Spring/JPA
이번 포스팅은 JPA(Java Persistence API)를 사용하여 엔티티 객체와 데이터베이스 테이블 간의 매핑, 그리고 엔티티 필드와 데이터베이스 컬럼 간의 매핑에 대해 살펴보겠습니다. JPA는 자바 객체와 관계형 데이터베이스 간의 매핑을 간소화하고 편리하게 처리할 수 있도록 도와줍니다. 객체와 테이블 매핑 @Entity JPA에서 엔티티(Entity)는 데이터베이스 테이블과 대응되는 하나의 클래스로 데이터의 집합을 의미합니다. JPA를 사용하여 데이터베이스 테이블과 매핑할 클래스는 반드시 @Entity를 붙여야 합니다. @Entity(name = "MEMBER") public class Member { private Long memberId; private String username; } 속성 ..
· Spring/JPA
이번 포스팅은 영속성 컨텍스트에 대해 설명해보려고 합니다. 영속성 컨텍스트를 배우기 위해 먼저 EntityManagerFactory와 EntityManager를 알아야 합니다. EntityManagerFactory & EnitityManger란? EntityManagerFactory는 애플리케이션 전체에 단 하나만 생성되며 영속성 유닛과 연결을 설정하고 관리합니다. 이 과정에서 DB 커넥션 풀을 생성하게 됩니다. 그리고 클라이언트의 요청이 들어올 때마다 EntityManager를 생성하고, 각 EntityManager는 특정 작업을 수행하기 위해 사용됩니다. EntityManager는 영속성 컨텍스트를 관리하며, 이를 통해 엔티티 객체의 상태를 추적하고, 트랜잭션이 시작되는 시점에 EntityManage..
Hui._.
'Spring' 카테고리의 글 목록 (2 Page)