MVC(model-view-controller) 아키텍쳐

ImOk·2021년 12월 1일
0

👩‍💻 웹 개발

목록 보기
1/14
post-thumbnail

1. MVC의 각 컴포넌트 역할 🛠

컨트롤러(controller)

  • 클라이언트의 요청에 대해 모델를 결정하여 전달하는 일. 조정자 역할
  • 클라이언트의 요청을 받았을 때 그 요청에 대해 실제 업무를 수행하는 모델 컴포넌트를 호출
  • 클라이언트가 보낸 데이터가 있으면, 모델을 호출할 때 전달하기 쉽게 데이터 가공
  • 모델이 업무 수행을 완료하면, 그 결과를 가지고 화면을 생성하도록 에게 전달

모델(model)

  • 데이터 저장소와 연동해 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다루는 일
  • 여러 개의 데이터 변경 작업 (추가, 변경, 삭제)을 하나의 작업으로 묶은 트랜젝션을 다루는 일

뷰(view)

  • 모델이 처리한 데이터나 그 작업 결과를 가지고 사용자에게 출력할 화면을 만드는 일
  • 생성된 화면을 웹 브라우저가 출력
  • HTML, CSS, JavaScript, JQuery 등을 사용해 웹 브라우저가 출력할 UI를 만든다.

2. MVC 이점 💡

  • 룩앤필(Look and Feel) 을 쉽게 교체할 수 있다. 즉 화면 생성 부분을 별도의 컴포넌트로 분리하였기 때문에, 컨트롤러나 모델에 상관없이 뷰 교체만으로 배경, 모양, 레이아웃, 글꼴 등 사용자 화면을 손쉽게 바꿀 수 있다.

  • 원 소스 멀티 유즈(One source multi-use, OSMU) 구현할 수 있다. 모델 컴포넌트가 작업한 결과를 다양한 뷰 컴포넌트를 통해 PDF, HTML, JSON, XML 등 클라이언트가 원하는 형식으로 출력 가능

  • 코드를 재사용 할 수 있다. 화면을 바꾸거나 데이터 형식을 바꾸더라도 모델 컴포넌트는 재사용 할 수 있기 때문에 개발 속도가 빨라진다.

3. MVC Model2 구동 원리 ⚙

  1. 웹 브라우저가 웹 애플리케이션 실행을 요청한다.

  2. 웹 서버가 그 요청을 받아서 서블릿 컨테이너 (ex) 톰캣 서버)에 넘겨준다. 서블릿 컨테이너는 URL을 확인해 그 요청을 처리할 서블릿을 찾아서 실행한다.

  3. 서블릿은 실제 업무를 처리하는 모델 자바 객체의 메소드 호출한다.
    - 만약 웹 브라우저가 보낸 데이터를 저장하거나 변경해야 한다면 그 데이터를 가공하여 값 개체(VO)를 생성하고, 모델 객체의 메소드를 호출할 때 인자값으로 넘긴다.
    - 모델 객체는 엔터프라이즈 자바빈 (EJB) 일 수도 있고, 일반 자바 객체(POJO) 일 수도 있다.

  4. 모델 객체는 JDBC를 사용해 매개변수로 넘어온 값 객체 를 데이터베이스에 저장하거나, 데이터베이스로부터 질의 결과를 가져와서 값 객체로 만들어 반환한다.
    - 값 객체는 객체와 객체 사이에 데이터를 전달하는 용도로 사용하기 때문에 데이터 전송 객체(DTO) 라고도 부른다.

  5. 서블릿은 모델 객체로부터 반환받은 값을 View(JSP)에 전달한다.

  6. JSP서블릿으로부터 전달받은 값 객체를 참조해 웹 브라우저가 출력할 결과 화면을 만들고, 컨트롤러에 전달한다.

  7. View로 부터 받은 화면을 웹 서버에 전달한다.

  8. 웹 브라우저는 웹 서버로부터 받은 응답 내용을 화면에 출력한다.


4. MVC Model1 vs MVC Model2

4.1 MVC Model 1

  • 비즈니스 로직 영역(Controller)에 프레젠테이션 영역(view)을 같이 구현하는 방식
  • 브라우저가 서버에 요청하면 해당 요청을 JSP가 받고, JSP는 Java로 만들어진 클래스인 Java Beans을 이용해서 Database를 사용하고, 그 결과를 화면에 출력한다.
  • 빠르고 쉽게 개발할 수 있지만, JSP에 HTML 코드와 Java 코드가 섞여있어 유지보수가 어렵다.
  • 이 방식으로 웹 서비스를 개발하는 사례는 거의 없다. 백엔드와 프론트엔드 역할 분담이 모호해서 오히려 협업에 걸림돌이 된다.

4.2 MVC Model 2

  • 비즈니스 로직 영역(Controller)과 프레젠테이션 영역(view)이 분리되어 있는 구현 방식
  • 요청 자체는 Servlet이 받고, Servlet이 Java Beans을 이용해서 Database에서 데이터를 가져와, 그 결과를 JSP를 통해서 화면에 출력한다.
  • Servlet은 요청과 데이터를 처리하는 Controller의 역할을 수행하고, JSP는 모델의 결과를 보여주는 View의 역할을 수행한다.
  • 설계에는 어려움이 있지만, 이렇게 함으로써 로직과 view를 분리할 수 있어 유지보수에 유리하다.
  • Model2의 발전된 형태가 Spring framework의 모듈중 하나인 Web Module에 구현되어있다. => 이게 Spring MVC

5. 참고 자료 📖

참고 URL :
https://wooaoe.tistory.com/15
https://codingnotes.tistory.com/17

profile
ImOk👌

0개의 댓글