본문 바로가기
etc

MVC 모델

by haheehee 2022. 12. 19.

Model/View/Controller (MVC) 모델

 

MVC(Model View Controller) 모델은 중앙 데이터 구조를 갖는다. 

이미지 출처 : 네이버 지식백과

시스템을 세 개의 서브 시스템인 Model, View, Controller로 나누어 구성한다.

제어 서브시스템은 뷰 서브시스템과 모델 서브시스템 사이에서 가교 역할을 한다. 

 

같은 모델의 서브시스템에 대하여 여러 뷰 서브시스템을 필요로 하는 상호작용 시스템에 적합하다. 

이렇게 시스템을 세 가지로 분리하는 이유는, 

사용자 인터페이스인 View 서브시스템과

데이터와 데이터 처리 로직인 Model 서브 시스템을

독립적으로 분리함으로써 변경에 대한 영향을 덜 미치도록 하려는 것이다.

사용자 인터페이스 부분(View)이 자주 변경되어도 모델 서브시스템에는 영향을 주지 않게하기 위함이다.

 

MVC 모델의 가장 큰 특징은 각각의 서브시스템이 독립적이라는 것이다.

 뷰는 모델의 데이터를 직접 변경할 수 없고, 오직 모델이 제공하는 데이터를 가져올 수만 있다. 그러나 모델은 뷰에 대한 정보를 알 수 없다. 따라서 모델은 여러 개의 뷰가 어떻게 처리되는지도 알 필요 없다.

 

(출처 : [네이버 지식백과] 아키텍처 모델 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 김치수))


  • 모델 서브시스템(Model) 

모든 데이터 상태와 로직을 처리

뷰/제어 서브시스템과 독립 -> 특정 입/출력 방식에 영향을 받지 않는다.

컨트롤러의 호출에만 응답. 

->> 소프트웨어를 유연하게 만들 수 있다. 

 

 

  • 뷰 서브시스템(View) 

웹 어플리케이션의 사용자와 직접 대화가 이루어지는 부분

모델 서브시스템이 제공한 데이터를 사용자에게 보여주는 역할.

모델로부터 얻은 데이터를 표현, 표시.

뷰마다 컨트롤러 서브시스템이 하나씩 연결된다.

 

 

  • 제어 서브시스템(Controller) 

뷰와 모델 사이의 전달자 역할

뷰로부터 사용자의 요청을 모델로 넘겨주고, 

모델로부터 받은 응답을 다시 뷰를 통해 사용자에게 전달.

 

 

MVC 모델의 장점은 관심의 분리이다. 즉 데이터를 화면에 표현(뷰)하는 디자인과 로직(모델)을 분리함으로써 느슨한 결합이 가능하다. 따라서 동일한 데이터로 서로 다른 형태의 디자인을 추가할 수 있고, 결합이 느슨해서 서로 영향을 덜 미치기 때문에 구조 변경 요청 시 수정하기가 쉽다.

그러나 기본 기능 설계로 인한 클래스 수의 증가로 복잡도가 증가할 수 있고, 속도가 중요한 프로젝트에는 적합하지 않을 수 있다.

(출처 : [네이버 지식백과] 아키텍처 모델 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 김치수))


출처 : https://www.joinc.co.kr/w/man/12/mvc

  1. 브라우저의 요청을 받은 controller는 model을 업데이트 한다.
  2. Model은 상태를 반환한다.
  3. Controller는 View를 선택한다.
  4. View는 모델로부터 변경값을 가져온다.
  5. 변경값으로 HTML 문서를 만들어서
  6. 브라우저에 반환한다.

