DTO 생성 


안녕하세요.
고코더 입니다.


이번에는 DTO 라는 객체에 대해서 알아봅니다. DTO(Data Transfer Object)는 VO(Value Object)라고 합니다.
계층간 데이터 교환을 위한 자바빈즈이고 컨트롤러, 뷰 계층간 데이터 교환을 위한 객체입니다.
DTO는 로직을 없고 순수한 데이터 객체만 다룹니다. getter, setter 메소드를 생성한 클래스입니다.

다시 쉽게 말하면 DAO 데이터베이스를 가져올때 사용하는 변수의 집합이라고 생각하면 쉽습니다.



 1. dto 클래스를 생성 합니다.


컨트롤러를 생성하겠습니다. 
net.gocoder.mvcboard.dto 패키지에서 class를 생성 합니다. 


클래스명은 Dto로 생성 합니다. 


package net.gocoder.mvcboard.dto;
import java.security.Timestamp;
public class Dto {
     int Idx;
     String Name;
     String Title;
     String Content;
     Timestamp Regdate;
     Timestamp Modidate;
     int Passwd;
     int Hit;
}

7~14번 라인
    - 데이터베이스에 사용할 변수들을 선언하고 해당 변수에 대해 setter, getter을 생성 합니다. 
       - 생성 방법은 책 앞면에 나와 있습니다. 


그리고 생성자를 통해 사용할 수 있도록 메소드를 하나 만들어 보겠습니다.
     public Dto() {
                     
     }
     
     public Dto(int Idx, String Name, String Title, String  Content,
                Timestamp Regdate, Timestamp Modidate, int  Passwd, int Hit ) {
           this.Idx = Idx;
           this.Name = Name;
           this.Title = Title;
           this.Content = Content;
           this.Regdate = Regdate;
           this.Modidate = Modidate;
           this.Passwd = Passwd;
           this.Hit = Hit;      
     }          

setter에 값을 넣어서 사용할 수 있게 this를 이용하여 변수를 담습니다.

이렇게해서 게시판에 사용할 Dto가 준비되었습니다.
한번 선언한 변수는 어느 곳에서나 재사용할 수 있게 됩니다.


마무리


Dto가 이해가 안되도 다음 시간에 Dao를 보면 이해가 됩니다.


댓글을 달아 주세요


MVC 컨트롤러(Controller) 개발


안녕하세요.
고코더 입니다.


이번 시간에는 스프링에 핵심인
컨트롤러를 만들어 보겠습니다.

이전에 설명한 거처럼 디스패처 서블릿이 컨트롤러를 호출하면 컨트롤러는 
Dao를 호출해 데이터베이스 정보를 가져오고 다시 
모델에 담아 프론트에 전달 합니다.



 1. 컨트롤러 생성


컨트롤러를 생성하겠습니다. 
net.gocoder.mvcboard.controller 패키지에서 class를 생성 합니다. 


클래스 명은 BoardController 입니다. 
게시판에 사용할 컨트롤러명 입니다. 




 2. 컨트롤러 코딩 


컨트롤러 작성을 해보겠습니다. 하나의 메소드를 작성하면 거의 비슷한 형태에
나머지도 거의 비슷한 코딩을 이어나갑니다. MVC패턴에 매력이자 어려운 규율 때문입니다.
그래도 똑같다고 방심하지 말고 복습한다는 생각으로 읽어 가보세요.

리스트 페이지 컨트롤러를 작성 해보겠습니다.
@Controller
public class BoardController {
     Command command;
     
