[Spring] Ioc, DI, ApplicationContext, Bean, BeanFactory
Ioc(Inversion of control)란?
· Ioc(제어의 역전)이란 프로그램의 제어 흐름 구조가 뒤바뀌는 것이다.
일반적인 프로그램 흐름
· 일반적인 프로그램의 흐름은 main() 메소드와 같이 프로그램이 시작되는 지점에서 사용할 오브젝트를 결정하고, 결정한 오브젝트를 생성하고, 만들어진 오브젝트에 있는 메소드를 호출하고, 그 오브젝트 메소드 안에서 다음에 사용할 것을 결정하고 호출하는 식의 작업이 반복된다.
Ioc의 프로그램 흐름
· Ioc에서는 오브젝트가 자신이 사용할 오브젝트를 스스로 선택하거나, 생성하지 않는다. 모든 제어 권한을 자신이 아닌 다른 대상에게 위임하기 때문이다. 스프링에서는 application context라고하는 IoC 컨테이너를 통해 IoC를 관리한다.
(컨테이너는 특정 객체의 생성과 관리를 담당하고, 객체 운용에 필요한 다양한 기능을 제공한다.)
· 스프링은 Ioc를 모든 기능의 기초가 되는 기반기술로 삼고 있으며, Ioc를 극한까지 적용하고 있는 프레임워크다. 스프링의 대표적인 Ioc 동작원리로 DI(Dependency Injection)이 있다. DI가 무엇인지는 뒤에 설명한다.
프레임워크는 제어의 역전 개념이 적용된 대표적인 기술이다. 프레임워크는 단지 미리 만들어둔 반제품이나 확장해서 사용할 수있도록 준비된 추상 라이브러리의 집합이 아니다. 라이브러리를 사용하는 애플리케이션 코드는 애플리케이션 흐름을 직접 제어한다.
반면에 프레임워크는 거꾸로 애플리케이션 코드가 프레임워크에 의해 사용된다. 보통 프레임워크 위에 개발된 클래스를 등록해두고, 프레임워크가 흐름을 주도하는 중에 개발자가 만들 애플리케이션 코드를 사용하도록 만드는 방식이다.
DI(Dependency Injection) 란?
DI는 의존관계 주입, 의존관계 설정이라는 의미이다. 스프링 IoC 기능의 대표적인 동작원리다. DI는 오브젝트 레퍼런스를 외부로부터 제공(주입)받고 이를 통해 여타 오브젝트와 다이나믹하게 의존관계가 만들어지는 것이다.
의존관계란?
· 의존 관계란 한쪽의 변화가 다른 쪽에 영향을 주는 것이다.
- 자바에서는 인터페이스를 통해 의존관계를 제한하여 변경에서 자유로워질 수 있다.
ApplicationContext 란?
· 스프링 애플리케이션 전반에 걸쳐 모든 구성요소의 제어 작업을 담당하는 IoC 엔진이다.
· IoC 방식을 따라 만들어진 일종의 빈 팩토리이다.
- 빈 팩토리라고 말할 때는 빈을 생성하고 관계를 설정하는 IoC의 기본 기능에 초점을 맞춘 것이다. 애플리케이션 컨텍스트는 별도의 정보를 참고해서 빈의 생성, 관계설정 등의 제어를 총괄한다.
· 싱글톤을 저장하고 관리하는 싱글톤 레지스트리이기도 하다.
- 스프링은 기본적으로 별다른 설정을 하지 않으면 내부에서 생성하는 빈 오브젝트를 모두 싱글톤으로 만든다.
- 싱글톤이 필요한 이유: 매번 클라이언트에서 요청이 올 때마다 각 로직을 담당하는 오브젝트를 새로 만들어서 사용한다고 생각해보자 요청 한 번에 5개의 오브젝트가 새로 만들어지고 초당 500개의 요청이 들어오면, 초당 2500개의 새로운 오브젝트가 생성된다. 서버가 감당하기 힘들 것이다. 그래서 필요한 것이 싱글톤이다.
Bean Factory란?
· 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트이다.
Bean이란?
· 스프링에서는 스프링이 제어권을 가지고 직접 생성하고, 의존관계를 부여하는 오브젝트를 Bean이라고 부른다.
- 스프링에서 빈 등록은 XML, 자바 코드(애너테이션)를 통해 할 수 있다.
출처: 토비의 스프링
'스프링 > 스프링' 카테고리의 다른 글
[Spring] MVC 프레임워크를 따라 만들어보자. (0) | 2021.02.25 |
---|---|
[Spring] Model 1, Model 2를 예제로 구현하며 알아보자 (0) | 2021.02.24 |
[Spring] 스프링 Model 1 아키텍처와 Model 2 아키텍처 (0) | 2021.01.12 |
[Spring] 스프링 jdbc와 MySQL 연동하기 (0) | 2021.01.06 |
[Tomcat] 톰캣 설치 및 이클립스 연동 (0) | 2020.12.29 |
댓글