🌿SPRING/🍀공부 [SPRING]

[SPRING] MVC 패턴

디카페인라떼 2022. 8. 18. 16:19

 

Model - View - Controller 3가지 역할로 프로젝트 구성요소를 구분한 패턴

  • Model
    어플리케이션이 무엇을 할 것인지 정의하는 부분즉 DB와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다룸
  • View
    사용자에게 시각적으로 보여주는 부분 (UI)
  • Controller
    Model이 데이터를 어떻게 처리할지 알려주는 역할. 사용자에 의해 클라이언트가 보낸 데이터가 있으면 모델을 호출하기전에 적절히 가공을 하고 모델을 호출. 그런다음 모델이 업무 수행을 완료하면 그 결과를 가지고 View에게 전달하는 역할.

=> 사용자가 URL을 호출하면 Controller에서 요청들을 받고 그 안에서 로직이나 데이터가 필요하면 Model에서 호출해서  모델에 구성된 로직이나 DB에 접근해서 데이터를 가져온다.

가져온 데이터를 Controller가 받고 그 데이터를 View에게 보여주어 최종적으로 사용자에게 보여짐.

 


❓MVC 패턴을 사용하는 이유

 

사용자가 보는 페이지, 데이터처리, 그리고 이 2가지를 중간에서 제어하는 컨트롤, 이 3가지로 구성되는 하나의 애플리케이션을 만들면 각각 맡은바에만 집중 할 수 있게 됨

 

즉 서로 분리되어 각자의 역할에 집중할 수 있게끔하여 개발을 하고 그렇게 애플리케이션을 만든다면,

유지보수성, 애플리케이션의 확장성, 그리고 유연성이 증가하고, 중복코딩이라는 문제점 또한 사라지는 효과!

 


<Spring 심화 강의>

 

서버에서 html을 내려주는 경우
1. 정적 웹페이지 (static)


 -  html(=view)을 그냥 바로 내려줌.
 - 정보들 (=model)개인정보들,, 
 
2. 동적 웹페이지


 => html에 뭔가 변화를 줘서 내려줌.
 1) client의 요청을 model로 받아처리
 2) 템플릿 엔진에게 뷰,모델 전달
  - 뷰: 동적html파일 / 모델 : 뷰에 적용할 정보들
 3) 템플릿엔진
  - 뷰에 모델을 적용 - > 동적 웹페이지 생성
   ex) 로그인 성공 시 , 로그인된 사용자의 id를 페이지에 추가 
 4) 클라이언트에게 뷰를 내려줌
 
3. HTTP 메세지!!
 - 클라이언트와 서버간에 요청과 응답은 http 메시지 규약을 따름
 - 일단 mvc 이해를 위한 부분만  
 =>메세지 구조 : 요청과 응답
     시작줄 = (응답에서는 상태줄이라고 부름)
     헤더 
     바디      3가지가 있다
 
 =>Request msg

 시작줄 : API요청 내용
 헤더 = 컨텐트 타입
  1)없음
  2)HTML에서 <form>으로 요청시 이거는 폼형태 요청이다 라구 보냄
  3)AJAX요청 : application/Json 
  =>이렇게 구분이 되었다
 본문 
 get요청시 : 보통 없음
 post요청 ㅣ : 보통 사용자가 입력한 폼데이터
 
=> Response msg
  = 상태줄 : API요청 결과 (상태코드/상태 텍스트) : 상태코드 =>결과
  헤더 : 컨텐츠 타입 + 로케이션(리다이렉트할 URL)
  바디 : html / json

=>controller 와 http 메시지 

  • 최근트렌드 : 싱글페이지 애플리케이션
    •  html은 한번만내려고 json 데이터만 왔다갔다 하는것

RestController = Controller + ResponseBody

<spring mvc 동작원리>

 


DispatcherServlet : 스프링에 의해서 이미 구현되어있다

 

  1. Client → DispatcherServlet
    • 가장 앞 단에서 요청을 받아 FrontController 라고도 불림
  2. DispatcherServlet → Controller
    • API 를 처리해 줄 Controller 를 찾아 요청을 전달
    • Handler mapping 에는 API path 와 Controller 함수가 매칭되어 있음
    • 함수 이름을 내 마음대로 설정 가능했던 이유!!
  3. Controller → DispathcerServlet
    • Controller 가 Client 으로 받은 API 요청을 처리
    • 'Model' 정보와 'View' 정보를 DispatcherServlet 으로 전달
  4. DispatcherServlet → Client
    • ViewResolver 통해 View 에 Model 을 적용
    • View 를 Client 에게 응답으로 전달

//<request msg> response msg 표 와 같이 정리해서 가지고있으면 좋음..