의존성 주입 3

[중요!] @Transactional(AOP)가 동작하지 않는 이유 this.update();

이전부터 작성하고 싶었던 주제였습니다. @Transactional 같은 AOP를 사용할 때 종종 발생하는 문제 중 하나는"어노테이션을 붙였는데 값이 업데이트되지 않지? AOP가 작동하지 않지?" 같은 상황입니다.코드상으로도 문제없어 보이고 에러도 나지 않지만, 기능이 제대로 작동하지 않을 때가 있죠. 다음 예제 코드에서 그 문제를 확인해 보겠습니다.updateUserWithLogging() 메서드를 호출하면 로그는 정상적으로 출력되지만,user 객체의 업데이트가 이루어지지 않는 문제가 있습니다. 여기서 @Transactional이 적용되어 있으므로 TransactionManager가 실행되어야 합니다. 그러나 UserController에서 updateUserWithLogging() 메서드를 호출할 경우 ..

Spring 2024.10.31

스프링 의존성 주입(DI)

Spring 프레임워크의 핵심 기능 중 하나는 의존성 주입(DI, Dependency Injection)입니다. DI는 객체 간의 결합을 줄이고 코드의 유연성과 확장성을 높이는 설계 방식으로, 스프링에서는 이를 통해 객체 간의 관계를 간단하게 설정할 수 있습니다. 1. 의존성 주입(DI)란?의존성 주입(DI)이란 객체가 사용할 의존성을 외부에서 주입해주는 설계 패턴입니다. 전통적인 객체 지향 프로그래밍에서는 객체 내부에서 필요한 의존성을 직접 생성하거나 설정합니다. 하지만 DI를 사용하면 외부에서 필요한 의존성을 전달받아 객체가 스스로 관리할 필요 없이 주어진 의존성만 사용할 수 있게 됩니다. 예시public class OrderService { private final PaymentService ..

Spring 2024.10.30

유연한 코드 설계: 의존성 주입(DI)과 그 장점

의존관계(Dependency)가 무엇인지부터 알아보겠습니다. 셰프와 재료 공급업체를 예로 들겠습니다. 셰프 (클래스 A): 셰프는 요리를 만들기 위해 식재료가 필요합니다. 셰프가 재료 없이는 요리를 만들 수 없으므로, 재료에 의존하고 있습니다.쿠팡 재료 공급업체 (클래스 B): 재료 공급업체는 셰프가 필요로 하는 재료를 제공합니다.이처럼 셰프 -> 재료 공급업체 의 의존 관계가 형성되었습니다. 이를 코드로 나타내면 다음과 같습니다. public class Chef { private CoupangIngredientSupplier coupangIngredientSupplier; public Chef() { this.coupangIngredientSupplier = new Coupang..

Spring 2023.08.05