[스프링 웹 MVC] 스프링 MVC 소개

2022. 3. 14. 17:17JAVA/Spring Framework

728x90
반응형
SMALL

개발자라고 한다면 무조건 들어봤을 개념인 MVC에 대해서 알아보고자 합니다.

 

Model - View - Controller 의 앞자리를 따서 MVC라고 칭하는데요!

 

Model (모델)

- 평범한 자바 객체 POJO

- 도메인 객체 또는 DTO로 화면에 전달할, 또는 화면에서 전달 받은 데이터를 담고 있는 객체

 

View (뷰)

- HTML, jsp, Thymeleaf 와 같은 사용자에게 보여지는 화면

- 데이터를 보여주는 역할

 

Controller (컨트롤러)

- 스프링 @MVC

- 사용자 입력을 받아 모델 객체의 데이터를 변경하거나, 모델 객체를 뷰에 전달하는 역할

  • 입력값 검증
  • 입력 받은 데이터로 모델 객체 변경
  • 변경된 모델 객체를 뷰에 전달

 

Model–View–Controller

https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

 

Model–view–controller - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Software design pattern Diagram of interactions within the MVC pattern Model–view–controller (MVC) is a software design pattern[1] commonly used for developing user interfaces that

en.wikipedia.org

 

 

장점

  • 동시다발적 (Simultaneous) 개발 - 백엔드 개발자와 프론트엔드 개발자가 독립적으로 개발 진행 가능
  • 높은 결합도 - 논리적으로 관련있는 기능을 하나의 컨트롤러로 묶거나, 특정 모델과 관련있는 뷰를 그룹화
  • 낮은 의존도 - 뷰, 모델, 컨트롤러 각각 독립적
  • 개발 용이성 - 책임이 구분되어 있어 코드 수정에 용이
  • 한 모델에 대한 여러 형태의 뷰를 가질 수 있음

 

단점

  • 복잡한 코드 네비게이션
  • 코드 일관성 유지가 어려움
  • 높은 학습 곡선

 

 

 

이제 MVC 형태의 스프링 웹 프로젝트를 생성해 실습을 해보려고 합니다! 🤓

 

2021.09.02 - [JAVA/Spring Security] - [Spring Security] IntelliJ 스프링 웹 프로젝트 만들기

 

[Spring Security] IntelliJ 스프링 웹 프로젝트 만들기

안녕하세요! 지난 번 (아주 오래 전) 포스팅에서 백기선 강사님의 [ 스프링 시큐리티 ] 강의를 듣겠다고 선언했었는데요! 이제서야...... 시작했습니다 🙄🤓 2021.06.11 - [JAVA/Spring Framework] - 스프링

mozzioi.tistory.com

 

위 글을 통해 프로젝트 생성을 해주시면 되구요 😊

결론부터 말씀 드리자면 이 간단한 프로젝트는 아래와 같이 구분되어 질 수 있습니다.

 

 

 


 

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