본문 바로가기
728x90
반응형

스프링 Spring/스프링 핵심 원리 - 기본편61

[컴포넌트 스캔] 컴포넌트 스캔과 의존관계 자동 주입 시작하기 컴포넌트 스캔과 의존관계 자동 주입 시작하기 컴포넌트 스캔 사용시 @ComponentScan을 설정 정보에 붙여준다. 컴포넌트 스캔은 @Component 애노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록한다. 인프런 강의 "스프링 핵심 원리 - 기본편"을 정리한 것 입니다. 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 2022. 2. 9.
[싱글톤 컨테이너] @Configuration과 바이트코드 조작의 마법 @Configuration과 바이트코드 조작의 마법 AnnotationConfigApplicationContext 에 파라미터로 넘긴 값은 스프링 빈으로 등록되서 AppConfig 도 스프링 빈이 된다. AppConfig의 클래스 타입을 확인해 보면 클래스 명에 xxxCGLIB가 붙은 것을 확인할 수 있다. 이것은 스프링이 CGLIB라는 바이트코드 조작 라이브러리를 사용해서 AppConfig 클래스를 상속받은 임의의 다른 클래스를 만들고, 그 다른 클래스를 스프링 빈으로 등록한 것이다. 그 임의의 다른 클래스가 바로 싱글톤이 보장되도록 해준다. @Configuration 을 적용하지 않고, @Bean 만 적용하면 어떻게 될까? @Bean만 사용해도 스프링 빈으로 등록되지만, 싱글톤 보장X 스프링 설정 정.. 2022. 2. 8.
[싱글톤 컨테이너] @Configuration과 싱글톤 @Configuration과 싱글톤 memberService 빈을 만드는 코드를 보면 memberRepository() 를 호출한다. 이 메서드를 호출하면 new MemoryMemberRepository() 를 호출한다. orderService 빈을 만드는 코드도 동일하게 memberRepository() 를 호출한다. 이 메서드를 호출하면 new MemoryMemberRepository() 를 호출한다. 결과적으로 각각 다른 2개의 MemoryMemberRepository 가 생성되면서 싱글톤이 깨지는 것 처럼 보인다. 하지만 테스트를 해보면 MemberRepository 인스턴스는 모두 같은 인스터스가 공유되어 사용된다. AppConfig 코도를 보면 분명히 각각 2번 new MemoryMemberR.. 2022. 2. 7.
[싱글톤 컨테이너] 싱글톤 방식의 주의점 싱글톤 방식의 주의점 여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(stateful)하게 설계하면 안된다. 무상태(stateless)로 설계해야 한다. 특정 클라이언트에 의존적인 필드가 있으면 안된다. 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안된다. 가급적 읽기만 가능해야 한다. 필드 대싱에 자바에서 공유되지 않는, 지역변수, 파라미터, ThreadLocal 등을 사용해야 한다. 스프링 빈의 필드에 공유 값을 설정하면 정말 큰 장애가 발생할 수 있다. 인프런 강의 "스프링 핵심 원리 - 기본편"을 정리한 것 입니다. 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 .. 2022. 2. 6.
[싱글톤 컨테이너] 싱글톤 컨테이너 싱글톤 컨테이너 스프링 컨테이너는 싱글턴 패턴을 적용하지 않아도, 싱글톤 패턴의 문제점을 해결하면서, 객체 인스턴스를 싱글톤(1개만 생성)으로 관리 스프링 컨테이너는 싱글톤 컨테이너 역할을 하며, 싱글톤 객체를 생성하고 관리하는 기능을 싱글톤 레지스트리라 한다. 싱글톤 패턴을 위한 지저분한 코드가 들어가지 않아도 된다. DIP, OCP, 테스트, private 생성자로 부터 자유롭게 싱글톤을 사용할 수 있다. 스프링 컨테이너 덕분에 고객의 요청이 올 때 마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를 공유해서 효율적으로 재사용할 수 있다. 인프런 강의 "스프링 핵심 원리 - 기본편"을 정리한 것 입니다. 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의.. 2022. 2. 5.
[싱글톤 컨테이너] 싱글톤 패턴 싱글톤 패턴 싱글톤 패턴 : 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 private 생성자를 사용하여 외부에서 임의로 new 키워드를 사용하지 못하도록 막는다. public class SingletonService { private static final SingletonService instance = new SingletonService(); // 객체 인스턴스가 필요하면 이 메서드를 통해서만 조회 가능 // 호출시 항상 같은 인스턴스 반환 public static SingletonService getInstance() { return instance; } private SingletonService() { // 외부에서 new 생성 불가 } public void logic(.. 2022. 2. 5.
[싱글톤 컨테이너] 웹 애플리케이션과 싱글톤 웹 애플리케이션과 싱글톤 스프링의 태생은 기업용 온라인 서비스 기술을 지원하기 위해 탄생하여 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 웹 애플리케이션은 보통 여러 고객에 동시에 요청을 한다. public class SingletonTest { @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); // 1. 조회 : 호출할 때 마다 객체를 생성 MemberService memberService1 = appConfig.memberService(); // 2. 조회 : 호출할 대 마다 객체를 생성 MemberService memberService2 = appConfig... 2022. 2. 5.
[스프링 컨테이너와 스프링 빈] 스프링 빈 설정 메타 정보 - BeanDefinition 스프링 빈 설정 메타 정보 - BeanDefinition XML 또는 자바 코드를 읽어서 BeanDefinition을 만들면 된다. 스프링 컨테이너는 자바 코드인지, XML인지 몰라도 된다. 오직 BeanDefinition만 알면 된다. BeanDefinition을 빈 설정 메티 정보라 한다. @Bean, 각각 하나씩 메티 정보가 생성된다. 스프링 컨테이너는 이 메타정보를 기바능로 스프링 빈을 생성한다. AnnotationConfigApplicationContext 는 AnnotatedBeanDefinitionReader 를 사용해서 AppConfig.class 를 읽고 BeanDefinition 을 생성한다. 새로운 형식의 설정 정보가 추가되면, XxxBeanDefinitionReader를 만들어서 B.. 2022. 2. 5.
728x90
반응형