본문 바로가기

Back-end/JPA 개념48

11. 연관 관계의 종류(일대일, 다대다) 0. 개요 - 이전 포스팅에 이어서 연관 관계의 종류에 대해서 알아보자. 1. 일대일(1:1, OneToOne) 관계 a) 일대일 연관 관계란 - 일대일 관계는 그 반대도 일대일 관계다. - 일대일 관계의 경우, 주 테이블 또는 대상 테이블 중 한쪽에서 FK를 관리한다. - 즉, 연관 관계의 주인을 선택하는 과정이 자유롭다. - 다만, DB에서 FK에 유니크(UNIQ) 제약조건이 추가되어야 한다. * 알아두자! - UNIQUE 제약 조건이란, 해당 칼럼에 들어가는 값(value)이 고유 값이어야 한다는 제약이다. - 즉, 중복 값이 존재하지 않는다. b) 일대일 관계의 예시 - 예를 들어, 선수 1명당 1개의 라커를 할당받는다는 규칙을 테이블로 구현하면 다음과 같다. - 이를 객체로 구현하면 다음과 같다.. 2022. 4. 5.
10. 연관 관계의 종류(일대다, 다대일) 0. 개요 - 이번 포스팅에서는 다양한 연관 관계의 종류에 대해서 알아보도록 하자. a) 연관 관계의 종류 - 연관 관계에는 다음과 같은 종류가 있다. → 다대일(N:1, @ManyToOne) → 일대다(1:N, @OneToMany) → 일대일(1:1, @OneToOne) → 다대다(N:N, @ManyToMany) - 위의 4가지 형태의 연관 관계에 대하여 알아보도록 하자. 1. 연관 관계 매핑 시 고려사항 a) 다중성 - 위에서 4가지 종류의 연관 관계가 있다는 것을 알았다. - 이 연관 관계를 매핑할 때에는 다중성을 고려해야 하는데, 다중성이란 다음과 같다. ex) 하나의 주문이 여러 개의 아이템을 가지는 관계 ex) 하나의 팀이 여러 명의 선수를 가지는 관계 - 이처럼 연관 관계의 대상이 다수의 데.. 2022. 4. 4.
9. 양방향 연관 관계 사용 시 주의사항 0. 개요 - 이전 포스팅에서 JPA를 이용한 양방향 연관 관계를 구현하는 방법에 대해 알아보았다. - 이번 포스팅은 양방향 연관 관계를 구현할 때 자주 실수하는 부분에 대해서 알아보자. * 이전 포스팅과 이어지는 내용입니다! 1. 연관 관계의 주인만 FK의 값을 생성할 수 있다. a) 예시 코드 - 양방향 매핑을 구현하면 mappedBy 옵션을 사용하여 연관 관계의 주인을 명시한다. - 이로써 JPA에서도 FK처럼 작동한다고 판단하여 자주 하는 실수 중 하나이다. - 다음 코드 예시를 살펴보자. - 우선 선수 객체(player1)를 만들었다. - 그리고 팀 객체(team)를 만들었다. - team 객체를 이용하여 앞서 만들었던 선수 객체를 저장하였다. - 이 코드는 올바르게 작동할까? - 위의 결과처럼.. 2022. 4. 1.
8. 양방향 연관 관계의 기본 개념 0. 개요 - 이번 포스팅은 양방향 연관 관계에 대해 알아보도록 하자. 1. 양방향 연관 관계 - 단방향 연관 관계에서 사용했던 예시를 확장하여 양방향 연관 관계로 만들어보자. a) 관계 예시 - 구현하려는 양방향 연관 관계는 아래의 테이블과 같다. - 이전 포스팅에서 단방향 연관 관계를 설명할 때의 구조와 동일한 테이블 구조다. - 분명 양방향 연관 관계를 구현한다고 했으나 왜 동일한 테이블을 사용할까? - 그 이유는 RDB는 FK를 이용한 Join으로 양방향 연관 관계를 형성한다. - 즉, RDB는 양방향 연관 관계를 기본으로 한다. - 다만 객체의 관점에서 보았을 때 연관 관계의 방향성이 유의미하다. b) 양방향 연관 관계란? - 위의 테이블 구조를 예시로 생각해보자. - Player 테이블의 FK.. 2022. 3. 31.
7. 단방향 연관 관계 0. 개요 - 이전 포스팅에서 DB의 Table을 하나의 Entity(= 객체)로 표현하는 방법에 대해서 배웠다. - 다양한 어노테이션과 옵션을 사용하여 테이블의 Column과 Entity의 필드를 매핑하였고, primary key를 설정하는 방법까지 알아보았다. - 이처럼 Table을 Entity로 표현하는 방법에 대해 알아보았지만, 아직 완전하다고 할 수 없다. - 왜냐면 객체 지향과 RDB의 근본적인 차이를 해결하지 못했기 때문이다. 1. 근본적인 문제 - 객체 지향과 RDB의 근본적인 문제는 관계를 표현하는 방식에 있다. - 객체 지향은 참조 또는 상속을 통해 관계를 형성한다. - RDB에서는 외래 키(= Foreign key)를 통해 관계를 형성한다. - 이처럼 관계를 표현하는 방식이 다르므로,.. 2022. 3. 30.
6. Primary key(기본 키) Mapping 0. 개요 - 이전 포스팅에서 Field와 Column을 매핑하는 방법을 배웠다. - 이번 포스팅에서는 DB에 존재하는 기본 키(= Primary key, PK)를 매핑하는 방법에 대해서 배워보자. 1. Annotation - PK 매핑에 필요한 Annotation을 알아보자. a) @Id - DB의 PK를 명시하기 위해서, Entity의 field에 @Id를 부착한다. - @Id는 PK의 값을 직접 할당하는 경우에 사용한다. @Entity public class Member { @Id private Long id; @Column(name = "name") private String username; } b) @GeneratedValue - PK의 값을 직접 할당하지 않고 DB에게 값 할당의 권한을 넘기.. 2022. 3. 29.
5. Field(칼럼) Mapping 0. 개요 - 이전 포스팅에서 Entitty와 DB Table을 매핑하는 방법에 대해서 알아보았다. - 이번 포스팅에서는 Field와 DB Column을 매핑하는 방법에 대해서 알아보자. 1. Annotation - Field Mapping에 사용되는 기본적인 Annotation에 대해서 알아보자. a) @Column - DB 테이블의 Column을 Entity 필드로 매핑할 때 사용한다. - Enitity 변수와 Column의 이름이 다르다면, @Column의 name 속성을 이용하여 DB의 Column을 명시한다. @Entity public class User { @Column(name = "fullName") private string userName; } b) @Enumerated - Entity.. 2022. 3. 28.
4. Entity Mapping 0. 개요 - 이번 포스팅에서는 JPA의 가장 기본이 되는 Entity Mapping에 대해서 알아보자. 1. Entity Mapping - DB의 테이블을 Java 클래스로 표현한 것을 Entity라고 한다. - JPA는 이 Entity 객체를 이용하여 DB에게 데이터를 전달하거나, DB로부터 가져온 데이터를 담는다. - 즉, DB 테이블의 내용(column)이 일대일 대응하도록, Java 클래스로 구현한 것이다. 2. Entity Mapping을 위한 Annotation a) @Entity - @Entity가 붙은 클래스는 JPA가 관리하는 Entity이다. - 그러므로 테이블과 매핑할 클래스는 반드시 @Entity를 부착해야 한다. - @Entity 사용에 대해 몇 가지 주의사항이 있다. → 기본 .. 2022. 3. 25.
3. JPA의 내부구조와 동작 0. 개요 - 이전 포스팅에서 기본적인 JPA의 구조에 대해서 알아보았다. - 이번 포스팅에서는 JPA가 왜 이러한 기본구조를 갖는지, 그 내부구조와 동작은 어떻게 되는지 알아보자. 1. JPA의 핵심 - JPA는 OOP와 RDB의 관계 표현 형식을 서로가 이해할 수 있도록 매핑하는 것이 주요 기능이다. - 즉, OOP 형식으로 짜인 Java 코드를 RDB가 이해할 수 있는 형식으로 번역되어야 한다. - 그러므로 이를 위해서는 다음 2가지를 구현해야 된다. → 객체를 이용한 RDB 형식의 매핑(= 구조적 특징) → 객체를 이용한 RDB 매핑을 가능하게 하는 내부구조 및 흐름(= 내부 동작 원리) - 위의 2가지 특징을 JPA에서는 어떻게 구현하는지 차근차근 알아보자. 2. Persistence Conte.. 2022. 3. 24.