spring 53

트랜잭션(Transaction) — ACID, 격리 수준, MVCC까지

Java/Spring 백엔드 면접 준비 학습 노트1. 트랜잭션이란?트랜잭션은 더 이상 쪼갤 수 없는 작업의 최소 단위다. 여러 쿼리를 하나의 묶음으로 처리해 데이터 정합성을 보장하는 핵심 개념이다.왜 필요한가? — 계좌이체 예시원이가 민수에게 10만원을 이체할 때 두 쿼리가 필요하다.UPDATE accounts SET balance = balance - 100000 WHERE user = '원'; -- 1단계UPDATE accounts SET balance = balance + 100000 WHERE user = '민수'; -- 2단계1단계 실행 후 서버가 죽으면 원이 통장은 -10만원이지만 민수 통장은 그대로 — 돈이 사라진다.두 쿼리를 하나의 트랜잭션으로 묶어야 둘 다 성공하거나, 둘 다 실패하도..

Computer Science 2026.06.12

IoC / DI 정리

1. IoC — 제어의 역전핵심 개념IoC(Inversion of Control)는 이름 그대로 제어권이 역전된다는 개념이다.전통적인 방식에서는 개발자가 직접 객체를 생성, 의존성 연결, 생명주기를 관리했다.Spring에서는 이 모든 제어권이 Spring 컨테이너로 넘어간다. 구분전통 방식IoC 방식객체 생성개발자가 new로 직접 생성Spring 컨테이너가 생성의존성 연결개발자가 코드에서 직접 연결컨테이너가 자동으로 주입생명주기 관리개발자가 직접 관리컨테이너가 관리구현체 결정코드에 하드코딩설정(Config)에서 결정전통 방식의 문제전통 방식에서는 클래스가 의존하는 구체 클래스를 직접 알아야 한다.public class OrderService { private MemberRepository repo ..

[Spring HTTP Client] 2. Blocking / Non-blocking, Sync / Async 정리

이전 글에서 RestTemplate, WebClient, RestClient의 차이를 정리했다.https://foreverwon.tistory.com/entry/Spring-HTTP-Client-RestTemplate-vs-WebClient-vs-RestClient그런데 HTTP 클라이언트를 이해하려면 반드시 알아야 하는 개념이 있다.Blocking vs Non-blockingSynchronous vs Asynchronous이 네 가지가 정확히 무엇인지 모르면 WebClient가 고성능인 이유, RestClient가 MVC 환경에 적합한지 이해하기 어렵다.이번 글에서는 이 개념을 정리한다.1. Blocking vs Non-blocking이 개념은 스레드 관점이다.요청을 보냈을 때 현재 스레드가 기다리는가..

[Spring HTTP Client] 1. RestTemplate vs WebClient vs RestClient

외부 API 호출은 백엔드 개발에서 거의 필수적인 기능이다.결제, 인증, 메시징, 지도, 사내 MSA 통신 등 대부분의 서비스는 외부 시스템과 통신한다.Spring에서는 HTTP 호출을 위해 세 가지 주요 클라이언트를 제공한다.RestTemplateWebClientRestClient이번 글에서는 이 세 가지의 차이점과 특징을 정리한다.1. 비교 구분 등장 시기 방식 현재 권장 여부 RestTemplateSpring 3Blocking (동기)유지보수 모드WebClientSpring 5Non-blocking (Reactive)적극 권장RestClientSpring 6Blocking (동기, 개선형)최신 대안2. RestTemplate1) 개요과거 표준 HTTP 클라이언트동기(Blocking) 방식요청을..

AOP에서 자기 호출(self invocation) 문제와 해결법

1. self invocation 문제 정의프록시 기반 동작 구조에서 발생한 클래스 내의 메서드에서 다른 내부 메서드를 호출할 때, AOP 어노테이션이 적용되지 않는 현상Spring AOP는 프록시 기반이므로같은 클래스 내 자기 호출(self-invocation)에서는 프록시가 개입하지 않아 AOP가 동작하지 않음자기 호출: 프록시를 거치지 않고 같은 객체(this) 내에서 직접 메서드를 호출하는 구조@Trasactional 자기 호출 문제메서드에 @Trasactional 어노테이션이 붙어있으면 프록시가 해당 메서드를 감싸서 트랜잭션을 시작 및 관리@Trasactional 어노테이션이 있는 메서드를 내부에서 직접 호출하면트랜잭션이 이미 열려 있지 않은 경우 새 트랜잭션 생성 X@Async 자기 호출 문제..

