Spring 141

[자바 ORM 표준 JPA 프로그래밍] 7. 고급 매핑

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. 상속 관계 매핑데이터베이스의 슈퍼타입-서브타입 논리를 테이블로 구현 전략특징Joined StrategySingle Table StrategyTable Per Class Strategy테이블 구조부모와 자식 클래스 각각의 테이블모든 엔티티를 하나의 테이블에 저장자식 클래스마다 별도의 테이블을 생성쿼리 속도느림 (조인 필요)빠름 (조인 불필요)느림 (조인 필요)정규화✅ (테이블 정규화)❌ (모든 컬럼이 하나의 테이블에 포함)✅ (자식 테이블별로 별도 관리)테이블 크기작음큼중간컬럼 제약외래키로 관리자식 클래스마다 DTYPE 컬럼 사용모든 컬럼 nullable각 자식 테이블마다 not null 제약 가능외래키 제약✅ ❌❌ 어노..

[자바 ORM 표준 JPA 프로그래밍] 6. 다양한 연관관계 매핑

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. 다대일 & 일대다구분다대일일대다다대일 + 일대다관계 방향단방향 (N → 1)단방향 (1 → N)양방향 (N → 1 + 1 → N)설명여러 개의 엔티티가 하나의 엔티티 참조하나의 엔티티가 여러 개의 엔티티 참조서로 참조 (객체 탐색 유리)외래 키 위치N쪽N쪽N쪽연관관계 주인N쪽N쪽N쪽장점구조가 단순하고 성능에 유리함구조가 단순하고 성능에 유리함객체 그래프 탐색 유리비즈니스 로직 구현 용이단점INSERT시 외래 키 직접 관리 필요INSERT시 외래 키 직접 관리 필요연관관계 주인 설정 필요객체간 참조 유지 필수사용 예단순 조회트랜잭션 설계가 명확한 경우복잡한 비즈니스 로직객체 탐색이 자주 필요한 경우복잡한 비즈니스 로직객체..

[자바 ORM 표준 JPA 프로그래밍] 5. 연관관계 매핑 기초

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. 연관 관계 매핑구분설명방향성비고객체 연관 관계참조를 통해 연관관계 표현(참조에 의해 객체 그래프 탐색)단방향A → B (B는 A를 모름)객체 그래프 탐색 제한테이블 연관 관계외래키를 통해 연관관계 표현(조인을 통해 연관 테이블 조회)양방향A ↔ B (서로 참조)무한 루프 주의 어노테이션항목설명기본값@JoinColumn외래키 설정 (조인 시 사용)-- name외래키 컬럼 이름-- referencedColumnName외래키가 참조하는 컬럼명 (기본값: 참조하는 엔티티의 기본 키)-- foreignKey외래키 제약조건 (테이블 생성 시에만 적용됨)-@ManyToOne다대일 관계 설정-- optional관련 엔티티가 존재하는지..

[자바 ORM 표준 JPA 프로그래밍] 4. 엔티티 매핑

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. 엔티티 매핑어노테이션설명주요 속성 및 주의사항@Entity테이블과 매핑할 엔티티 지정- 기본 생성자 필수- final class, inner class 불가- enum, interface 불가@Table엔티티와 매핑할 테이블 지정 (생략 시 클래스명)-- name: 테이블명-- schema, catalog: 스키마/카탈로그-- uniqueConstraints: 유니크 제약조건@IdPK 매핑- 필수 지정- 단독으로 사용할 경우 사용자가 직접 할당해야 함- @GeneratedValuePK 자동 할당- 대리키 사용 (DB 벤더에 위임)GenerationType-- AUTO: 현재 DB에 적합한 키 생성 전략을 자동으로 선택-..

[자바 ORM 표준 JPA 프로그래밍] 3. 영속성 관리

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. 영속성 컨텍스트엔티티 객체의 영속화 작업을 관리하는 작업 영역1차 캐시, 해당 엔티티 관련 내부 쿼리 저장소 역할역할설명엔티티 상태 관리엔티티를 데이터베이스와 동기화함 (EntityManager에 의해 관리됨)트랜잭션 범위영속성 컨텍스트는 트랜잭션 단위로 엔티티를 관리- 트랜잭션이 시작되면 활성화되고, 종료 시 커밋 또는 롤백됨캐시 기능이미 로드된 엔티티는 다시 데이터베이스 조회 없이 재사용됨. 동작동작설명자동 플러시트랜잭션 커밋 전에 영속성 컨텍스트에서 변경된 데이터를 자동으로 데이터베이스에 반영.수동 플러시영속성 컨텍스트의 변경 사항을 강제로 데이터베이스에 반영. (entityManager.flush()) 예제) 자..

