본문 바로가기

Back-End33

[JPA] 자바 ORM 표준 JPA 프로그래밍_6장 6장 다양한 연관관계 매핑 ∘ 엔티티의 연관관계를 매핑할 때 고려할 것 - 다중성 : 다대일, 일대다, 일대일, 다대다 - 단방향, 양방향 - 연관관계의 주인 : 외래 키 6.1 다대일 ∘ 데이터베이스 테이블의 일, 다 관계에서 외래 키는 항상 다쪽에 있음 ⇒ 연관관계의 주인은 다쪽 6.1.1 다대일 단방향 [N:1] ∘ 회원은 팀 참조 가능 & 팀은 회원 참조 불가능 ⇒ 다대일 단방향 ∘ @JoinColumn으로 외래키 관리 6.1.2 다대일 양방향 [N:1, 1:N] ∘ 양방향은 외래 키가 있는 쪽이 연관관계의 주인 - 주인이 아닌 필드는 조회와 객체 그래프 탐색에 사용됨 ∘ 양방향 연관관계는 항상 서로를 참조함 - 편의 메소드 작성 - 양쪽에 편의 메소드를 작성하는 경우 무한루프에 빠지지 않도록 주.. 2023. 6. 20.
[JPA] 자바 ORM 표준 JPA 프로그래밍_5장 5장 연관관계 매핑 기초 ∘ 대부분의 엔티티는 다른 엔티티들과 연관관계를 가짐 ∘ 객체 관계 매핑(ORM) ∘ 객체는 참조를 이용해서 관계를 맺음 ∘ 테이블은 외래 키를 사용해서 관계를 맺음 ∘ 연관관계 매핑 - 방향 : 단방향, 양방향 - 다중성 : 다대일, 일대다, 일대일, 다대다 - 연관관계의 주인 5.1 단방향 연관관계 객체 테이블 참조로 연관관계를 맺음 외래 키로 연관관계를 맺음 참조를 사용하는 연관관계는 단방향 외래 키를 사용하는 연관관계는 양방향 양방향 연관관계를 만들려면 단뱡향 2개 필요 5.1.1 순수한 객체 연관관계 ∘ 객체 그래프 탐색 : 객체는 참조를 사용해서 연관관계 탐색 가능 5.1.2 테이블 연관관계 ∘ 조인 : 데이터베이스는 외래 키를 사용해서 연관관계 탐색 가능 5.1.3 .. 2023. 6. 5.
[JPA] 자바 ORM 표준 JPA 프로그래밍_4장 4장 엔티티 매핑 ∘ JPA를 사용할 때 엔티티와 테이블을 정확히 매핑하는 것이 중요 ∘ JPA가 지원하는 매핑 어노테이션 - 객체와 테이블 매핑 : @Enity, @Table - 기본 키 매핑 : @Id - 필드와 컬럼 매핑 : @Column - 연관관계 매핑 : @ManyToOne, @JoinColumn 4.1 @Entity ∘ JPA를 사용해서 테이블과 매핑할 클래스에 붙임 ∘ JPA가 관리하는 엔티티 ∘ 속성 : name ∘ 주의사항 - 기본 생성자가 있어야 됨 : JPA가 엔티티 객체를 생성할 때 기본 생성자를 사용하기 때문 - final 클래스, enum, interface, inner 클래스에 사용할 수 없음 - 저장할 필드에 final을 사용하면 안 됨 4.2 @Table ∘ 엔티티와 매핑.. 2023. 5. 29.
[JPA] 자바 ORM 표준 JPA 프로그래밍_3장 3장 영속성 관리 ∘ 엔티티 매니저 : 엔티티를 저장, 수정, 삭제, 조회하는 등 엔티티와 관련된 모든 일을 처리함 ∘ '엔티티 매니저 = 엔티티를 저장하는 가상의 데이터베이스'라고 생각하면 됨 3.1 엔티티 매니저 팩토리와 엔티티 매니저 ∘ 엔티티 매니저 팩토리 생성 코드 EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); ∘ 엔티티 매니저 팩토리에서 엔티티 매니저 생성 EntityManager em = emf.createEntityManager(); ∘ 엔티티 매니저 팩토리 : 엔티티 매니저를 만드는 공장 - 엔티티 매니저 팩토리를 생성하는 데 드는 비용이 크기 때문에 애플리케이션 당 1개만 만들어서 공유해서 사용.. 2023. 5. 29.
[JPA] 자바 ORM 표준 JPA 프로그래밍_1장 1장 JPA 소개 ∘ 객체 지향의 장점을 포기하고 단순히 테이블에 맞추어 데이터 전달 역할만 하도록 개발하는지 의문 ∘ 객체와 관례형 데이터베이스의 차이(패러다임의 차이. 둘은 다른 역할을 가지니까.)로 인해 객체 모델이 데이터 중심의 모델로 바뀌었음 ∘ ORM(Object Relational Mapping) 프레임워크 : 객체와 관계형 데이터베이스 간의 차이를 중간에서 해결해줌 ∘ JPA : 자바 진영의 ORM 기술 표준 - CRUD SQL을 알아서 처리해줌 - 객체 모델링과 관계형 데이터베이스 사이의 차이점 해결 - 실행 시점에 자동으로 SQL을 만들어서 실행 - 조회된 결과를 객체로 매핑하는 작업도 대부분 자동으로 처리해줌 - 객체 중심으로 개발 ⇒ 생산성 향상, 유지보수 용이 - 데이터베이스 변경.. 2023. 5. 20.
[DDD] 도메인 주도 개발 시작하기_Ch11 Chapter 11 CQRS 11.1 단일 모델의 단점 주문 내역 조회 기능을 구현하려면 여러 애그리거트에서 데이터를 가져와야 됨 조회 기능을 구현할 때 식별자를 이용해서 애그리거트를 참조하면 즉시 로딩과 같은 JPA의 쿼리 관련 최적화 기능을 사용할 수 없음. 직접 참조하더라도 조회 화면 특성에 따라 같은 연관도 즉시 로딩이나 지연 로딩으로 처리해야 되므로 고민해야 됨. 이러한 문제는 시스템 상태를 변경할 때와 조회할 때 단일 도메인 모델을 사용하기 때문 이런 상황에서 구현 복잡도를 낮추려면 상태 변경을 위한 모델과 조회를 위한 모델을 분리하면 됨 11.2 CQRS 시스템이 제공하는 기능 : 상태를 변경하는 기능, 사용자 입장에서 상태 정보를 조회하는 기능 도메인 모델 관점에서 상태 변경 기능은 주로 .. 2023. 5. 8.
[DDD] 도메인 주도 개발 시작하기_Ch10 Chapter 10 이벤트 10.1 시스템 간 강결합 문제 외부 시스템의 서비스를 호출할 때의 문제 - 외부 서비스가 정상이 아닐 때 트랜잭션 처리가 애매함 - 트랜잭션을 롤백할지 말지 - 외부 서비스의 성능에 직접적인 영향을 받음 - 설계상 서로 다른 로직이 섞일 수 있음 컨텍스트 간의 강결합이 있으면 결합된 컨텍스트끼리 영향을 주고받게 됨 이벤트를 사용하면 강결합 제거 가능 10.2 이벤트 개요 이벤트 : 과거에 벌어진 어떤 것. 상태가 변경됐음을 의미. 이벤트가 발생하면 그에 따른 동작이 수행됨 10.2.1 이벤트 관련 구성요소 이벤트 도입을 위해서는 이벤트, 이벤트 생성 주체, 이벤트 디스패처(퍼블리셔), 이벤트 핸들러(구독자)를 구현해야 됨 - 이벤트 생성 주체 : 엔티티, 밸류, 도메인 서비스.. 2023. 5. 8.
[DDD] 도메인 주도 개발 시작하기_Ch8 Chapter 8 애그리거트 트랜잭션 관리 8.1 애그리거트와 트랜잭션 ∘ 운영자는 상품의 배송 상태를 바꾸고, 동시에 고객은 배송지 정보를 바꿈. 서로 다른 애그리거트 객체를 이용하지만 트랜잭션 커밋할 때 두 정보가 다 바뀜 → 애그리거트의 일관성이 깨짐 ∘ 애그리거트 트랜잭션 처리 방식에는 선점 잠금과 비선점 잠금이 있음 8.2 선점 잠금 선점 잠금 : 먼저 애그리거트를 구한 스레드가 애그리거트 사용이 끝날 때까지 다른 스레드가 해당 애그리거트를 수정하지 못하게 블로킹 먼저 애그리거트를 사용하던 스레드가 수행하고 트랜잭션을 커밋하면 잠금이 해제됨 데이터 충돌 문제 해결 가능 선점 잠금은 보통 DBMS가 제공하는 행단위 잠금을 사용해서 구현함 JPA 프로바이더와 DBMS에 따라 잠금 모드 구현이 다름 .. 2023. 4. 2.