Java의 MVC 아키텍처에 대한 초보자 가이드

게시 됨: 2018-04-10

웹 개발 현장과 관련이 있는 경우 "MVC"라는 약어를 수백 번 이상은 보았을 것입니다. MVC는 오늘날 웹 프로그래밍 세계에서 가장 많이 언급되는 디자인 패턴 중 하나입니다. 이 기사에서는 MVC 아키텍처의 세계를 안내합니다. 우리는 MVC의 기본, 장점, 그리고 마지막으로 Java에서 MVC 구현을 보다 명확하게 이해하는 데 도움이 되는 간단한 코드에 대해 이야기할 것입니다.

목차

MVC 아키텍처는 정확히 무엇입니까?

기술적인 내용을 다루기 전에 몇 가지를 명확히 합시다. MVC는 디자인 패턴이 아니라 애플리케이션을 구조화하는 방법입니다. 최근 몇 년 동안 웹 응용 프로그램은 MVC 아키텍처를 광범위하게 사용하므로 웹 응용 프로그램 전용 디자인 패턴으로 혼동하는 것이 당연합니다. 그러나 MVC가 웹 응용 프로그램의 개념이 없었던 WWW 시대 이전인 1979년에 처음으로 설명되었다는 것을 알려 드리겠습니다. 오늘날 웹 애플리케이션에 사용되는 아키텍처는 원래 패턴을 적용한 것입니다.
사실, 이 아키텍처는 처음에 두 가지 주요 웹 개발 프레임워크인 Struts와 Ruby on Rails에 포함되었습니다. 이 두 가지 환경은 나중에 나온 대다수의 웹 프레임워크를 위한 길을 열었고 따라서 이 아키텍처의 인기는 계속 높아졌습니다.

Swiggy, Quora, IMDB 등과 같은 애플리케이션을 빌드하는 방법을 배우십시오.

MVC 아키텍처 패턴은 기본 아이디어를 따릅니다. 우리는 다음을 기반으로 모든 애플리케이션에서 책임을 분리해야 합니다.

  • 모델: 데이터 및 비즈니스 로직을 처리합니다.
  • 보기: 사용자가 요청할 때마다 데이터를 표시합니다.
  • 컨트롤러: 사용자 요청을 즐겁게 하고 필요한 리소스를 가져옵니다.

각 구성 요소에는 완전한 모듈성과 함께 전체 응용 프로그램의 원활한 기능을 보장하는 구분된 작업 세트가 있습니다. 이러한 각 구성 요소를 더 자세히 살펴보겠습니다.

제어 장치

컨트롤러는 응용 프로그램의 가정부와 같습니다. 사용자 요청을 즐겁게 하기 위해 모델과 보기 간의 조정을 수행합니다. 사용자 요청은 HTTP get 또는 post 요청으로 수신됩니다(예: 사용자가 작업을 수행하기 위해 GUI 요소를 클릭할 때).
컨트롤러의 기본 기능은 작동에 필요한 리소스를 가져오기 위해 모델을 호출하고 조정하는 것입니다. 일반적으로 사용자 요청을 받으면 컨트롤러는 당면한 작업에 적합한 모델을 호출합니다.

모델

모델은 우리 애플리케이션을 위한 아주 단순한 데이터입니다. 데이터는 저장, 검색 및 편집하기 쉬운 방식으로 "모델링" 됩니다. 모델은 데이터에 규칙을 적용하는 방법이며, 이는 결국 애플리케이션이 관리하는 개념을 나타냅니다.
모든 소프트웨어 응용 프로그램의 경우 모든 것이 쉽게 처리할 수 있는 데이터로 모델링됩니다. 앱에 대한 사용자, 책 또는 메시지는 무엇입니까? 실제로는 아무 것도 없고 특정 규칙에 따라 처리되어야 하는 데이터만 있습니다. 예를 들어 날짜는 현재 날짜보다 높으면 안 되며 이메일은 올바른 형식이어야 하며 이름은 "x"자를 넘지 않아야 합니다.

사용자가 컨트롤러에서 요청할 때마다 사용자가 요청한 내용의 데이터 표현을 반환하는 적절한 모델에 연결합니다. 이 모델은 사용자에게 표시하려는 방식과 상관없이 특정 작업에 대해 동일합니다. 이것이 모델 데이터를 렌더링하기 위해 사용 가능한 보기를 선택할 수 있는 이유입니다.
또한 모델에는 모델 데이터가 변경될 때마다 관련 컨트롤러를 업데이트하는 로직도 포함되어 있습니다.

보다

이름에서 알 수 있듯이 뷰는 모델에서 받은 데이터를 렌더링하는 역할을 합니다. 데이터를 맞출 수 있는 미리 디자인된 템플릿이 있을 수 있으며 요구 사항에 따라 모델마다 여러 다른 보기가 있을 수도 있습니다.