[자바 ORM 표준 JPA 프로그래밍] 2. JPA 시작

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. 컴포넌트컴포넌트역할특징주의사항 및 사용 방식EntityManagerFactory- Connection Pool 생성 및 관리- EntityManager 인스턴스 생성- 생성 비용 높음 (Singleton으로 관리)- 앱 실행 시 한 번만 생성- 전역으로 공유EntityManager- DB 통신- 쿼리 실행 (JPQL 사용)- 커넥션 획득 (DataSource 사용)- 스레드 안전하지 않음- 요청마다 생성 또는 주입- 스레드 간 공유 금지EntityTransaction- 트랜잭션 처리 담당- EntityManager를 통해 획득- 트랜잭션 범위 안에서만 DB 작업 가능- begin() → 작업 → commit() or r..

[자바 ORM 표준 JPA 프로그래밍] 1. JPA 소개

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. SQL을 직접 다룰 때 발생하는 문제점문제점내용SQL 의존 개발- 강한 의존 관계 (SQL 쿼리 ↔️ Java 객체)- 유지 보수 어려움 (쿼리 결과 ↔️ 엔티티 필드 일치 필수)- 계층 분리 어려움SQL Mapper 개발- 개발 효율성 저하 (반복되는 보일러플레이트 코드: JDBC API) 예제) SQL Mapper 개발더보기// JDBC 연결 정보String url = "jdbc:mysql://localhost:3306/mydatabase";String username = "root";String password = "password";// 데이터베이스 연결 및 쿼리 실행try (Connection connectio..

[Spring Data JPA] 2-2. Transactionality

1. 기본 트랜잭션 설정SimpleJpaRepositoryCrudRepository의 실제 구현체CRUD 메서드의 트랜잭션 설정 담당읽기 작업의 경우, 트랜잭션 설정의 readOnly 플래그는 true로 설정됩니다.그 외의 모든 작업은 @Transactional로 설정됩니다. (기본 트랜잭션 설정이 적용되도록) 2. 트랜잭션 설정 커스터마이징특정 저장소 메서드의 트랜잭션 설정 조정Method Override (+@Transactional 설정)더보기public interface UserRepository extends CrudRepository { @Override @Transactional(timeout = 10) public List findAll(); // Further query metho..

[Spring Data JPA] 2-1. Configuration

1. Annotation-based ConfigurationJPA를 사용하기 위한 주요 구성 요소를 어노테이션으로 정의합니다.구성 요소설명@EnableJpaRepositoriesSpring Data JPA의 리포지토리를 스캔하여 활성화하는 어노테이션.Repository 인터페이스에 대한 구현체를 프록시 형태로 제공EntityManagerFactoryEntityManager 인스턴스를 생성하고 관리- JPA 구현체 생성 시 사용하는 기본 인터페이스.- LocalContainerEntityManagerFactoryBeanEntityManagerFactory를 설정하고 관리- Spring과 JPA를 통합 (Spring 예외 처리 통합)JpaTransactionManagerEntityManager와 통합하여 트..

[Spring Data JPA] 1. Core concepts

1. Repository 인터페이스Spring Data의 중심 인터페이스입니다.개념설명마커 인터페이스- 객체의 특정 성질을 표시하기 위해 사용- 타입 정보만을 포착하고 식별하는 데 사용 (메서드 정의 ❌)쿼리 메서드 자동 생성메서드 이름을 분석하여 자동으로 적절한 쿼리를 생성해줌Spring Data JPASpring Data JPA는 Repository 인터페이스를 자동으로 구현하여 CRUD 작업을 제공합니다. 코드) Repository더보기@Indexedpublic interface Repository { } 타입 인자T: 도메인 클래스ID: 도메인 클래스의 식별자 타입 예제) 쿼리 메서드 자동 생성더보기interface UserRepository extends CrudRepository { l..