Spring 13. Spring Web MVC 1
주의!
공부하면서 제가 이해한 대로 쓰는거라 잘못된 부분이 있을 수 있습니다
만약 잘못된 부분이 있다면 댓글로 가르쳐주시면 감사합니다
이번 포스팅 부터는 Spring으로 MVC 패턴을 만들어보겠습니다
MVC패턴이 무엇인지 모르신다면 여기서 설명하기엔 너무 길어지니 생략하고 구글링을 추천드립니다
01. Spring Web MVC
먼저 Spring Web MVC가 무엇인지 알아봅시다
Spring Web MVC란 Servlet API를 기반으로 구축된 웹프레임워크이며
Spring Framework가 제공하는 DI, AOP뿐 아니라, WEB 개발을 위한 기능을 제공하고 있습니다.
DispatcherServlet(FrontController)를 중심으로 디자인 되었으며, View Resolver, Handler Mapping, Controller와 같은 객체와 함께 요청을 처리하도록 구성되어 있습니다.
다른 프레임워크와 마찬가지로 front controller pattern으로 구성 되어 있습니다
중심이 되는 DispatcherServlet(front controller)는 요청처리를 위한 기능을 제공합니다
참고로 스프링의 공식문서를 볼 수 있는 사이트는
Index of /spring-framework/docs
Index of /spring-framework/docs
docs.spring.io
이곳으로 가셔서 맞는 버전의 스프링 문서를 보시면 됩니다
02. Spring MVC 구성요소
- DispatcherServlet
- 클라이언트 요청 처리(요청 및 처리 결과 전달)
- HandlerMapping
- 요청을 어떤 Controller가 처리할 지 결정
- Controller
- 요청에 따라 수행할 메서드를 선언하고, 요청처리를 위한 로직 수행(비즈니스 로직 호출)
- ModelAndView
- 요청처리를 하기 위해서 필요한 혹은 그 결과를 저장하기 위한 객체
- ViewResolver
- Controller에 선언된 view 이름을 기반으로 결과를 반환할 View를 결정
- View
- 응답화면 생성
Spring MVC의 요청처리 흐름을 그림으로 나타낸 것 입니다
대략적인 흐름만 알고 계시면 됩니다
1. 클라이언트 요청이 들어오면 DispatcherServlet이 받는다
2. HandlerMapping이 어떤 Controller가 요청을 처리할지 결정한다.
3. DispatcherServlet은 Controller에 요청을 전달한다
4. Controller는 요청을 처리한다
5. 결과(요청처리를 위한 data, 결과를 보여줄 view의 이름)을 ModelAndView에 담아 반환한다
6. ViewResolver에 의해서 실제 결과를 처리할 View를 결정하고 반환한다
7. 결과를 처리할 View에 ModelAndView를 전달한다
8. DispatcherServlet은 View가 만들어낸 결과를 응답한다
03. Dynamic Web Project로 구현해보기
이번꺼는 따라치셔도 되고 안치고 그냥 보기만 하셔도 됩니다
Dynamic Web Project를 하나 만들겠습니다.
그 전에 서버는 톰캣9.0 버전으로 설정해주세요
프로젝트 이름은 Spring_MyMVC로 설정하고
Next를 누르다 보면 이 창이 나오는데
밑에 빨간박스 체크해서 web.xml 파일만들고 진행할게요
프로젝트 우클릭하시고 Configure -> Convert to Maven Project를 눌러 메이븐 프로젝트로 바꾸겠습니다
메이븐 프로젝트로 바꾸면 해야할게 있죠?
pom.xml의 </build>아래에 <dependencies></dependencies>를 넣고 의존성을 추가해 줄 겁니다
MVN Repository 사이트로 가셔서 Spring Context와 Spring Web MVC를 찾아 넣어주세요
WebContent -> WEB-INF -> web.xml 파일을 열어볼게요
빨간 박스 부분을 추가하현 디스패쳐 서블릿이 등록됩니다
name은 아무거나 써도 상관이 없고요
class에 들어갈 것은 이 밑에 사진에서
잘따라 오셔서 Copy Qualified Name 하시고 붙여넣고 마지막에 .class 부분만 지워주시면 됩니다
그 아래에 init-param과 load-on-startup도 추가해주시면 서블릿은 완성입니다
서블릿을 완성했으면 매칭도 시켜줘야겠죠
매핑은 이렇게 하시면 됩니다
그 밑에 listener랑 filter도 달아 두겠습니다
이러면 web.xml에서 할 일은 다했습니다
그 다음에는 servlet.context.xml이라는 파일을 우리가 적은 이경로에 하나 만들어 줘야 합니다
이전 포스팅들에서 applicationContext.xml 만든 것처럼
servlet-context.xml 파일을 만들어서 저 경로에 넣어주세요
만드시고 namespace에 context까지 체크만 해주세요
이번엔 MyController라는 클래스를 만들건데요
MyController 클래스를 어노테이션을 이용해서 Bean객체를 만들 건데 우리가 못보던 어노테이션이 나왔네요?
원래는 @Component를 달았던 것 같은데 @Controller를 달아놨습니다
앞으로 쓸 @Controller, @Service, @Repository는 전부 @Component에서 파생된건데 사실상 똑같고 Component긴 Component인데 이게 컨트롤러인지 서비스인지 레포지토리인지 이름으로 구분하기 위해서 저렇게 달아놨다고 생각하시면 됩니다.
어노테이션으로 빈 객체를 등록 할 꺼니까 아까만든 xml파일에 아래 코드도 한 줄 적어주시면 됩니다
그리고 요 코드도 적어주세요 저도 아직 뭔지는 모르고 나중에 알게될 것 같아요
MyController에 코드를 적어봅시다
home이라는 명령어를 매핑시켜주고
ModelAndView라는 객체를 반납할겁니다
이러고 run on server를 하고 url 뒤에 /home을 붙이면 jsp화면이 msg 받은거를 출력하고 있을 겁니다
Service도 코드만 일단 올려놓을게요
저도 간신히 이해하면서 공부중이라 뭔가 설명하기는 힘드네요 코드만 일단 올려 놓을테니
스프링 MVC이 이런식으로 흘러간다 이해만 하시면 될 것 같습니다
설명 대실패ㅠㅠ
다음 포스팅에서 만나요