일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 애자일프로그래밍
- 데이터베이스
- 클린코드
- 코딩
- 개발
- 엘라스틱서치
- Baekjoon
- Java
- 코드
- 읽기쉬운코드
- API
- 백준
- 애자일
- 그리디
- spring boot
- Elasticsearch
- 알고리즘
- 프레임워크
- cleancode
- framework
- 코딩테스트
- 애자일기법
- JPA
- 스프링
- 그리디알고리즘
- ES
- Spring
- database
- 개발자
- 자바
- Today
- Total
목록전체 글 (164)
튼튼발자 개발 성장기🏋️
1차 캐시 vs 2차 캐시1차 캐시JPA의 EntityManager에 의해 관리되는 캐시다.트랜잭션 범위 내에서만 유효하며, 동일한 Entity를 요청하면 데이터베이스에 접근하지 않고 캐시된 데이터를 반환한다.2차 캐시EntityManager에 의해 관리되지 않는 전역 캐시로, 애플리케이션의 여러 세션에서 공유된다.여러 트랜잭션과 여러 클라이언트에서 동일한 데이터를 요청할 때 유용하다.캐시된 데이터는 설정된 TTL(Time To Live) 또는 만료 정책에 따라 만료될 수 있다.JPA 2차 캐시 기능 JPA 2차 캐시는 성능을 높이고 데이터베이스 부하를 줄이기 위해 사용된다. JPA에서는 기본적으로 2차 캐시를 제공하지 않지만, Hibernate와 같은 JPA 구현체를 통해 2차 캐시 기능을 사용할 수 ..
JPA에서의 N+1 문제는 주로 연관된 엔티티를 조회할 때 발생하는 성능 문제로, 데이터베이스 쿼리가 예상보다 많이 발생하여 성능이 저하될 수 있다. 이 문제는 즉시 로딩(Eager Loading)이나 지연 로딩(Lazy Loading) 설정에 따라 다르게 나타날 수 있다. N+1 문제를 해결하기 위해서는 페치 조인(Fetch Join), @BatchSize, @Fetch(FetchMode.SUBSELECT)와 같은 전략을 사용할 수 있다.1. N+1 문제와 즉시 로딩즉시 로딩은 연관된 엔티티를 조회할 때 기본적으로 즉시 데이터베이스에서 로드한다. 하지만 잘못된 설정이나 비효율적인 쿼리로 인해 N+1 문제가 발생할 수 있다. 엔티티가 아래와 같을 때, 특정 author를 조회한다고 가정해볼 때 books..
JPA에서는 예외가 발생했을 때 표준 예외를 던지며, JPA 예외는 런타임 예외인 PersistenceException을 상속받는다. JPA 예외는 크게 두 가지 범주로 나눌 수 있다.트랜잭션 롤백을 표시하는 예외: 트랜잭션 롤백이 필요함을 나타내는 예외다. 이 예외가 발생하면 트랜잭션이 강제로 롤백된다.트랜잭션 롤백을 표시하지 않는 예외: 트랜잭션 롤백을 강제하지 않으며, 트랜잭션을 계속 유지할 수 있는 예외다.트랜잭션 롤백을 표시하는 예외이 범주에 속하는 예외는 비정상적인 데이터 액세스나 영속성 컨텍스트의 무결성 문제를 발생시킬 때 던진다. 트랜잭션을 즉시 롤백해야 함을 나타내며, 이를 복구하려고 시도할 수 없다.EntityExistsException: 이미 존재하는 엔티티를 병합하거나 영속하려고 할..
컬렉션자바는 기본으로 Collection, List, Set, Map 컬렉션을 지원한다. 이 컬렉션은 JPA에서 아래와 같이 활용할 수 있다.@OneToMany, @ManyToMany를 사용하여 일대다, 다대다 관계를 매핑할 때@ElementCollection을 사용하여 값 타입을 하나 이상 보관할 때(각 자바의 컬렉션의 특징은 자바의 기본적인 사항이므로 넘어간다.)JPA와 컬렉션하이버네이트는 엔티티를 영속 상태로 만들 때 컬렉션 필드를 하이버네이트에서 준비한 "내장 컬렉션"으로 감싸서 사용한다. "래퍼 컬렉션"이라고도 부른다.@Entitypublic class Member { @Id @GeneratedValue private Long id; @OneToMany @JoinCo..
트랜잭션 범위의 영속성 컨텍스트웹 애플리케이션에서 트랜잭션 범위의 영속성 컨텍스트는 데이터베이스와의 상호작용을 효율적으로 관리하는 데 필수적이다. 트랜잭션 범위의 영속성 컨텍스트는 일반적으로 요청 당 트랜잭션으로 설정되며, 이 경우 모든 엔티티 객체는 해당 트랜잭션 내에서 관리된다. 이는 데이터의 일관성을 유지하고, 중복된 데이터베이스 접근을 줄이는 데 도움을준다.스프링 컨테이너의 기본 전략 스프링 컨테이너는 데이터베이스 작업을 관리하기 위해 @Transactional 어노테이션을 사용하여 트랜잭션을 처리한다. 기본적으로 스프링은 각 요청마다 새로운 트랜잭션을 시작하고, 작업이 완료되면 자동으로 커밋하거나 예외가 던져지면 롤백한다. 이러한 접근 방식은 데이터 일관성을 보장하고, 예외 발생 시 롤백을 통해..
스프링 데이터 JPA 소개스프링 데이터는 다양한 데이터 저장소와의 통합을 지원하는 스프링 프로젝트다. 스프링 데이터 JPA는 그 중 하나로, JPA를 사용하여 데이터베이스와의 상호작용을 단순화하고, 개발자의 생산성을 높여준다. 주요 목표는 다음과 같다.데이터 접근 기술의 추상화: JPA를 사용하는 데이터 접근 기술을 더 간편하게 사용하도록 돕는다.표준화된 데이터 접근 레이어: 데이터 접근 계층의 표준화와 코드의 재사용성을 높인다.쿼리 메소드와 자동화: 쿼리 메소드, JPQL, 네이티브 쿼리 등을 사용하여 데이터 접근을 간단히 한다.스프링 데이터 JPA는 JpaRepository와 같은 인터페이스를 제공하여 CRUD 작업과 데이터 조회를 간편하게 수행할 수 있게 한다.스프링 데이터 JPA 설정스프링 데이터..
1. 벌크 연산엔티티를 수정하려면 영속성 컨텍스트의 변경 감지 기능이나 병합을 사용하고, 삭제하려면 remove() 메소드를 사용한다. 만약 수백개 혹은 수천개의 데이터를 처리해야한다면 성능이 매우 떨어질 것이다. 이럴 때 벌크 연산을 사용하여 한 번에 처리가 가능하다.1.1 벌크 연산의 주의점벌크 연산은 데이터베이스에서 대량의 데이터를 한 번에 업데이트하거나 삭제하는 작업을 의미한다. JPA에서는 JPQL을 사용하여 벌크 연산을 수행할 수 있다. 벌크 연산은 다음과 같은 주의점을 가지고 있다.영속성 컨텍스트의 비동기성: 벌크 연산은 데이터베이스에 직접 쿼리를 실행하기 때문에, JPA의 영속성 컨텍스트에 있는 엔티티들과 동기화되지 않는다. 즉, 영속성 컨텍스트는 벌크 연산 결과를 알지 못하므로, 벌크 연..
객체지향 쿼리 언어는 데이터베이스의 테이블이 아닌 객체를 대상으로 데이터를 조회하는 쿼리 방법이다. 그러므로 데이터베이스에 의존하지 않고 개발할 수 있다는 장점이 생긴다.JPQLJPQL(Java Persistence Query Language)은 객체 지향적으로 데이터를 조회하는 쿼리 언어로, SQL과 유사하지만 엔티티를 대상으로 쿼리를 작성한다. 가장 많이 사용되는 쿼리 방식다.JPQL은 데이터베이스 테이블이 아닌 엔티티와 속성을 대상으로 쿼리한다.String jpql = "SELECT e FROM Employee e WHERE e.name = :name";TypedQuery query = em.createQuery(jpql, Employee.class);query.setParameter("name",..