일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- fetch join
- Hibernate
- MySQLTransactionRollbackException
- jdbc
- Git
- spring-cloud-starter-aws
- awspring
- batch insert
- oauth2.0
- 정적 팩터리 메서드
- JPA
- 성능테스트
- @Transaction(readOnly=true)
- assert
- Batch
- 이펙티브 자바
- @controller
- Cannotacquirelockexception
- injellij
- @RequestMapping
- ngrinder
- Cache
- spring
- 데드락
- 동시성
- N + 1
- Convention
- AWS
- OIDC
- mockito
- Today
- Total
목록JPA (5)
정리정리
@Transactional에는 읽기 전용인 readOnly 옵션이 있습니다. 처음에는 그저 Isolation level 설정 정도로 생각을 했었지만 그로 인해 JPA에서 성능의 차이가 발생하는 점을 알게 되어 포스팅을 하게 되었습니다. @Transactional(readOnly = true) 성능 비교 우선 성능 차이가 왜 발생하는지 알아보기 전에 정말 성능 차이가 있는지 먼저 확인해 보겠습니다. @Service @RequiredArgsConstructor public class MemberService { private final MemberRepository memberRepository; @Transactional public void getMembersWithReadOnlyFalse() { mem..
이번 포스팅에서는 JPA와 같은 ORM에서 중요한 문제인 N + 1에 관해 알아보고, JPA에서 이를 해결하는 방법에 대해 포스팅을 해보겠습니다. N + 1 이란? 우선 N + 1 문제란, 어떤 엔티티를 조회할 때, 이와 연관관계가 있는 다른 엔티티를 조회하는 쿼리가 추가로 발생하는 현상을 말합니다. 이때 만약 처음 엔티티를 조회하는 쿼리의 결과가 N개라면, 각 N개의 엔티티와 연관관계를 가진 엔티티를 가져오기 위한 N번의 쿼리가 발생하기 때문에 N + 1 문제라고 불리는 것 같습니다. 간단한 예시로 다음과 같이 집사와 강아지가 일대다 관계에 놓여있다고 가정을 해보겠습니다. 이런 식으로 데이터가 있다고 가정을 했을 때, 집사를 조회하는 쿼리를 작성하면 다음과 같은 결과가 생기게 됩니다. #주인 3명 조회..
엔티티 정의 우선 맴버와 게시글이 일대다 양방향 관계에 있다고 가정을 하겠습니다. @Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany(mappedBy = "member") private List posts = new ArrayList(); } @Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Post { @Id @GeneratedValue(strategy = ..
스프링 2.7 기준으로 작성된 글입니다. 스프링 부트 2.5 이후로 데이터베이스를 초기화하는 방법에 몇가지 변화가 있었습니다. 그래서 이번 포스트에서는 스프링 부트 2.5 이후에서 데이터베이스 스키마를 생성하고 초기화 하는 방법들을 알아보겠습니다. JPA 데이터베이스 초기화 @Entity 가 붙은 클래스들을 스캔해서 자동으로 스키마를 생성해주는 방식입니다. 이 방식에는 JPA에서 제공하는 설정과 Hibernate에서 제공하는 설정이 있습니다. 보통 개발 단계에서 Hibernate가 제공하는 ddl-auto의 create, create-drop, update 기능을 많이 사용하고, 프로덕트에는 none 으로 설정을 합니다. spring.jpa.generate-ddl=(boolean) JPA에서 기본적으로 ..
JPA(Java Persistence API) JPA는 Java Persistence API의 약자로 기술 명세, 즉 자바 표준 ORM 인터페이스입니다. JPA는 크게 세 가지 기능을 제공합니다. persistence API: entityManager를 통해 JPA 핵심 인터페이스 메타데이터: 엔티티를 생성할 때 사용하는 @Entity, @Id, @ManyToOne 등 JPQL(Java Persistence Query Language): JPA 전용 쿼리 문법 Spring Data JPA 스프링에서 제공하는 JPA를 더 쉽게 사용할 수 있게 하는 모듈입니다. Spring Data JPA는 너무 많은 boilerplate 코드를 작성하는데 드는 고생을 줄이고 쉽게 data access layer에 접근할 ..