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에 의존적이다..
Spring Framework - DI의 개념 - 1. 다형성과 SOLID 원칙
2023. 5. 2. 20:44
Spring & JPA/Spring
들어가며 Spring 프레임워크는 매우 거대한 생태계이지만 핵심적인 원리 원칙 개념은 달라지지 않았다. Spring의 핵심적인 개념은 크게 3가지로 아래와 같다. DI(Dependency Injection) 의존관계 주입 IoC(Inversion of Controll) 제어의 역전 AOP(Aspect Oriented Programming) 관점 지향 프로그래밍 이번 파트에서는 의존관계 주입으로 일컬어지는 DI에 대해 이 개념이 무었이고, 왜 이 개념이 사용되어야 하는가에 대한 포스트들 중 첫 번째이다. 다형성 다형성은 부모 타입을 사용하여 자식 타입의 객체를 다룰 수 있게 하는 것으로 이를 적절히 사용하면 프로그래밍을 매우 유연하게 할 수 있다. 하지만 개념이 조금 난해한데. 이를 역할이란 개념과, 구현..
MVC 패턴에서 각 파트의 역할
2023. 4. 30. 12:18
Spring & JPA/Spring
들어가며 이전에는 Servlet에서부터 시작된 웹 개발이 JSP가 생겨나면서 Model 1방식이 생겨났고 이것이 어떻게 발전되었는지에 대해 간략하게 설명했다. 이번에는 Model 2방식에서 조금 더 진보한 MVC패턴에 대해 이것이 무엇이고, 각 요소별로 어떤 역할이 있는지에 대해 배운 것을 적어보려고 한다. MVC(Model - View - Controller) MVC는 Model, View, Controller로 나누어져 개발하는 일종의 디자인패턴(Design pattern)으로 정의된다. 즉 웹 프로젝트들은 기본적으로 Model 파트와 View파트, Controller 파트로 나누어져 각각의 역할에 맞게 구현되고, 분리되어 저장된다. 최종적으로 이렇게 구현된 각 객체들이 조립되어 사용자의 요청을 처리..