분류 전체보기

    JPA 프록시와 지연로딩: 성능 최적화를 위한 기술(방법)

    JPA 프록시와 지연로딩: 성능 최적화를 위한 기술(방법)

    연관관계인 `Employee`와 `Company` 엔티티가 있을 때, Employee가 Company를 참조하고 있기 때문에 Employee 정보를 조회하려고 하면 Company 정보도 조회하게 될 것입니다. Employee에 대한 정보만 필요하고 연관된 엔티티인 Company에 대한 정보가 필요하지 않은 경우, 이는 불필요한 작업(성능 낭비) 일 것입니다. JPA에서는 이러한 경우를 해결하기 위해 `지연 로딩`이라는 방식을 사용합니다. 지연 로딩: Lazy Loading `지연 로딩`을 구현하기 위해 `프록시`를 활용합니다. Proxy 프록시(Proxy)란 객체 지향 프로그래밍에서 실제 객체에 대한 대리 객체를 생성하여 대신 사용하는 패턴을 말합니다. JPA에서는 프록시 객체를 생성하여, 프록시 객체를..

    JPA 상속 관계 매핑 방법과 공통 매핑하는 방법

    JPA 상속 관계 매핑 방법과 공통 매핑하는 방법

    JPA는 객체 지향 프로그래밍에서 중요한 개념인 상속 관계를 데이터베이스 테이블과 연결하는 방법을 제공해줍니다. 이를 통해 객체 간의 상속 관계를 데이터베이스에서도 표현할 수 있습니다. 이런 매핑으로 객체 지향적인 코드와 데이터베이스의 구조를 조화시켜 객체 지향적인 프로그래밍을 할 수 있습니다. 상속 관계 매핑 방법 JPA에는 3 가지 상속 관계 매핑 방법이 있습니다. 1. 단일 테이블 전략 모든 클래스를 하나의 테이블에 통합하여 저장하는 방식입니다. 부모 클래스와 자식 클래스의 속성을 같은 테이블에 저장하기 때문에, 자식 클래스의 속성을 Nullable하게 해야합니다. 또한 자식 테이블들을 구분하기 위해 컬럼을 추가하여 구분컬럼으로 사용합니다. 이 방식은 테이블이 한 개이기 때문에 조인을 사용하지 않아..

    JPA 연관관계 매핑: 객체 간의 관계를 표현하고 데이터베이스에 저장

    JPA 연관관계 매핑: 객체 간의 관계를 표현하고 데이터베이스에 저장

    정리 요약 관계 다대일(N : 1) @ManyToOne 일대다( 1 : N) @OneToMany 일대일( 1 : 1) @OneToOne 다대다(N : N) @ManyToMany 방향성 테이블 외래 키로 양쪽 조인이 가능 방향이라는 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 단방향: 한 쪽만 참조 양방향: 양쪽이 단방향으 서로 참조 연관관계의 주인 테이블은 외래 키 하나로 두 테이블의 연관관계를 찾음 객체 양방향 관계는 양쪽이 모두 참조를 하므로 참조가 2군데 이다 연관관계의 주인: 외래 키를 관리하는 참조 데이터베이스와 객체의 패러다임 차이 JPA는 객체와 관계형 데이터베이스 간의 매핑을 지원해 주는 기술로, 객체 지향적인 프로그래밍으로 데이터베이스를 조작할 수 있게 해 줍니다. 객체와 관..

    JPA 생성 및 수정 날짜 자동 처리를 위한 공통 엔티티 만들기 @MappedSuperclass, @EnableJpaAuditing

    JPA 생성 및 수정 날짜 자동 처리를 위한 공통 엔티티 만들기 @MappedSuperclass, @EnableJpaAuditing

    서비스를 만들때 많은 엔티티가 생성일과 수정일을 가지고 있습니다. 이러한 필드를 각각의 엔티티마다 중복으로 작성하는 것은 번거로울 뿐 아니라 유지보수도 복잡해지고 가독성도 떨어집니다. 때문에 우리는 공통으로 갖고 있는 정보(생성일과 수정일)를 따로 엔티티로 만들어 상속받게 만들어보겠습니다. @MappedSuperclass JPA에서 상속 관계 매핑을 위해 사용되는 어노테이션입니다. 이 어노테이션을 사용하면 공통된 매핑 정보를 가진 부모 클래스를 정의할 수 있고, 여러 엔티티에서 공통 필드와 매핑 정보를 상속받아 사용할 수 있습니다. `@MappedSuperclass` 어노테이션이 붙은 부모 클래스를 자식 엔티티가 상속받게 되면, 부모 클래스는 테이블로 생성되지 않고, 상속한 자식 클래스로 테이블이 생성됩..

    JPA ddl-auto: 데이터베이스 스키마 자동 생성 전략

    JPA ddl-auto: 데이터베이스 스키마 자동 생성 전략

    1. `create`: 새로 생성 어플리케이션을 실행할 때마다 기존 데이터는 삭제하고, 데이터베이스 스키마를 새로 생성하는 전략입니다. spring.jpa.hibernate.ddl-auto=create 2. `create-drop`: 종료할 때 삭제 데이터베이스 스키마가 새로 생성된다는 점에서는 create 전략과 같지만, create-drop은 어플리케이션이 종료될 때 데이터베이스 스키마도 삭제됩니다. spring.jpa.hibernate.ddl-auto=create-drop 3. `update`: 변경된 내용만 반영 데이터베이스 스키마에 영향을주지 않고, 엔티티 클래스의 변경사항만을 반영합니다. 즉, 데이터베이스 스키마는이미 존재하는 상태에서엔티티 클래스의 변경을반영합니다. spring.jpa.hib..

    JPA 엔티티 매핑: 객체와 데이터베이스 테이블의 매핑

    JPA 엔티티 매핑: 객체와 데이터베이스 테이블의 매핑

    엔티티(Entity) 매핑 JPA 엔티티 매핑은 다음과 같은 주요 어노테이션과 개념을 활용하여 이루어집니다. 객체와 테이블 매핑: @Entity, @Table 기본 키 매핑: @Id, @GeneratedValue 필드와 컬럼 매핑: @Column 연관 관계 매핑: @JoinColumn, @ManyToOne, @ManyToMany 등 상속 관계 매핑: @Inheritance, @DiscriminatorColumn, @DiscriminatorValue @Entity 엔티티 클래스임을 지정하여 JPA에게 알려줍니다. 기본 생성자가 필요합니다. 저장할 필드에 `final`을 사용하면 안 됩니다. final 클래스, enum, interface, inner 클래스에는 사용할 수 없습니다. @Table 엔티티와 매..

    JPA EntityManager와 영속성: JPA의 데이터 관리 이해

    JPA EntityManager와 영속성: JPA의 데이터 관리 이해

    엔티티(Entity 객체) 엔티티는 데이터베이스의테이블과 매핑되는 클래스입니다. @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String email; // Getter, Setter, Constructor, Methods... } User 클래스에 `@Entity` 어노테이션을 사용하여 엔티티로 지정해줍니다. 그럼 해당 엔티티는 데이터베이스의 User 테이블과 매핑되며, 객체의 속성과 테이블의 컬럼 간의 매핑이 이루어집니다. JPA 엔티티 매핑 속성 자세히 보기 엔티티 매니저(JPA EntityManager) J..

    JPA: 자바 ORM 표준

    JPA: 자바 ORM 표준

    JPA: 자바 표준의 ORM JPA는 자바 표준의 ORM으로 객체 지향 프로그래밍과 관계형 데이터베이스 간의 간극을 줄이기 위한 기술입니다. 프로그래밍 언어(Java)는 객체지향 언어이고, SQL은 객체지향이 아니기 때문에 객체를 RDB에 저장할 때 개념적으로 불일치가 발생합니다. ORM(Object-Relation Mapping)을 통해 개발자가 클래스를 작성하면 테이블 간의 매핑을 통해 객체를 데이터베이스에 저장하고 조회할 수 있고, 객체 지향적인 방식으로 데이터베이스를 조작할 수가 있습니다. 이를 통해 객체와 데이터베이스 간의 변환 작업도 최소화되며 개발자는 비즈니스 로직에 집중할 수 있게 됩니다. JPA(Java Persistence API)는 ORM의 핵심 원칙을 구현한 Java 표준입니다. 자..