(인프런) 김영한님의 스프링 핵심 원리-기본편을 공부하고 리뷰한 글입니다. 2. 탐색 위치와 기본 스캔 대상 1. 탐색할 패키지의 시작 위치 지정 모든 자바 클래스를 컴포넌트 스캔하면 시간이 오래걸리므로 꼭 필요한 위치부터 탐색하도록 시작 위치를 지정할 수 있다. 1) basePackages: 탐색할 패키지의 시작 위치 지정(해당 패키지 + 하위 패키지) - 시작 위치를 여러개로 지정할 수 있음 (e.g basePackages = {"hello.core", "hello.service"} ) package hello.core; @Configuration @ComponentScan// 탐색 시작 위치 = hello.core public class AutoAppConfig { basePackages = "he..
(인프런) 김영한님의 스프링 핵심 원리-기본편을 공부하고 리뷰한 글입니다. 1. 컴포넌트 스캔과 의존관계 자동 주입 시작하기 지금까지는 자바 코드의 @Bean이나 XML의 을 통해서 설정 정보에 직접 스프링 빈을 등록했다. 예제에서는 등록해야할 스프링 빈이 몇 개가 안됐지만 규모가 커지면 반복과 누락의 문제가 있다... 그래서, 1) 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 2) 의존관계도 자동으로 주입하는 @Autowired 라는 기능도 제공한다. 기존 AppConfig.java는 과거 코드, 테스트를 유지하기 위해 남겨두고 새로운 AutoAppConfig.java를 만들자. 1. AutoAppConfig.java - @ComponentScan 1..
(인프런) 김영한님의 스프링 핵심 원리-기본편을 공부하고 리뷰한 글입니다. 3. 싱글톤 컨테이너 스프링 컨테이너는 싱글톤 패턴의 문제점을 해결하고 객체 인스턴스를 싱글톤(1개만 생성)으로 관리한다. 지금까지 우리가 학습한 스프링 빈은 싱글톤으로 관리되는 빈이다. 1. 싱글톤 컨테이너 - 스프링 컨테이너는 싱글톤 패턴을 적용하지 않아도 객체 인스턴스를 싱글톤으로 관리한다. - 스프링 컨테이너는 싱글톤 컨테이너 역할을 하고 싱글톤 객체를 생성, 관리하는 기능을 싱글톤 레지스트리라고 한다. - 스프링 컨테이너는 싱글톤 패턴의 모든 단점을 해결하면서 객체를 싱글톤으로 유지할 수 있다. 싱글톤 패턴을 위한 지저분한 코드X DIP, OCP, 테스트, private 생성자로부터 자유롭게 자유롭게 싱글톤 사용O 2. ..
1. isSameAs() 와 isEqualTo() 와 isInstatnceOf() 비교 1) isSameAs() -> == isSameAs() 는 주소값을 비교하는 메서드다. String a = "apple"; String b = a; // 주소값이 같은지 검증 assertions.assertThat(a).isSameAs(b); 2) isEqualTo() -> equals() 메서드 isEqualTo() 는 대상의 내용 자체를 비교하는 메서드다. String a = "apple"; String b = "apple"; // 1. 내용이 같은지 검증 -> 성공 assertions.assertThat(a).isEqualTo(b); // 2. 주소값이 같은지 검증 -> 실패 assertions.assertTha..
(인프런) 김영한님의 스프링 핵심 원리-기본편을 공부하고 리뷰한 글입니다. 1. 웹 애플리케이션과 싱글톤 1) 스프링: 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. 2) 대부분의 스프링 애플리케이션 = 웹 애플리케이션 (웹이 아닌 애플리케이션 개발도 가능함) 3) 웹 애플리케이션: 보통 여러 고객이 동시에 요청을 한다. 고객이 요청할 때마다 새로운 객체가 생성되는 문제 1. 스프링 없는 순수한 DI 컨테이너 테스트 우리가 만든 스프링 없는 순수한 DI 컨테이너(AppConfig)는 요청을 할 때 마다 새로운 객체를 생성한다. - 고객 트래픽이 초당 100이 나오면 초당 100개의 객체가 생성, 소멸된다 -> 메모리 낭비 심함 (해결방안) 해당 객체를 1개만 생성, 공유하도록 설계 -> 싱글톤 패..
BeanDefinition (인프런) 김영한님의 스프링 핵심 원리-기본편을 공부하고 리뷰한 글입니다. 8. 스프링 빈 설정 메타 정보(BeanDefinition) Q. 스프링이 다양한 설정 형식을 지원할 수 있는 이유는? 그 중심에는 바로 BeanDefinition이라는 추상화가 있다. 즉, 설정 정보의 역할과 구현을 개념적으로 분리한 것으로 설정 정보를 추상화시켰다. 스프링 컨테이너는 BeanDefinition(역할)만 알고 자바 코드인지, XML 인지(구현)은 몰라도 된다. XML 을 읽어 BeanDefinition 만듦 자바 코드를 읽어 BeanDefinition 만듦 ● BeanDefinition = 빈 설정 메타정보 - @Bean / 하나당 하나씩 메타 정보가 생성된다. - 스프링 컨테이너는 이..
(인프런) 김영한님의 스프링 핵심 원리-기본편을 공부하고 리뷰한 글입니다. 6. BeanFactory와 ApplicationContext 1. BeanFactory BeanFactory는 스프링 컨테이너의 최상위 인터페이스다. - 스프링 빈을 관리, 조회하는 역할을 담당한다. - 지금까지 우리가 사용했던 대부분의 기능은 BeanFactory가 제공하는 기능이다. e.g. getBean() 2. ApplicationContext - BeanFactory 기능을 모두 상속받아 제공한다. - 빈을 관리, 조회하는 기능에 추가로 부가 기능을 제공한다. 3. ApplicationContext가 제공하는 부가기능 1) 메시지소스를 활용한 국제화 기능(MessageSource) e.g. 한국에서 들어오면 한국어로, ..