인프런 강의를 들어도 너무 빠른 속도와 개념이 확실하게 잡히지 않아서 따라가지 못하는 것 같다.
다시 초심으로 돌아가서 개념 정리 부터 제대로..!!
Spring Framework
자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 간단히 스프링(Spring)이라고 불린다.
동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다.
Spring의 특징
1. DI (Dependency Injection / 의존성 주입)
설정 파일이나 어노테이션을 통해 객체간 의존 관계를 설정하여 개발자가 직접 의존하는 객체를 생성할 필요가 없다.
2. Spring AOP (관점 지향 프로그래밍)
Database의 트랜잭션 처리나 로깅처리와 같이 여러 모듈에서 공통으로 필요로 하는 기능의 경우 해당 기능을 분리하여 관리한다.
3. Spring JDBC
Mybatis나 Hibernate 등의 데이터 베이스를 처리하는 영속성 프레임워크와 연결할 수 있는 인터페이스를 제공한다.
4. Spring MVC
MVC 디자인 패턴을 통해 웹 어플리케이션의 Model, View, Controller 사이의 의존 관계를 DI 컨테이너에서 관리하여 개발자가 아닌 서버가 객체들을 관리하는 웹 어플리케이션을 구축할 수 있다.
Spring의 구성 모듈

Core Container
Spring의 근간이 되는 IoC(또는 DI) 기능을 지원하는 영역을 담당하고 있다.
BeanFactory를 기반으로 Bean클래스들을 제어할 수 있는 기능을 지원한다.
Spring MVC 요청 처리 과정

Spring MVC 구성 요소
구성 요소 | 설명 |
Dispatcher Servlet | 클라이언트의 요청을 전달받음 요청에 맞는 컨트롤러가 리턴한 결과값을 View에 전달하여 알맞은 응답을 생성 |
Handler Mapping | 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지 결정 |
Controller | 클라이언트의 요청을 처리한 뒤, 결과를 DispatcherServlet에게 리턴 |
ModelAndView | 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담음 |
ViewResolver | 컨트롤러의 처리 결과를 생성할 View를 결정 |
View | 컨트롤러의 처리 결과 화면을 생성, JSP나 Velocity 템플릿 파일 등을 View로 사용 |
IoC (제어의 역행)
컨테이너에서 직접 관리하는 것.
스프링은 IoC 구조를 통해 구동 시 필요한 객체의 생성부터 생명 주기까지 해당 객체에 대한 관리를 직접 수행
스프링에서 관리하는 객체를 Bean(빈)이라 하고, 해당 빈들을 관리하는 의미로 컨테이너를 Bean Factory 라고 한다.
IoC 컨테이너의 역할
1. 객체의 생명주기와 의존성을 관리
2. VO(DTO/POJO) 객체의 생성, 초기화, 소멸 등의 처리를 담당
3. 개발자가 직접 객체를 생성할 수 있지만 해당 권한을 컨테이너에 맡김으로써 소스 코드 구현의 시간 단축 가능
DI (의존성 주입)
IoC 구현의 핵심 기술로, 컨테이너 빈의 설정 정보를 읽어와 자동으로 해당 객체에 연결하는 것
의존성 주입을 받게 되면 이후 해당 객체를 수정해야 할 상황이 발생했을 때 소스 코드의 수정을 최소화 할 수 있다.
DI의 장점
1. 개발자가 작성해야 할 코드가 단순해짐
2. 각 객체 간의 종속 관계(결합도)를 해소할 수 있다.
DI의 종류
1. Setter 메소드를 통한 의존성 주입
<property> 태그 사용
- XML 선언 방법
<bean id="객체 이름" class="클래스 풀네임">
<property name="name" value=" "/>
<property name="name" ref=" "/>
</bean>
- name 속성은 Class에서 선언한 필드 변수의 이름을 사용
- value 속성은 단순 값 또는 Bean이 아닌 객체를 주입할 때 사용
- ref 속성은 사용하면 Bean 이름을 이용해 주입할 Bean을 찾음
2. 생성자를 통한 의존성 주입
Constructor를 통해 의존 관계가 있는 Bean을 주입하려면 <constroctor-arg> 태그를 사용한다.
- XML 선언 방법
<bean id="불러올 객체" class="클래스 풀네임">
<constructor-arg index="0" value=" "/>
<constructor-arg name=" " ref=" "/>
</bean>
- Constructor 주입 방식은 생성자의 파라미터를 이용하기 때문에 한 번에 여러 개의 객체 주입 가능
- 필드 선언 순서에 따라 index 속성을 통해서도 접근 가능
3. 메소드를 통한 의존성 주입
의존성을 입력 받는 일반 메소드를 만들고 이를 통해 의존성을 주입
'TIL > Spring' 카테고리의 다른 글
[Spring] Handler Method Parameter (0) | 2022.04.15 |
---|---|
[Spring] 개념정리-2 (0) | 2022.04.12 |
[Spring] SpringIoC - Component Scan (excludeFilters, includeFilters) (0) | 2022.04.06 |
[Spring] Spring IoC(제어의 역행)-bean factory (0) | 2022.04.06 |