JPA Propagation, Isolation 알아보기 jpa @Transactional 에는 2가지 중요 옵션을 사용할 수 있다. propagation: 이는 세션의 트랜잭션을 어떻게 이용할지에 대한 설정이다. REQUIRED, SUPPORTS, MANDATORY, NEVER, NOT_SUPPORTED, REQUIRES_NEW, NESTED 가 있다. isolation: JPA상에서 DB Isolation을 지정할 수 있다. DEFAULT, READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE 가 있다. Transaction Propagation Propagation은 트랜잭션의 영역, 바운더리를 지정하기 위한 설정이다. Propagatio..
Derived Query 스프링 JPA 는 메소드 이름으로 쿼리를 생성하는 기능을 제공한다. 이를 파생된 쿼리라고 하며 엔터티 속성들을 다양하게 활용하여 쿼리를 생성해 낼 수 있다. 이번 아티클에서는 이름을 통한 파생쿼리를 이용하여 우리가 원하는 쿼리를 어떻게 작성할 수 있는지 살펴 볼 것이다. Query Sample 살펴보기. 아래는 JPA 가이드 샘플 내용이다. Sample Distinct findDistinctByLastnameAndFirstname lastname, firstname과 동일한 결과를 찾아서 중복제거(distinct)를 수행한다. select distinct … where x.lastname = ?1 and x.firstname = ?2 And findByLastnameAndFir..

JPA Entity Lifecycle JPA 를 이해하는데 Lifecycle 은 필수적인 항목이라고 할 수 있다. 일반적으로 많이 사용하는 Mybatis 와 JDBCTemplate 등은 실제 DB 에 바로 쿼리를 요청하는 방식으로 진행이 일어난다. 실제 Query 작성 Transaction begin 으로 트랜잭션 획득 Query 수행 Transaction commit or rollback 으로 DB 반영. 위와 같은 일련의 과정으로 DB와 이터렉션이 처리가 된다. JPA는 조금 다른 방식으로 처리되며, 영속상태 혹은 관리 상태에 엔터티를 두고, 특정 시점이 되면 DB 에 반영하는 형태로 오퍼레잇션이 일어난다. Entity Lifecycle 위 그림과 같이 JPA 는 상태를 가진다. 노란색 상태. 이 상..
Entity Event Hooking JPA 를 사용한다는 것은 DB CRUD 를 JPA 를 통해 수행한다는 의미이다. 그러므로 JPA 에서는 다양한 이벤트에 대해서 CallBack 을 받을 수 있도록 하는 여러 방법을 제공하고 있다. 이러한 이벤트는 CRUD 가 일어나기 전, 후에 각각 이벤트를 통지 받을 수 있으며 여러가지 방법을 제공하고 있다. Entity Event @PrePersist: 새로운 엔터티가 저장되기 전에 호출된다. @PostPersist: 새로운 엔터티가 저장되고 난 후에 호출 된다. @PreRemove: 엔터티가 삭제 되기 전에 호출된다. @PostRemove: 엔터티가 삭제 되고 난 후에 호출된다. @PreUpdate: 엔터티가 업데이트 되기 전에 호출된다. @PostUpdate..

ManyToMany JPA 가 직접 만들어주는 엔터티와 테이블 말고, 우리가 직접 엔터티를 만들고, 테이블을 생성하고자 할 때가 있다. 시나리오. 사용자 정보를 저장하는 User가 있다. 사용자는 다양한 클럽에 가입할 수 있다. 클럽을 저장하는 Club가 있다. Club도 여러 사용자를 가질 수 있다. 클럽에 포함된 사용자를 나타내는 ClubUsers가 있다. ClubUsers 는 유저의 점수, 상태를 저장할 수 있다. 이러한 시나리오가 전형적인 M:N 관계이다. 이러한 관계는 연관 테이블을 생성하여 비즈니스 니즈를 해결하는 것이 일반적이다. 또한 M:N 이면서 해당 ClubUsers 만의 별도의 속성을 가지고자 할 때 우리가 생성한 ClubUser를 직접 컨트롤 할 수 있다. 위 다이어그램에서 보는 바..