(출처 : https://www.joinc.co.kr/w/man/12/mvc)

 

Model : backend 서버에서 data logic (데이터 정보)를 담당하는 부분

View : frontend 서버에서 GUI(사용자 그래픽 인터페이스)를 담당하는 부분

Controller : 어플리케이션(프로젝트)의 핵심. 데이터가 어떻게 표현되는지 담당하는 부분.

 

(출처 : https://bans.tistory.com/28)


모델 

1. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.

2. 뷰나 컨트롤러에 대해서 어떤 정보도 알지 말아야 한다.

3. 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야만 한다.

 

1. 모델이 가지고 있는 정보를 따로 저장해서는 안된다.

2. 모델이나 컨트롤러와 같이 다른 구성요소들을 몰라야 된다.

3. 변경이 일어나면 변경통지에 대한 처리방법을 구현해야만 한다.

 

컨트롤러

1. 모델이나 뷰에 대하여 알고 있어야 한다. 

2. 모델이나 뷰의 변경을 모니터링해야 한다.

 

MVC 패턴의 예

- 구글의 AngularJS, php의 코드이그나이터

- python의 django, facebook의 react

 

(출처 :https://won-percent.tistory.com/11)


DNS (Domain Name System)

인터넷상의 모든 컴퓨터는 숫자를 사용하여 서로를 찾고 통신한다. 

-> 이 숫자를 IP주소라고 한다.

이 IP 주소 대신 도메인이름(example.com과 같은)을 사용하여 원하는 웹사이트로 갈 수도 있다. 

 

 DNS 서비스는 전 세계에 배포된 서비스로서,

www.example.com과 같이 사람이 읽을 수 있는 이름을 192.0.2.1과 같은 숫자 IP 주소로 변환하여

컴퓨터가 서로 통신할 수 있도록 합니다.

인터넷의 DNS 시스템은 이름과 숫자 간의 매핑을 관리한다.

 

(출처 :https://aws.amazon.com/ko/route53/what-is-dns/)

 


DNS 조회의 8단계

  1. 사용자가 웹 브라우저에 'example.com'을 입력하면, 쿼리가 인터넷으로 이동하고 DNS 재귀 확인자가 이를 수신합니다.
  2. 이어서 확인자가 DNS 루트 이름 서버(.)를 쿼리 (정보 수집에 대한 요청) 합니다.
  3. 다음으로, 루트 서버가, 도메인에 대한 정보를 저장하는 최상위 도메인(TLD) DNS 서버(예: .com 또는 .net)의 주소로 확인자에 응답합니다. example.com을 검색할 경우의 요청은 .com TLD를 가리킵니다.
  4. 이제, 확인자가 .com TLD에 요청합니다.
  5. 이어서, TLD 서버가 도메인 이름 서버(example.com)의 IP 주소로 응답합니다.
  6. 마지막으로, 재귀 확인자가 도메인의 이름 서버로 쿼리를 보냅니다.
  7. 이제, example.com의 IP 주소가 이름 서버에서 확인자에게 반환됩니다.
  8. 이어서, DNS 확인자가, 처음 요청한 도메인의 IP 주소로 웹 브라우저에 응답합니다.
  9. 브라우저가 IP 주소로 HTTP 요청을 보냅니다.
  10. 해당 IP의 서버가 브라우저에서 렌더링할 웹 페이지를 반환합니다(10단계).

DNS 조회의 10단계

쿼리 - 컨트롤러

 

(출처 :https://www.cloudflare.com/ko-kr/learning/dns/what-is-dns/)

 


Spring MVC 패턴에서 url을 통해 response한 경우 처리과정

 

1. 클라이언트(사용자)가 주소창에 URL을 입력

 

2. 브라우저는 DNS를 운영하는 서버를 통해 접속하려는 서버의 IP주소를 받아온다. 
예를 들어 사용자가 www.naver.com을 접속 시도할 경우, ping 명령어를 통해 확인해보면 DNS 서버에서 
125.209.222.142로 IP 주소를 리턴해, 해당 IP주소로 서버에 요청을 받음을 알 수 있다.

 

3. 브라우저가 DNS서버에서 받아온 IP주소에 위치한 서버에 요청을 보낸다.
(해당 IP주소에 위치한 서버가 Spring MVC를 따른다고 가정하자)

 

4.

4-1. 해당 서버의 Dispatcher Servlet이 request를 받는다.

4-2. Handler Mapper로 해당 request를 보내서, 그에 맞는 Controller가 있는지 확인한다. 있다면 해당하는 Controller를 반환, 없다면 404를 리턴해준다.

4-3. Handler Mapper에서 반환된 Controller로 request를 보내고, 보내기 위한 Model를 구성.

4-4. Model에서 CRUD를 위한 Model 정보를 Controller에게 response 해주면, Controller는 이를 받아 Model을 완성시켜 다시 Dispatcher Servlet에 반환해준다.

4-5. Dispatcher Servlet은 View Resolver를 통해 request에 해당하는 view 파일 탐색 후 받는다.

4-6. 받아낸 View 페이지 파일에 Model를 보내고, Client에 뿌려줄 페이지를 완성해서 얻어냄.

4-7. 완성된 View파일을 클라이언트에 Response하여 화면에 출력.

 

(출처 :https://goodwoong.tistory.com/120)

 

주소창 - 뷰

브라우져 - 컨트롤러

서버 - 모델

 

서블렛은 자바에서 서블렛 인터페이스로 상속받고 HttpServlet을 상속받은 클래스.

( JSP = 서블릿 ) => Spring


동작과정

1. DNS Client(웹 브라우저 등) 로컬 DNS에게 www.naver.com을 질의한다. 

2. 로컬 DNS Root DNS에게 www.naver.com을 묻는다.

3. Root DNScom을 인식하고 com을 관리하는 최상위 도메인 DNS 서버IP로컬 DNS에게 알려준다. 

4. 다시 로컬 DNS com도메인을 관리하는 최상위 도메인 DNS 서버에게 www.naver.com을 질의한다.

5. 최상위 도메인 DNS 서버 naver.com을 인식하고 naver.com을 관리하는

     책임 DNS 서버의 IP를 로컬 DNS에게 알려준다.

6. 로컬 DNS책임 DNS서버에게 www.naver.com을 질의하고

7. 책임 DNS 서버에서 www.naver.com 호스트에 대한 IP를 알려준다

8. 로컬 DNSDNS Client에게 www.naver.comIP를 알려준다.

 

(출처 :https://galid1.tistory.com/53)

 

 

 

더보기

MVC 모델

프로그램의 어느부분이 들어가는지

동작과정 시나리오

google닷컴을 쳤을 때 어떻게 동작하는 것인지

mvc 패턴 dns이런거

 

 


MVC

VC를 합치고,  Model 은 따로 코드 구성하는 것.

 

MVC1  패턴
MVC2 패턴

 

 controller model -  자바에서 처리

 view(JSP) - html 같은 부분

 

(출처 : velog.io/@gillog/a-j5c0h49n)

 

 

 

 

 

'etc' 카테고리의 다른 글

[스크랩] REST API 관점에서 바라보는 HTTP 상태 코드(HTTP status code)  (0) 2023.08.31
리눅스 명령어  (0) 2023.08.30
sehcha CMD  (0) 2023.06.01
GET과 POST  (0) 2023.01.26
자료구조 소스코딩  (0) 2022.12.22

댓글