매일 매일, 차곡 차곡 쌓기



완벽하지 않은 것을 두려워 말며,
완성도를 높히는데 집중하자.

JPA 6

성능 향상을 위한 1차 캐시와 2차 캐시

네트워크를 통해 데이터베이스에 접근하는 시간비용이 어플리케이션 서버에 내부 메모리 접근하는 시간보다 훨씬 큼. 조회한 데이터를 메모리에 캐시해서 데이터베이스 접근횟수 줄일 수 있다면, 애플리케이션 성능을 획기적으로 개선 가능. 1차 캐시 영속성 컨텍스트 내부에는 엔티티를 보관하는 장소가 있는데, 이것을 1차 캐시라함. 트랜잭션을 커밋하거나 플러시를 호출하면 1차 캐시에 있는 엔티티의 변경 내역을 데이터베이스에 동기화 1. 1차 캐시의 동작 과정분석 최초 조회할 때는 1차 캐시에 엔티티가 없으므로 데이터베이스에서 엔티티를 조회해서 1차 캐시에 보관하고 1차 캐시에 보관한 결과를 반환. 이후 같은 엔티티를 조회하면 1차 캐시에 같은 엔티티가 있으므로 데이터베이스를 조회하지 않고 1차 캐시 엔티티 반환 2...

Spring/JPA 2023.12.31

JPA 비관적 락

비관적 락(Pessimistic Locking) 이란 동시성 제어 기법중 비관적 락은 트랜잭션이 데이터에 대한 엑세스를 시도할 때 미리 해당 데이터를 잠궈서 충돌을 해결하는 방식. 트랜잭션이 데이터를 읽거나 수정하기 전에 해당 데이터를 잠금(락)을 획득하여 다른 트랜잭션의 엑세스를 막음. 데이터베이스에서는 주로 SELECT ... FOR UPDATE와 같은 명령어를 사용하여 비관적 락을 구현. 비관적 락은 데이터를 수정하는 작업이 많거나 동시에 여러 트랜잭션이 데이터를 수정하는 환경에서 사용. JPA 비관적 락 활용 JPA가 제공하는 비관적 락은 데이터베이스 트랜잭션 락 메커니즘에 의존하는 방법이다. 주로 SQL 쿼리에 select for update 구문을 사용하면서 시작하고 버전 정보는 사용하지 않는..

Spring/JPA 2023.12.08

JPA 낙관적 락

낙관적 락(Optimistic Locking)이란 동시성 제어 기법 중 낙관적 락은 트랜잭션 충돌을 기대하지 않고, 일단 트랜잭션을 수행하고 나중에 충돌을 해결하는 방식. 트랜잭션이 데이터를 읽을 때는 어떠한 락도 획득하지 않고, 수정이 필요한 경우에만 해당 데이터의 버전을 확인하여 충돌 여부를 판단 데이터를 수정하기 전에 해당 데이터의 버전을 확인하고, 만약 다른 트랜잭션에 의해 이미 변경되었다면 충돌이 발생한 것으로 간주하여 롤백하거나 충돌을 해결하는 방법을 적용 일반적으로 낙관적 락은 읽기 작업이 많고 충돌이 드물거나 극히 적은 경우에 사용. 낙관적 락은 데이터베이스가 제공하는 락 기능을 사용하는 것이 아니라, JPA가 제공하는 버전 관리 기능을 사용 JPA 낙관적 락 활용 JPA(Java Pers..

Spring/JPA 2023.12.07

영속성 컨텍스트란?

영속성 컨텍스트란? 인스턴스에 존재하는 엔티티를 관리하고 영속화 시키는 논리적인 영역 영속성 컨텍스트에서 엔티티를 관리하고 필요에 따라 DB 데이터를 CRUD 할 수 있는데 이러한 작업을 담당하는 객체를 엔티티 매니저라고 함 엔티티 생명 주기 비영속(New) : 영속성 컨텍스트와 전혀 관계가 없는 상태 영속(Managed) : 영속성 컨텍스트에 저장되어 관리되고 있는 상태 준영속(Detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제(Removed) : 영속성 컨텍스트와 DB에서 삭제된 상태. 영속성 컨텍스트의 특징 영속성 컨텍스트는 식별자 값이 반드시 있어야한다. JPA는 보통 트랜잭션을 커밋하는 순간에 영속성 컨텍스트에서 새로 저장된 엔티티를 데이터 베이스에 저장하는데 이를 플러시라고..

Spring/JPA 2023.12.03

JPQL 이란?

JPQL이란? JPQL(Java Persistence Query Language)은 JPA(Java Persistence API)에서 사용되는 객체 지향적인 쿼리 언어 JPQL은 엔티티 객체를 대상으로 쿼리를 작성하고 실행할 수 있으며, SQL과 유사하지만 데이터베이스 특정 기능에 의존하지 않는다는 특징이 있음. JPQL 특징 객체 지향 쿼리 언어: JPQL은 엔티티 객체를 대상으로 쿼리를 작성. 따라서 데이터베이스의 테이블이 아닌 엔티티 클래스와 그 안에 정의된 필드와 관계를 사용하여 쿼리를 작성. 포괄적인 쿼리 기능: JPQL은 다양한 쿼리 기능을 제공. 예를 들어, SELECT, INSERT, UPDATE, DELETE와 같은 다양한 유형의 쿼리를 작성할 수 있음. 엔티티와 필드 사용: JPQL은 ..

Spring/JPA 2023.12.02

JPA 란?

JPA는? Java Persistence API 로 자바 진영의 ORM 기술 표준입니다. 애플리케이션과 JDBC 사이에서 동작 ORM이란? (Object-Realtion Mapping) 객체와 관계형 DB를 매핑한다는 뜻으로, 객체와 데이터베이스간 패러다임 불일치 문제 해결하기 위해 만들어진 기술 표준이를 통해 객체는 객체대로 모델링, 데이터베이스는 관계형 데이버베이스 모델링이 가능하이버네이트 ORM 프레임워크를 기반으로 새로운 자바 ORM 표준이 만들어졌는데 이것이 JPA JPA 이전 기존 자바 애플리케이션은 JDBC API를 이용하여 SQL을 직접 전달했음. 이렇게 되면 SQL 에 의존적인 코드를 만들어 유지보수가 불편함. 또한 JDBC API를 사용하기 위해 보일러 플레이팅 코드가 반복적으로 사용되..

Spring/JPA 2023.12.02