분류 전체보기
-
엔티티, 속성,관계데이터베이스 2021. 5. 2. 14:44
엔티티 엔티티는 사람, 장소, 물건, 사건, 개념 등의 명사에 해당한다. 엔티티는 업무상 관리가 필요한 관심사에 해당한다. 엔티티는 저장이 되기 위한 어떤 것이다. 엔티티란 업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 집합적인 것으로 설명할 수 있다. 또, 엔티티는 업무 활동상 지속적인 관심을 가지고 있어야 하는 대상으로서 그 대상들 간에 동질성을 지닌 인스턴스들이나 그들이 행하는 행위의 집합으로 정의할 수 있다. 엔티티는 그 집합에 속하는 개체들의 특성을 설명할 수 있는 속성을 갖는다. 이러한 속성 가운데는 엔티티 인스턴스 전체가 공유할 수 있는 공통 속성도 있고, 엔티티 인스턴스 중 일부에만 해당하는 개별 속성도 있을 수 있다. 또한 엔티티는 인스턴의 집합이라고 말할 수 있고, 반대로 인스턴..
-
데이터 모델링데이터베이스 2021. 5. 1. 12:27
모델링이란 -복잡한 "현실세계"를 단순화해 표현하는 것 -"현실세계"를 추상화한 반영 -모델이란 사물 또는 사건에 관한 양상(Aspect) 이나 관점(Perspective)을 연관된 사람이나 그룹을 위해 명확하게 하는 것 모델링의 특징 -추상화는 현실세계를 일정한 형식에 맞추어 표현하는 것. -단순화는 복잡한 현실세계를 약속된 규약에 의해 제한된 표기법이나 언어로 표현하여 쉽게 이해할 수 있도록 하는 개념 -명확화는 누구나 이해하기 쉽게 하기 위해 대상에 대한 애매모호함을 제거하고 정확하게 현상을 기술하는 것 모델링의 세가지 관점 -데이터 관점 : 업무가 어떤 데이터와 관련이 있는지 또는 데이터 간의 관계는 무엇인지에 대해 모델링하는 방법(what) -프로세스 관점: 실제하고 있는 업무는 무엇인지 또는 ..
-
JPA > Fetch Join , BatchSizeBackEnd/JPA 2021. 4. 27. 21:18
JPQL 에서 성능 최적화를 위해 제공하는 기능으로, 연관된 엔티티나 컬렉션을 SQL 한번에 함께 조회할 수 있다. (일반 조인 시 연관엔티티를 함께 조회하지 않고, 사용할 때 새로 select 해온다.) select m from Member m join fetch m.team => SELECT M.* , T.* FROM MEMBER M INNER JOIN TEAM T ON M.TEAM_ID=T.ID 즉시 로딩과 유사하게 모든 데이터를 한 번에 Inner Join 으로 가져온다. Fetch Join 에서는 어떤 객체 그래프를 한번에 조회할 것인지 명시한 것이 다르다. 2021.04.25 - [BackEnd/자바&스프링] - JPA > 즉시로딩 , 지연로딩 에서 언급한 N +1 문제를 해결할 수 있는 방법..
-
JPA 경로표현식BackEnd/JPA 2021. 4. 27. 20:43
경로 표현식이란 .(점) 을 찍어 객체 그래프 를 탐색 하는 것을 말한다. 상태 필드, 단일값 연관 필드, 컬렉션값 연관 필드가 있다. 이들은 내부적으로 동작하는 방식, 결과가 달라져 구분해야한다. 특징 탐색 상태 필드 단순히 값만 저장하기 위한 필드 경로 탐색의 끝 x 단일값 연관 필드 연관관계를 위한 필드, 타킷이 엔티티일 때 @ManyToOne, OneToOne 묵시적 내부 조인 o 컬렉션값 연관 필드 컬렉션을 위한 필드 묵시적 내부 조인 x | o(가능) 상태필드 select m.username from Member m 단일값 연관 필드 select m.team from Member m 탐색 -> select m.team.name from Member m select o.member.team fr..
-
JPA > JPQL, 프로젝션BackEnd/JPA 2021. 4. 27. 19:11
JPA 를 사용할 때 EntityManager.find() 를 사용하면 엔티티 하나를 조회할 수 있다. 하지만 특정 조건이 있는 모든 객체를 검색하고자 할 때는 보다 복잡한 검색 방법이 필요하다. JPQL 테이블이 아닌 엔티티 객체를 대상으로 검색하는 객체지향 쿼리 SQL 을 추상화해서 특정 벤더에 의존적이지 않다. JPA 는 JPQL 을 분석해 SQL 을 생성하고 실행한다. JPQL 은 아래와 같은 형태로 작성된다. select m from Member as m where m.age > 18 1. 대소문자 구분 Member 와 age 같은 엔티티와 속성은 대소문자를 구분한다. 2. 엔티티 이름 Member 는 클래스 명이 아니라 엔티티 명이다. 엔티티명은 @Entity(name="") 으로 지정할 수 ..
-
상속보다는 컴포지션을 사용하라 > 이펙티브 자바 아이템18BackEnd/자바 2021. 4. 26. 17:13
HashSet 에 안에 있는 요소를 count 하는 기능을 추가한 InstrumentedHashSet 이라는 클래스를 만들고자 할 때, HashSet 을 상속해서 만들면 어떤 결과를 가져올까 ? public class HashSet extends AbstractSet implements Set, Cloneable, java.io.Serializable { static final long serialVersionUID = -5024744406713321676L; private transient HashMap map; // Dummy value to associate with an Object in the backing Map private static final Object PRESENT = new Obj..
-
JPA > 값 타입BackEnd/JPA 2021. 4. 25. 20:25
JPA 타입을 크게 분류하면 엔티티 타입과 값 타입으로 분류할 수 있다. 엔티티 타입은 식별자를 통해 지속해서 추적할 수 있지만, 값 타입은 식별자가 없고 숫자나 문자같은 속성만 있으므로 추적할 수 없다. 예를 들어 회원 엔티티는 그 회원의 키나 나이 값을 변경해도 같은 회원으로 볼 수 있지만, 값 타입은 추적할 수 없다. JPA 는 기본값 타입, 임베디드 타입, 컬렉션을 값 타입을 가질 수 있다. 모든 값 타입은 값 타입을 소유한 엔티티에 생명 주기를 의존한다. 1. 기본값타입 자바 기본 타입 (Primitive) , Wrapper 클래스 , String 클래스는 JPA 의 기본값 타입이다. Primitive Type 은 복사를 하기 때문에 값이 같이 변경되지 않고, Wrapper 클래스나 String..
-
JPA > 영속성 전이와 고아객체BackEnd/JPA 2021. 4. 25. 18:37
영속성 전이 영속성 전이라는 것은 여러 관련 엔티티가 있을 때, 예를 들면 부모와 자식 엔티티에서 , 부모가 영속성 컨텍스트에 들어갈 때 자식도 함께 관리되는 것을 말한다. 부모에 자식이 여럿 있을 때 부모와 N 개의 자식을 일일이 영속성 관리를 하기 번거로우니 cascade 옵션이라는 것을 통해 한 번에 관리해 줄 수 있다. 귀찮은 일 ! Child child1 = new Child(); Child child2 = new Child(); Parent parent = new Parent(); parent.addChild(child1); parent.addChild(child2); em.persist(parent); em.persist(child1); em.persist(child2); CascadeTyp..