728x90 전체 글46 [String] Transaction - rollback 속성 [String] Transaction - rollback 속성1. 기본 롤백 규칙 롤백됨(default): RuntimeException과 Error (및 그 하위 타입)롤백되지 않음: 체크 예외(Exception의 하위지만 RuntimeException이 아닌 것)예외 패키지 구조java.lang.Throwable├─ java.lang.Error // 시스템 레벨(복구 불가) - 언체크│ ├─ OutOfMemoryError│ ├─ StackOverflowError│ └─ LinkageError …└─ java.lang.Exception // 애플리케이션 레벨 ├─ (Checked Exceptions) .. 2025. 8. 31. [Spring] Transaction - 격리 수준(Isolation) [Spring] Transaction - 격리 수준(Isolation) 트랜잭션 격리수준(Isolation level)은 동시성과 일관성의 균형을 잡는 핵심 레버입니다. Spring의 @Transactional(isolation = …) 한 줄은 결국 JDBC Connection의 isolation을 조정해 DB 엔진(InnoDB, PostgreSQL 등)에 동작을 위임할 수 있습니다. 1. 이상현상 DB 트랜잭션에서 자주 말하는 세 가지 이상현상이 있습니다. 이상현상을 알아야 Isolation을 알 수 있기 때문에 참고하시길 바랍니다.IsolationDirty ReadNon-Repeatable ReadPhantom ReadREAD_UNCOMMITTED✅ (이상현상 발생)✅ (이상현상 발생)✅ (이상현.. 2025. 8. 17. [Spring] Transaction - @TransactionalEventListener를 이용한 이벤트 처리 [Spring] Transaction - @TransactionalEventListener를 이용한 이벤트 처리 일반 @EventListener는 트랜잭션의 성공/실패와 독립적으로 동작합니다. 반면 @TransactionalEventListener는 트랜잭션의 상태(커밋/롤백/완료 직전) 에 맞춰 리스너 실행 시점을 제어합니다. 트랜잭션 안팎의 경계를 정확히 지키면서 후속 작업(이메일 발송, 캐시 무효화, 메시지 발행, 인덱싱 등) 을 안전하게 실행하고 싶다면 @TransactionalEventListener를 사용할 수 있습니다. 1. 핵심 옵션phase = AFTER_COMMIT(기본): 커밋 성공 후 실행phase = AFTER_ROLLBACK: 롤백 시에만 실행phase = AFTER_COMP.. 2025. 8. 17. [Spring] Transaction - 트랜잭션 전파(Transaction Propagation) [Spring] 트랜잭션 전파(Transaction Propagation)트랜잭션 전파(Transaction Propagation)란 이미 진행 중인 트랜잭션이 있을 때, 새로 호출되는 메서드의 트랜잭션을 어떻게 처리할지(합류/분리/금지)를 정하는 정책입니다. 스프링은 기본적으로 프록시 기반 AOP로 @Transactional을 적용하므로, 다른 빈에서 ‘public 메서드’를 호출할 때 전파 규칙이 동작합니다. (같은 클래스 내부 self-invocation은 프록시를 안 거치기 때문에 전파가 적용되지 않으니 주의 바랍니다.) 1. @Transactional 메타데이터 해석 우선순위 Transaction Advice는 호출 시점에 TransactionAttributeSource를 통해 메타데이터를 조회.. 2025. 8. 17. [Junit5] Junit5 정리 1 - Junit5에서 제공하는 어노테이션 [Junit5] Junit5 정리 1 - Junit5에서 제공하는 어노테이션JUnit 5는 크게 JUnit Platform(실행 기반), JUnit Jupiter(새 테스트 API/엔진), JUnit Vintage(JUnit4 호환)로 구성됩니다. 실무에서 우리가 쓰는 어노테이션은 대부분 Jupiter에 있습니다.JUnit Platform: 테스트 실행 플랫폼(런너).JUnit Jupiter: JUnit 5 API와 엔진(우리가 쓰는 어노테이션 대부분).JUnit Vintage: JUnit4 테스트 실행 호환.표 정리어노테이션역할@Test일반 테스트@DisplayName테스트 이름 꾸미기@Disabled임시 비활성화@Timeout시간 제한@RepeatedTest반복 실행 @BeforeAll / @Aft.. 2025. 8. 10. [TDD] Test Double [TDD] Test Double테스트를 위해 실제 구현을 대체하는 대역 객체를 통칭합니다. 종류설명Dummy파라미터 전달용, 실제 동작 없음Fake간단한 실제 동작(예: 인메모리 DB)Stub미리 정의된 응답만 제공SpyStub 기능 + 호출 기록 기능Mock기대 행위 설정 및 호출 검증 1. 예시 코드1-1. Dummy// Dummy 구현: 실제로는 아무런 동작도 수행하지 않음public class DummyPaymentGateway implements PaymentGateway { @Override public void pay(int amount) { // no-op }}class OrderServiceTest { @Test void placeOrder_wit.. 2025. 8. 3. 이전 1 2 3 4 ··· 8 다음 728x90