트랜잭션 동시성 제어와 락의 필요성데이터베이스에서 트랜잭션이 동시에 실행될 경우, 데이터 일관성과 무결성을 보장하기 위해 락 메커니즘이 필수적이다. 대표적인 락은 공유 락(Shared Lock)과 배타 락(Exclusive Lock)이다.공유 락 (Shared Lock)읽기 락(Read Lock)이라고도 한다.여러 트랜잭션이 동시에 같은 데이터를 읽을 수 있음.그러나 쓰기 작업은 허용되지 않음.트랜잭션이 커밋되거나 롤백되기 전까지 락이 유지된다.조회한 데이터가 중간에 변경되지 않도록 보장한다.SQL 예시:SELECT * FROM table_name WHERE id = 1 FOR SHARE;배타 락 (Exclusive Lock)쓰기 락(Write Lock)이라고도 한다.락을 획득한 트랜잭션만 데이터에 접근..
지식저장소
JPA의 N + 1 문제JPA의 N + 1 문제는 엔티티를 조회할 때 의도치 않게 추가적인 쿼리가 발생하는 현상이다. 처음 1개의 쿼리로 데이터를 조회한 뒤, 연관관계가 설정된 엔티티를 로딩하기 위해 조회된 데이터의 개수(N)만큼 추가적인 쿼리가 발생하는 문제다.예를 들어, 블로그 게시글과 댓글이 있다고 가정하면, 모든 게시글을 조회할 때 게시글의 개수만큼 댓글을 조회하기 위한 쿼리가 추가로 발생할 수 있다.findAll 메서드의 글로벌 패치 전략별 N + 1 문제 상황즉시 로딩(EAGER)인 경우즉시 로딩(EAGER)으로 설정된 엔티티를 findAll() 메서드를 통해 조회하면 N + 1 문제가 발생한다.이는 findAll() 메서드가 다음과 같은 JPQL 구문을 실행하기 때문이다.select u fr..
엔티티 매니저(EntityManager)의 역할엔티티 매니저(EntityManager)는 JPA(Java Persistence API)에서 영속성 컨텍스트(Persistence Context)를 관리하는 핵심 인터페이스로, 엔티티의 생명 주기를 관리한다. 이를 통해 애플리케이션과 데이터베이스 간의 객체 지향적인 상호작용을 지원하며, 개발자가 보다 직관적이고 효율적인 방식으로 데이터베이스를 조작할 수 있게 한다.엔티티(Entity)의 4가지 상태엔티티는 JPA에서 영속성 컨텍스트와의 관계에 따라 다음과 같은 네 가지 상태를 가질 수 있다:1. 비영속(New)Member member = new Member("홍길동");엔티티 객체가 새로 생성되었지만 아직 영속성 컨텍스트와 연결되지 않은 상태이다.오직 메모리..
새로운 Entity인지 판단3줄요약JpaEntityInformation의isNew(T entity)에 의해 판단된다.추가적인 설정이 없다면 JpaEntityInformation의 구현체 중 JpaMetamodelEntityInformation 클래스가 동작하게 된다.@Version이 사용된 필드가 없거나 @Version이 사용된 필드가 primitive 타입이면 AbstracEntityInformation의 isNew()를 호출한다.본문일반적으로 JpaEntityInformation의은 JpaMetamodelEntityInformation가 사용이 되는데해당 JpaMetamodelEntityInformation안에서 isNew(T entity)를 사용되며@Override public boolean ..
카프카(Kafka)란 무엇인가?1. 분산 이벤트 스트리밍 플랫폼카프카는 분산 환경에서 이벤트 스트리밍을 처리하기 위한 플랫폼이다.이벤트 스트리밍이란, 데이터(메시지)를 실시간으로 지속해서 전송하고 처리하는 것을 의미한다.2. 어디서 많이 쓰이나?데이터(메시지)를 빠르고 안정적으로 전송하고 저장해야 하는 "실시간 데이터 파이프라인"이나 "분산 로그 시스템"이 필요한 곳에 많이 쓰인다.카프카의 기본 구조1-1. 카프카 클러스터(Kafka Cluster)메시지를 저장하는 '저장소'(Broker들의 집합)라고 볼 수 있다.고가용성과 확장성을 제공하며, 데이터를 여러 브로커에 분산시켜 저장한다.1-2. 브로커카프카 브로커는 카프카 시스템을 구성하는 개별 서버이다.카프카 클러스터를 형성하여 전체 시스템의 일부로 작..
정적 팩토리 메서드(Static Factory Method)는 객체를 생성할 때, 생성자를 직접 호출하는 대신 클래스의 정적(static) 메서드를 사용하여 객체를 생성하고 반환하는 방식을 의미한다.이 방식은 일반적인 생성자 호출보다 더 유연하고 직관적으로 객체를 생성할 수 있는 장점을 제공한다.정적 팩토리 메서드의 특징정적 메서드를 사용해 객체를 생성클래스의 정적 메서드를 호출해 객체를 생성한다.Cell cell = Cell.of("X");생성자를 은닉할 수 있음정적 팩토리 메서드는 생성자를 private으로 숨기고, 외부에서는 오직 정적 메서드를 통해 객체를 생성하도록 강제한다.유의미한 메서드 이름을 사용할 수 있음생성자와 달리 메서드 이름을 자유롭게 설정할 수 있어, 객체 생성의 목적을 명확히 드러..