Spring Framework - 의존관계 자동 주입 - 1. 의존관계 주입 방법
2023. 5. 17. 01:37
Spring & JPA/Spring
들어가며 이전 파트인 컴포넌트 스캔의 경우에는 스프링 프레임워크에서 어떻게 각 클래스들을 스프링 빈으로 자동으로 등록하하는지에 대해 알아보았다. 이번 파트에서는 @Configuration에서 직접 수행하는 방식의 수동 의존관계 주입이 아니라 자동으로 DI를 하는 의존관계 자동 주입을 스프링 프레임워크에서 어떻게 수행하는지에 대해 알아본다. 만약 DI의 개념이 혼동스럽거나 기억나지 않는다면 DI의 개념 포스트나 다른 곳에서 DI의 개념을 확실히 익히고 보는 것을 추천한다. Spring Framework - DI의 개념 - 2. 다형성의 한계 돌아보기 1에서는 SOLID 원칙과 다형성에 대해서 잠시 언급했었다. 문제는 다형성을 사용하는것 만으로는 SOLID를 모두 지키면서 구현이 매우 힘들다는 점이다. 이번..
Spring Framework - 컴포넌트 스캔 - 2. 컴포넌트 스캔 위치, 대상, 필터
2023. 5. 15. 15:37
Spring & JPA/Spring
들어가며 이전 포스트에서 자동으로 클래스를 스프링 빈으로 등록해주는 컴포넌스 스캔에 대하여 알아보았다. 이번 포스트에서는 컴포넌트 스캔의 범위 지정과 컴포넌트 스캔 대상, 필터와 중복된 컴포넌트가 존재할 경우에 대해 다루어 볼 것이다. Spring Framework - 컴포넌트 스캔 - 1. 컴포넌트 스캔과 의존관계 자동 주입 들어가며 이번 포스트부터는 스프링 프레임워크가 @Bean으로 직접 수동으로 스프링 빈을 등록하지 않는 상태에서도 어떻게 객체들을 스프링 빈으로 등록하는지와 의존관계를 자동 주입하는 방 sehun5515.tistory.com 컴포넌트 스캔의 시작 위치 스프링 프레임워크도 결국 JVM위에서 돌아가는 일종의 자바 소스 코드의 집합에 불과하단 사실을 인지하고 있어야 한다. 이 말은 결국 ..
Spring Framework - 컴포넌트 스캔 - 1. 컴포넌트 스캔과 의존관계 자동 주입
2023. 5. 13. 23:15
Spring & JPA/Spring
들어가며 이번 포스트부터는 스프링 프레임워크가 @Bean으로 직접 수동으로 스프링 빈을 등록하지 않는 상태에서도 어떻게 객체들을 스프링 빈으로 등록하는지와 의존관계를 자동 주입하는 방법에 대해 알아본다. 컴포넌트 스캔 컴포넌트 스캔은 스프링이 각 객체를 스캔하면서 @Component가 존재하는 클래스의 인스턴스들을 스프링 컨테이너에 적재시킨다. 이를 수행하려면 다음과 같이 코드를 짜면 된다. @Configuration @ComponentScan public class AutoAppConfig{ } 코드를 보면 내부에 그 어떠한 코드도 없다. 심지어 @Bean으로 등록한 클래스들도 없다. 이는 @ComponentScan 어노테이션을 발견했을 시에 스프링에서 자동으로 컴포넌트 스캔을 통해 @Component..
Spring Framework - 스프링과 Singleton - 3. Configuration
2023. 5. 12. 23:30
Spring & JPA/Spring
들어가며 이전까지 스프링 컨테이너에서 어떻게 각 객체를 싱글톤 기법으로 관리하고 있는지에 대해 알아보았다. 이번에는 @Configuration으로 등록한 설정 파일이 실행될 때 생기는 현상 중, 객체가 여러번 생성되는 것 처럼 보이는 상황과 그에 대해 실제로 어떤 동작이 수행되고 있는지에 대해 알아본다. @Configuration 다음의 AppConfig 코드를 보자. @Configuration public class AppConfig{ @Bean public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService(){ return new Or..
Spring Framework - 스프링과 Singleton - 2. 싱글톤 컨테이너
2023. 5. 10. 12:52
Spring & JPA/Spring
들어가며 이전 포스트에서는 동일한 요청에 대해 새로운 객체를 계속해서 만들어 반환해야 하는 경우의 문제점에 대해 알아보고, 이러한 문제를 해결할 수 있는 디자인 패턴인 싱글톤 패턴에 대해 알아보았다. 또한 싱글톤 패턴이 가져오는 장점과 단점 역시 알아보았다. 이번 포스트에서는 스프링 프레임워크에서 이러한 문제에 대해 어떻게 대처하는지에 대해 알아본다. Spring Framework - 스프링과 Singleton - 1. Singleton 들어가며 이전 글에서는 스프링 프레임워크에서 생성하고 관리하는 스프링 DI 컨테이너(이하 스프링 컨테이너)가 어떻게 Bean을 조회하고, 어떠한 문제점이 발생할 수 있으며 그것을 어떻게 해결 sehun5515.tistory.com 싱글톤 컨테이너 우리가 이전 포스트에서 ..
Spring Framework - 스프링과 Singleton - 1. Singleton
2023. 5. 9. 12:34
Spring & JPA/Spring
들어가며 이전 글에서는 스프링 프레임워크에서 생성하고 관리하는 스프링 DI 컨테이너(이하 스프링 컨테이너)가 어떻게 Bean을 조회하고, 어떠한 문제점이 발생할 수 있으며 그것을 어떻게 해결할 수 있는지에 대해 알아보았다. 이번 포스트에서는 이 Bean들이 스프링 컨테이너 내부에서 어떻게 관리되고 있는지에 대해서 알아본다. Spring Framework - Spring Bean 조회 들어가며 이전 포스트 에서 스프링에서 자체적으로 만들고 관리하는 스프링 DI 컨테이너에 대해 알아보았다. 스프링 DI 컨테이너에서 @Bean으로 등록한 모든 객체들을 관리하는 동시에 DI가 필요 sehun5515.tistory.com 웹 애플리케이션에서 발생하는 DI 컨테이너의 문제 스프링을 사용하지 않은 DI 컨테이너인 A..
Spring Framework - Spring Bean 조회
2023. 5. 8. 23:29
Spring & JPA/Spring
들어가며 이전 포스트 에서 스프링에서 자체적으로 만들고 관리하는 스프링 DI 컨테이너에 대해 알아보았다. 스프링 DI 컨테이너에서 @Bean으로 등록한 모든 객체들을 관리하는 동시에 DI가 필요할 시 DI도 프레임워크에서 자체적으로 수행해주며 이렇게 개발자가 아닌 프레임워크에서 프로그램을 컨트롤하는 것을 IoC라고 하였다. 이번 포스트에서는 스프링 DI 컨테이너에서 어떻게 빈을 조회하는지와 빈을 조회하는데 있어서 있을 수 있는 문제점들과 해결책을 알아보도록 한다. 모든 Bean 조회 스프링 DI 컨테이너에 존재하는 모든 Bean을 조회하기 위해서는 다음과 같은 코드를 사용한다. public class BeanTest{ static AnnotationConfigApplicationContext ac = n..
Spring Framework - Spring DI 컨테이너
2023. 5. 6. 18:40
Spring & JPA/Spring
들어가며 이전 글에서 IoC의 개념과 IoC 컨테이너(또는 DI 컨테이너)에 대해서 알아보았다. 스프링 프레임워크는 자체적인 DI 컨테이너를 가지고 있으며 런타임 시점에서 스프링 빈(Bean)으로 등록된 모든 객체들을 가지고 시작한다. 이번 포스트에서는 스프링 컨테이너가 생성되는 과정과 이를 코드로 어떻게 표현하는지에 대해 알아본다. 스프링 컨테이너의 생성 방법 이전에 보았던 AppConfig를 생각해보자. public class AppConfig{ public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } public OrderService orderService(){ return new OrderSe..
Spring Framework - IoC의 개념
2023. 5. 6. 00:03
Spring & JPA/Spring
들어가며 해당 포스트는 DI의 개념 에 대해서 먼저 읽고 와야 이해가 되는 부분들이 있을 수 있습니다. DI의 개념 - 2. 다형성의 한계 돌아보기 1에서는 SOLID 원칙과 다형성에 대해서 잠시 언급했었다. 문제는 다형성을 사용하는것 만으로는 SOLID를 모두 지키면서 구현이 매우 힘들다는 점이다. 이번 포스트에서는 다형성의 한계 sehun5515.tistory.com 이전까지 DI에 대한 개념을 익혔다. 클라이언트 클래스에서 의존하는 인터페이스의 구현체를 직접 지정하지 않고, 외부에서 지정하고, 인스턴스화 하여 그 인스턴스를 주입한다는 개념이 DI였다. 이번에는 스프링 프레임워크에서 지원하는 핵심적인 개념인 IoC에 대해 알아보고, 스프링에서 어떻게 해당 개념을 지원하는지에 대해 서술한다. IoC(I..
Spring Framework - DI의 개념 - 2. 다형성의 한계
2023. 5. 5. 23:38
Spring & JPA/Spring
돌아보기 1에서는 SOLID 원칙과 다형성에 대해서 잠시 언급했었다. 문제는 다형성을 사용하는것 만으로는 SOLID를 모두 지키면서 구현이 매우 힘들다는 점이다. 이번 포스트에서는 다형성의 한계점과 이를 어떻게 해결해볼 수 있는지에 대해 알아본다. 다형성의 한계점 주문 서비스(Service)와 할인 정책(Policy)를 생각해보자. 어떠한 상품을 주문할 때, 그 주문에 대한 할인 정책은 여러가지가 존재할 수 있을 것이다. 다음과 같은 상황을 생각해보자. discountPolicy는 인터페이스로 할인 정책의 "역할"을 가지고 있다. OrderServiceImpl은 주문 서비스의 역할을 담당하는 객체이다. 이 객체는 상품을 주문할 때 할인율에 대해서 알고 있어야 하므로 discountPolicy에 의존적이다..