일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 활성프로브
- 디자인 패턴
- MaxRAMPercentage
- K8s
- ManyToOne
- OneToOne
- JDK
- dirty check
- 종료코드
- ManyToMany
- SpringBoot
- OracleJDK
- 다중 데이타소스
- mybatis
- Design Pattern
- exit code
- OneToMany
- Java
- Entity
- 영속화
- 다중 트랜잭션
- 트랜잭션 쓰기 지연
- JPA
- Multi Transaction
- 변경 감지
- openjdk
- Multi Datasource
- docker
- SpringBoot 2.0
- chroot exit code
- Today
- Total
목록JPA (9)
조금 평범한 개발 이야기
개요 mybatis 와 같은 query template 엔진이 아니라 JPA 와 같은 ORM 을 사용하다 보면 기대하는 영속화 (DB 에 값을 쓰는) 시점과 실제 영속화 시점이 달라 당황 할 수 있습니다. 이것은 JPA 가 값 (Entity) 을 관리하는 방식이 조금 차이가 있기 때문 입니다. 이 문서에서는 JPA 에서 영속화 하는 시점에 대해서 설명하고 있습니다. 영속성 컨텍스트(Persistence Context) JPA 의 영속화에 대해 알아보기 위해선 가장 먼저 영속성 컨텍스트에 대해 이해해야 합니다. 자바는 OOP 개념을 가지고 데이터를 객체처럼 관리 하고 데이터베이스(RDB) 는 관계형으로 데이터를 관리 합니다. 그래서 이 간극을 매우기 위해 ORM 이라는 개념이 등장 했습니다. ORM 에서는..
앞서 JPA 관련된 이야기를 할때 JPA 와 Mybatis 를 비교하면서 서로의 장점과 단점에 대한 이야기를 나눈 적이 있습니다. 그때 JPA 를 사용함으로써 얻는 가장 큰 이점은 드러나지 않아 파악하기 어려운 Query 구문이 로직상으로 도출이 됨으로 인해 향후 유지보수가 용이해지며 테스트를 쉽게 할 수 있는 유연한 구조를 얻을 수 있다는 점 이였지만 복잡한 데이타를 집계 한다거나 여러 Entity 간의 관계를 통한 결과를 도출하려고 하는 용도로는 적합하지 않으며 결국은 Query 를 사용해 데이타를 가지고 올 수 밖에는 없는데 이를 위해 Mybatis 와 JPA 가 같이 사용해야 된다는 점을 이야기 드렸습니다.이번 글에는 이전 JPA 가 설정된 동일한 소스 코드에 어떻게 MyBatis 를 사용 하는지..
Entity 에 있는 데이타를 조회하거나 저장과 변경 그리고 삭제를 할때 Spring JPA 에서 제공하는 Repository 라는 인터페이스를 정의해 해당 Entity 의 데이타를 사용 할 수 있습니다. Repository 는 내부적으로 EntityManager 가 직접 대상 Entity의 데이타를 관리하고 있기 때문에 굳이 Repository 인터페이스를 정의하지 않고도 직접 EntityManager 를 사용해 Persistance Layer 를 구현 할 수도 있지만 Spring JPA 에서 Repository 의 내부 구현체를 자동으로 생성시켜 주기 때문에 별도의 구현체를 따로 생성하지 않아도 됩니다. Repository 는 대게 Entity 와 1:1 로 매칭된다고 볼 수도 있으나 꼭 그런것은 아..
데이타베이스에서 테이블간의 관계를 구성하는 방법은 OneToOne, OneToMany, ManyToOne, ManyToMany 가 있습니다. 테이블간의 관계에서는 단방향과 양방향에 대한 구분이 없지만 JPA 상에서는 사용하는 Entity 에 따른 차이가 존재합니다. 단방향은 FK (Foreign Key) 를 소유한 Entity 에서 대상 Entity 를 참조하는 방식이며 양방향은 FK 를 소유한 Entity 와 대상 Entity 에서 서로가 서로를 참조할 수 있는 방식입니다.양방향 관계를 지정할때 유의해야 할 점은 서로의 Entity 데이타에 대해 동일한 사용 권한을 가지기 때문에 의도치 않은 데이타의 오염이 일어 날 수 있다는 점 입니다. Entity 의 값이 변경 되었는데 이게 누구에 의한 데이타의 ..
데이타베이스의 관계 앞서 관계형 데이타베이스의 데이타를 객체로 표현해 관리하는 것이 orm 의 기본 방향이라고 이야기 드렸습니다. 하지만 객체로 표현하기 어려운 데이타간의 관계를 위해 jpa 에서 기능을 제공하고 있는데 크게 단방향과 양방향의 관계로 나뉘어 집니다. 단방향과 양방향을 구분짓는 차이는 데이타를 사용하는 관점에서 누가 주도권을 가지는 것인가에 대한 차이이며 둘다 동일한 데이타베이스 테이블간의 관계를 의미합니다. 이글에서는 단방향에 대해서 먼저 다루겠습니다.데이타베이스에서 사용하는 관계는 OneToOne(1:1), OneToMany(1:n), ManyToOne(n:1), ManyToMany(n:m) 가 있습니다. 이중 ManyToMany(n:m) 는 데이타베이스에서 물리적으로 지원하진 않지만 ..
@Entity @Entity 어노테이션은 데이타베이스의 테이블과 일대일로 매칭되는 객체 단위이며 Entity 객체의 인스턴스 하나가 테이블에서 하나의 레코드 값을 의미합니다. 그래서 객체의 인스턴스를 구분하기 위한 유일한 키값을 가지는데 이것은 테이블 상의 Primary Key 와 같은 의미를 가지며 @Id 어노테이션으로 표기 됩니다. 먼저 Spring Boot 를 설정할때 spring.jpa.hibernate.ddl-auto 설정이 create 혹은 update 로 되어 있을 경우 Spring 프로젝트가 시작될때 EntityManager 가 자동으로 DDL 을 수행해 테이블을 생성해 줍니다.이때 명시적으로 @Entity 의 name 속성을 이용해 데이타베이스상의 실제 테이블 명칭을 지정하지 않는다면 E..
사용기술 Spring boot 2.0.5.RELEASE maven JPA MyBatis H2 DBMS Hikari CP java 1.8 개요 JPA 는 java persistence API 의 약자 이며 java 에서 제공하는 JDBC 와 같은 API spec 을 의미 합니다. JDBC 와 JPA 는 둘다 데이타베이스 와 데이타를 주고 받기 위한 방법을 정의 하였으나 JDBC 는 보다 하위 레벨에서 데이타베이스와 직접 SQL 쿼리를 질의 하는 API 스펙 이며 JPA 는 ORM API 스펙 입니다. JPA 이전에는 hibernate 와 MyBatis 가 보편적으로 사용 되고 있었지만 JPA 스펙이 발표가 된 이후 보다 쉽게 데이타를 사용 할 수 있기 때문에 JPA 가 주로 사용 되고 있습니다. 하지만 J..
도메인, 저장소 객체 이제 모든 설정이 완료 되었고 정말로 다중 데이타소스 상에서 트랜잭션이 정상적으로 동작이 되는지를 확인해 보겠습니다.먼저 테스트를 위해 생성해둔 데이타소스에서 사용할 도메인 객체와 저장소 객체를 각각 생성하겠습니다. 데이타소스 1번에서 사용할 도메인과 저장소 객체 입니다. @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity(name = "test_code") public class TestCode1 { @Id private String code; private String name; @Column(name = "create_date") private Date createDate; public TestCode1(Str..