-
Spring MVC란?SPRING/스프링 MVC 2021. 6. 2. 22:41
스프링 MVC 소개
M: 모델
V: 뷰
C: 컨트롤러
MVC의 장점
- 동시 다발적(Simultaneous) 개발 : 백엔드 개발자와 프론트엔드 개발자가 독립적으로 개발을 진행가능
- 높은 결합도 : 논리적으로 관련있는 기능을 하나의 컨트롤러로 묶거나, 특정 모델과 관련있는 뷰를 그룹화 할 수 있음.
- 낮은 의존도 : 뷰, 모델, 컨트롤러는 각각 독립적
- 개발 용이성 : 책임이 구분되어 있어 코드 수정하는 것이 편함.
MVC 패턴의 단점
- 코드 네비게이션 복잡함
- 코드 일관성 유지에 노력이 필요함
- 높은 학습 곡선
예제
@Getter @Setter @Builder // Builder 패턴을 적용할 때 사용하는 어노테이션 // builder 간련 메서드를 따로 작성하지 않아도 됨. @NoArgsConstructor @AllArgsConstructor public class Event { private String name; private int limitOfEnrollment; private LocalDateTime startDateTime; private LocalDateTime endDateTime; } @Controller public class EventController { @Autowired EventService eventService; // @GetMapping (Spring 4.3버전부터 추가) @RequestMapping(value="/events", method = RequestMethod.GET) public String Events(Model model) { model.addAttribute("events",eventService.getEvents()); return "events"; } } @Service public class EventService { public List<Event> getEvents() { // builder 패턴 적용 Event event1 = Event.builder() .name("스프링 웹 MVC 스터디") .limitOfEnrollment(5) .startDateTime(LocalDateTime.of(2019,1,10,10,0)) .endDateTime(LocalDateTime.of(2019,1,10,12,0)) .build(); Event event2 = Event.builder() .name("스프링 웹 MVC 스터디 2차") .limitOfEnrollment(5) .startDateTime(LocalDateTime.of(2019,1,17,10,0)) .endDateTime(LocalDateTime.of(2019,1,17,12,0)) .build(); return List.of(event1, event2); }; }
HTML -event.html
<!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}">2019년 1월 10일 오전 10시</td> <td th:text="${event.endDateTime}">2019년 1월 10일 오전 12시</td> </tr> </table> </body> </html>
Builder 패턴
- 각 인자가 어떤 의미인지 알기 쉽다.
- setter 메소드가 없으므로 변경 불가능한 객체를 만들 수 있다.
- 한 번에 객체를 생성하므로 객체 일관성이 깨지지 않는다.
- build() 함수가 잘못된 값이 입력되었는지 검증하게 할 수도 있다.
'SPRING > 스프링 MVC' 카테고리의 다른 글
스프링 MVC -WEB.XML 제거 (0) 2021.06.10 DispatchServlet 분석 (0) 2021.06.06 스프링 MVC 연동 (0) 2021.06.06 스프링 IOC 컨테이너 연동 (0) 2021.06.05 서블릿 리스너와 필터 (0) 2021.06.05