본문 바로가기

Spring/Spring Basic

(5)
싱글톤 컨테이너 싱글톤 컨테이너싱글톤 패턴은 안티 패턴이고 피해야 할 패턴이라는 이야기를 들어본 적 있을 겁니다. 하지만 스프링 컨테이너는 스프링 빈을 기본적으로 싱글톤으로 관리합니다.  스프링을 사용하는 환경은 많은 클라이언트의 요청을 받아내는 환경입니다. 이런 환경에서 클라이언트의 요청 하나하나에 새로운 객체를 생성한다면 메모리가 심각하게 낭비됩니다.따라서 스프링에서는 스프링 빈을 싱글톤으로 관리해서 수많은 클라이언트 요청에 같은 메모리 주소값을 리턴합니다. 아래 그림은 싱글톤 스프링 컨테이너의 동작 방식입니다. 스프링 컨테이너 덕분에 클라이언트 요청이 올 때마다 객체를 생성하지 않고 최초에 만들어진 스프링 빈을 공유하게 됩니다. 개발자가 직접 싱글톤 패턴을 구현하지 않아도 스프링 컨테이너가 자동으로 스프링 빈을 싱..
스프링 빈 조회 스프링 빈 조회스프링 컨테이너에 스프링 빈을 등록했다면 조회할 수도 있습니다. 스프링 컨테이너에서 스프링 빈을 조회하는 가장 기본적인 방법은 getBean(빈이름, 타입) 또는 getBean(타입) 함수를 사용하는 것입니다. 만약 조회 대상 스프링 빈이 없다면 NoSuchBeanDefinitionException 예외를 발생합니다. 먼저 스프링 컨테이너에 등록된 모든 스프링 빈을 조회하는 코드를 살펴봅시다.AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);@Test @DisplayName("모든 빈 출력하기") void findAllBean() { // 스프링에 등록된 모든 빈..
스프링 컨테이너와 스프링 빈 스프링 컨테이너기존에는 개발자가 AppConfig를 사용해서 직접 객체를 생성하고 DI를 했지만, 이제부터는 스프링 컨테이너를 통해서 사용합니다. 스프링 컨테이너는 스프링에서 자바 객체인 스프링 빈을 관리하는 공간입니다. 또한 스프링 빈끼의 의존 관계도 스프링 컨테이너가 런타임 시점에 관리합니다. 다시 말해 스프링 컨테이너는 내부에 존재하는 빈의 생명주기를 관리(생성, 관리, 제거 등)하며, 생성된 빈에게 추가 기능도 제공합니다. 스프링 컨테이너는 @Configuration이 붙은 AppConfig를 설정 정보로 사용합니다.여기서 @Bean이라 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록합니다. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 합니다. 스프링 빈에 등록되는 빈..
스프링 핵심 원리 이해 - 객체 지향 원리 적용 이 글은 김영한 님의 스프링 핵심 원리 - 기본 편 강의를 참고한 글입니다.https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard 스프링 핵심 원리 - 기본편 강의 - 인프런www.inflearn.com 스프링 핵심 원리 - 기본편 강의 | 김영한 - 인프런김영한 | 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보www.inflearn.com 역할과 구현객체 지향 프로그램을 설계할 때 역할과 구..
자동 컴포넌트 스캔 vs 수동 컴포넌트 스캔 자동 컴포넌트 스캔과 수동 컴포넌트 스캔 모두 스프링 빈을 등록하고 의존관계를 주입할 때 사용됩니다. 자동 컴포넌트 스캔은 @ComponentScan, @Component, @Autowired 애노테이션을 사용하고수동 컴포넌트 스캔은 @Bean 애노테이션을 사용해 스프링 빈을 등록하고 의존관계를 주입합니다. 자동 컴포넌트 스캔 vs 수동 컴포넌트 스캔두 방법은 서로 다른 장점을 가집니다. 먼저 자동 컴포넌트 스캔은 추가적인 AppConfig 성격의 설정 자바 클래스가 필요하지 않습니다. @Configuration 설정 정보에서 @Bean을 적고, 객체를 생성하고, 주입할 대상을 일일이 적어주는 번거로운 과정이 필요 없습니다. 하지만 수동 컴포넌트 스캔과 달리 의존관계를 특정 클래스에서 설정하는 것이 아니..