qordpsem 2024. 8. 5. 11:20

jsp MVC 패턴을 공부할때,

properties 파일을 만들어서 사용자 요청 별 일처리를 위한 Action 클래스를 설정하고 FrontController 역할을 하는 Dispatcher Servlet 클래스를 만들어서 모든 Action들이 가져야할 공통적인 메소드를 일반화한 Action 인터페이스를 만듬

 

이러한 개발의 기반이되는 틀을 이루는 환경을 프레임워크라고 함

 

*스프링 = 자바 기반 프레임워크 중 가장 대중적

 


 

#스프링 특징

 

1. DI (Dependency Injection)

사용자 요구에 의해 수정이 될 것 같은 객체의 생성을

어플리케이션 내에서 직접 new 연산자에 의해 생성하는게 아니라

스프링 환경설정 파일에 의해 생성하는 것

 

 

*DI가 필요한 이유?

클래스 A가 클래스 B를 포함한다고 할때,

A에서 B를 사용하기 위해서는 new 연산자에 의해서 객체를 생성하고 사용해야 함

사용자 요청에 의해 A와 포함관계에 있는 B 대신, 새로운 클래스 K로 변경 요청 있다면

A 클래스 내의 new B() 는 new K() 로 변경해야 함

 

이때 B가 사용되던 곳이 A 한 곳이 아니라 여러 곳 이라면 일일이 수정하기 어려움

이런 문제를 해결하기 위해 스프링 DI는 사용자 요청에 의해 수정이 될 것 같은 객체의 생성

즉 new 연산자를 자바 소스코드 내에서 걷어내고 스프링 컨테이너(환경설정파일)이 제공하는 것 말함

 

인터페이스를 대안으로 생각할 수 있지만 그 역시도 수정할 것 적지 않음

 

 

1-2. DI 세팅 방법

Maven Repository 가서 낮은 버전 다운 3.1.4version

또는 maven 사용 시 xml 에 추가

 

 

1-3. DI 사용법

xml 기반  /  annotation 기반 (더많이 사용됨)

 

 

 

*xml 기반 

<bean id="messageBean" class="sample3.MessageBeanEn"/>

자바 객체 = bean

Context.xml 파일에 bean 요소 추가  >>  소스코드의 new 연산자 대신함

 

xml에 필요한 다른 코드들 자동으로 생성해주는 플러그인 설치

 

.. (추후 추가)

 

 

 

*Annotation 기반

<bean/>  에서  @Bean 으로

 

아래 xml 파일을

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<bean id="kim" class="exam08.Person"
		p:name="김유신"
		p:age="20"
		scope="prototype"/>
	
</beans>

 

java 파일로 대신함

@Configuration
public class SpringConfig {
	
	@Bean
	public Person kim() {
		Person p = new Person();
		p.setName("김유신");
		p.setAge(20);
		return p;
	}
}

 

 

 

 


 

 

#스프링 MVC의 클라이언트 요청 처리 과정

1. 클라이언트   >>  처리요청(URL)

2. DispatcherServlet  >>  요청 URL과 매핑되는 Controller 검색

3. HandlerMapping  >>  HandlerAdapter 검색

4. DispatcherServlet  >>  처리요청  >>  Controller

5. Controller  >>  ModelAndView 리턴

6. DispatcherServlet  >>  Controller 실행 결과 보여줄 View 검색

7. ViewResolver  >>  View 객체 반환

8. DispatcherServlet  >>  응답 출력 요청  >>  View

9. View  >>  클라이언트에게 응답 전송