     @RequestMapping("/list")
     public String list(Model model) {
           System.out.println("list()");
           command = new ListCommand();
           command.execute(model);
           
           return "list";
     }

17번 라인 
    - 해당 클래스를 컨트롤러 사용하기 위해 어노테이션 @Controller을 사용합니다.
    - "import org.springframework.stereotype.Controller;" 를 참조해야 합니다.
19번 라인
    - 커맨드 인터페이스를 사용하기 위해 command로 호출 합니다. 
21번 라인 
    - "/list" 접근시 해당 컨트롤러가 호출 됩니다.
23번 라인 
    - List커맨드를 가져와서 객체를 만듭니다.
    - 해당 객체에 모델을 실행합니다. 
    - 현재까지는 커맨드안에 내용들은 개발되어 있지 않습니다.
26번 라인
    - view로 모델을 전달 합니다.


글 등록 페이지 컨트롤러를 작성 해보겠습니다.
     @RequestMapping("/write")
     public String write(HttpServletRequest request, Model  model) {                   
           model.addAttribute("request", request);
           command = new WriteCommand();
           command.execute(model);
           
           return "redirect:list";
     }

29번 라인 
    - "/write" 접근시 해당 컨트롤러가 호출 됩니다.
31번 라인
    - request에 담긴 파라미터 값을 데이터객체를 모델에 담습니다.
32~33번 라인
    - 커맨드 객체를 이용해 모델을 실행합니다.
35번 라인
    -"redirect:" 페이지를 이동 시킵니다.
    -글 등록 후에 list로 페이지를 이동합니다.


글 상세 컨트롤러를 작성합니다.
     @RequestMapping(value="/modify", method=RequestMethod.POST  )
     public String modify(HttpServletRequest request, Model  model){                    
           model.addAttribute("request", request);
           command = new ModifyCommand();
           command.execute(model);
           
           return "redirect:list";
     }

38번 라인
    - "/write" 접근시 해당 컨트롤러가 호출 됩니다.
40번 라인 
    - request에 담긴 파라미터 값을 데이터객체를 모델에 담습니다.
41~42번 라인 
    - 커맨드 객체를 이용해 모델을 실행합니다.
44번 라인
    - view로 모델을 전달 합니다.


글 수정 컨트롤러를 작성합니다.
     @RequestMapping(value="/modify")
     public String modify(HttpServletRequest request, Model  model){                    
           model.addAttribute("request", request);
           command = new ModifyCommand();
           command.execute(model);
           
           return "redirect:list";
     }

47번 라인
    - "/write" 접근시 해당 컨트롤러가 호출 됩니다.
49번 라인
    - request에 담긴 파라미터 값을 데이터객체를 모델에 담습니다.
50~51번 라인
    - 커맨드 객체를 이용해 모델을 실행합니다.
53번 라인
    -"redirect:" 페이지를 이동 시킵니다.
    -글 수정 후 list로 페이지를 이동합니다.

글 삭제 컨트롤러를 작성합니다.
     @RequestMapping("/delete")
     public String delete(HttpServletRequest request, Model  model) {        
           model.addAttribute("request", request);
           command = new DeleteCommand();
           command.execute(model);
           
           return "redirect:list";
     }

56번 라인
    - "/write" 접근시 해당 컨트롤러가 호출 됩니다.
58번 라인
    - request에 담긴 파라미터 값을 데이터객체를 모델에 담습니다.
59~60번 라인
    - 커맨드 객체를 이용해 모델을 실행합니다.
62번 라인
    -"redirect:" 페이지를 이동 시킵니다.
    -글 삭제 후 list로 페이지를 이동합니다.


이렇게 게시판에 필요한 모든 클래스를 만들었습니다.
처음이 어렵지만 한번 따라하다보면 컨트롤러 개발 방법이 속에 익어 갈것입니다. 



마무리


쉽지 않나요?


댓글을 달아 주세요


게시판 만들기 초기설정


안녕하세요.
고코더 입니다. 


스프링에 대해 알아보았고
간단한 예제로 중요한 요소들을 살펴보았습니다.
이번 시간부터 스프링 게시판을 만드는 방법을 알아보겠습니다.
기본적으로 회사에서 많이 사용하는 방식으로 구현할 것 입니다.



 1. 프로젝트 구조도




함께 만들어올 게시판에 구조도 입니다.
스프링으로 웹프로젝트를 하면 대부분 이런 구조가 나타나는데요.
이 그림은 머리속에 한번 새겨 보시고 프로젝트를 함꼐 하면서
조금씩 구체화 되어 나갈것입니다.