로컬 캐시와 분산 캐시

1. 로컬 캐시란?정의애플리케이션 서버의 메모리 내부에 데이터를 저장하여 자주 사용되는 정보를 빠르게 접근하게 해주는 인메모리 임시 저장소캐시를 먼저 확인하고 존재하지 않으면 DB에서 조회 후 캐시에 저장. 이후 동일한 요청이 들어오면 메모리에서 즉시 응답 반환캐시 최적화: 무한정 데이터를 쌓을 경우 메모리 과다 사용 → 효과적인 캐시 사용을 위해 캐시 최적화 필요캐시 크기 제한너무 작은 크기를 적중률를 떨어뜨리고, 너무 큰 크기는 GC 부하 유발만료 정책 설정: 일정 시간이 지나면 데이터를 자동으로 제거시간 기반 만료접근 기반 만료LRU(Least Recently Used) 방식으로 작동캐시에 접근하면 최근 사용 시간을 갱신하고 LRU 알고리즘에 따라 오래된 항목 제거캐시 항목 제거 리스너캐시 항목이 ..

[Spring] Spring Cache

1. Spring Cache 주요 어노테이션@Cacheable캐시가 없을 경우 메서드를 실행하고 그 결과를 캐시에 저장캐시가 있으면 메서드를 실행하지 않고 캐시의 데이터 반환@CachePut캐시를 조회하지 않고 항상 메서드를 실행하여 메서드 결과로 캐시 업데이트@CacheEvict특정 키를 가진 캐시 데이터 제거2. @Cacheable목적데이터 조회 및 저장데이터 조회 시, 반복적으로 DB에 접근하는 것을 피하고 캐시를 활용하여 성능 향상동작 방식메서드가 호출되면 key에 해당하는 캐시가 있는지 확인캐시 데이터 O: DB 접근 없이 캐시 데이터 즉시 반환캐시 데이터 X: 메서드를 실행 → 반환된 결과를 key와 함께 캐시에 저장 → 반환사용 시점자주 변경되지 않는 데이터 조회메뉴, 카테고리 등 자주 변경..

[Spring] 비동기 환경에서 컨텍스트 정보 전달 방법

1. 비동기란?별도의 스레드 풀이나 다른 스레드에서 코드를 실행하는 방식@Async, CompletableFuture, ExecutorService 등현재 요청 스레드와 다른 스레드에서 로직이 수행되는 것2. 컨텍스트 정보란?MDC (Mapped Diagnostic Context)Logback과 같은 로깅 프레임워크에서 제공하는 기능로그에 사용자 ID, 요청 ID 등 공통 정보를 저장하는 공간로그 추적 ID, 사용자 ID를 자동으로 로그에 포함시켜 로그 추적에 사용SecurityContextSpring Security와 같은 보안 프레임워크에서 사용현재 인증된 사용자의 정보(Authentication) 등을 저장하는 곳비동기 로직에서도 인증 정보 유지를 위해 필요이 정보는 애플리케이션 내에서 현재 사용자..

[Spring Security] 인증/인가 프로세스

인증(Authentication) 처리 흐름UsernamePasswordAuthenticationFilter: 로그인 요청을 가로채어 Authentication 객체를 만듭니다.AuthenticationManager: 인증 처리의 중심이며, 하나 이상의 AuthenticationProvider에 인증을 위임합니다.AuthenticationProvider: 실제 인증 로직(예: DB 조회, 비밀번호 비교 등)을 담당합니다.SecurityContext: 현재 인증된 사용자(Authentication)를 보관합니다.HttpSession: SecurityContext를 세션에 저장하여 요청 간 상태를 유지합니다.포인트설명인증 시작UsernamePasswordAuthenticationFilter가 로그인 요청을 ..

[Batch] BatchConfig 틀

Spring Batch 5 (Spring Framework 6, Spring Boot 3 계열)부터는 JobBuilderFactory, StepBuilderFactory가 deprecated 되고, 직접 JobRepository와 PlatformTransactionManager를 주입받아 Job/Step을 생성하는 방식을 쓰게 됐음Batch Config 틀에서 Job/Step만 커스텀해서 우려먹기 가능@Configuration@EnableBatchProcessing@RequiredArgsConstructorpublic class BatchConfig { private final JobRepository jobRepository; private final PlatformTransactionMan..

728x90