4. 회원 도메인 개발
·
Spring/JPA 1
1. SQL vs JPQL sql : 테이블을 대상으로 쿼리 jpql : 엔티티를 대상으로 쿼리 2. 트랜잭션, @Transactional(readOnly = "") 트랜잭션 : 데이터를 추가, 변경할 때 트랜잭션 안에서 실행되어야 한다. @Transactional javax : Java EE에서 제공하는 JTA를 사용하여 트랜잭션 관리 spring : DB 트랜잭션을 관리하는 데 사용 @Transactional(readOnly = true) defalut = "false" readOnly : 트랜잭션에 읽기 전용 모드 설정 → 성능 최적화, DB 변경 방지 *쓰기 작업에서 readOnly = true 로 설정 시, 데이터 수정이 안 된다. 3. 트랜잭션과 영속성 컨텍스트, @Transcational(r..
3. 애플리케이션 구현 준비
·
Spring/JPA 1
애플리케이션 아키텍처 1) 계층형 구조 - controller : 웹 계층, 사용자의 웹 요청(request)을 받아들이고 응답(response)을 제공한다. - service : 비즈니스 로직을 처리하고 트랜잭션을 관리한다. 요구사항을 구현하며, 데이터를 가공하여 도매인 객체를 조작한다. - repository : 데이터베이스와 직접 상호작용 한다. 데이터베이스 연결, 쿼리 작성, 데이터 검색 및 업데이트를 처리한다. 데이터베이스 관련 작업을 추상화 한다. - domain : 엔티티 및 비즈니스 객체가 모여있는 계층이다. 애플리케이션의 핵심 도메인 객체를 정의하고 관리한다. 2) 패키지 구조
8. 프록시와 연관관계 관리
·
Spring/ORM
1. 프록시 1) 프록시 기초 - em.find() vs em.getReference() - em.find() - 데이터베이스를 통해서, 실제 엔티티 객체 조회 - em.getReference() - 데이터베이스 조회를 미루는, 가짜(프록시) 엔티티 객체 조회 2) 프록시 특징 - 실제 클래스를 상속 받아서 만들어짐 → 타입 체크시 주의해야 한다. (== 비교보다는, instance of 사용) - 프록시 객체는 실제 객체의 참조(target)를 보관 - 프록시 객체를 호출하면, 프록시 객체는 실제 객체의 메소드 호출 (프록시 객체에 위임, delegate) - 프록시 객체는 처음 사용할 때, 1번만 초기화 - 프록시 객체를 초기화 할 때, 프록시 객체가 실제 엔티티로 바뀌는 것은 아님. → 프록시 객체..
7. 고급 매핑
·
Spring/ORM
1. 상속관계 매핑 - 관계형 데이터베이스는 상속 관계 X - 슈퍼타입∙서브타입 관계라는 모델링 기법이 객체 상속과 유사 → 객체의 상속관계를, DB의 슈퍼타입 서브타입 관계와 매핑 *슈퍼타입 서브타입 논리 모델을, 실제 물리 모델로 구현하는 방법 관련 어노테이션 @Inheritance(strategy=InheritanceType.---) → 상속관계를 매핑할 때 어떤 전략을 사용할 것인지를 설정하는데 사용한다. →DiscriminatorColumn(name="DTYPE") → 엔티티의 하위 클래스를 구분하는 Column을 지정할 때 사용한다. → 'name' 속성은 데이터베이스 테이블에 추가될 구분 열의 이름을 정의한다. * 실무 운영 상에서 항상 설정하는 것이 좋음. @DiscriminatorValu..
6. 다양한 연관관계 매핑
·
Spring/ORM
1. 연관관계 매핑시 고려사항 3가지 1) 다중성 - 다대일 : @ManyToOne - 일대다 : @OneToMany - 일대일 : @OneToOne - 다대다 : @ManyToMany 2) 단방향, 양방향 - 테이블 - 외래키 하나로 양쪽 join 가능 - 방향이라는 개념이 없음 - 객체 - 참조용 필드가 있는 쪽으로 참조 가능 - 한쪽만 참조하면 단방향 - 양쪽이 서로 참조하면 양방향 3) 연관관계의 주인 - 테이블은 외래키 하나로, 두 테이블이 연관관계를 맺음 - 객체 양방향 관계는 A→B, B→A 처럼 참조가 2군데 둘 중 테이블의 외래키를 관리할 곳을 지정해야 함. - 연관관계의 주인 : 외래키를 관리하는 참조 - 연관관계의 손님(?) : 외래키에 영향을 주지 않음, 단순 조회만 가능 2. 다대..
5. 연관관계 매핑 기초
·
Spring/ORM
*연관관계가 필요한 이유 테이블은 외래 키로 join을 사용해서 연관된 테이블을 찾는다. 객체는 참조를 사용해서 연관된 객체를 찾는다. → 이러한 차이를 해소하기 위해, "각 entity 간의 연관관계 매핑"을 통해 해결해야 한다. 1. 단방향 연관관계 2. 양방향 연관관계, 그리고 연관관계의 주인 손님(?) Entity에서, 주인 객체의 조회가 필요할 경우 / 양방향 연관관계를 설정한다. 주인 Entity에서만 수정 및 삭제를 할 수 있으며, 다른 손님 Entity에서는 조회만 할 수 있다. → 실제로는 서로 다른 단방향 관계 2개이다. - mappedBy - 객체의 두 관계중 하나를 연관관계의 주인으로 지정 - 연관관계의 주인만이 외래키(FK)를 관리 (등록, 수정) - 주인이 아닌쪽은 읽기만 가능 ..