 2. 프로젝트 생성 


 2-1. 이번 프로젝트 이름은 MVCBoard 라고 하겠습니다.
이전 시간에 배웠던 방법대로 MVC Project를 만들어보겠습니다.


 2-2. 이번 패키지 명은 net.gocoder.mvcboard로 만들어 보겠습니다. 


 2-3. 그럼 이제 게시판을 만들 MVCBoard가 생성 됩니다. 





 3. 패키지생성


개발에 들어가기 전에 패키지를 생성합니다. 
패키지는 쉽게 말하면 폴더 입니다. 먼저 폴더를 만들어 구조도대로
개발을 준비하는 과정입니다. 

 3-1. package를 생성 하는 방법은 프로젝트에서 
new->package를 선택합니다.


 3-2. 그리고 아래처럼 입력하여 패키지를 만들겠습니다.
net.gocoder.mvcboard.command


 3-3. 그럼 이렇게 빈 패키지가 생성 됩니다. 


 3-4. 이런 방식으로 3가지 패키지를 더 생성 합니다.
net.gocoder.mvcboard.controller

net.gocoder.mvcboard.dao

net.gocoder.mvcboard.dto


 3-5. 만들어진 패키지 모습은 이런 구조가 됩니다.
빈 폴더이기에 하얀색이고 안에 파일은 아직 없습니다.



마무리


프로젝트를 생성하여 패키지를 만들었습니다.


댓글을 달아 주세요


데이터 객체로 변수를 줄이기


안녕하세요.
고코더 입니다. 


이전 시간에 파라미터 데이터를 VIEW로 전달을 해봤습니다.
기초적인 예제였는데요.


하지만 실무에서는 소스 길이기 갈게 나오지 않게 스프링에 장점을 살려서 변수를 클래스에서 가져오는 방법을 씁니다.
스프링은 커맨드 객체를 사용할 수 있도록 규칙이 설정되어 있으며 변수만 담아주면 이전 시간에 했던 소스를 간단하게 개발해 view에 전달할 수 있습니다.
소스를 함께 개발하면서 이 부분을 살펴보겠습니다
역시 이전 소스를 활용합니다.


 1. Gocoder.java 작성


 1-1. 클래스 파일을 생성합니다. 처음 생성하는 분들이 있으실텐데요
해당 프로젝트 팩키지로 마우스 오른쪽 버튼을 눌러 
new -> Class를 클릭 합니다. 

 
 1-2. Gocoder라는 이름으로 생성하였습니다.


 1-3. 그리고 아래처럼 변수를 세팅했습니다.
private만 작성하고 세터,게터를 작성하면 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package net.gocoder.hello;
public class Gocoder {
     private String name;
     private String blog;
     private String homepage;
     
     public String getName() {
           return name;
     }
     public void setName(String name) {
           this.name = name;
     }
     public String getBlog() {
           return blog;
     }
     public void setBlog(String blog) {
           this.blog = blog;
     }
     public String getHomepage() {
           return homepage;
     }
     public void setHomepage(String homepage) {
           this.homepage = homepage;
     }
}
cs




 2. HomeController.java 수정


 2-1. 그 다음 HomeController.java를 수정합니다. 
기존에 만들었던 방식은 모두 주석 처리 합니다. 
그리고 아래처럼 새롭게 코딩을 합니다. 
1
2
3
4
5
@RequestMapping(value = "/gocoder/view", method =  RequestMethod.GET)
public String gocoderView(Gocoder gocoder) {
 
return "gocoder/view";
}    
cs

 2-2. 소스설명
기존에 저랑 함께 만들었던 소스를 주석처리 하지 않으면 오류가 납니다.
그리고 이게 전부입니다. 스프링이 생략이 많아 이해가 안되실지 모르겠지만
그냥 이렇게 하면 자동으로 맵핑 되는구나라고 생각하시면 됩니다.

55번 라인 
    - 동일하게 URL을 지정합니다
56번 라인
    - Gocoder 라는 클래스명을 gocoder로 생성합니다.
58번 라인
    - 뷰에 전달합니다.


