본문 바로가기
TIL (Today I Learned)/Spring

[Spring] MVC

by 꼬순내 개발 2023. 4. 14.
SMALL

MVC 

 : Model, View, Controller

 

- 어플리케이션을 개발 할 때 사용하는 디자인 패턴

- 개발 영영을 구분하여 각 역할에 맞게 코드를 작성하는 개발 방식

- UI 영역과 비즈니스 로직 영역이 구분되어 서로에게 영향을 주지 않으면서 개발, 유지보수 가능

 

 

 

 

Model

 : 클라이언트에게 응답으로 돌려주는 작업 처리 결과 데이터

 

- 서비스 계층 : 클라이언트의 요청 사항을 구체적으로 처리하는 영역

- 비즈니스 로직 : 요청사항을 처리하기 위해 Java코드로 구현한것

 

 

 

View

 : Model을 이용하여 어플리케이션의 화면에 보이는 리소스(Resource)를 제공함

 

 

 

Controller

 : 클라이언트의 요청을 직접적으로 전달받는 엔드포인트로써 만들어진 Model 데이터를 View로 전달함

 

 

 

 

 

Spring MVC

 : 웹 계층에 서블릿(Servlet) API를 기반으로 클라이언트의 요청을 처리하는 모듈

 

- 클라이언트의 요청을 편리하게 해주는 기능을 제공함

- Spring MVC 내부에서는 서블릿을 기반으로 웹 어플리케이션을 동작함

   (스프링 부트는 기본적으로 아파치 톰캣이 내장되어 있음)

 

- 동작에 필요한 대부분의 기능을 확장할 수 있도록 인터페이스로 제공하기에 인터페이스들만 구현하여 DispatcherServelet에 등록하여 원하는 기능의 컨트롤러 만들 수 있음

 

 

 

 

Spring MVC 구조

 

DispatcherServlet

 - HttpServlet을 상속받아 사용

 - 서블릿으로 동작함

 

 

동작 순서

 

1. 핸들러 조회 : 핸들러 매핑을 통해 URL에 매핑된 핸들러(컨트롤러) 조회


2. 핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터 조회

 

3. 핸들러 어댑터 실행: 핸들러 어댑터 실행

 

4. 핸들러 실행: 핸들러 어댑터가 실제 핸들러를 실행


5. ModelAndView 반환: 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해 반환.


6. viewResolver 호출: 뷰 리졸버를 찾아 실행한다. 

⇒ JSP: InternalResourceViewResolver가 자등 등록되어 사용된다.


7. View 반환: 뷰 리졸버는 뷰의 논리 이름을 물이 이름으로 바꾸고 렌더링 역할을 담당하는 뷰 객체 반환.

⇒ JSP: InternalResourceView(JstlView)를 반환하는데, 내부에는 forward() 가 있다. 


8. 뷰 렌더링: 뷰를 통해서 뷰를 렌더링한다.

 

 

 

 

Annotated Controllers > Handler Method

 

Handler Method

Handler :  스프링 MVC에서 웹 요청을 처리하는 객체

 

DispatcherServlet이 전달해준 Http 요청을 처리하고 결과를 model에 저장

 

 

 

 

 

@RequestMapping

 - 요청 정보를 매핑함

 - 해당 URL이 호출되면 이 메소드가 호출됨

 - 애노테이션을 기반으로 작동함으로 메소드명은 임의대로 작성 가능

 

 

 

 

@RequestParam

스프링에서는 Http 요청 파라미터 값을 편리하게 사용할 수 있도록 @RequestParam을 지원함

 

사용법

- Http 요청 파라미터의 이름으로 바인딩하여 그 값을 변수에 저장 

- Http 파라미터 이름이 변수 이름과 같으면 @RequestParam의 value생략 가능

- String, int, Integer 등의 단순 타입이면 @RequestParam 생략 가능

 

 

 

 

 

@Controller

 - 스프링이 자동으로 스프링 빈으로 등록함

 - RequestMappingHandlerMapping에서 사용할 수 있는 핸들러로 인식됨

   ( 스프링 MVC에서 애노테이션 기반 컨트롤러로 인식)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LIST

댓글