1차 캐시와 2차 캐시 알아보기

1차 캐시(First Level Cache)란 1차 캐시(First Level Cache) 는 영속성 컨텍스트(Persistence Context) 내부에 존재하는 캐시를 말한다. 1차 캐시는 엔티티를 조회하면, 영속성 컨텍스트가 엔티티를 캐시에 저장한다. 이후 같은 엔티티를 조회하면, 영속성 컨텍스트는 캐시에서 엔티티를 찾아 반환한다. 그렇기 때문에 트랜잭션 내에서만 유효하며, 트랜잭션이 종료되면 1차 캐시도 함께 종료된다. 더티 체킹(Dirty Checking) 더티 체킹(Dirty Checking) 은 1차 캐시를 통해 엔티티의 변경 사항을 추적하는 방식이다. 엔티티를 조회하면, 영속성 컨텍스트는 엔티티의 초기 상태를 저장한다. 이후 엔티티의 상태가 변경되면, 영속성 컨텍스트는 변경 사항을 추적하고 데이터베이스에 반영한다. ...

6월 8, 2024 · 2 분 · 299 단어 · In-Jun Hwang

영속성 컨텍스트 알아보기

영속성 컨텍스트란 영속성 컨텍스트(Persistence Context) 는 JPA(Java Persistence API)에서 엔티티를 관리하는 환경을 말한다. 영속성 컨텍스트는 엔티티를 관리하고, 엔티티와 데이터베이스 간의 상태 변화를 추적한다. 영속성 컨텍스트는 엔티티 매니저(Entity Manager)에 의해 관리된다. 영속성 컨텍스트의 주요 기능 엔티티 관리: EntityManager가 엔티티를 관리한다. 영속성 컨텍스트가 엔티티의 초기 상태를 저장한다. 트랜잭션 연계: 영속성 컨텍스트는 트랜잭션과 생명 주기를 같이 한다. 트랜잭션이 커밋되면, 영속성 컨텍스트가 관리하는 엔티티의 변경 사항이 데이터베이스에 반영된다. 변경 감지(Dirty Checking): 영속성 컨텍스트는 엔티티의 변경 사항을 추적한다. 트랜잭션이 커밋되기 전에, JPA는 엔티티의 현제 상태와 초기 상태를 비교한다. 변경 사항이 감지되면, JPA는 자동으로 데이터베이스 업데이트 쿼리를 생성하고 실행한다. 영속성 컨텍스트의 동작 방식 엔티티 관리: ...

6월 8, 2024 · 1 분 · 197 단어 · In-Jun Hwang

Dirty Checking 알아보기

Dirty Checking이란 Dirty Checking은 JPA(Java Persistence API)에서 엔티티의 변경 사항을 자동으로 감지하고, 이를 데이터베이스에 반영하는 방식이다. Dirty Checking을 통해 개발자는 명시적으로 데이터베이스 업데이트 쿼리를 작성할 필요 없이, 객체의 상태만 변경하면 된다. 또한 Dirty Checking은 영속성 컨텍스트(Persistence Context)가 관리하는 엔티티만 적용된다. Dirty Checking 동작 방식 엔티티 관리: EntityManager가 엔티티를 관리한다. 영속성 컨텍스트(Persistence Context)가 엔티티의 초기 상태를 저장한다. 변경 감지: 트랜잭션이 커밋되기 전에, JPA는 엔티티의 현제 상태와 초기 상태를 비교한다. 변경 사항 적용: 변경 사항이 감지되면, JPA는 자동으로 데이터베이스 업데이트 쿼리를 생성하고 실행한다. 트랜잭션이 커밋되면, 변경 사항이 데이터베이스에 반영된다. 예시 1 2 3 4 5 6 7 8 9 10 11 12 13 // 엔티티 저장 Member member = new Member("Alice"); memberRepository.save(member); // 엔티티 조회 Member findMember = memberRepository.findById(member.getId()).get(); // 엔티티 변경 findMember.setName("Bob"); // 변경 사항 감지 // Dirty Checking이 동작하여 자동으로 데이터베이스 업데이트 쿼리를 생성하고 실행한다. // UPDATE member SET name = 'Bob' WHERE id = 1; 장점 편의성: 개발자가 데이터베이스 업데이트 쿼리를 작성할 필요 없이, 객체의 상태만 변경하면 된다. 일관성: 변경 사항이 자동으로 데이터베이스에 반영되므로, 데이터 일관성을 유지할 수 있다. 생산성: 개발자가 비즈니스 로직에 집중할 수 있으므로, 생산성이 향상된다.

6월 8, 2024 · 1 분 · 179 단어 · In-Jun Hwang

N+1 문제 알아보기

N+1 문제란 N+1 문제는 ORM(Object-Relational Mapping)에서 자주 발생하는 성능 문제 중 하나로, 연관된 엔티티를 조회할 때, 연관된 엔티티의 수(N)만큼 추가로 쿼리가 실행되는 문제이다. 그 결과, 쿼리의 수가 N+1개가 된다. 쿼리의 수가 많아지면 데이터베이스와의 통신이 늘어나고, 성능이 저하될 수 있다. 그렇기 때문에 N+1 문제는 성능 최적화를 위해 주의해야 하는 문제이다. 동작 원리 첫 번째 쿼리로 엔티티를 조회한다. 1 List<Member> members = memberRepository.findAll(); 조회된 엔티티를 사용할 때마다 추가로 쿼리가 실행된다. 1 2 3 for (Member member : members) { System.out.println(member.getTeam().getName()); } 연관된 엔티티의 수만큼 추가로 쿼리가 실행된다. 1 2 3 4 SELECT * FROM Team WHERE team_id = 1; SELECT * FROM Team WHERE team_id = 2; SELECT * FROM Team WHERE team_id = 3; ... 해결 방법 Eager Loading으로 N+1 문제를 해결하려고 하면 성능이 저하될 수 있다. 따라서 Fetch Join, Batch Fetch, EntityGraph 등을 사용하여 해결하는 것이 좋다. ...

6월 8, 2024 · 2 분 · 247 단어 · In-Jun Hwang

ORM(Object-Relational Mapping)이란?

데이터베이스를 다루는 개발자라면 한 번쯤 들어봤을 ORM. 하지만 정확히 무엇이고 왜 사용하는지 모호한 경우가 많습니다. 이 글에서는 ORM의 개념부터 실제 활용까지 상세히 알아보겠습니다. 목차 ORM의 개념과 정의 ORM의 작동 원리 주요 ORM 프레임워크 ORM의 장점과 단점 ORM 실제 활용 사례 자주 묻는 질문(FAQ) 1. ORM의 개념과 정의 ORM(Object-Relational Mapping)은 객체 지향 프로그래밍의 객체와 관계형 데이터베이스를 연결해주는 기술입니다. 쉽게 말해, 프로그래밍 언어에서 사용하는 객체를 데이터베이스의 테이블과 자동으로 매핑해주는 도구라고 할 수 있습니다. ...

5월 15, 2024 · 3 분 · 429 단어 · In-Jun Hwang