 3. view.jsp HTML 추가


 3-1. 데이터 객체를 사용하면 el 태그에서 변수를 가져올때 배열 방식으로 가져와야 합니다.
gocoder라는 객체에 배열로 담겨 있고
배열 주소로 접근해야 합니다.
1
2
3
4
5
6
7
<h1>이름</h1>
<p>${gocoder.name}</p>
<h1>블로그</h1>
<p>${gocoder.blog}</p>
<h1>홈페이지</h1>
<p>${gocoder.homepage}</p>
 
cs

 3-2. 소스설명

25,27,29 라인
    - 대이터 객체 gocoder 안에 담긴 내용을 하나씩 가져 옵니다.



 4. 결과화면


 4-1. 2번 커맨드 객체 방식을 가져옵니다.


 4-2. 소스에 양을 비교해보세요.
오른쪽 버전도 충분히 서블릿 jsp에 비해 소스양은 줄었지만
데이터 객체를 사용한 버전은 정말 단순해졌습니다.



마무리


스프링에 묘미 입니다.





댓글을 달아 주세요


파라미터로 받아 view 노출하는 예제


안녕하세요.
고코더 입니다.


 1. 오늘은 HttpServletRequest 에 대해 알아보려고 합니다.
URL로 접근하는 모든 패턴은 디스패처서블릿이 가로챈다고 말씀드렸습니다.

 2. 이걸 기초로 오늘은 파라미터에 있는 정보를 HttpServletRequest로 데이터 전송을 받아보는 방법을 알아보겠습니다.
이전에 만든 hello 소스에 추가하여 개발해보겠습니다.


 3-1. 컨트롤러에 함수 추가 / HttpServletRequest / @RequestMapping


 3-2. HomeController.java를 수정 합니다. 


 3-3. 그리고 아래 코드를 입력 합니다
1
2
3
4
5
6
7
8
9
10
11
12
13
@RequestMapping(value = "/gocoder/view", method = RequestMethod.GET)
public String gocoderView(HttpServletRequest httpServletRequest, Model model) {
    
    String name = httpServletRequest.getParameter("name");
    String blog = httpServletRequest.getParameter("blog");
    String homepage = httpServletRequest.getParameter("homepage");
    
    model.addAttribute("name",name);
    model.addAttribute("blog",blog);
    model.addAttribute("homepage",homepage);
            
    return "gocoder/view";
}    
cs

 3-4. HomeController.java 추가된 소스 설명

41번 라인 
    - @RequestMapping는 해당 컨트롤러에서 해당 URL 패턴을 가로채는 어노테이션입니다. 
    - URL 패턴 /gocoder/view로 들어오는 접속을 캐치 합니다. 그리고 get인걸 확인합니다.     

42번 라인
    - gocoderView라는 함수를 만들고 HttpServletRequest를 선언합니다. 해당 클래스로 파라미터를 받을 수 있습니다. 
    - model 함수는 view에 데이터를 전달하기 위해 꼭 필요한 존재입니다.

44번~46번 라인
    - 42번 라인에서 선언한 httpServletRequest 클래스에 getParameter 를 이용해 파라미터 값을 가져옵니다.
    - 각 파라미터로 오는 값을 받습니다. 파라미터명과 변수명을 똑같이합니다. 헷갈리지 않기 위해 

48번~50번 라인
    - 프론트에 model을 통해 해당변수로 값을 담아 넘깁니다.
    - 이때도 역시 동일한 변수명으로 el태그를 프론트에 사용할때 헷갈리지 않게 사용 합니다. 

52번라인    
    - view에 전달할 주소를 적습니다. 
    - 마지막 파일명을 제외한 슬러시는 폴더가 됩니다. 즉 여기서 폴더는 gocoder 폴더 입니다.


 4. view파일 생성 / el태그


