Spring/SpringMVC

[Spring MVC] MVC 패턴

2022. 2. 23. 19:35
목차
  1. 1.관심사의 분리
  2. 2.공통 코드의 분리 - 입력의 분리
  3. 3.출력(view)의 분리 - 변하는 것과 변하지 않는 것의 분리
  4. 4.MVC 패턴

1.관심사의 분리

 

 위의 코드는 요일 계산을 코드다. 코드는 크게 입력, 요일 계산, 프로그램(코드) 출력 세 부분으로 나뉜다. 객체지향 설계(OOP설계)의 첫 번째 원칙은 '하나의 메서드는 하나의 책임'  단일책임원칙(SRP)다. 스프링 MVC는 단일 책임에 따라 작성하는 방법론이다. 따라서 위 코드를 MVC 패턴에 따라 작성하면 단일책임원칙에 따라 작성하게 된다.  

 

※객체지향 설계 5원칙

 

  • SRP (Single Responsibility Principle) : 단일 책임 원칙
  • OCP (Open-Closed Principle) : 개방 폐쇄 원칙
  • LSP (Liskov Substitution Principle) : 리스코프 치환 원칙
  • ISP (Interface Segragation Principle) : 인터페이스 분리 원칙
  • DIP (Dependency Inversion Principle) : 의존관계 역전 원칙

 

2.공통 코드의 분리 - 입력의 분리

 

 공통코드를 분리해보자. '입력'을 담당하는 부분을 따로 떼내어놓으면 나머지 작업에서는 처리와 출력 두 작업만 수행하면된다. 코드에서는 어떻게 나타낼 수 있을까?? 

 

 

 클라이언트의 입력을 받아 request에 2022/2/23의 데이터를 담는다. 데이터를 담은 request는 변경된 코드의 매개변수에 각자 year, month, day라는 이름으로 입력된다. 이를 통해 형변환의 작업은 사라지고 메서드의 매개변수로 request요청의 데이터를 직접 받게된다.

 

 

3.출력(view)의 분리 - 변하는 것과 변하지 않는 것의 분리

 위의 이미지에서 왼쪽 코드는 클래스 안에 출력하는 코드가 있지만 분리하면 다른 클래스(대부분 jsp를 쓴다)로 나눠 쓸 수 있다. 출력 코드가 같은 클래스에 있을 때는 상관없지만 다른 영역으로 이동하면 매개변수가 달라 출력에 쓰일 데이터를 넘겨줄 수 없다. 이를 위해 모델 객체에 값을 담아 view로 넘겨준다. 왼쪽 그림과 같이 코드의 로직을 처리하는 부분(Controller)와 값을 담는 모델(Model), 그리고 화면을 보여주는 View를 보여주는 코드를 나눈 패턴을 우리는 MVC패턴이라한다.

 

 

4.MVC 패턴

 

 앞서 설명한 MVC 패턴을 코드와 함께 도식화 해보면 간단하게 위의 그림과 같이 나타낼 수 있다. (1)브라우저에서 입력요청이 들어오면 DispatcherServlet에서 값을 입력 및 변환하고 (2)로직을 수행하는 Controller로 작업이 이동한다. 로직을 수행함과 동시에 (3)출력 코드에 보낼 값을 DispatcherServlet으로 보내고 DispatcherServlet은 모델을 생성한 후 출력코드를 나타낸 jsp파일로 (4)모델을 객체로 넘긴다. 모델 객체를 넘겨받은 jsp파일은 출력 작업을 수행한 후 (5)완료된 작업을 브라우저에게 보낸다. 조금 더 MVC패턴을 파헤쳐보자.

 

 

 

 

 클라이언트로부터 URL요청이 들어오면 DispatcherServlet은 HandlerMapping에게 URL에 알맞는 메서드 찾기에 대한 책임을 넘기고 HandlerMapping은 URL에 알맞은 메서드 정보를 DispatcherServlet에게 넘긴다. URL에 맞는 메서드 정보를 받은 DispatcherServlet은 메서드를 호출한다.

 

 Controller는 다양한 HandlerAdapter를 가지고 있는데, HandlerAdapter는 DispatcherServlet으로 부터 넘겨받은 메서드 정보를 통해 Controller에게 호출된 메서드에 알맞은 HandlerAdapter 정보를 준다. 이를 통해 DispatcherServlet과 Controller를 느슨하게 연결하고 변경에 유리하게 한다. Controller에서 View에 대한 정보를 얻는다.

 

 View의 정보를 넘겨받은 DispatcherServlet은 ViewResolver에게 뷰를 찾는 책임을 넘기고 ViewResolver는 요청에 알맞은 View의 정보를 DispatcherServlet에게 넘긴다. View에 대한 정보를 넘겨받은 DispatcherServlet은 출력 해야하는 jsp에게 데이터 값을 모델 객체에 담아 데이터 값을 넘겨준다. 출력값을 받은 jsp는 화면에 데이터 값을 입력한 후 클라이언트에게 출력 된 결과물을 보낸다.

 


