SpringBoot/기본 원리

SpringBoot/기본 원리

[spring boot 기본 원리] 빈 스코프와 스코프 종류

1. 빈 스코프 - 스프링 컨테이너는 기본적으로 스프링 빈을 싱글톤으로 관리한다. - 이는 스프링 빈이 싱글톤 스코프로 생성됨을 의미한다. - 여기서 스코프란 빈이 존재할 수 있는 범위를 뜻한다. * 스프링이 지원하는 스코프 종류 1) 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프, 생명주기가 스프링 컨테이너와 같다. 2) 프로토타입 : 요청 시 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리 하지 않는 매우 짧은 범위의 스코프 3) 웹 관련 스코프 (1) request : 웹 요청이 들어오고 나갈때 까지 유지되는 스코프 (2) session : 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프 (3) application : 웹의 서블릿 컨..

SpringBoot/기본 원리

[spring boot 기본 원리] 빈 생명주기 콜백

1. 빈 생명주기 콜백 - 네트워크 소켓이나 데이터베이스 커넥션 풀처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고 애플리케이션 종료 시점에 모두 종료하는 작업을 하려면 객체의 초기화와 종료 작업이 필요하다. - 외부 네트워크에 미리 연결하는 객체를 하나 생성한다고 가정해보자. - connect()를 호출해서 연결을 미리 맺고 disConnect()를 호출해서 연결을 끊는다. public class NetworkClient { private String url; public NetworkClient() { System.out.println("생성자 호출, url = " + url); connect(); call("초기화 연결 메시지"); } public void setUrl(String url) ..

SpringBoot/기본 원리

[spring boot 기본 원리] 조회 빈이 2개 이상일 때의 문제점 및 해결

1. 조회 빈이 2개 이상일 때 - @Autowired는 타입으로 스프링 빈을 조회한다. (ac.getBean("타입")과 유사) - 만약 스프링 컨테이너에 동일 타입의 빈이 2개 이상 존재하려고 한다면 NoUniqueBeanDefinitionException 오류를 발생시킨다. - 이 오류 메시지는 동일 타입의 빈이 fixDiscountPolicy, rateDiscountPolicy 2개가 발견되었다고 알려주는 메시지이다. - 이 오류를 해결하는 방법은 여러가지가 있지만 자동 주입에서 많이 사용하는 방법이 @Qualifier와 @Primary가 있다. 2. @Qualifier와 @Primary - 보통 조회 대상의 빈이 2개 이상이라면 크게 3가지 방법으로 해결할 수 있다. 1) @Autowired 필..

SpringBoot/기본 원리

[spring boot 기본 원리] 의존관계 자동 주입

1. 다양한 의존관계 주입 방법 - @Autowired Annotation을 이용하여 의존관계를 주입한다. - 의존관계 자동 주입은 스프링 컨테이너가 관리하는 스프링 빈이어야 동작한다. (스프링 빈이 아닌 클래스에 @Autowired를 적용해도 동작하지 않는다.) - 의존관계 주입 방법에는 크게 4가지 방법이 있다. 1) 생성자 주입 2) 수정자 주입(setter 주입) 3) 필드 주입 4) 일반 메서드 주입 1-1 생성자 주입 - 생성자를 통해서 의존관계를 주입 받는 방법이다. - 생성자 호출 시점에 딱 1번만 호출되는 것을 보장받는다. - 필드에 final 키워드를 사용할 수 있다. 그래서 생성자에서 혹시 값이 설정되지 않았을 경우, 오류를 컴파일 시점에서 막아준다. - 불변, 필수 의존관계에 사용 ..

SpringBoot/기본 원리

[spring boot 기본 원리] 컴포넌트 스캔

1. 컴포넌트 스캔과 의존관계 자동 주입 1-1 컴포넌트 스캔 - 컴포넌트 스캔 : 설정 정보 없이 자동으로 스프링 빈을 등록하는 기능 - @Autowired : 의존 관계를 자동으로 주입해주는 Annotation - 아래 코드로 컴포넌트 스캔의 예시를 보자 @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)) public class AutoAppConfig { } - 컴포넌트 스캔을 사용하려면 먼저 @ComponentScan을 설정 정보 클래스에 붙여준다. - excludeFilters : 컴포넌트 스캔을 사용하면 @Configuration이 붙은..

SpringBoot/기본 원리

[spring boot 기본 원리] 싱글톤

1. 웹 애플리케이션과 싱글톤 - 웹 어플리케이션은 보통 여러 사용자가 동시에 요청을 한다. 물론 PC의 특성 상 완벽한 동시는 거의 불가능하다고 하지만 동시에 요청한다고 가정하자. - 위 그림의 경우 클라이언트 A, B, C가 스프링 컨테이너(DI 컨테이너)에 요청을 하면 새로 new를 하여 반환하는 구조이다. - 이렇게 동작한다면 요청이 올 때마다 새로운 구현 객체를 생성하므로 메모리 낭비가 발생한다. * 싱글톤 패턴 - 싱글톤 패턴이란 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. - 인스턴스가 1개만 있어야 하므로 다른 클래스에서 생성하지 못하도록 막아야 한다. - 즉 private 생성자를 사용하여 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 한다. - 아래..

SpringBoot/기본 원리

[spring boot 기본 원리] 스프링 컨테이너와 스프링 빈

1. 스프링 컨테이너 스프링 컨테이너는 아래와 같은 코드로 만들 수 있다. ApplicationContext applicationContext = new AnnotationConfigApplicationContext(설정 클래스이름.class); - 이 ApplicationContext를 스프링 컨테이너라고 부른다. - ApplicationContext는 인터페이스 이며 XML 기반으로 만들 수 있고, 자바 설정 클래스로 만들 수 있다. 2. 스프링 컨테이너의 생성 과정 2-1 스프링 컨테이너 생성 스프링 컨테이너는 다음과 같은 순서로 생성된다. 1) new를 하여 스프링 컨테이너를 만든다. 2) 스프링 컨테이너 안에는 스프링 빈 저장소라는 것이 있는데 스프링 빈이 여기에 저장된다. 이때 빈 이름이 Ke..

SpringBoot/기본 원리

[Spring Boot 기본 원리] IoC, DI, 컨테이너

1. IoC (Inversior of Controll) IoC를 구글링 해보면 반복적으로 나오는 말이 제어의 역전이다. 이 제어의 역전은 어떤 것을 의미할까? 자바를 포함한 객체 지향 언어에는 Class, Object, Instance가 있다. Class는 쉽게 설계도, Object는 실체화가 가능한 것, Instance는 실체화된 것으로 비유할 수 있다. Object를 직접 new를 하여 Heap 메모리에 올리게 되는데 IoC는 Object들을 스캔하여 Heap 메모리에 등록한다. 즉 개발자가 직접 하는 일을 대신 해준다는 것이다. 조금 더 자세하기 얘기해보자!! 어떤 프로그램에서 클라이언트 객체가 스스로 필요한 서버 객체를 생성하고 연결하고 실행했다고 가정하자. 이 말은 객체가 프로그램의 제어 흐름을..

송승현(SSH)
'SpringBoot/기본 원리' 카테고리의 글 목록