 4-1. 해당 폴더 위치에 view.jsp를 생성 합니다.
/hello/src/main/webapp/WEB-INF/views/gocoder/view.jsp


 4-2. 아래처럼 HTML을 코딩 합니다. 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8" language="java" %>
<%@ page session="false"%>
<html>
<head>
<title>Home</title>
<meta http-equiv="Content-Type" content="text/html;  charset=utf-8" />
</head>
<body>
     <h1>이름</h1>
     <p>${name}</p>
     <h1>블로그</h1>
     <p>${blog}</p>
     <h1>홈페이지</h1>
     <p>${homepage}</p>
</body>
</html>
cs

 4-3. 소스설명

2번 라인 
    - JSP 상에 이미 입력된 한글 텍스트가 깨지지 않도록 엔코딩 태그를 넣어줍니다.
    ->

11,13,15번 라인
    - el태그를 사용해 모델에서 보내온 변수를 사용하여 프론트에 노출 합니다. 


 5. 결과화면 


 5-1. 정상적으로 코딩하셨다면 해당 링크로 접속시에 정상적인 뷰화면이 보입니다. 

 5-2. 가장 간단한 방식으로 파라미터를 받아 뷰에 노출하는 방식을 사용하였습니다.



마무리


여기까지 이해가셨다면 
스프링이 재밌어집니다.


댓글을 달아 주세요


스프링에서 UTF-8 한글 나오도록 설정


안녕하세요.
고코더 입니다.


 1. 스프링으로 기본 프로젝트를 생성하면 한글이 ?로 출력 됩니다.
스프링 기본 프로젝트는 UTF-8로 만들어지지 않기 때문입니다.


