스프링의 @Transactional
트랜잭션 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다. ACID ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션(transaction)의 안전성을 보장하기 위해 필요한 성질이다. 원자성 (Atomicity) 트랜잭션의 연산은 데이터베이스...
트랜잭션 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다. ACID ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션(transaction)의 안전성을 보장하기 위해 필요한 성질이다. 원자성 (Atomicity) 트랜잭션의 연산은 데이터베이스...
Jmeter 설정 JMeter는 Apache 소프트웨어 재단에서 개발한 오픈 소스의 Java 기반의 성능 테스트 도구입니다. 주로 웹 응용 프로그램의 성능을 측정하고 부하 테스트를 수행하는 데 사용됩니다 brew 명령어를 이용해 jmeter를 간단하게 설치 할 수 있습니다. brew install jmeter 설치가 완료되었으면 해당 명령...
Github Actions을 이용해 코드가 머지되었을 때 ec2서버로 자동으로 image를 만들고 docker run 하는 방법을 알아보겠습니다. Ec2 접속 먼저 호스팅 서버 ec2에 접속을 해줍니다. ssh -i ec2-key.pem ec2-user@${EC2_PUBLIC_IP} pem 키는 EC2 인스턴스에 접속하기 위한 비밀 키입니...
동시성 문제란? 동시성 문제는 여러 스레드가 공유 자원에 동시에 접근할 때 발생하는 문제입니다. 동시성 문제는 주로 경쟁 조건, 데드락, 교착상태, 세마포어 등의 현상으로 나타날 수 있습니다. 동시성 문제를 해결하는 방법은 다양한데, 주로 다음과 같은 방법을 사용합니다. synchronized 키워드를 사용한 동기화 낙관적락 비관...
JPA에서 벌크 연산(Bulk Operation)이란 여러 레코드에 대한 대량의 변경(업데이트, 삭제) 작업을 단일 쿼리로 수행하는 것을 의미합니다. 개별 엔티티를 하나씩 업데이트하거나 삭제하는 것보다 훨씬 효율적이기 때문에 많이 사용합니다. Bulk update, delete JPA에서 데이터를 조작하는 데는 주로 두 가지 방법이 사용됩니다...
N+1 문제 JPA를 사용하다면 보면 N+1문제를 많이 만나게 됩니다. 그에 따른 발생 원인과 해결법을 정리해보았습니다. 아래 예시 코드는 한명의 User 여러개의 Article을 가질 수 있는 구조(User : 1, Article : N)입니다. @Entitiy public class User { @Id @GeneratedVa...
영속성 컨텍스트 영속성 컨텍스트는 엔터티를 데이터베이스에 저장하기 전에 일시적으로 관리하는 역할을 합니다. 1차 캐시 (First-Level Cache) 한 트랜잭션 내에서 같은 엔티티를 조회할 때, 처음에만 데이터베이스에서 데이터를 가져오고, 이후에는 1차 캐시에서 데이터를 제공합니다. public void test(Long userId)...
Event Sourcing Event Sourcing은 순차적으로 발생하는 이벤트를 모두 저장하는 패턴입니다. Command에 의해 Processor 가 생성한 Event를 Event Store에 저장한다. 이렇게 저장한 데이터를 Event Handler 를 통해 과거부터 지금까지 이벤트를 확인하여 현재 상태(state)를 유추해냅니다. 이벤...
Transactional Outbox 패턴 이 패턴은 데이터베이스의 트랜잭션 내에서 발생하는 이벤트를 캡처하고 이벤트를 외부 메시지 큐 또는 저장소에 안전하게 기록하는 방법을 다룹니다. 주로 데이터베이스 트랜잭션 외에도 외부 시스템에 변경 사항을 전파해야 할 때 사용됩니다. 내용 주문 데이터베이스에 새로운 주문을 추가하고, 이벤트를 발행하기 ...
Saga pattern saga 패턴에서는 서로 다른 서비스(Application)에서 일련의 트랜젝션을 실행하는데 이 트랜잭션이 하나의 트랜잭션 처럼 보이게 할 수 있습니다. 그래서 만약 이 서비스 중에 하나가 문제가 발생한다면 각각의 서비스에서 다른 보상 트랜잭션을 취해 데이터 정합성을 유지할 수 있습니다. Choreography Saga ...