24.07.31
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 >> 클라이언트에게 응답 전송