[스프링 웹 MVC] 스프링 MVC 소개
2022. 3. 14. 17:17ㆍJAVA/Spring Framework
728x90
반응형
SMALL
개발자라고 한다면 무조건 들어봤을 개념인 MVC에 대해서 알아보고자 합니다.
Model - View - Controller 의 앞자리를 따서 MVC라고 칭하는데요!
Model (모델)
- 평범한 자바 객체 POJO
- 도메인 객체 또는 DTO로 화면에 전달할, 또는 화면에서 전달 받은 데이터를 담고 있는 객체
View (뷰)
- HTML, jsp, Thymeleaf 와 같은 사용자에게 보여지는 화면
- 데이터를 보여주는 역할
Controller (컨트롤러)
- 스프링 @MVC
- 사용자 입력을 받아 모델 객체의 데이터를 변경하거나, 모델 객체를 뷰에 전달하는 역할
- 입력값 검증
- 입력 받은 데이터로 모델 객체 변경
- 변경된 모델 객체를 뷰에 전달
https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
장점
- 동시다발적 (Simultaneous) 개발 - 백엔드 개발자와 프론트엔드 개발자가 독립적으로 개발 진행 가능
- 높은 결합도 - 논리적으로 관련있는 기능을 하나의 컨트롤러로 묶거나, 특정 모델과 관련있는 뷰를 그룹화
- 낮은 의존도 - 뷰, 모델, 컨트롤러 각각 독립적
- 개발 용이성 - 책임이 구분되어 있어 코드 수정에 용이
- 한 모델에 대한 여러 형태의 뷰를 가질 수 있음
단점
- 복잡한 코드 네비게이션
- 코드 일관성 유지가 어려움
- 높은 학습 곡선
이제 MVC 형태의 스프링 웹 프로젝트를 생성해 실습을 해보려고 합니다! 🤓
2021.09.02 - [JAVA/Spring Security] - [Spring Security] IntelliJ 스프링 웹 프로젝트 만들기
위 글을 통해 프로젝트 생성을 해주시면 되구요 😊
결론부터 말씀 드리자면 이 간단한 프로젝트는 아래와 같이 구분되어 질 수 있습니다.
package com.example.demospringmvc;
import lombok.*;
import java.time.LocalDateTime;
@Getter @Setter
@Builder @NoArgsConstructor @AllArgsConstructor
public class Event {
private String name;
private int limitOfEnrollment;
private LocalDateTime startDateTime;
private LocalDateTime endDateTime;
}
package com.example.demospringmvc;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class EventController {
@Autowired
EventService eventService;
// @RequestMapping(value = "/events", method = RequestMethod.GET)
@GetMapping("/events")
public String events (Model model) {
model.addAttribute("events", eventService.getEvents());
return "events";
}
}
package com.example.demospringmvc;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
@Service
public class EventService {
public List<Event> getEvents() {
Event event1 = Event.builder()
.name("스프링 웹 MVC 스터디 1차")
.limitOfEnrollment(5)
.startDateTime(LocalDateTime.of(2022, 1, 2, 10, 0))
.endDateTime(LocalDateTime.of(2022, 1, 2, 12, 0))
.build();
Event event2 = Event.builder()
.name("스프링 웹 MVC 스터디 2차")
.limitOfEnrollment(5)
.startDateTime(LocalDateTime.of(2022, 1, 5, 10, 0))
.endDateTime(LocalDateTime.of(2022, 1, 5, 12, 0))
.build();
return List.of(event1, event2);
}
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1> 이벤트 목록 </h1>
<table>
<tr>
<th>이름</th>
<th>참가 인원</th>
<th>시작</th>
<th>종료</th>
</tr>
<tr th:each="event: ${events}">
<td th:text="${event.name}"> 이벤트 이름 </td>
<td th:text="${event.limitOfEnrollment}"> 100 </td>
<td th:text="${event.startDateTime}">2022년 1월 2일 오전 10시</td>
<td th:text="${event.endDateTime}">2022년 1월 2일 오전 12시</td>
</tr>
</table>
</body>
</html>
서버를 실행해보면 EventService에서 model에 담았던 이벤트 객체가
아래와 같이 테이블에 표시되는 것을 확인할 수 있습니다!
728x90
반응형
LIST
'JAVA > Spring Framework' 카테고리의 다른 글
[스프링 웹 MVC] 서블릿 리스너와 서블릿 필터 (0) | 2022.03.20 |
---|---|
[스프링 웹 MVC] 서블릿 애플리케이션 개발 (0) | 2022.03.16 |
스프링 웹 MVC (0) | 2022.03.14 |