ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.