반응형

SpringFramework 3

[Spring] @Async 동작 원리 및 ThreadPoolTaskExecutor 최적화 방안

스프링 프레임워크에서 비동기 처리(Asynchronous Processing)는 API 응답 시간 단축과 시스템 자원 효율화를 위해 필수적인 기법입니다. 보통 @Async 어노테이션을 사용하여 손쉽게 구현하지만, 그 배후에 있는 스레드 풀(Thread Pool)의 동작 메커니즘을 이해하지 못하면 심각한 장애(OutOfMemoryError, Thread Starvation)를 초래할 수 있습니다.본 문서에서는 스프링 비동기 처리의 내부 원리를 분석하고, 안정적인 서비스를 위한 ThreadPoolTaskExecutor 모범 설정(Best Practice)을 가이드합니다.1. @Async와 기본 Executor의 위험성별도의 설정 없이 @EnableAsync만 적용할 경우, 스프링은 기본적으로 SimpleAs..

[Spring/JPA] Spring JPA N+1 문제 정리: 원인, 예시 코드, Fetch Join/EntityGraph 해결 전략

JPA(Java Persistence API)를 실무에 도입했을 때 가장 빈번하게 마주치는 성능 이슈는 단연 N+1 문제입니다. 이 문제는 단순한 쿼리 수 증가를 넘어 데이터베이스 부하를 기하급수적으로 늘리는 주원인이 됩니다.본 문서는 N+1 문제가 발생하는 기술적 메커니즘을 심층 분석하고, 실무 환경(페이징, 대량 데이터 등)에 따른 최적의 해결 전략을 가이드합니다.1. N+1 문제의 정의 및 발생 원인N+1 문제란 연관 관계가 설정된 엔티티를 조회할 때, 조회된 데이터 갯수(N)만큼 연관관계 조회를 위한 추가 쿼리가 발생하는 현상을 말합니다.N+1 문제 예시회원(Member) 10명을 조회한다고 가정해 봅시다. (회원은 각각 하나의 팀(Team)에 소속되어 있습니다.)최초 1번: "회원 10명을 다 ..

[Spring] Spring Bean 주입 방식 정리

[Spring] Spring Bean 주입 방식 정리스프링 프레임워크(Spring Framework)의 핵심 철학 중 하나인 의존성 주입(Dependency Injection, DI)은 객체 간의 결합도를 낮추고 유연한 코드를 작성하게 돕습니다.실무에서 Bean을 주입받는 방식은 크게 세 가지로 나뉘지만, 각 방식의 특징과 장단점을 명확히 이해하지 못하고 혼용하는 경우가 많습니다. 본 문서에서는 필드 주입, 수정자 주입, 생성자 주입의 차이를 기술적으로 분석하고, 왜 생성자 주입(Constructor Injection)이 표준으로 자리 잡았는지 고찰합니다.1. Spring DI 방식의 종류스프링 컨테이너가 빈을 주입하는 시점과 방식에 따라 다음 세 가지로 분류됩니다.1) 필드 주입 (Field Injec..

반응형