spring
-
트랜잭션 기본 개념과 스프링 적용 방식spring/개념 2025. 9. 1. 19:40
1) 트랜잭션 기본: 정의와 ACID**트랜잭션(Transaction)**은 “모아놓은 작업 단위를 전부 성공(Commit)하거나 전부 실패(Rollback)시키는” 데이터베이스의 논리적 작업 묶음이야. 이를 이해하는 핵심 축이 ACID.A(Atomicity, 원자성): 올-or-낫싱. 일부만 적용된 상태가 남지 않음.보장 장치: DB의 Write-Ahead Log(WAL)/undo 로그, 저장점(savepoint), 롤백 세그먼트. 실패 시 로그를 따라 되돌림.C(Consistency, 일관성): 트랜잭션 전후로 DB의 제약(무결성)이 항상 참.보장 장치: PK/UK/FK/체크/트리거/도메인 규칙 + 애플리케이션 레벨의 비즈니스 규칙. 스프링은 이를 돕지만 “일관성” 자체는 DB 스키마/규칙이 1차적 ..
-
spring aop - 2편 (proxy)spring/aop 2025. 8. 20. 11:22
1. Proxy 기반 동작 구조 (Spring AOP)Spring AOP는 런타임에 프록시 객체를 만들어서, 클라이언트가 Target Object(비즈니스 로직 객체)를 호출할 때 중간에 Advice를 실행시킵니다.클라이언트 → 프록시 객체 → (Advice 실행) → Target Object(실제 메서드 실행)즉, 클라이언트는 Target Object를 직접 부르지 않고 Proxy 객체를 호출하게 됩니다.Spring이 Bean을 등록할 때 원래 객체 대신 Proxy 객체를 빈으로 등록해두기 때문에, DI/Autowired 시점에 주입되는 것도 사실은 Proxy입니다.1-1. Proxy 객체의 정의Proxy 객체란? → 원래 객체(Target Object)를 대신해서 동작하는 "대리 객체".역할:프록시(..
-
spring aop - 1편(기본 개념)spring/aop 2025. 8. 20. 11:06
1. AOP(관점 지향 프로그래밍, Aspect-Oriented Programming)가 생겨난 이유문제: 객체지향(OOP)만으로는 **흩어져 있는 공통 기능(횡단 관심사, cross-cutting concerns)**을 깔끔하게 분리하기 어려움.예: 모든 메서드 실행 전에 로그 찍기, 트랜잭션 처리, 보안 검사→ 각 메서드에 logger.info("시작"), try/catch, @Transactional 같은 중복 코드가 늘어남.해결책: 핵심 비즈니스 로직과 이런 부가 기능을 분리해서 관리하고, 런타임 시 자동으로 "끼워 넣는" 기술 필요.AOP 등장: 공통 기능을 별도로 정의해두고, "어느 시점(JoinPoint)에, 어떤 방식(Advice)으로 적용할지" 선언적으로 설정.Spring은 Proxy 기..
-
spring-boot-starter-test는 어떻게 동작하는가.spring/mockito 2025. 2. 21. 21:10
spring-boot-starter-test의 동작 방식테스트 실행 시 Spring Boot는 테스트 컨텍스트(TestContext)를 생성하여 실행됩니다. 테스트 컨텍스트 로딩@SpringBootTest 또는 @ContextConfiguration 등의 어노테이션을 통해 Spring의 애플리케이션 컨텍스트를 로드함.이 과정에서 필요한 빈(Bean)을 생성하고, ApplicationContext를 초기화.spring-boot-starter-test는 기본적으로 SpringBootTestContextBootstrapper를 사용하여 컨텍스트를 초기화함.테스트 환경 설정@MockBean, @SpyBean 등을 사용하여 특정 빈을 목(Mock) 객체로 대체할 수 있음.@TestConfiguration을 통해 ..
-
스프링 Gradle 동작원리spring 2025. 2. 21. 17:38
Gradle의 기본 개념Gradle은 Groovy 또는 Kotlin DSL 기반의 빌드 자동화 도구로, 의존성 관리와 프로젝트 빌드를 효율적으로 수행할 수 있도록 설계되었습니다.Spring Boot 프로젝트에서는 build.gradle 또는 build.gradle.kts 파일을 사용하여 프로젝트의 빌드 및 실행 환경을 설정합니다. Gradle 설정 파일(build.gradle)의 주요 요소Gradle 설정 파일은 크게 다음과 같은 구조로 이루어져 있습니다. ✅ Maven Central 설정(Repository 설정)repositories { mavenCentral() // Maven Central 리포지토리 추가} 이 설정이 포함되면 Gradle은 Maven Central 리포지토리에서 의존성을 ..
-
Spring MVC에서 DispatcherServlet이 관리하는 Resolver의 종류와 실행 방식spring 2025. 2. 20. 21:10
DispatcherServlet의 전체 실행 흐름클라이언트 요청HandlerMapping 실행 → 컨트롤러 찾기HandlerAdapter 실행 → 컨트롤러 실행 방식 결정HandlerMethodArgumentResolver 실행 → 메서드 인자 바인딩컨트롤러 메서드 실행예외 발생 시 HandlerExceptionResolver 실행ViewResolver 실행 → View 렌더링FlashMapManager 실행 → 리다이렉트 시 데이터 유지클라이언트에게 응답 반환 DispatcherServlet이 관리하는 Resolver의 종류Spring MVC에서 DispatcherServlet이 관리하는 주요 Resolver들은 다음과 같습니다.Resolver 종류역할실행 시점HandlerMapping요청 URL에 따..
-
ApplicationContext의 EventListener 동작 원리 & ApplicationEventPublisherspring 2025. 2. 18. 17:15
Spring의 ApplicationContext는 이벤트(Event) 기반의 비동기 처리를 지원합니다.이 과정에서 ApplicationEventPublisher가 사용됩니다.이벤트(Event) 기반의 비동기 처리에서 "이벤트"는 특정 동작이나 상태 변화, 혹은 시스템의 변화로 발생하는 신호를 의미합니다.예를 들어, 사용자 클릭, 데이터베이스 업데이트, 파일 업로드 완료와 같은 상태 변화가 이벤트가 될 수 있습니다. 이 이벤트가 발생하면 해당 이벤트를 처리하는 리스너(listener)나 핸들러(handler)가 비동기적으로 호출되어 해당 이벤트에 대한 처리를 수행합니다. Spring Event의 주요 구성 요소Spring 이벤트 시스템은 Observer 패턴을 기반으로 동작하며, 주요 구성 요소는 다음과 ..
-
ApplicationContext vs BeanFactoryspring 2025. 2. 18. 15:46
스프링 빈이란?자바빈에서 유래.자바빈은 자바에서 재 사용 가능한 객체를 말한다. 즉 스프링 빈이란 스프링에서 재 사용 가능한 객체를 말함. ⚙️ 1️⃣ BeanFactory란?BeanFactory는 Spring IoC 컨테이너의 최소한의 핵심 인터페이스.주요 역할은 **빈(Bean)**을 생성하고, **의존성을 주입(DI)**하며, 라이프사이클을 관리함.IoC(Inversion of Control): 제어의 역전객체 생성 및 관리를 개발자가 아닌 → **Spring Container(Spring IoC Container)**가 담당의존성 관리(DI): 필요한 객체를 필요한 곳에 자동 주입 🧱 주요 특징:Lazy Initialization(지연 초기화): 요청 시점에만 빈을 생성DI(Dependency ..