2023.11.01.<Spring> MVC, Sevlet, Front Controller
2023. 11. 1. 20:11ㆍ콛/Til
1. MVC 패턴
○ MVC 패턴
- 소프트웨어를 구성하는 요소들을 분리해 코드의 재사용성과 협업을 용이하게 만들어준다.
○ Model = 데이터 비지니스 로직
- 데이터 저장 및 불러오기
○ View = 사용자 인테페이스
- 사용자가 보는 화면, 버튼 등을 디자인, 구현
○ Controller = 사용자 인테페이스
- 사용자의 입력을 받아 Model에 전달
- Model의 결과를 바탕으로 View를 업데이트
○ 아래에서 말하겠지만 Spring MVC 패턴은
- Front Controller 패턴으로 설계된 DispatcherServlet이 HTTP 요청을 처리한다.
- 때문에 Sevlet을 알아야 Spring MVC에 관한 이해가 가능하다.
2. Sevlet의 동작원리
○ 여기서 말하는 Sevlet은 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 측 프로그램을 칭함
1. 사용자가 Client(브라우저)를 통해 서버에 API 요청(HTTP Request)
2. 요청 받은 Servlet 컨테이너는 HttpServletRequest, HttpServletResponse 객체 생성
3. 설정된 정보를 통해 요청에 알맞은 Sevlet 찾기
4. 해당 sevlet에서 service 메서드를 호출한 뒤 브라우저의 요청 Method에 따라 doGet, doPost 등의 메소드 호출
5. 호출한 메서드의 결과를 그대로 반환 or 동적페이지 생성 후 HttpSercletResponse 객체에 응답을 담아 Client에 반환
6. 응답 완료시 생성한 HttpServletRequest, HttpServletResponse 객체 소멸
3. Front Controller
○ 공식문서를 보면 Spring MVC패턴에서는 Front Controller 패턴으로 설계된 DispatcherServlet이 HTTP 요청을 처리
○ 여기서 의문이 들어야 한다. 왜 Spring은 그냥 Servlet이 아닌 DispatcherServlet 을 사용할까?
- 그 이유는 Sevlet 동작원리의 2, 3 번을 보면 된다. 만약 Sevlet방식을 그대로 사용한다면
- API를 요청 받을 때마다 객체를 생성해서 코드를 구현한다면 무수히 많은 Servlet 클래스가 구현되야 한다.
* 따라서 Spring MVC는 API 요청을 효율적으로 처리하기 위해 DispatcherServlet을 사용한다.
1. Client에서 HTTP 요청이 들어오면 DispatcherServlet 객체가 요청 분석
2. DispatcherServlet 객체는 분석한 데이터를 토대로 Handler mapping을 통해 Controller을 찾아 요청 전달
3. Controller → DispatcherServlet
- 해당 Controller는 요청에 대한 처리를 완료 후 처리에 대한 결과(Model+View) 정보 전달
4. DispatcherServlet → Client
- ViewResolver 통해 View에 Model을 적용하여 View를 Client에게 응답으로 전달
○ 쉽게 말하자면 DispatcherServlet가 Controller를 선택할 작업을 자기가 처리하지 않고 HandlerMapping에게 맡기는 형식
○ 실무에 있어서는 미리 다 구현이 되있기 때문에 Controller부분만 잘 개발하면 된다.
'콛 > Til' 카테고리의 다른 글
2023.11.03<MySQL>MySQL 8.2 Command Line Client 실행시 꺼지는 현상 (0) | 2023.11.03 |
---|---|
2023.11.02.<Spring>Controller, ResquestMapping, ResponseBody, RestController (0) | 2023.11.02 |
2023.10.31.<Spring> Gradle, 웹 서버의 동작원리, Apache와 WAS (1) | 2023.10.31 |
2023.10.30.<Spring>API, RestfulAPI (1) | 2023.10.30 |
2023.10.25.<햄버거키오스크Pj_3>어쩌다보니 구현을 해버린 건에 관하여.. (1) | 2023.10.26 |