Spring: Part 5. Spring Configuration
·
🍃SpringBoot
Part 5. Spring Configuration5.1 Java Config와 XML Config앞에서 Spring은 Bean을 생성하고 관리하며, Scope를 통해 Bean의 생명주기를 제어한다는 것을 살펴보았습니다. 그렇다면 Spring은 이러한 Bean 정보를 어디에 정의할까요? Spring은 Bean을 생성하고 관리하기 위해 설정(Configuration)이 필요합니다. 초기 Spring 프로젝트에서는 XML을 통해 Bean을 등록했지만, 현재는 Java 기반의 설정(Java Config)이 표준으로 사용됩니다. 이번 장에서는 XML Config와 Java Config의 차이점을 살펴보고, Spring Boot가 Java Config를 기본으로 사용하는 이유를 알아봅니다.1. Spring Con..
Spring: Part 4. Bean 생명주기(Lifecycle)
·
🍃SpringBoot
Part 4. Bean 생명주기(Lifecycle)스프링(Spring) 프레임워크는 Bean을 생성하고 의존성을 주입하여 관리합니다. 그렇다면 Bean은 생성된 이후부터 애플리케이션이 종료될 때까지 어떤 과정을 거칠까요? 스프링은 단지 객체를 생성하는 데서 끝나지 않고 생성, 초기화, 의존성 연결, 소멸까지의 전체 과정을 자동으로 안전하게 관리합니다. 이 과정을 'Bean 생명주기(Bean Lifecycle)'라고 합니다.4.1 Bean 생명주기(Bean Lifecycle)란?스프링 컨테이너가 Bean 객체를 생성한 시점부터 애플리케이션 종료로 인해 소멸될 때까지 관리하는 전체 흐름을 의미합니다.기본 생명주기 흐름Bean 생성 (Create)의존성 주입 (Dependency Injection)초기화 (I..
Spring: Part 3. 의존성 주입(DI)과 활용
·
🍃SpringBoot
Part 3. 의존성 주입(DI)과 활용3.1 의존성 주입(DI)의 종류앞서 DI(Dependency Injection)는 객체가 필요한 의존성을 직접 생성하지 않고 외부(Spring 컨테이너)로부터 전달받아 연결하는 메커니즘임을 살펴보았습니다.Spring Framework는 객체 간의 의존성을 주입하기 위해 총 4가지 방식을 지원합니다.생성자 주입 (Constructor Injection)수정자 주입 (Setter Injection)필드 주입 (Field Injection)일반 메서드 주입 (Method Injection)모든 방식이 기술적으로 동작은 가능하지만, 실무와 Spring 공식 문서에서는 생성자 주입을 절대적인 표준으로 권장합니다.각 주입 방식의 코드 형태와 특징, 그리고 왜 생성자 주입이 ..
Spring: Part 2. IoC 컨테이너와 Bean
·
🍃SpringBoot
Part 2. IoC 컨테이너와 Bean2.1 IoC와 DI의 개념 (제어의 역전과 의존성 주입)Spring Framework를 이해할 때 가장 근간이 되는 두 축은 IoC(Inversion of Control, 제어의 역전)와 DI(Dependency Injection, 의존성 주입)입니다. 많은 초심자가 IoC를 단순히 "Spring이 객체를 대신 생성해 주는 편리한 기능" 정도로 오해하지만, 이는 결과물 중 일부일 뿐입니다. IoC와 DI의 본질은 객체의 생명주기 제어권을 프레임워크에 위임하고, 객체 간의 결합도를 낮추기 위한 구조적 설계 메커니즘에 있습니다.1. 제어의 역전 (IoC)이란?전통적인 자바 프로그래밍에서는 개발자가 작성한 코드가 객체의 생성부터 생명주기 전체를 직접 제어했습니다.생성 ..
Spring: Part 1. Spring Framework의 이해
·
🍃SpringBoot
Part 1. Spring Framework의 이해1.1 Spring Framework란?Spring Framework는 Java 기반 애플리케이션을 효율적으로 개발하기 위한 오픈소스 프레임워크입니다. 현재 Java 백엔드 개발에서 가장 널리 사용되며 웹, 배치, 마이크로서비스 등 다양한 환경에서 활용됩니다. Spring을 제대로 이해하기 위해서는 단순히 어노테이션 사용법을 익히는 것을 넘어, "Spring이 왜 등장했고 어떤 문제를 해결하려 했는가"를 아는 것이 출발점입니다. Spring Framework의 등장 배경초기 Java 웹 애플리케이션은 Servlet과 JSP를 중심으로 개발되었습니다. 당시에는 객체를 코드 내부에서 직접 생성하고 연결하는 방식이 일반적이었습니다.public class Mem..
Spring IoC & DI 완전 정복: Chapter 8. Proxy와 Spring AOP
·
🍃SpringBoot
들어가며: 완성된 Bean을 두고 왜 또 다른 객체를 만드는가?Spring Container는 BeanDefinition을 기반으로 Bean을 생성하고, 의존성을 해결하여 객체 그래프를 완성한다. 나아가 BeanPostProcessor를 통해 생성이 완료된 Bean을 후처리한다. 여기서 한 가지 의문이 발생한다. 이미 완성된 Bean이 있는데, Spring은 왜 굳이 또 다른 객체를 만들어 등록하는가?Spring의 이례적인 동작 방식: 원본 Bean을 그대로 사용하지 않고, 전혀 다른 객체를 생성하여 Bean 대신 등록한다. 애플리케이션은 원본 객체가 아닌 이 새로운 객체를 사용하게 된다.성능상의 손해 감수: 객체를 추가로 생성하는 것은 메모리 사용량 증가와 메서드 호출 단계 추가를 의미한다.핵심 기능의..
Spring IoC & DI 완전 정복: Chapter 7. BeanPostProcessor와 Spring의 확장 포인트
·
🍃SpringBoot
들어가며: "Spring은 이미 생성된 Bean에 어떻게 새로운 기능을 투명하게 추가할까?" 앞 장에서는 Spring이 BeanDefinition을 바탕으로 Bean을 생성(Instantiate)하고, 의존성을 해결(Populate/DI)하여 하나의 완성된 객체 그래프를 구축하는 과정을 다루었습니다. 여기서 한 가지 근본적인 의문이 생깁니다.OrderService 객체가 메모리에 올라가고, 필요한 PaymentService 의존성까지 모두 주입되었다면 Spring의 역할은 여기서 완전히 끝난 것일까요?실제 Spring 애플리케이션의 Bean들은 생성 직후보다 생성된 이후에 훨씬 더 놀라운 일들을 겪게 됩니다.@Service@Transactionalpublic class OrderService { ..
Spring IoC & DI 완전 정복: Chapter 6. Spring은 의존성을 어떻게 해결할까?
·
🍃SpringBoot
들어가며: "Bean은 만들어졌다. 그런데 Spring은 수많은 Bean 중에서 어떤 객체를 찾아 연결할까?"앞 장에서는 Spring이 BeanDefinition을 기반으로 Bean을 생성하는 5단계 파이프라인을 살펴보았다. 그러나 객체를 인스턴스화(Instantiate)했다고 해서 곧바로 사용할 수 있는 것은 아니다. 객체지향 세계에서 단독으로 모든 일을 처리하는 객체는 드물다. OrderService는 PaymentService가 필요하고, PaymentService는 PaymentGateway가 필요하다.따라서 Bean은 메모리에 올리는 것만으로는 부족하며, 필요한 의존성을 찾아 서로 연결(Link)해야 비로소 하나의 객체 그래프(Object Graph)가 완성된다. Spring은 이 과정을 Dep..
Spring IoC & DI 완전 정복: Chapter 5. BeanDefinition과 Bean 생성 과정
·
🍃SpringBoot
Chapter 5. BeanDefinition과 Bean 생성 과정"Spring은 왜 객체를 관리하기 전에, 먼저 객체의 설계도를 관리할까?" 앞 장에서는 Spring Container가 Bean을 생성하고 관리하는 실행 환경이라는 점을 살펴보았다. 또한 Bean은 특별한 객체가 아니라 Spring Container가 관리하는 객체라는 사실도 확인했다. 그렇다면 이제 자연스럽게 새로운 질문이 생긴다."Spring은 어떤 Bean을 생성해야 하는지 어떻게 알고 있을까?"애플리케이션에는 수십 개, 많게는 수천 개의 Bean이 존재한다. Spring은 이 모든 객체를 무작정 생성하지 않는다. 먼저 어떤 객체를 생성해야 하는지, 어떻게 생성해야 하는지, 어떤 의존성을 가져야 하는지에 대한 정보를 수집한다. 그리..
Spring IoC & DI 완전 정복: Chapter 4. Spring Container는 무엇인가?
·
🍃SpringBoot
들어가며: "Container를 이해하면 Bean, DI, AOP, Transaction이 모두 하나의 그림으로 연결된다." 대부분의 Spring 개발자가 `@Component`, `@Bean`, `@Autowired`를 일상적으로 사용하지만, 정작 Spring Container가 무엇인지 명확하게 설명하는 데는 어려움을 겪는다. 이 장은 단순히 ApplicationContext라는 인터페이스를 소개하는 데 그치지 않고, Spring이라는 프레임워크의 심장(Heart)이자 핵심 운영 체제를 파헤치는 장이다.4.1 Framework와 Library의 차이Spring Container를 제대로 이해하려면, 먼저 Framework와 Library의 결정적인 차이부터 짚고 넘어가야 한다. 두 개념 모두 재사용 ..