728x90

전체 글 362

@JoinTable

조인 테이블은 주로 다대다 관계를 일대다, 다대일 관계로 풀어내기 위해 사용한다. 그렇지만 일대일, 일대다, 다대일 관계에서도 사용한다. 속성 기능 name 연결 테이블의 이름 joinColumns 현재 엔티티를 참조하는 외래키 inverserJoinColumns 반대 방향 엔티티를 참조하는 외래 키 일대일 조인 테이블 만일 이런 구조를 고민하고 있다면 Child를 연관관계의 주인으로 만들자. @Entity public class Parent { @Id @GeneratedValue @Column(name = "PARENT_ID") private Long id; private String name; @OneToOne @JoinTable(name = "PARENT_CHILD", joinColumns = @J..

JVM/JPA 2023.06.19

Session Manger 를 이용하여 EC2에 연결하기

AWS Systems Manager에서는 Session Manager라는 기능을 제공하는데 사전에 SSM-Agent가 설치된 EC2 SSH를 연결할 수 있는 기능을 제공한다. Session Manager를 사용하기 위해서는 EC2와 IAM, 그리고 로컬 컴퓨터에 각각의 준비가 되어있어야 한다. SSM 특징 인바운드 포트를 열거나 SSH 키를 관리할 필요 없이 관리형 인스턴스에 안전하게 연결한다. Bastion Host 나 Key Pair 가 필요 없다. SSH가 아닌 HTTP를 사용하여 접속이 가능하다. 선택한 목적 또는 활동에 따라 AWS 리소스를 그룹화하여 중앙 집중식 관리가 가능하다. 주의 인터넷으로 아웃바운드 허용해주어야 한다. 퍼블릭 IP가 필요 없다고 하지만 퍼블릭 IP가 없으면 연결할 수 없..

DevOps/AWS 2023.06.18

AWS Aurora DB

AWS가 MySQL 및 PostgreSQL을 호환해서 만든 RDBMS로 RDS와는 다른 AWS만의 RDBMS로 기존 소스들을 AWS에 맞게 고쳐서 만들어졌다. 특징 성능 오로라는 기존의 MySQL과 PostgreSQL 데이터베이스보다 뛰어난 성능을 제공합니다. 오로라는 분산 스토리지 및 복제 기능을 활용하여 처리량과 응답 시간을 향상시킵니다. 또한 자동 스케일링 기능을 통해 워크로드의 요구에 따라 자동으로 리소스를 조정할 수 있습니다. 확장성 오로라는 수평 및 수직 확장이 가능합니다. 수평 확장을 통해 여러 개의 인스턴스를 사용하여 데이터베이스 처리 능력을 증가시킬 수 있으며, 수직 확장을 통해 인스턴스 유형을 업그레이드하여 더 많은 리소스를 할당할 수 있습니다. 내구성 오로라는 데이터를 여러 가용 영역..

DevOps/AWS 2023.06.18

@MapsId

일대일 식별 관계에서 부모의 PK를 자식의 PK로 사용할 때 사용된다. @MapsId 는 FK와 매핑한 연관관계를 PK 에도 매핑하겠다는 뜻이다. 예제 코드 @Entity public class Board { @Id @GeneratedValue @Column(name = "BOARD_ID") private Long id; private String title; @OneToOne(mappedBy = "board") private BoardDetail boardDetail; } @Entity public class BoardDetail { @Id private Long boardId; @MapsId // BoardDetail.boardId 매핑 @OneToOne @JoinColumn(name = "BOARD..

JVM/JPA 2023.06.18

@MappedSuperclass

부모 클래스는 테이블과 매핑하지 않고 부모 클래스를 상속받는 자식 클래스에게 매핑 정보만 제공하고 싶을 때 사용한다. 등록일자, 수정일자, 등록자, 수정자 같은 여러 엔티티에서 공통으로 사용하는 속성을 효과적으로 관리할 수 있다. 테이블 엔티티 @MappedSuperclass public abstract class BaseEntity { @Id @GeneratedValue private Long id; private String name; } @Entity public class Member extends BaseEntity { private String email; } @Entity public class Seller extends BaseEntity { private String shopName; }..

JVM/JPA 2023.06.17

상속 관계 매핑 (슈퍼-서브 타입 모델링)

사용되는 어노테이션 어노테이션 설명 @Inheritance 상속 매핑은 부모 클래스에 @Inheritance를 사용해야 한다. @DiscriminatorColumn 부모 클래스에 구분 컬럼을 지정한다. 이 컬럼으로 저장된 자식 테이블을 구분할 수 있다. 기본값은 DTYPE이다. @DiscriminatorValue 엔티티를 저장할 때 구분 컬럼에 입력할 값을 지정한다. 만약 영화 엔티티를 저장하면 구분 컬럼인 DTYPE에 값 M이 저장된다. 지정하지 않으면 엔티티 이름을 사용한다. @PrimaryKeyJoinColumn 기본값으로 자식 테이블은 부모의 PK 컬럼명을 사용한다. 자식 테이블의 PK 컬럼명을 변경하고 싶을때 사용한다. 조인 전략 각각을 모두 테이블로 만들고 조회할 때 조인을 사용한다. 장점 단..

JVM/JPA 2023.06.17

복합키 매핑 @IdClass, @EmbeddedId

복합 키를 사용하기 위한 식별자 클래스를 지정하는 데 사용한다. 특징 Serializable을 구현해야 한다. equals와 hashCode 메소드를 구현해야 한다. 기본 생성자가 있어야 한다. 식별자 클래스는 public이어야 한다. 복합 키에는 @GenerateValue를 사용할 수 없다. 복합 키를 구성하는 여러 컬럼 중 하나에도 사용할 수 없다. 아래 두 예제 코드는 식별 관계를 예로 들고 있다. 매핑도 쉽고 코드도 단순하고 복합 키도 필요 없는 비식별 관계를 사용하자. 그럴듯 해 보이는 것이 항상 문제를 만든다. @IdClass @Entity @IdClass(OrderID.class) public class Order { @Id @ManyToOne @JoinColumn(name = "MEMBER..

JVM/JPA 2023.06.16

@ManyToMany

다대다 관계를 나타내는 데 사용한다. RDBMS 에서는 다대다 관계를 풀어내기 위해 @JoinTable 을 사용한다. 속성 기능 기본값 mappedBy 엔티티의 PK가 FK로 사용되고 있는 테이블의 필드명을 지정한다. 연관관계의 주인이 아니라는 설정이기도 하다.. cascade 영속성 전이 기능을 사용한다. 전파하지 않는다. fetch 글로벌 페치 전략을 설정한다. targetEntity 연관된 엔티티의 타입 정보를 설정한다. 다대다 단방 예제 코드 @Entity public class Member { @Id @Column(name = "MEMBER_ID") private String id; @ManyToMany @JoinTable(name = "MEMBER_PRODUCT", joinColumns = @..

JVM/JPA 2023.06.16

@OneToOne

일대일 관계를 나타내는 데 사용한다. 속성 기능 기본값 mappedBy 엔티티의 PK가 FK로 사용되고 있는 테이블의 필드명을 지정한다. 연관관계의 주인이 아니라는 설정이기도 하다.. 양방향 예제 코드 @Entity public class Member { @Id @GeneratedValue() @Column(name = "MEMBER_ID") private String id; @OneToOne(mappedBy = "member") private Locker locker; } @Entity class Locker { @Id @GeneratedValue() @Column(name = "LOCKER_ID") private String id; @OneToOne @JoinColumn(name = "MEMBER_I..

JVM/JPA 2023.06.16

@OneToMany

일대다 관계를 나타내는데 사용다. 데이터베이스 테이블의 다대일, 일대다 관계에서는 항상 다 쪽이 외래 키를 가진다. JPA에서는 외래키를 가지고 있는 엔티티가 연관관계의 주인이라고 하며 외래키를 관리한다. 주인이 아닌 반대편은 읽기만 가능하고 외래키를 변경하지는 못한다. 속성 기능 기본값 mappedBy 엔티티의 PK가 FK로 사용되고 있는 테이블의 필드명을 지정한다. 연관관계의 주인이 아니라는 설정이기도 하다. 양방향 매핑이 아닌 일대다 단방향 매핑일 경우 필드 위에 @JoinColumn을 명시해야한다. 그렇지 않으면 JPA는 조인 테이블 전략을 기본으로 사용해서 매핑한다. 일대다 단방향 매핑은 객체가 관리하는 외래 키가 다른 테이블에 있기 때문에 성능 문제와 관리의 부담이 있다. 일대다 단방향 매핑 ..

JVM/JPA 2023.06.12
728x90