일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 자료형
- C++
- While
- Class
- Fluent-bit
- ansible
- IAC
- MergeSort
- JPA
- For
- SpringBoot Initializr
- jvm
- JavaScript
- quicksort
- redis
- g1gc
- Kotlin
- Sprint Security
- Algorithm
- zgc
- datastructure
- UserDetails
- lambda
- datatype
- If
- 기초
- Java
- 연산자
- Spring Security
- programmers
- Today
- Total
목록Java/JPA (6)
뭐라도 끄적이는 BLOG
SQL 중심적 개발의 문제점 현대적인 애플리케이션을 개발할 때 대부분은 객체지향 언어를 사용한다. 그리고 우리는 데이터를 저장하기 위해 관계형 데이터베이스를 사용한다. NoSQL이 많긴 하더라도 주요 DB는 오라클이나 MySQL과 같은 관계형 데이터베이스를 더 많이 사용한다. DB-Engines Ranking Popularity ranking of database management systems. db-engines.com 이렇다 보니 현재는 객체를 관계형 데이터베이스에 저장해야 되고, 저장한 데이터를 사용하는 것도 관계형 데이터베이스 테이블에서 객체로 불러와야 한다. 여기서 문제점이 발생한다. 관계형 데이터베이스는 SQL만 알아들을 수 있기 때문에 애플리케이션에선 SQL을 만들어서 보내주어야 한다. ..
JPA는? 과거에는 EJB라는 기술표준의 엔티티 빈이라는 ORM기술을 사용했지만 너무 복잡하고 기술 성숙도도 떨어졌으며 자바 엔터프라이즈 애플리케이션(J2EE) 서버에서만 동작한다는 문제점이 있었다. 여기서 ORM(Object-Relational Mapping)은 이름 그대로 객체와 관계형 데이터베이스를 매핑한다는 뜻이다. EJB를 사용하던 한 개발자가 이러한 문제들을 해결하고자 hibernate라는 오픈소스를 탄생시켰다. 이후 EJB3.0부터 하이버네이트를 기반으로 하여 새로운 자바 ORM 기술표준을 만들었는데 이것이 JPA이다. JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준이다. ORM 프레임워크는 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결해 ..
일대일 일대일 관계는 주 테이블이나 대상 테이블 중에 어떤 테이블이던지 외래 키를 가질수 있습니다. 어느 테이블에 외래 키가 들어갈지 선택했다면 해당 외래 키에 데이터베이스 유니크(UNI)제약조건 추가되어야 일대일관계가 됩니다.(굳이 넣지 않아도 되지만 넣지않으면 애플리케이션에서 관리를 아주 잘해야합니다.) 단방향 회원이 사물함을 단 하나 가지고 있다고 생각하겠습니다. 이경우 MEMBER 테이블에 LOCKER_ID를 UNI로 넣어도 되고 반대로 LOCKER테이블에 MEMBER_ID를 UNI로 넣어도 됩니다. 어느경우든 일대일 연관관계가 됩니다. 위 예시는 MEMBER테이블에 LOCKER_ID를 넣고 연관관계를 매핑하 였습니다. MEMBER가 주 테이블이 되고 LOCKER는 대상 테이블이 됩니다. 모양만 ..
연관관계 매핑시 고려사항 3가지 다중성 단방향 양방향 연관관계의 주인 다중성 다대일 (@ManyToOne) 일대다 (@OneToMany) 일대일 (@OneToOne) 다대다 (@ManyToMany) JPA 어노테이션은 DB와 매핑하기 위해 있습니다. 그래서 데이터베이스의 관점으로 기준을 고민하면 됩니다. 다중성을 판단하기 어려울 때는 반대방향에선 어떤 다중성을 가지는지 생각해 보면 됩니다. 대부분 다대일을 많이 사용하게 되며 일대다 일대일이 나오기도 합니다. 하지만 다대다는 정말 나오면 안되는 다중성입니다. 가능한 다른 방법으로 대체해 주는것이 좋습니다. 이번단원은 이전단원에서 이미 다루었던 내용이 나옵니다. 이전장에서 사용했던 연관관계를 정리하는 단원이라고 생각하면 됩니다. 다대일 데이터베이스 테이블의..
양방향 연관관계 이제 팀에서도 회원으로 접근할 수 있도록 양방향 연관관계로 매핑해 보겠습니다. 먼저 객체 연관관계를 살펴보겠습니다. 회원과 팀은 다대일 관계이며 반대로 팀에서 회원은 일대다 관계인 것을 볼 수 있습니다. 일대다 관계는 여러 건과 연관관계를 맺을 수 있으므로 컬렉션을 사용해야 합니다. 그러므로 Team.members를 List 컬렉션으로 추가하였습니다. 데이터베이스 테이블은 이전과 같이 외래 키 하나로 양방향으로 조회할 수 있으므로 추가할 내용은 전혀 없습니다. 양방향 연관관계 매핑 @Entity @Getter @Setter public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = ..
객체가 지향하는 패러다임과 관계형 DB가 지향하는 패러다임이 다르기 때문에 연관관계를 맺는데 어려움이 있습니다. 예를 들어 Member와 Team이 있다면 객체는 Member.getTeam()으로 Team객체를 찾아올 수 있어야 합니다. 하지만 테이블은 이러한 연관관계를 외래키 값을 이용합니다. 이번 연관관계 매핑에서는 이러한 객체와 테이블의 차이를 이해하고 객체의 참조와 테이블의 외래키를 매핑하는 것이 목표입니다. 시작하기 앞서 몇가지 용어를 먼저 알아보고 가겠습니다. 방향(Direction) : [ 단방향, 양방향 ] 한쪽만 참조하는 것을 단방향, 양쪽 모두 서로 참조하는 것을 양방향이라고 합니다. 다중성(Multiplicity) : [ N : 1, 1 : N, 1 : 1, N : N ] 관계형 DB..