본문 바로가기
BACK-END

[Spring] Spring MVC 구조 (1)

by 지에스정 2022. 3. 24.

 

 스프링 MVC 기본 구조

 

 스프링 프레임워크는 하나의 기능을 위해서만 만들어진 프레임워크가 아닌 '코어'라고 할 수 있는 어려 서브 프로젝트를 결합해서 다양한 상황에 대처할 수 있도록 개발되었다.

 그 중 하나가 스프링 MVC이다.

 

 

스프링 MVC

 

Spring MVC - WEB 관령 영역

Spring Core - 일반 Java 영역(POJO)

Spring MyBatis

Mybatis

DB

 

프로젝트의 구동은 web.xml에서 시작한다. web.xml의 상단에는 가장먼저 구동되는 context Listener가 등록되어 있다.

 

1. ContextLoaderListener는 해당 웹 어플리케이션을 구동하게 되면 같이 작동이 시작되므로 해당 프로젝트를 실행하면 가장 먼저 로그를 출력하면서 실행된다.

2. root-context.xml이 처리되면 파일에 있는 빈(Bean)들이 작동한다.

3. root-context.xml이 처리된 후에는 DispatcherServlet이라는 서블릿과 관련된 설정이 작동한다.

  MVC구조에서 가장 핵심적인 역할을 하는 클래스이며 내부적으로 앱 관련 처리의 준비 작업을 진행한다.

  내부적으로 웹 관련 처리의 준비작업을 진행하기 위해서 사용하는 파일이 있고 servlet-context.xml 이다.

4. DispatcherServlet에서 XmlWebApplicationContext를 이용해서 servlet-context.xml을 로딩하고 해석한다.

  이 과정에서 등록된 객체(Bean)들은 기존에 만들어진 객체(Bean)들과 같이 연동하게 된다.

 

 


Front-Controller 패턴

 

                                       HandlerMapping

                                         |                      |

Client <-> DispatcherServlet <- HandlerAdapter <-> Controller

      |                |

  View <- ViewResolver

 

1. 사용자의 Request는 Front-Controller인 DispatcherServlet을 통해 처리한다

2. HandlerMapping은 Request의 처리를 담당할 컨트롤러를 찾기 위해 존재한다

3. HandlerMapping 인터페이스를 구현한 여러 객체중 @RequestMapping이라는 어노테이션을 적용된 것을 기준으로 판단하며, 적절한 컨트롤러를 찾았다면 HandlerAdapter를 이용해서 해당 컨트롤러를 작동 시킨다.

4. Controller의 처리가 완료되었다면 어디로 어떻게 갈것인지 라는 결과가 나오고 그 결과를 ViewResolver가 리턴을 통해 받아서 어떤 View에서 처리하는 것이 좋을지 해석을 한다.

5. 해석된 결과를 가지고 실제 응답을 보내야 하는 테이터를 JSP등을 이용해서 생성한다

6. 만들어진 응답(파일, 페이지, 데이터,...) 을 DispatcherServlet을 통해서 전송한다.

 

스프링 MVC Controller의 특징

 

HttpServletRequest, HttpServletResponse를 거의 사용할 필요 없이 기능 구현

다양한 타입의 파라미터 처리, 다양한 타입의 리턴 타입 사용 가능

Get방식, Post방식 등 전속 방식에 대한 처리를 어노테이션으로 처리 가능

상속 / 인터페이스 방식 대신 어노테이션으로도 설정 가능

 


Naming Convention(명명 규칙)

 

패키지명 : com.myapp

 

요소별 명명

  • config : 프로젝트와 관련된 설정 클래스들의 보관 패키지
  • controller : 스프링 MVC의 Controller들의 보관 패키지
  • service : 스프링의 service 인터페이스와 구현 클래스 패키지
  • domain : DTO, VO 클래스들의 패키지
  • persistence : MyBatis Mapper 인터페이스 패키지
  • exception : 웹 관련 예외 처리 패키지
  • aop : 스프링의 aop 관련 패키지
  • security : 스프링 Security(하위 프레임워크) 관련 패키지
  • util : 각종 유틸리티 클래스 관련 패키지

'BACK-END' 카테고리의 다른 글

[Spring] Spring MVC 구조(2)  (0) 2022.03.30
[Spirng] Spring-MyBatis  (0) 2022.03.22
[Spring] 의존성 주입(Dependency Injection)  (0) 2022.03.21
[Spring]스프링 프레임워크란 ?  (0) 2022.03.18
[Oracle] 오라클 데이터베이스  (0) 2022.03.11