 2. web.xml에 아래 코드를 추가해주세요.
엔코딩필터에 UTF-8을 사용할 수 있게 만들어주는 코드 입니다.
     <filter>
           <filter-name>encodingFilter</filter-name>
          <filter-class>org.springframework.web.filter.CharacterEncodingFilter
           </filter-class>
           <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
           </init-param>
           <init-param>
                <param-name>forceEncoding</param-name>
                <param-value>true</param-value>
           </init-param>
     </filter>
     <filter-mapping>
           <filter-name>encodingFilter</filter-name>
           <url-pattern>/*</url-pattern>
     </filter-mapping>


 3. 위치는 맨아래에 추가합니다.  코드를 그대로 복사해서 붙혀넣어주세요.
xml이 변경되었기 때문에 서버를 재시작 합니다.


그리고 다시 접속해보면
물음표(?)로 보이던 한글이 정상적으로 출력 가능합니다.


마무리


영어권 국가였으면


댓글을 달아 주세요


스프링에서 파일 get으로 접근하기 


안녕하세요.
고코더 입니다.


 1. 오늘은 자원을 사용하는 resources폴더에 대해 알아보려고 합니다.
지난 시간에 DispatcherServlet이 모든 URL 패턴을 가로챈다고 배웠습니다.

 2. 기본으로 설정된 /servlet-context.xml에 리소스 태그 속성을 보면 /resources/가 폴더가 설정되어 있습니다. 
여기로 접근하는 get 요청은 디스패처서블릿이 관여하지 않습니다.


 3. 이해를 더 쉽게 하기 위해 간단한 예제로 알아보겠습니다. 
기본으로 생성 되어있는 resources폴더와 새롭게 생성한 file 폴더에 test.txt를 생성해서 만들었습니다.


 4. 서버를 실행하고 테스트를 해보겠습니다. 
기본 리소스 폴더에 파일을 호출할땐 정상이지만
http://localhost:8080/hello/resources/test.txt


 5. file 폴더는 호출되지 않습니다. 왜냐면 디스패처가 해당 URL 패턴에 대한 컨트롤러를 찾았고 없었기 때문에 404가 뜹니다. 
http://localhost:8080/hello/file/test.txt


 6. /servlet-context.xml에 아래처럼 file 폴더에 대한 리소스 코드를 추가하였습니다.



 7. 그리고 다시 접근하면 해당 test.txt 파일이 정상적으로 출력 합니다. 
http://localhost:8080/hello/file/test.txt


이렇게 리소스 폴더는 다이렉트로 접근할 수 있는 URL로 접근할 수 있게 해줍니다.
이미지,CSS 파일등 Get으로 접근하여 사용하고 싶은 파일들을 리소스 폴더로 설정하여 사용하게 됩니다.


마무리


이 부분이 이해 안가시면
디스패처 서블릿으로 URL패턴을 다시 공부해보세요.


댓글을 달아 주세요


view가 작동 되는 방법


안녕하세요.
고코더 입니다.


이번엔 프론트에 보이게 되는 jsp 페이지인 뷰가 스프링에서 어떻게 작동하는지
간단하게 소스를 기준으로 알아보려고 합니다.


 1. servlet-context.xml 을 열어봅니다.


 2. 그럼 InternalResourceViewResolver 클래스가 빈에 참조 되어 있습니다.
그리고 prefix 와 suffix 라는 프로퍼티가 사용되고 있습니다. 


 3. prefix는 뷰 파일의 위치를 지정합니다. 기본 디폴트 값은 "/WEB-INF/views/" 입니다.
해당 폴더 위치는 src->main->webapp 아래에 있는 WEB-INF-> views폴더 입니다. 
뷰 파일을 추가한다면 해당 폴더에서 생성합니다. 


 4. suffix는 해당 뷰 파일에 확장자를 설정할 수 있습니다. 기본설정은 jsp 파일입니다.
원하는 확장자로 인식할 수 있도록 변경이 가능합니다.


5. 기본 예제 안에 HomeController.java 파일을 열어보면
리턴 값에 home을 반환합니다. 이는 view 파일 이름입니다. 



 6스프링은 이렇게 프레임워크 규칙에 따라 조합하여 뷰 파일을 찾아갑니다.



하나씩 살펴보면 간단한 구조이지만 반복하여 테스트해보고
왜 이렇게 규칙이 생겼는지 고민해보세요.


마무리


복잡하지만 복잡하지 않아요.











댓글을 달아 주세요


DispatcherServlet이 컨트롤러를 가져오는 방법


안녕하세요.
고코더 입니다.


오늘은 스프링에 핵심이자 특별한 존재인 DispatcherServlet을 좀 더 자세히 알아보겠습니다.
이전 스프링 구조도에서 중앙에서 모든걸 처리하는 역할을 했습니다.
-> Spring - 스프링 MVC 구조도 / 이해하기 쉬운



DispatcherServlet은 기존에 Web.xml이 담당했던 servlet 맵핑을 대신합니다. 그 덕에
복잡한 XML작성에서 해방 되었습니다. MVC를 가능하게 해준 이 서블릿에 대해
소스를 위주로 알아보겠습니다.
이전에 함께 만든 프로젝트 파일 기준으로 살펴봅니다. 

 1. web.xml 


 1-1. 패키지에서 src->main->webapp->WEB-INF->web.xml을 열어봅니다.


 1-2. 그 다음 XML에서 정의된 내용들을 함께 살펴 봅니다. 

20번 라인
- DispatcherServlet 기능을 참조하여
19번 라인
- appServlet 으로 네임을 지정 합니다.
29번 라인
- appServlet은 URL 패턴을 맵핑 합니다.
30번 라인
- 모든 URL에 대한 맵핑을 담당 합니다. 즉 모든 프론트 접속을 담당 합니다.

결론은 web.xml에 서블릿 맵핑을 DispatcherServlet 위임한 내용을 확인 가능합니다.



 2. 디스패처서블릿 소스 / spring-webmvc-3.1.1.RELEASE.jar


DispatcherServlet은 스프링 프레임워크에 기능입니다. 

 2-1. 해당 디스패처서블릿 기능은 스프링 spring-webmvc-3.1.1.RELEASE.jar 존재합니다.
해당 jar를 열어보세요.


 2-1. 해당 jar안에 DispatcherServlet.calss 로 정의 되어 있고 오픈 소스라 공개는 되어 있지만 해석하기 어렵지만 해당 jar에 class로 만들어져 있다는걸 눈으로 확인해보는 것도 도움이 됩니다.



 3. 컨트롤러에 어노테이션 / Controller


 3-1. 스프링에서 컨트롤러 파일을 열어보겠습니다.
기본으로 만들어져 있는 HomeController.java를 소스를 열어보세요.


 3-2. 보시면 컨트롤러가 어노테이션으로 선언되어 있습니다. 
이 어노테이션으로 해당 소스가 컨트롤러라고 선언하고 
서블릿 프로젝트 처럼 web.xml에 컨트롤러를 매번 선언하지 않고도 자동으로
스프링이 스캔하여 컨트롤러 기능을 실행하게 합니다. 




 4. 컨트롤러 스캔 / context:component-scan


해당 컨트롤러에 어노테이션들이 자동으로
스프링에 컨트롤러 역할을 만들어주는건 해당 컨트롤러를
찾는 스캔을 하기 때문입니다.

 4-1. servlet-context.xml 을 열어봅니다.


 4-2. 해당 라인에서 context:component-scan에서 hello 팩키지가 설정되어 있습니다.
이 명령어를 통해서 패키지안에 java소스들을 풀스캔합니다.
그리고 어노테이션을 발견하면 해당 컨트롤러들을 참조하여 사용하게 만들어 줍니다. 



마무리


스프링 DispatcherServlet가 컨트롤러를 찾는 방법을 소개했습니다. 원리를 모르고 개발할수도 있지만 한번 눈으로 직접 원리를 알아보고 이해하며 개발하는건 큰 차이가 있습니다. 



댓글을 달아 주세요



MVC 전체 구조를 살펴봅니다. 


안녕하세요.
고코더 입니다.


오늘은 스프링에 MVC 구조를 한눈에 함께 파악해보는 시간을 가지려고 합니다.
개발 시작전에 구조도를 직접 그려봤습니다.
처음은 복잡해 보이지만 저랑 하나씩 뜯어보면 정말 간단하고
이해하기 쉬운 구조 입니다. 



전체 MVC 구조


깊이 들어가면 더 많은 구조가 있지만 이해가 필요한 만큼
작성해보았습니다. 



 1. DispatcherServlet 역할



Front 가 URL로 호출을 합니다. 그러면 DispatcherServlet이 클라이언트 요청을 최초로 받습니다. 
중앙집중식 프론트 컨트롤러입니다. MVC의 핵심 요소입니다. 



 2. Handler Mapping 역할




Handler Mapping은 DispatcherServlet에게 해당 requet가 어떤 컨트롤러를 사용하는지 응답합니다. 


 3. Controller



DispatcherServlet은 로직을 처리할 컨트롤러를 응답 받았으니 해당 
Controller로 처리 요청을 넘깁니다. 해당 컨트롤러는 로직을 수행하고 서비스를 요청하며
Model을 만듭니다. 그리고 ModerAndview 객체에 담아 다시 DispatcherServlet으로 넘겨줍니다. 




 4. ViewResolver 




DispatcherServlet는 ViewResolver로 해당 ModelAndView에 맞는 view를 찾아달라고 요청 합니다.
그럼 ViewResolver는 해당 view를 응답합니다. 



 5. View 



ViewResolver으로 부터 받은 view 정보로 DispatcherServlet 필요한 view를 찾아 Model 값을 넘겨
view을 출력하게 해줍니다. 



마무리

  
개발이 처음이거나 자바가 처음이라면 해당 구조도는 이해가 안되는게 정상입니다. 
하지만 눈에 익혀두면 스프링을 개발하다 보면 하나씩 이해가 됩니다.
추천하는 방법은 프린터로 출력해놓고 한쪽에 붙혀놓아 보세요.
그리고 오랫동안 생각해보면서 구조도를 뜯어보세요.



댓글을 달아 주세요