출처

  • 스프링의 정석 : 남궁성과 끝까지 간다(패스트 캠퍼스 강좌)
  • https://devpad.tistory.com/24?category=773041

'Spring > SpringMVC' 카테고리의 다른 글

[SpringMVC] rediect와 forward  (0) 2022.02.26
[SpringMVC] 요청과 응답  (0) 2022.02.25
[SpringMVC] 데이터 변환과 검증  (0) 2022.02.24
[Spring MVC] 예외처리  (0) 2022.02.23
[Spring MVC] 쿠키와 세션  (0) 2022.02.22
  1. 1.관심사의 분리
  2. 2.공통 코드의 분리 - 입력의 분리
  3. 3.출력(view)의 분리 - 변하는 것과 변하지 않는 것의 분리
  4. 4.MVC 패턴
'Spring/SpringMVC' 카테고리의 다른 글
  • [SpringMVC] 요청과 응답
  • [SpringMVC] 데이터 변환과 검증
  • [Spring MVC] 예외처리
  • [Spring MVC] 쿠키와 세션
각시탈코더
각시탈코더
각시탈코더
각시탈코더
각시탈코더
전체
오늘
어제
  • 분류 전체보기 (203)
    • java (46)
      • 객체지향 (20)
      • 기본문법 (8)
      • 자바의 정석 연습문제 오답노트 (9)
      • 백준 알고리즘 (9)
    • Spring (17)
      • SpringMVC (8)
      • Spring DI와 AOP (5)
      • REST API와 Ajax (1)
      • Spring 프로젝트 (1)
      • Spring Security (0)
    • DB (47)
      • Oracle (15)
      • SQL오답노트 (25)
      • 튜닝 (0)
      • ERD (1)
      • DB 모델링 (5)
    • Servlet & JSP (3)
    • JDBC (2)
      • 기본 (1)
      • 스프링JDBC (1)
    • MyBatis (2)
    • JavaScript (2)
      • 코딩애플 (0)
      • 문법 (1)
    • React (0)
      • 코딩애플 (0)
    • HTML (0)
      • 모던 웹을 위한 HTML5+CSS3 바이블 (0)
    • CSS (0)
      • 모던 웹을 위한 HTML5+CSS3 바이블 (0)
    • Linux (0)
    • Git & GitHub (2)
      • Git (1)
    • CS (19)
      • 네트워크 (6)
      • HTTP (7)
      • 컴퓨터구조 (0)
      • 자료구조와 알고리즘 (2)
      • 기타 (4)
    • 개발설정 (2)
    • 기술면접 (0)
      • JAVA (0)
      • Spring (0)
      • DB (0)
      • 네트워크 (0)
      • 공통 (0)
    • 프로젝트 (2)
      • 게시판만들기 (2)
    • 기혁씨의 삽질표류기 (28)
    • 참고자료 (2)
      • 국비수업 (0)
      • 당당 프로젝트 (1)
    • 뉴렉처 (17)
      • 자바 (11)
      • 자바스크립트 (3)
      • 키워드 (0)
      • 숙제 (0)
      • CSS (0)
      • DB (3)
      • 서블릿 (0)
      • 스프링 (0)
      • DOM (0)
    • 내가 만든 학습그림 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • db
  • 공부
  • 모두의네트워크
  • It
  • 오류
  • 프로그래머스
  • 에러
  • 쿼리
  • Oracle
  • 네트워크
  • 백준
  • 자바
  • 연습문제
  • 코딩
  • 자바의정석
  • 자바의정석기초편
  • spring
  • 오라클
  • 배열
  • Java
  • 알고리즘
  • 개발자
  • 국비수업
  • 웹프로그래밍
  • 스프링
  • 객체지향
  • SQL
  • 서브쿼리
  • 뉴렉처
  • 백엔드

최근 댓글

최근 글

hELLO · Designed By 정상우.
각시탈코더
[Spring MVC] MVC 패턴
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.