ManyToMany 관계형 데이터베이스를 이용하다보면 ManyToMany 관계를 종종 만들어야 할 때가 있다. 시나리오. 사용자 정보를 담고 있는 User 가 있다. 시스템의 다양한 사용정보를 정의한 Role 이 있다. 사용자는 다양한 Role 을 가질 수 있다. Role 은 여러 사용자에 할당 될 수 있다. 이러한 시나리오가 전형적인 M:N 관계이다. 이러한 관계는 연관 테이블을 생성하여 비즈니스 니즈를 해결하는 것이 일반적이다. 위 다이어그램에서 보는 바와 같이 user_id, role_id 를 각각 가진 user_role 이라는 테이블으 생성 되었고. user : user_role = 1 : N 관계가 형성이 된다. role : user_role = 1 : N 관계가 형상이 된다. 이렇게 중간 테이..

OneToMany 이제는 OneToMany 를 알아볼 차례이다. DB 모델링중 가장 일반적인 케이스인 OneToMany 를 JPA 에서 어떻게 구현하는지 확인해보자. 시나리오. User를 만들었고, User 로 등록된 사람은 Board를 작성할 수 있다고 해보자. User는 여러개의 Board Content를 작성할 수 있다. User:Board = 1:N 관계가 성립된다. Board 속성 작성하기. 게시판의 가장 기본적인 테이블 구조는 다음과 같다. id: 게시판 아이디 category: 게시물 카테고리 (GENERAL, BOARD, NOTICE) title: 게시물 제목 contents: 게시물 내용 user_id: 작성자 아이디 readCount: 조회수 goodCount: 좋아요 횟수 badCou..
OneToOne Bidirection 매핑 OneToOne Unidirection 매핑을 지금까지 해보았다. UniDirection User가 UserDetail 를 포함하고 있는구조. User 에서 UserDetail 을 참조할 수 있다. UserDetail 에서 User를 접근할 수 없음 DB 조회시 User 를 조회하고, 필요시 UserDetail 을 Lazy Loading 해서 조회할 수 있다. Bidirection User가 UserDetail 를 포함하는 구조. UserDetail 이 User 을 포함하는 구조. User 에서 UserDetail 을 참조할 수 있다. UserDetail에서 User 을 참조할 수 있다. DB 조회시 User 를 조회하고, 필요시 UserDetail 을 Lazy..

Mapping JPA Entity 작성에 대해서 간단히 알아 보았으니 이제는 Mapping 에 대해서 살펴 보자. JPA 는 기본적으로 Relation Database 를 활용하도록 설계 되어 있다. 객체와 관계형 데이터베이스를 매핑 하는 것을 ORM(Object Relation Mapping) 이라고 하며, 이러한 데이터베이스의 관계를 객체도 동일하게 적용하기 위해서 Mapping 이라는 방법을 이용한다. 이번 아티클에서는 User 엔터티를 이용하여 One To One 매핑을 진행해 볼 것이다. One To One Mapping UserInfo 이라는 엔터티가 있다. UserInfo 은 사용자의 기본정보를 저장한다고 해보자. Id: 사용자 아이디 Name: 사용자 이름 Birth: 생년월일 YYYYMM..
JPA Basic 으로 간한 TODO 생성하가. 이제는 간단히 TODO 를 작성해 보도록 하겠다. Entity 작성하기. 단 우선 JPA 는 기존 DB 를 매핑하는 방법과, Entity로 부터 테이블 생성하는 방법을 제공한다. 우리는 Entity 로 테이을블을 생성해 볼 것이다. com.schooldevops.practical.simpleboard.entity.TodoEntity.java 파일을 생성한다. package com.schooldevops.practical.simpleboard.entity; import com.schooldevops.practical.simpleboard.entity.converter.BooleanYNConverter; import com.schooldevops.practic..
- Total
- Today
- Yesterday
- jenkins
- MySQL
- Kafka
- mongo
- CI
- Terraform
- go
- docker-compose
- declative
- docker
- mapping
- argocd
- kubernetes
- kubectl
- kafka-springboot
- gitops
- CD
- Spring
- deploy
- MongoDB
- tfsec
- springboot
- jpa
- Golang
- java
- Database
- D3
- Gorilla
- NodeSelector
- AWS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |