본문 바로가기

기록

spring프로젝트_0902

0902(금)_study1   
[Spring정의]
:: 자바기반의 동적 웹사이트 개발을 위한 프레임워크
자바빈즈 명세를 따르는 pojo객체를 의존적이지 않게 연결해주는 프레임워크
* POJO(Plain Old Java Object)란 평범한 자바빈즈(Javabeans) 객체를 의미한다.

객체 생성부터 소멸까지의 life cycle 관리를 위해 ioc/di를 사용

[spring 주요 특징]
ioc(제어의 역전) :: 프로그램 제어의 흐름이 바뀌는 것 
일반적인 프로그램의 흐름과는 다르게 객체가 언제 생성되고 사용되는지 알 수 없고 
객체 제어에 대한 권한도 개발자가 아닌 스프링 컨테이너에 있다.
때문에 IoC를 사용하면 설계가 깔끔해지고 확장성이 좋아짐

스프링 컨테이너 내부에서 빈의 제어를 담당하는 객체를 빈 팩토리(Bean Factory)라고 부름
일반적으로는 빈 팩토리의 기능을 모두 포함하고 있는 애플리케이션 컨텍스트를 사용

di(의존성주입) :: 
객체 간의 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.
spring이 객체를 생성하고 생성자나 setter 메소드를 통해 서로 연결시켜주는 것 
ioc의 대표 동작원리

aop(관점지향 프로그래밍) :: 어떤 로직을 기준으로 핵심 관점, 
부가 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하는 것

로그 확인처럼 핵심 로직은 아닌데 반드시 해야 하는 공통 작업을 
Aspect로 모듈화하고 핵심 로직에서 분리하여 재사용하기 위함

[MVC정의]
:: MVC는 Model-View-Controller의 약자로 MVC 패턴이라고 불림. 
MVC 패턴은 MVC1,MVC2가 있습니다. Spring MVC는 MVC2의 구조를 가집니다. 
MVC2는 Model, View, Controller가 역할을 나누어 처리하기 때문에 MVC1에 비해 
확장에 유리하고, 유지보수하기 쉽다는 장점이 있습니다.

[MVC의 동작과정]
Client가 요청을 보내면 DispatcherServlet이 Controller 역할을 담당하여 
요청에 맞는 서비스에 분산시켜주고 이를 각 서비스들이 처리를 하면
처리 결과를 다양한 형식의 View 서비스들로 화면에 보여
DispatcherServlet은 HandlerMapping에게 Controller의 탐색을 요청합니다.
HandlerMapping은 Client의 요청 경로를 이용하여 Controller 빈 객체를 DispatcherServlet에 리턴합니다.
DispatcherServlet은 HandlerMapping으로부터 리턴받은 결과(Controller 빈 객체)를 HandlerAdapter에게 요청 처리를 위임합니다.
HandlerAdapter는 Controller의 알맞은 메서드를 호출합니다.
Controller는 호출의 결과를 HandlerAdpater에게 리턴합니다.
HandlerAdapter는 ModelAndView 객체로 변환해서 DispatcherServlet에 리턴합니다.
DispatcherServlet은 결과를 보여줄 View를 찾기 위해 ViewResolver 빈 객체를 사용하여 Controller가 리턴한 ModelAndView의 이름을 검색합니다. 
ViewResolver는 해당하는 View 객체를 찾거나 생성해서 리턴합니다.
DispatcherServelt은 ViewResolver가 리턴한 View 객체에게 응답 결과 생성을 요청합니다.
응답 결과를 Client에게 전달합니다.


[MVC2 패턴]

Model(비즈니스 로직)
1. 컨트롤러로부터 요청을 받는다.
2. 비즈니스 로직을 수행한다.
3. 수행 결과는 컨트롤러를 거쳐 뷰에 전달된다.

View(화면) 사용자 인터페이스(주로 jsp사용)

Controller(요청/응답 처리)
웹 브라우저의 요청에 맞는 모델을 사용하여 요청한 기능을 수행하고 
그 결과만을 JSP에 전달

https://cheershennah.tistory.com/151 (pom 구조 참고)
https://dev-donghwan.tistory.com/92 (mvc 동작 과정 참고)

'기록' 카테고리의 다른 글

spring프로젝트_0906  (0) 2022.09.06
spring프로젝트_0905  (0) 2022.09.05
spring프로젝트_0901  (0) 2022.09.01
spring 프로젝트_0831  (0) 2022.08.31
spring 프로젝트_0830  (0) 2022.08.30