모든 웹 응용 프로그램은 이 세 가지 핵심 구성 요소를 염두에 두고 구성됩니다. 모든 요청을 수신하고 특정 작업을 위해 특정 컨트롤러를 호출하는 일차 컨트롤러가 있을 수 있습니다. 예제를 사용하여 MVC 아키텍처에서 웹 애플리케이션의 작동을 더 잘 이해합시다.

예제를 보자

온라인 문구점의 예를 들어보겠습니다. 사용자는 항목을 보고, 구매하고, 장바구니에 항목을 추가하고, 현재 주문에 항목을 추가하거나, 항목을 추가/제거할 수도 있습니다(관리자인 경우).
이제 사용자가 "펜"이라는 제목을 클릭하여 펜 목록을 볼 때 어떤 일이 발생하는지 봅시다.
우리의 응용 프로그램에는 펜과 관련된 모든 쿼리를 처리하는 특정 컨트롤러가 있습니다. "pens_controller.php"라고 합시다. 우리는 또한 우리가 가지고 있는 펜에 관한 데이터를 저장할 모델을 갖게 될 것입니다. "pens_model.php"라고 부르겠습니다. 마지막으로 펜 목록, 펜을 표시하는 테이블, 목록 편집 페이지 등 데이터를 표시하기 위한 여러 보기가 있습니다.
다음 그림은 사용자가 "펜"을 클릭하는 순간부터 결과가 사용자 앞에서 렌더링될 때까지의 전체 제어 흐름을 보여줍니다.

먼저 "pens_controller.php"는 사용자 요청(1)을 GET 또는 POST 요청으로 처리합니다. 필요할 때마다 "pens_controller"를 호출하는 중앙 컨트롤러인 "index.php"를 가질 수도 있습니다.
그런 다음 컨트롤러는 요청과 매개변수를 검사하고 필요한 모델(이 경우 "pens_model.php")을 호출합니다. 컨트롤러는 모델에 사용 가능한 펜 목록을 반환하도록 요청합니다(2).
이제 모델은 데이터베이스에서 필요한 정보를 검색하고(3), 필요한 경우 논리를 적용하고 데이터를 컨트롤러에 반환합니다(4).
그런 다음 컨트롤러는 적절한 보기(5)를 선택하고 데이터(6 및 7)를 표시합니다. 핸드헬드 장치에서 요청이 오는 경우 그에 적합한 보기가 사용되거나 사용자가 특정 테마를 선택한 경우 해당 보기가 선택되는 식입니다.
풀 스택 개발자가 되는 방법

MVC 아키텍처의 장점

오늘날 응용 프로그램 개발자가 직면하는 일반적인 문제는 다양한 유형의 장치에 대한 지원입니다. MVC 아키텍처는 개발자가 다른 장치에 대해 다른 인터페이스를 생성할 수 있고 요청이 이루어진 장치에 따라 컨트롤러가 적절한 보기를 선택하기 때문에 이 문제를 해결합니다. 모델은 사용 중인 장치에 관계없이 동일한 데이터를 전송하므로 모든 장치에서 완전한 일관성을 보장합니다.
MVC 분리는 비즈니스 로직에서 보기를 아름답게 분리합니다. 또한 코드와 워크플로를 구조화하여 유지함으로써 대규모 애플리케이션 설계의 복잡성을 줄입니다. 이렇게 하면 전체 코드를 훨씬 쉽게 유지 관리, 테스트, 디버그 및 재사용할 수 있습니다.

Java를 사용한 MVC의 간단한 구현

다음 세 가지가 있습니다.

    1. StudentObject : 모델.

    1. StudentView: 콘솔에서 세부 정보를 인쇄하기 위해 클래스를 봅니다.

  1. StudentController: studentObject에 데이터를 저장하고 그에 따라 StudentView를 업데이트하는 컨트롤러

1단계: 모델 생성

 공개 수업 학생 {
   개인 문자열 rollNo ;
   개인 문자열 이름 ;
   
   공개 문자열 getRollNo () {
      롤 아니오 반환 ;
   }
   
   공개 무효 setRollNo ( 문자열 롤 번호 ) {
       . 롤 번호 = 롤 번호 ;
   }
   
   공개 문자열 getName () {
      반환 이름 ;
   }
   
   공개 무효 setName ( 문자열 이름 ) {
       . 이름 = 이름 ;
   }
}

코드는 자명합니다. 학생의 명부번호와 이름을 가져오거나 설정하는 기능으로 구성되어 있습니다. "student.java"라고 합시다.
2단계: 보기 만들기

 공개 클래스 StudentView {
   공개 무효 printStudentDetails ( 문자열 학생 이름 , 문자열 학생 롤 번호 ){
      시스템 . 밖으로 . println ( "학생: " );
      시스템 . 밖으로 . println ( "이름: " + 학생 이름 );
      시스템 . 밖으로 . println ( "롤 번호: " + studentRollNo );
   }
}

