Spring 7

[중요!] @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

ArgumentResolver의 작동 원리: Spring MVC에서 파라미터 처리 흐름과 활용 방법

이 글에서는 HTTP 요청에서부터 ArgumentResolver가 어디서 작동하는지 전반적인 흐름과 원리를 살펴보려 합니다.저는 흐름을 알고 난 후 개발, 디버깅, 최적화 하는데 훨신 도움이 많이되어서 해당 파트를 넣었습니다. 만일 ArgumentResolver의 작동 방식에만 관심이 있으시다면, 3번으로 이동하셔도 좋습니다.그리고 ArgumentResolver를 이용한 개발은 아래 url을 참고해주세요.개발 : https://youseong.tistory.com/23구체적인 내용은 다음과 같은 순서로 구성되어 있습니다:1. ArgumentResolver를 이용한, 자주 사용되는 주요 어노테이션2. 요청부터 응답까지: HTTP 요청의 전체 흐름3. ArgumentResolver의 동작 원리아래로 스크롤하..

Spring 2023.07.31

Spring Boot AutoConfiguration: 작동 원리와 성능 최적화 방법

AutoConfiguration을 사용하는 Class는 다음과 같은 것들이 있습니다.DataSource, TransactionManager, jdbcTemplate 등우리가 흔이 사용하는 것들이죠? 이 글에서는 AutoConfiguration의 작동 원리에 대해 배우고, 이를 사용해 개발 과정을 어떻게 최적화할 수 있는지에 대해 다루겠습니다. 글 순서AutoConfiguration 등록 순서AutoConfiguration 작동 원리AutoConfiguration 활용하기(라이브러리 제작)AutoConfiguration 성능 최적화AutoConfiguration 사용 시 주의사항1. AutoConfiguration 등록 순서우선, Spring Boot는 애플리케이션 시작 시 @ComponentScan이 실..

Spring 2023.07.30

스프링 MVC에서 커스텀 ArgumentResolver로 코드 중복 줄이기: @UserCache 구현 예제

소스코드: GitHub - youseonghyeon/argument-resolverContribute to youseonghyeon/argument-resolver development by creating an account on GitHub.github.com ArgumentResolver를 이용해서 Controller 파라미터 어노테이션을 만들어보겠습니다 !! 1. 사용 목적컨트롤러(Controller)에서 인증 정보나 헤더 정보를 활용해야 할 때가 종종 있습니다. 예를 들어, 쿠키(cookie)에 저장된 세션 ID를 이용하여 사용자 정보를 가져오는 경우를 생각해보겠습니다.기존 방식으로는 다음과 같이 세션 ID를 이용하여 사용자 정보를 가져오는 코드를 작성할 수 있습니다. @GetMapping..

Spring 2023.07.13

스프링 라이브러리 만들기 @AutoConfiguration

스프링에서 사용할 수 있는 라이브러리를 만들어보자 대학 시절, 저는 개인적인 프로젝트로 라이브러리를 만들고자 했습니다. 이 과정에서 여러 블로그를 참조하며 시행착오를 겪었고, 그 경험은 저에게 많은 것을 가르쳐 주었습니다. 이번 글에서는 그때의 경험을 바탕으로, 라이브러리 생성을 쉽고 자세하게 이해할 수 있도록 안내해드리려 합니다. 그러므로 이번 글은 조금 더 자세하게 작성하였습니다. 본론으로..Spring Boot의 @AutoConfiguration을 이용한 라이브러리 제작 방법에 대해 알아보겠습니다.글의 순서는 다음과 같습니다.프로젝트 생성 및 AutoConfiguration 라이브러리 추가메인 코드 작성@AutoConfiguration 추가Spring이 읽을 수 있는 설정 파일 생성라이브러리 빌드라..

Spring 2023.03.24