일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Unity
- 유클리드호제법
- 순열
- 워크플로
- 언리얼엔진
- 스파르타내일배움캠프TIL
- 유니티
- 이분탐색
- 알고리즘
- 스파르타내일배움캠프
- 스택
- Unity2D
- 구현
- UnrealEngine
- 포톤
- c#
- UE4
- 해시
- QueryDSL
- FSM
- Inventory
- unityui
- BFS
- Unity3d
- 내일배움캠프
- C++
- Firebase
- 문자열
- Photon
- 프로그래머스
- Today
- Total
개발 낙서장
Spring MVC 본문
MVC
어떤 건물을 건축할 때 설계도 없이 그냥 되는대로 막 짓는 사람은 거의 없을 것이다. 건축 설계도를 만드는 방법, 건축 양식 등을 미리 생각해두고 작업을 하는데 프로그래밍에도 디자인 패턴이라는 것이 존재한다.
개발을 할 때 효율적인 방법들을 패턴화해놓은 것을 디자인 패턴이라고 하는데 그 중에 MVC 패턴이 있다.
MVC 패턴은 소프트웨어를 구성하는 요소들을 Model, View, COntroller로 각각 분리해 역할을 부여한 패턴이다.
- Model : 데이터와 비즈니스 로직을 담당한다. DB와 연동해 데이터를 불러오고 저장하는 등의 작업을 수행한다.
- View : UI 부분을 담당한다. 사용자가 보는 모든 것들을 디자인하고 구현한다.
- Controller : Model과 View 사이의 상호작용을 제어한다. 사용자의 입력을 받아 Model을 구성하고 그 결과를 View에 출력한다.
Spring MVC
Spring Web MVC는 Servlet API를 기반으로 구축된 독창적인 웹 프레임워크로, 처음부터 Spring Framework에 포함되어 왔으며, 정식 명칭인 "Spring Web MVC"는 소스 모듈(spring-webmvc)의 이름에서 따왔으나, "Spring MVC"로 더 일반적으로 알려져 있습니다.
…
Spring MVC는 중앙에 있는 DispatcherServlet이 요청을 처리하기 위한 공유 알고리즘을 제공하는 Front Controller 패턴을 중심으로 설계되어 있으며 이 모델은 유연하고 다양한 워크 플로우를 지원합니다.https://docs.spring.io/spring-framework/reference/web/webmvc.html
Spring 공식 문서에 있는 설명이다. 쉽게 표현하면 Spring에도 MVC 패턴을 적용해 HTTP 요청을 효율적으로 처리할 수 있도록 하는 것이다.
Survlet
자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양을 말한다.
- 사용자가 클라이언트를 통해 서버에 요청
- 요청을 받은 Survlet 컨테이너는 HttpSurvletRequest, HttpSurvletResponse 객체 생성
- 설정된 정보를 통해 Survlet을 분석하고 어떤 Survlet에 대한 요청인지 찾는다.
- 해당 Survlet에서 servise 메서드를 호출한 뒤 브라우저의 요청 Method에 따라 doGet 혹은 doPost 등의 메서드를 호출
- 호출한 메서드들의 결과를 그대로 반환하거나 동적 페이지를 생성한 뒤 HttpServletResponse 객체에 응답을 담아 Client에 반환
- 응답이 완료되면 생성한 Survlet 객체는 소멸
DispatcherSurvlet
모든 API 요청을 위의 방식으로 구현한다면 각 요청에 따른 모든 Survlet을 구현해야 한다. 따라서 이런 API 요청을 효율적으로 처리하기 위해 Spring에서는 DispatcherSurvlet을 사용한다.
DispatcherSurvlet이란 HTTP의 모든 요청을 가장 먼저 받아 처리하는 Front Controller이다.
- 클라이언트에서 요청이 발생하면 DispatcherSurvlet에서 요청을 분석
- 분석한 요청을 Handler Mapping을 통해 Controller를 찾아 요청을 전달
ex) GET /api/hello → HelloController 의 hello() 함수 - Controller는 요청에 맞게 작업을 해서 데이터(Model)과 화면(View) 정보를 전달
- ViewResolver를 통해 View에 Model를 적용
- 클라이언트에게 응답으로 View를 전달
이렇게 보면 잘 이해가 안 되니 예시를 통해 다시 정리하면, 만약 네이버에서 마이 페이지를 접근하는 요청을 한다면 어떤 작업이 이루어질까?
- 마이 페이지를 가져오는 GetMapping해 Controller에 전달한다.
- Controller에서 마이 페이지를 가져오는 mypage.html(예시)를 View에, 내 정보들(아이디, 비밀번호, 포인트 등)을 Model에 담는다.
- mypage.html에 내 정보들을 채워준다.
- 완성된 View를 브라우저에 띄운다.
만약 이런 FrontController가 없었다면 일련의 과정들을 전부 if문이나 각각의 알고리즘을 사용해 전부 직접 구현해야 했을 것이지만 Spring에서 해당 기능들을 제공해주기에 굉장히 효율적으로 작업을 처리할 수 있다.
'Java' 카테고리의 다른 글
데이터베이스(DB, DataBase) (0) | 2024.02.13 |
---|---|
[Spring] Filter 예외 처리 (0) | 2024.02.05 |
[Spring] 쿠키와 세션 (0) | 2024.01.25 |
Jackson (0) | 2024.01.18 |
Lombok - 롬복 (0) | 2024.01.18 |