@Transactional 4

250210 월 TIL

@Transaction은 왜 service에 거는게 맞는가?-일반적으로는 맞다.-장점1. 비즈니스 로직의 독립성 확보-> 만약 controller에 건다면 controller가 아닌 다른 곳(다른 컨트롤러, 스프링 배치)에서는 올바른 트랜잭션이 일어나지 않게 된다.2. 성능 향상-> DB를 조회할 수 있는 객체가 있는데, 이 객체가 조회할 때 갯수 제한이 있다. 만약 controller에 트랜잭션을 건다면, 컨트롤러에서 서비스를 조회하고 서비스가 처리하고 결과를 다시 컨트롤러로 보내는 것보다, 서비스에서 처리 후 결과만 보내는게 DB를 점유하는 시간이 더 짧아진다. 점유 시간이 짧아지면 DB를 조회하는 객체를 더 적게 쓰니 다른 작업들이 기다리는 시간이 줄어들어 결과적으로 성능이 향상된다.-단점개별 트랜..

TIL 2025.02.10

250121 화 TIL

@Transactional트랜잭션 단위로 메서드 실행을 관리한다.트랜잭션 내부에서 데이터를 가져올 때 **프록시(가짜 객체)**를 사용한다.주의: 트랜잭션 외부에서 호출 시 프록시 객체가 아닌 실제 객체를 반환하므로 @Transactional이 적용되지 않을 수 있다.예: work()가 BaseInitData 안에 정의되어 직접 호출되면, 트랜잭션 관리 범위 외부에서 실행된다. 이 경우 프록시를 거치지 않고 실제 객체를 반환하기 때문에, JPA가 제공하는 지연 로딩(Lazy Loading)이나 변경 감지(Dirty Checking) 같은 트랜잭션 기반 기능이 작동하지 않는다. 따라서 트랜잭션이 필요한 작업은 반드시 트랜잭션 관리 범위 내에서 실행해야 한다.객체와 테이블의 연결 방식Java두 객체는 객체 ..

TIL 2025.01.21

JPA에서 트랜잭션과 @Transactional 어노테이션

JPA 트랜잭션정의데이터베이스 상태를 변경하는 작업의 단위를 의미한다.트랜잭션의 특성 (ACID)원자성 (Atomicity): All or Nothing. 부분적인 성공은 허용되지 않는다.예: 송금 트랜잭션의 경우, 송금이 실패하면 출금도 실패해야 한다.일관성 (Consistency): 데이터 간의 정확성을 유지해야 한다.예: 송금 시 출금 금액과 입금 금액은 항상 동일해야 한다.격리성 (Isolation): 둘 이상의 트랜잭션이 동시에 실행될 때, 서로 간섭하지 않아야 한다.예: 두 명이 같은 계좌의 돈을 송금받으려 할 때, 두 트랜잭션이 동시에 진행되지 않도록 해야 한다.영속성 (Durability): 데이터는 영구적으로 보존되어야 한다.예: 은행 서버가 재부팅되어도 계좌 금액은 변하지 않아야 한다...

Java/JPA 2025.01.20

역속성 컨텍스트와 @Transactional

@Transactional 어노테이션의 역할@Transactional은 Spring에서 제공하는 어노테이션으로, 트랜잭션의 범위를 메서드 단위로 지정한다. 이 어노테이션을 사용하면 다음과 같은 이점이 있다:트랜잭션 자동 관리: 메서드 실행 시작 시 트랜잭션이 시작되고, 메서드가 정상적으로 종료되면 트랜잭션이 커밋된다. 예외가 발생하면 트랜잭션이 롤백된다.코드 간소화: 개발자가 직접 트랜잭션을 시작하고 커밋/롤백하는 코드를 작성할 필요가 없다.JPA의 영속성 컨텍스트와 @TransactionalJPA는 영속성 컨텍스트를 통해 엔티티를 관리하며, 트랜잭션 범위 내에서만 유효하다. 주요 특징은 다음과 같다:엔티티의 상태 추적: 영속성 컨텍스트는 엔티티의 상태를 추적하고, 변경 사항을 데이터베이스에 반영한다.스..

Java/JPA 2025.01.20