반응형
MVC 패턴
1. Template Engine
- 동적인 웹 페이지를 생성하기 위해 사용되는 도구.
- 템플릿을 기반으로 정적인 부분과 동적인 데이터를 결합하여 HTML, XML 등의 문서를 생성하는 역할 수행.
→ 흔히 말하는 UI(User Interface)를 만들며, SSR(Server Side Rendering)에 사용.
- 템플릿 엔진이 나온 이유
- 자바 코드로 HTML을 만들어 내는 것이 아닌 HTML 문서에 동적으로 변경해야 하는 부분만 자바 코드를 넣을 수 있다면 편리함.
- 대표적인 템플릿 엔진
- Thymeleaf
- Spring과 통합이 잘 되어있음.
- 다양한 기능을 포함하고 있음.
- JSP(Java Server Pages)
- 예전엔 많이 사용했으나, 현재 안 쓰는 추세.
- FreeMarker
- Velocity
- Mustache
- Thymeleaf
2. MVC 패턴 개요
- Servlet이나 JSP만으로 비즈니스 로직과 View Rendering까지 모두 처리하면 너무 많은 역할을 하게 됨.
- 책임이 많아져 유지보수가 굉장히 어려워지기 때문에 고안된 패턴.
- Web Application은 일반적으로 MVC(Model View Controller) 패턴 사용.
1. Servlet
- Servlet 문제점
- 화면을 그리는 View 영역과 비즈니스 로직이 Servlet 하나에 모두 섞여있음.
- 책임을 너무 많이 가지고 있음.
- Servlet 동작 순서
- 사용자가 Client(브라우저)를 통해 서버에 HTTP Request 즉, API 요청 함.
- 요청을 받은 Servlet 컨테이너는 HttpServletRequest, HttpServletResponse객체를 생성.
- 설정된 정보(URL, HTTP Method)를 통해 어떠한 Servlet에 대한 요청인지 찾음.
- 해당 Servlet에서 service 메서드를 호출한 뒤 브라우저의 요청 Method에 따라 doGet() 혹은doPost() 등의 메서드를 호출.
- 서버에서 응답을 생성한 뒤 HttpServletResponse객체에 응답을 담아 Client(브라우저)에 반환.
- 응답이 완료되면 생성한 HttpServletRequest, HttpServletResponse객체를 소멸함.
2. JSP
- Servlet 코드에서 HTML을 만드는 부분인 View가 분리.
- Servlet, JSP 방식의 문제점
- Servlet만을 사용한 경우 View를 위한 코드와 비지니스 로직을 처리하는 코드가 Servlet에 모두 존재하여 유지보수가 어려워짐.
- JSP를 사용하여 View를 분리하였지만 비지니스 로직의 일부가 JSP 파일안에 존재함.
- 여전히 책임이 많아 유지보수가 어려움.
3. MVC 패턴
- 하나의 Servlet이나 JSP로 처리하던 것들을 Model, View, Controller 영억으로 나눈 것.
- MVC 패턴 구조
- Controller
- 예시 코드에서 Servlet에 해당하는 영역이다.
- HTTP Request를 전달받아 파라미터를 검증한다.
- 비지니스 로직을 실행한다.
- 비지니스 로직을 Controller에 포함하게되면 Controller가 너무 많은 역할을 담당하게 되어 일반적으로 Service Layer를 별도로 만들어서 처리.
- Database와 상호작용 하는 Layer를 따로 구분하여 Repository Layer를 추가로 구성.
- Controller도 비지니스 로직을 포함할 수 있지만 일반적으로 Service Layer를 호출하는 역할을 담당.
- View에 전달할 결과를 조회하여 Model 객체에 임시로 저장.
- Model
- View에 출력할 Data를 저장하는 객체.
- View는 비지니스 로직이나 Data 접근을 몰라도 되고 View Rendering에만 집중.(책임 분리)
- View
- 예시 코드에서 JSP에 해당하는 영역.
- Model 객체에 담겨져 있는 Data를 사용하여 화면을 Rendering함.
- 예시 코드에서 Servlet에 해당하는 영역이다.
- Controller
반응형
'스파르타 내일배움캠프 > TIL(Today I learned)' 카테고리의 다른 글
25.04.07 TIL - 일정 관리 개선 앱 회고 (2) | 2025.04.07 |
---|---|
25.04.04 TIL - 일정 관리 개선 앱 트러블 슈팅 (2) | 2025.04.04 |
25.04.02 TIL - Spring Framework, Spring Boot, Gradle (2) | 2025.04.02 |
25.04.01 TIL - 프레임워크, 라이브러리, Annotation, Lombok (2) | 2025.04.01 |
25.03.31 TIL - Web Application(2) (2) | 2025.03.31 |