본문 바로가기

Development/Spring Boot

(23)
[Spring Boot] 스프링 컨테이너와 스프링 빈 (2) 컨테이너에 등록된 모든 빈 조회 1- 테스트 코드 활용 package hello.core.beanfind; import hello.core.AppConfig; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class ApplicationContextInfoTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); @Test @DisplayName("모든 빈 출력하기..
[Spring Boot] 스프링 컨테이너와 스프링 빈 (1) 생성 과정 1- 스프링 컨테이너가 생성되는 과정 ApplicationContext = 스프링 컨테이너 = 인터페이스 스프링 컨테이너는 XML 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있음 직전에 AppConfig를 사용한 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것 요즘은 XML 형식 보다는 애노테이션 기반으로 스프링 컨테이너를 만듦 - 스프링부트 자체가 애노테이션 기반에 작동이 편리하게 되어있기 때문 자바 설정 클래스를 기반으로 스프링 컨테이너(ApplicationContext) 만들기 new AnnotationConfigApplicationContext( AppConfig.class ); AnnotationConfigApplicationContext는 A..
[Spring Boot] 스프링 컨테이너와 스프링 빈 (0) - 이전 강의 중요 포인트 정리 1- 이전까지 강의 주요 포인트 정리 객체지향 - SOLID 원칙 --> OCP와 DIP를 지키지 못하는 경우가 많음. --> 이때 개발자가 직접 AppConfig로 DI를 주어 OCP와 DIP를 해소해주는 방법이 존재함 - AppConfig 활용 --> 구현 객체를 생성하고 연결을 책임지는 별도의 클래스 --> 즉, 어플리케이션 동작에 필요한 실제 구현 책체 생성하고, 참조 값을 리턴함 스프링 핵심 원리 - 제어의 역전[ IoC : Inversion of Controll ] --> 말 그대로 제어의 역전으로, 개발자가 무언가를 호출하는 것이 아니라 프레임워크가 대신 호출하는 것을 말함 --> 스프링에 극한된 개념이 아니라 여러 곳에서 사용됨 - 의존관계 주입[ DI: Dependency Injectio..
[Spring Boot] 스프링 부트로 전환하기 1- 어노테이션 AppConfig 파일 @Configuration - 설정 정보 (구성 정보) 파일이라는 것을 명시함 - 스프링에서는 설정 정보 파일에 ' @Configuration '이 선언되어야 함 - Import는 ' org.springframework.context.annotation.Configuration ' @Bean - @Bean을 선언하면 Spring Container에 등록됨 2- 스프링 설정하기 ApplicationContext 를 선언함 - 스프링은 ApplicationContext라는 곳에서 시작됨 - 이는 스프링 컨테이너임 - 또한 얘가 @Bean이 되어 있던 애들을 모두 관리해줌 - 생성자에 AppConfig.class 를 넘겨줌으로 AppConfig에 있는 환경 설정 정보를 ..
[Spring Boot] IoC, DI, 컨테이너 1- 제어의 역전 : IoC ( Inversion of Control) 말 그대로 제어의 역전 내가 무언가를 호출하는게 아니라 프레임워크가 대신 호출하는 것을 말함 스프링에만 극한된 개념이 아니라 여러 곳에서 나옴 AppConfig 등장 이후 구현 객체는 자신의 로직을 실행하는 역할만 담당함 제어 흐름 자체를 AppConfig가 가져감 코드 예시 @Override public Order createOrder(Long memberId, String itemName, int itemPrice) { // IoC에 의하면 OrderServiceImpl은 memberRepository에 대한 제어권이 없음 Member member = memberRepository.findById(memberId); int dis..
[Spring Boot] 새로운 구조 및 구현체 적용 1- 강의 노트 - AppConfig의 등장으로 애플리케이션의 사용 영역과 객체를 생성하고 구성(configuration)하는 영역이 분리됨 - 만약 적용되는 할인 정책이 변경된다면, 클라이언트 코드 영역은 변경할 필요 없이 AppConfig만 수정하면됨 - 구성 영역은 당연히 변경됨. 세부적인 내용이 바뀔 수 있기 때문임. 2- 변경 예시 package hello.core; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.RateDiscountPolicy; import hello.core.member.MemberService; import hel..
[Spring Boot] AppConfig 리팩토링 1- 리팩토링 대상 코드 package hello.core; import hello.core.discount.FixDiscountPolicy; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.member.MemoryMemberRepository; import hello.core.order.OrderService; import hello.core.order.OrderServiceImpl; /** * Application 전체를 구성하고 설정하는 역할 * - 로미오 줄리엣 공연 예시 중 기획자 * - 어플리케이션에 대한 환경 구성을 모두 이곳에서 함 */ public clas..
[Spring Boot] 스프링 핵심 원리 이해 - 객체 지향 원리 적용 (1) 관심사의 분리 1- AppConfig 활용 - 예시. 배우와 공연 기획자의 분리 - 인터페이스에 어떤 구현체가 들어갈지는 공연 기획자가 해야한다. - AppConfig는 구현 객체를 생성하고 연결을 책임지는 별도의 클래스를 칭함 - 역할분리와 OCP 준수를 위해 생성자주입[ 생성자주입: 생성자를 통해 객체를 전달하는 것] 2- AppConfig의 역할 - 어플리케이션 동작에 필요한 실제 구현 객체 생성 - 생성한 인스턴스의 참조를 생성자를 통해 주입 - AppConfig 객체는 구현체의 객체를 생성하고 그 참조값을 또 다른 생성자(해당 구현체를 받아주는 생성자)로 전달함 - 이로 클라이언트 입장에서 의존관계가 외부에서 주입해주는 것다고 해서 DI(Dependency Injection : 의존관계 주입 또는 의존성 주입..