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 : 스프링에 의해서 이미 구현되어있다
- Client → DispatcherServlet
- 가장 앞 단에서 요청을 받아 FrontController 라고도 불림
- DispatcherServlet → Controller
- API 를 처리해 줄 Controller 를 찾아 요청을 전달
- Handler mapping 에는 API path 와 Controller 함수가 매칭되어 있음
- 함수 이름을 내 마음대로 설정 가능했던 이유!!
- Controller → DispathcerServlet
- Controller 가 Client 으로 받은 API 요청을 처리
- 'Model' 정보와 'View' 정보를 DispatcherServlet 으로 전달
- DispatcherServlet → Client
- ViewResolver 통해 View 에 Model 을 적용
- View 를 Client 에게 응답으로 전달
//<request msg> response msg 표 와 같이 정리해서 가지고있으면 좋음..
'🌿SPRING > 🍀공부 [SPRING]' 카테고리의 다른 글
[SPRING] spring framwork의 이해 (0) | 2022.08.22 |
---|---|
[SPRING] 의존성 주입 DI , IoC 컨테이너 (0) | 2022.08.22 |
[SPRING] Controller, Service, Repository (0) | 2022.08.22 |
[SPRING] JPA / ORM (0) | 2022.08.18 |
[Spring] week01 입문 과제 (0) | 2022.08.16 |