생각해보니 스프링 수업도 잘 못따라가면서
그때그때 이해 안되는 개념만 정리하고 전체적인 구조 흐름은 이해 안하고 시작했었다....
매번 새로운 말 같았던 기본 구조는 정리하고 가야겠다고 생각하고 정리를 시작해본다.
#Spring개념
-Spring은 개발 할 때 사용하는 Framework[Frame(틀)+work(일)]다.
#SpringMVC 동작 순서
[웹브라우저] - [디스패쳐서블릿] - [컨트롤러] - [모델앤뷰] - [컨트롤러] - [디스패쳐서블릿] - [웹브라우저]
1. 클라이언트(Client)가 서버에게 어떤 요청(Request)을 하면 스프링에서 제공하는 DispatcherServlet이 요청을 받는다.(web.xml에 살펴보면 모든 url(/)에 서블릿 매핑을 하여 모든 요청을 DispatcherServlet이 가로채게 해둠(변경 가능))
2. 핸들러 조회 : HandlerMapping을 통해 URL에 매핑된 Controller 조회(HandlerMapping은 servlet-context.xml에서 @Controller로 등록한 것들을 스캔해서 찾아놨기 때문에 어느 컨트롤러에게 요청을 위임해야 할지 알고 있다.)
3. 핸들러 어댑터 실행 : 핸들러 어댑터 실행
4. Controler 실행 : HandlerMapping이 Controller를 찾아서 실행시킨다. 요청에 매핑된 컨트롤러가 있다면 @RequestMapping을 통하여 요청을 처리할 메서드에게 도달한다.
-Service에서는 요청에 필요한 작업 대부분(코딩)을 담당하며 데이터베이스에 접근이 필요하면 DAO를 주입받아 DB처리는 DAO에게 위임한다. (DAO는 mybatis(또는 hibernate등) 설정을 이용히서 sql쿼리를 날려 DB에 저장되어 있는 정보를 받아 서비스에게 다시 돌려준다. 이때, 보통 Request와 함께 날아온 DTO객체(@RequestParam, @RequestBody, ...)로 부터 db조회에 필요한 데이터를 받아와 쿼리를 만들어 보내고 결과로 받은 Entity객체를 가지고 Response에 필요한 DTO객체로 변환한다.)
※DAO(Data Access Object) : DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트(데이터에 접근하는 트랜잭션 개체)
※VO(Value Object) / DTO(Data Transfer Object) : 계층간 데이터 교환을 위한 자바beans. 순수한 데이터 객체이며 속성과 그 속성에 접근하기 위한 getter, setter 메소드만 가진 ㅋ르래스를 말한다. 추가로 toString(), equals() 등의 Object클래스의 메소드를 작성할 수 있다.(VO는 DTO와 동일한 개념이지만 read only속성을 가짐)
-모든 비즈니스 로직을 끝낸 서비스가 결과물을 컨트롤러에게 넘긴다
5. ModelAndView 반환 : HandlerAdapter는 Controller가 반환하는 정보를 ModelAndView로 변환해 반환
6~7. ViewResolver 호출 : View를 찾아 실행한다 ->JSP:를 찾아서(응답할 View를 찾음) DispatcherServlet에게 전달한다.(servlet-context.xml에서 suffix, prefix를 통해 /WEB-INF/vIEWS/INDEX.JSP 이렇게 만들어주는 것도 ViewResolver)
-View반환 : ViewResolver는 View의 논리 이름을 물리 이름으로 바꾸고 렌더링 역할을 담당하는 View객체를 반환한다
-View는 모든 과정에서 처리된 결과를 화면으로 표현
8. DispatcherServlet은 응답할 뷰의 Render를 지시하고 뷰는 로직을 처리한다. 이후 Rendering된 뷰를 클라이언트에게 응답해준다
#MVC 용어 정리
-M(Model) 모델 : 데이터를 다루는 주체
모델은 앱이 포함해야할 데이터가 무엇인지를 정의한다. 데이터의 상태가 변경되면 모델을 일반적으로 뷰에게 알리며(요구사항대로 화면 변경 가능) 컨트롤러에게 알리기도 한다(업데이트 된 뷰를 제거하기 위해 다른 로직이 필요한 경우)
1. 사용자가 편집하길 원하는 모든 데이터를 갖고있어야함
2. View나 Controller에 대해서 어떤 정보도 알지 말아야함(오로지 데이터 관련 작업을 하기때문)
3. 변경이 발생하면, 변경 통지에 대한 처리방법을 구현해야 함.
-V(View) 뷰 : 데이터를 세팅하는 주체, 시각적인 부분, 화면
뷰는 앱의 데이터를 보여주는 방식을 정의하고 html, css, javascript를 이용하여 만들어낸다.
-C(Controller) 컨트롤러 : 데이터의 흐름을 관리
사용자가 접근하려는 URL에 따라서 요청사항을 파아후, 그 요청에 맞는 mODEL의 데이터를 의뢰하고 데이터를 View에 반영해서 사용자에게 알려주는 기능을 한다. 전반적인 제어를 담당하고 java로 이루어진다.
#MVC 구조

'Back-end > Spring' 카테고리의 다른 글
| [Spring] 세션(session)이란? (0) | 2022.03.19 |
|---|---|
| [Spring] @Controller와 @ResponseBody (0) | 2022.03.19 |
| [Spring] sts3 초기 설정 (0) | 2022.03.07 |
| [Spring] 프로젝트 생성하기 / 톰캣 서버 연동하기 (0) | 2022.03.07 |
| [Spring] 시작하기(STS4설치 후 ST3플러그인 하기) (0) | 2022.03.07 |
댓글