이것은 단순히 값을 콘솔에 인쇄하기 위한 것입니다. 이것을 "studentView.java"라고 합시다.
3단계: 컨트롤러 생성

 공개 클래스 학생 컨트롤러 {
   사립 학생 모델 ;
   개인 StudentView 보기 ;
   공개 StudentController ( 학생 모델 , StudentView 보기 ){
       . 모델 = 모델 ;
       . 보기 = 보기 ;
   }
   공개 무효 setStudentName ( 문자열 이름 ){
모델 . setName ( 이름 );
   }
   공개 문자열 getStudentName (){
      반환 모델 . 이름 가져오기 ();
   }
   공개 무효 setStudentRollNo ( 문자열 롤 번호 ){
모델 . setRollNo ( 롤번호 );
   }
   공개 문자열 getStudentRollNo (){
      반환 모델 . getRollNo ();
   }
   공개 무효 updateView (){
보기 . printStudentDetails ( 모델 . getName (), 모델 . getRollNo ());
   }
}

이것을 "StudentController.java"라고 합니다. 얼핏 보면 이 컨트롤러가 데이터를 가져오고 설정하기 위해 모델을 호출한 다음 뷰를 업데이트하는 역할을 한다는 것을 알 수 있습니다.
이제 이 모든 것이 어떻게 연결되어 있는지 살펴보겠습니다.
4단계: 기본 Java 파일 만들기

 공개 클래스 MVCPatternDemo {
   공개 정적 무효 메인 ( 문자열 [] 인수 ) {
      // 데이터베이스에서 롤 번호를 기반으로 학생 기록을 가져옵니다.
      학생 모델 = retriveStudentFromDatabase ();
      //보기 만들기 : 콘솔에 학생 세부 정보 쓰기
      StudentView 보기 = 새로운 StudentView ();
      StudentController 컨트롤러 = 새로운 StudentController ( 모델 , 보기 );
컨트롤러 . 업데이트 보기 ();
      //모델 데이터 업데이트
컨트롤러 . setStudentName ( "존" );
컨트롤러 . 업데이트 보기 ();
   }
   개인 정적 학생 검색StudentFromDatabase (){
      학생 학생 = 신입 학생 ();
학생 . setName ( "로버트" );
학생 . setRollNo ( "10" );
      재학생 ; _
   }
}

이것을 "MVCPatternDemo.java"라고 합니다. 보시다시피 데이터베이스나 함수(이 경우 함수를 사용하여 값을 설정함)에서 학생 데이터를 가져와 학생 모델에 푸시합니다. 그런 다음 이전에 만든 뷰를 초기화합니다.
또한 컨트롤러를 초기화하고 모델과 뷰에 바인딩합니다. updateView() 메서드는 콘솔에서 학생 세부 정보를 업데이트하는 컨트롤러의 일부입니다.
5단계: 결과 테스트
모든 것이 올바르게 진행되면 결과는 다음과 같아야 합니다.

 학생:
이름: 로버트
롤 번호: 10
학생:
이름: 존
롤 번호: 10

이것을 출력으로 얻으면 축하합니다! 간단한 애플리케이션이지만 Java를 사용하여 MVC 아키텍처를 성공적으로 구현했습니다. 그러나 이 애플리케이션은 간단하지만 MVC 아키텍처의 능력을 입증하기에 충분합니다.
꼭 알아야 할 Spring MVC 인터뷰 질문 15가지

마무리…
그렇게 많은 말과 행동을 하고 나면 오늘날 어떤 웹/데스크톱 애플리케이션에서든 MVC 아키텍처의 힘을 더 강조하기가 어렵습니다. 코드에 완전히 새로운 수준의 모듈성을 제공하여 훨씬 더 읽기 쉽고 유지 관리가 용이합니다. 따라서 애플리케이션 개발자로서의 경력을 새로운 차원으로 확장하고 싶다면 MVC 아키텍처와 그 작업을 파악하는 것이 최우선 과제가 되어야 합니다.

세계 최고의 대학에서 소프트웨어 엔지니어링 과정에 등록하십시오. 이그 제 큐 티브 PG 프로그램, 고급 인증 프로그램 또는 석사 프로그램을 획득하여 경력을 빠르게 추적하십시오.

댓글을 통해 이 기사가 마음에 드는지 알려주세요!

풀 스택 개발자 되기

UpGrad 및 IIIT-Bangalore의 소프트웨어 개발 PG 디플로마
지금 소프트웨어 공학 석사 지원