Ace-T's Blog 내 검색 [네이버 커넥트 이웃 합니다~^-^/ 요청 大 환영~~]

[Ace-T의 Spring강좌] Step 06. Spring @MVC 분석-03

OpenSource/Spring 강좌 2014.05.23 11:32
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

[Ace-T의 Spring강좌] Step 06. Spring @MVC 분석-03


저번 시간에는 spring context 구조 잡기, bootstrap 연동해보기 등등을 해보았네요!

이번 시간에는~! mvc구조를 한번 들어가보려고 합니다! ㅎㅎ두둥~

출처 : 토비의 스프링 3.2 / 토비형님 항상 감사합니다! 스프링책은 토비님 책이 짱짱맨!


아래의 소스링크가 안된다는 제보를 주셔서 소스는 아래의 github를 사용해주시면 감사하겠습니다.

제보주신 장땡땡님! 감사합니다^^

https://github.com/ace-t/rndStart/


우선 아래의 그림을 보시죵!~

차근차근 하나씩 MVC의 각 요소와 프론트 컨트롤러(DispatcherServlet)가 어떻게 협력해서 일하는지를 알아봅시다!

(1) DispatcherServlet의 HTTP 요청 접수

     Client에서 HTTP요청이 들어오면 web.xml의 url-pattern에 따라 DispatcherServlet에 할당된 것이라면

     HTTP 요청정보를 DispatcherServlet에 전달 해준다.


 URL이 / 로 시작하는 모든 요청을 DispatcherServlet에 할당해주는 것이다.^-^Good~

  위의 내용처럼 특정 폴더 아래의 내용을 매핑하는 방법도 가능하고, *.do와 같이 특정 확장자만을 매핑해주는 방법도 쓸 수 있다.


(2) DispatcherServlet에서 컨트롤러로 HTTP 요청 위임

     Controller를 선정하는 것은 DispatcherServlet의 핸들러 매핑 전략을 이용한다.

     핸들러 매핑 전략?? 이게 무슨말이냐하면..

     사용자(Client) 요청을 기준으로 어떤 컨트롤러/핸들러에게 작업을 위임할지를 결정 해준다는 것이다.

     그 다음으로는 해당 컨트롤러 오브젝트의 메소드를 호출해서 실제로 웹 요청을 처리하는 작업을 위임한다.

     또한 DispatcherServlet은 어떤 Controller라도 사용이 가능하다. 확장성이 좋다는 말이다.

     그렇다면 자바의 오브젝트 사이에 무엇인가 요청이 전달되려면 메소드를 호출할 수 있는 방법이 있어야 하지 않는가?

     어떻게 제각각 다른 메소드와 포맷을 가진 오브젝트를 Controller로 만들어놓고 DispatcherServlet이 이를 알아서

     호출하게 만들수 있을까? 

 

     바로! 전형적인 "어댑터 패턴"을 사용해서, 특정 Controller를 호출해야 할 때는 해당 Controller 타입을 지원하는 어댑터를

     중간에 껴서 호출하는 것이다. 그러면 DispatcherServlet은 항상 일정한 방식으로 Controller를 호출하고 결과를 

     받을수있다.

     

 아래의 그림처럼 DispatcherServlet은 Controller가 어떤 메소드를 가졌고 어떤 인터페이스를 구현했는지 전혀 알지 못한다.

 대신에 Controller종류에 따라 적절한 어댑터를 사용한다.

각 어댑터는 자신이 담당하는 Controller에 맞는 호출 방법을 이용해서 Controller에 작업을 요청하고 결과를 리턴받아서

 DispatcherServlet에게 다시 돌려주는 기능을 가지고 있다. WoW!


(Tip) DispatcherServlet이 핸들러 어댑터에 웹 요청을 전달할 때는 모든 웹 요청 정보가 담긴 HttpServletRequest 타입의 오브젝트를 전달해준다. 이를 어댑터가 적절히 변환해서 Controller의 메소드가 받을수 있는 파라미터로 변환해서 전달 해준다.

  

(3) Controller의 모델 생성과 정보 등록

     Controller가 하는 일은??

      1) 먼저 사용자 요청을 해석하는 것

      2) 그에 따라 실제 비즈니스 로직을 수행하도록 서비스 계층 오브젝트에게 작업을 위임하는 것

      3) 결과를 받아서 모델을 생성하는 것

      4) 어떤 뷰를 사용할지 결정하는 것


     특히 모델을 생성하고 모델에 정보를 넣어주는 작업은 매우 중요하다! Controller가 어떤식으로든 

     다시 DispatcherServlet에게 리턴해야 할 2가지 정보가 있는데, 그중 하나가 모델이고 다른 하나가 뷰이다.

     (Tip) 모델은 이름과 오브젝트 값의 쌍으로 만들어진다.(보통 맵에 담긴 정보라고 생각하면 된다.)


(4) Controller의 결과 리턴 : 모델과 뷰

     모델이 생성이 되었다면, 다음은 뷰를 결정할 차례이다.

     Controller가 뷰 오브젝트를 직접 리턴할 수도있지만, 보통은 뷰의 논리적인 이름을 리턴해주면 DispatcherServlet의

     전략인 뷰 리졸버가 이를 이용해 뷰 오브젝트를 생성해준다.(뷰를 사용하는 전략과 방법은 매우 다양하다!)

     결국 Controller가 리턴하는 것은 모델과 뷰 두가지이다.

     Spring에는 ModelAndView라는 이름의 오브젝트가 있는데, 이 ModelAndView가 DispatcherServlet에 

     어댑터를 통해 Controller로부터 돌려받는 오브젝트이다. 이름 그대로 모델과 뷰, 두가지 정보를 담고 있다.

     모델과 뷰를 넘기는 것으로 Controller의 책임은 끝이다. 다시 작업은 DispatcherServlet으로 넘어간다.


(5) DispatcherServlet의 뷰 호출과 (6) 모델 참조

     DispatcherServlet이 Controller로부터 모델과 뷰를 받은 뒤에 진행하는 작업은, 뷰 오브젝트에게 모델을 전달해주고 

     클라이언트에게 돌려줄 최종 결과물을 생성해달라고 요청하는 것이다.

     모델의 참조는 뷰에다가 데이터를 전달하는 것으로 보면 된다. 

     그리고 보통 브라우저를 통해 사용자가 결과를 본다고 하면 브라우저에 나타날 HTML을 생성하는 일이 가장 흔한 뷰의 작업이다.

     (Tip) 뷰 작업을 통한 최종 결과물은 HttpServletResponse Oject안에 담긴다. 


(7) HTTP 응답 돌려주기

     뷰 생성까지 모든 작업을 마쳤으면 DispatcherServlet은 등록된 후처리기가 있는지 확인하고, 있다면 후처리기에서 

     후속 작업을 진행한 뒤에 뷰가 만들어준 HttpServletResponse에 담긴 최종 결과를 서블릿 컨테이너에게 돌려준다.

     서블릿 컨테이너는 HttpServletResponse에 담긴 정보를 HTTP 응답으로 만들어 사용자의 브라우저나 클라이언트에게 

     전송하고 작업을 종료한다.






참고만 하세요! - 더 Detail하게는 좀 더 뒤에! ㅎㅎ

DispatcherServlet의 DI 가능한 전략

  "(2) DispatcherServlet에서 컨트롤러로 HTTP 요청 위임"에서의 전략에 대해서 알아보도록 하겠습니다~

  전략으로는 아래와 같이 Mapping과 Adapter가 있겠습니다~

  ㅇ HandlerMapping

      핸들러 매핑은 URL과 요청 정보를 기준으로 어떤 핸들러 오브젝트, 즉 Controller를 사용할 것인지를 결정하는 로직을 담당!

      default로 BeanNameUrlHandlerMapping과 DefaultAnnotaionHandlerMapping 두가지가 설정 되어있다.

      default 핸들러 매핑으로 충분하다면 추가로 핸들러 매핑을 등록하지 않아도 된다.

      

  ㅇ HandlerAdapter

      핸들러 매핑으로 선택한 Controller/핸들러를 DispatcherServlet이 호출할 때 사용하는 어댑터이다.

      Controller의 타입에는 제한이 없으며, Controller 호출 방법은 타입에 따라 다르기 때문에 Controller를 결정했다고

      해도 호출 방법은 DispatcherServlet이 알 길이 없다. 

      그래서 Controller 타입을 지원하는 HandlerAdpater가 필요하다.


  ㅇ ViewResolver

      뷰 리졸버는 Controller가 리턴한 뷰 이름을 참고해서 적절한 뷰 오브젝트를 찾아주는 로직을 가진 전략 오브젝트 이다.

      default로 등록된 InternalResourceViewResolver는 JSP나 서블릿 같이 RequestDispatcher에 의해 

      포워딩될 수 있는 리소스를 뷰로 사용하게 해준다.



어느정도 MVC를 알았보았으니 이론은 요정도까쥐만 해보고 재밌는 실습을 한번 해보도록 하겠습니다.

앞으로 우리가 할 것은 MVC를 구축해보는 것 입니다.

그렇다면 시나리오를 하나 생각해보죠!

현재 View는 있고..View에서 어떤것을 클릭! 같은 이벤트를 발생했을 때 즉, 클라이언트에서 요청을 하는 것 이겠죵~

중요한 것은 해당 컨트롤러를 찾게 되어지고 컨트롤러에서 받는 파라미터 처리, MVC처리 후 리턴 처리, View에서는 어떻게 처리가 되어지는지가 중요 할 것 같네요.


4번째 강좌를 보시면 컨트롤러 메소드 파라미에 대해서 간단히 설명을 하였습니다.

나중에 Jquery grid를 사용해야하니 Json통신을 한번 해보겠습니다.(조금 더 뒤에!)

그전에 가장 간단한 @RequestParam도 한번 써보겠습니다. ㅎㅎ 


개발은 검색 페이지 화면을 가지고 해보겠습니다.


결과적으로 검색어를 "박태하하하하하하"를 넣으시고 검색 버튼을 눌렀을 경우에..



아래와 같이 검색결과 페이지로 가는 내용 입니다. 킁; 한글이 깨지네요 ㅋㅋㅋㅋㅋㅋ;


암튼..한글깨짐은 우선 무시하고! 중요한 mvc를 알아보겠습니다. 하하^0^;


구조는 아래와 같습니다. controller를 하나 만들어주시고! jsp파일 또한 하나 만들어줍니다.




컨트롤러 소스는 아래와 같습니다.  


중요하게 봐야 할 부분은 @RequestParam쪽 입니다. 또한 Model~~~:D


간단히 설명을 하자면! 검색어를 넣고 버튼을 클릭 하였을 경우! Client 

즉, JSP단에서 값이 넘어오게 되어지며, 그 값은 searchInput인 String searchKeyword에 담기게 되어집니다.

그 값을 model에 담게 되죵! 그렇게 담긴 값은 searchResult.jsp에서 사용하게 되어집니다! 굳~!


어떤식으로 searchResult.jsp에서 가져다가 사용하는지 알아보겠습니다.

소스는 다음과 같습니다. 


 

위와 같이 ${searchKeyword}  방식으로 값을 가져올 수 있습니다.


다음으로는 ModelAndView객체로 한번 해볼까요? 이번에는 로그인을 가지고 한번 해보겠습니다.

결과는 다음과 같습니다. 아래와 같이 " Do you want to login? "이라는 문구를 login.jsp에 넘겨서 찍어보겠습니다.



우선 controller쪽을 보겠습니다. 아래와 같이 리턴을 ModelAndView로 넘겨줍니다.

위에 제대로 이해하셨다면 당근 DispacherServlet으로 넘겨준다는 것을 이해했을 것 입니다.

mv.setViewName("login"); 이녀석도 login.jsp임을 알수 있습니다.

mv.addObjet(""); 이녀석은 message에다가 해당 String값을 넣어주는 것 입니다. Good~



이제 UI쪽 소스를 보겠습니다. 위와 마찬가지로 ${ } 를 사용하여 찍어줍니다.






요기까지~~MVC에 대해서 알아보았습니다.

@ModelAttribute는 아래의 내용처럼 DTO(VO)의 프로퍼티에 요청 파라미터를 바인딩해서 사용한다고 합니다.


참고 : 2014/02/05 - [OpenSource/Spring 강좌] - [Ace-T의 Spring강좌] Step 04. Spring @MVC 분석-01  의 내용입니다.

요청 파라미터를 메소드 파라미터에서 1:1로 받으면 @RequestParam이고,

 도메인 오브젝트나 DTO, VO의 프로퍼티에 요청 파라미터를 바인딩해서 한번에 받으면 @ModelAttribute라고 볼 수 있다.

 ex) @RequestMapping("/acet/search")

         public String search(@ModelAttribute UserSearch  userSearch){

            List<User> list = userService.search(userSearch);

            model.addAttribute("userList", list);

              ..................

        }



다음 시간에는 @ModelAttribute와 Json 통신에 대해서 알아보도록 하겠습니다. 


Json 통신은 인기있다죠잉~



    - 일단 END -


<< 참고 링크 >>


2014/05/05 - [OpenSource/Spring 강좌] - [Ace-T의 Spring강좌] Step 05. Spring @MVC 분석-02


2014/02/05 - [OpenSource/Spring 강좌] - [Ace-T의 Spring강좌] Step 04. Spring @MVC 분석-01


2013/12/04 - [OpenSource/Spring 강좌] - [Ace-T의 Spring강좌] Step 03. Spring 환경 구축 하기(was)


2013/11/05 - [OpenSource/Spring 강좌] - [Ace-T의 Spring강좌] Step 02. Spring 환경 구축 하기(Maven+Spring Project)


2013/11/03 - [OpenSource/Spring 강좌] - [Ace-T의 Spring강좌] Step 01. Spring 환경 구축 하기(Eclipse+Jdk)

저작자 표시 비영리 변경 금지
신고

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

[Ace-T의 Spring강좌] Step 05. Spring @MVC 분석-02

OpenSource/Spring 강좌 2014.05.05 21:46
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

안녕하세요 에이스-티 입니다. (- - (_ _ * 꾸벅~

하하;; 요즘 오랫동안 스프링을 안하다보니..다 까먹을 지경이네요 ㅋㅋㅋ 재밌는 스프링의 세계로 다시 들어가보겠습니다!

이번 강좌는 시나리오를 잡고 하나하나씩 차근차근 개발을 한번 해보겠습니다. 하하;;

자..스프링 만세 3번 외치고 갈께요~ 스프링 만세~스프링 만세~스프링 만세~ㅋㅋㅋㅋ(ㅈㅅ 사이코 아닙니다..;;) 


저번 4번째 강좌에서는 스프링의 컨트롤러라는 녀석의 메소드 파라미터에 대해서 알아보았네요 

기타 @RequestMapping 등등 두요!


우선 환경 소개를 해드리면..

1) IDE : STS(인텔리J나 이클립스 그냥 쓰셔도 됩니다.)

2) JDK : 1.6

3) SpringFramework Version : 3.1.1.RELEASE

4) Maven 4.0.0


시나리오

현재 mvc 형태로 기본적으로 지원해주는 상태로 만들어져있습니다.

이것들을 하나하나씩 원하는 구조에 맞게 수정해보도록 하겠습니다. 하하;;


우선 한번 구조를 살펴 봅시다~!

음..대충 살펴보니 조금 보이는군요!

MVC 구조 - 미약하게 Controller만 있네요~~

spring context쪽도 그다지 맘에 들진 않네요 ㅎㅎ

view도 bootstrap으로 만든 것을 사용해보도록 하겠습니다.


2014/05/05 - [Life of AceT/Good things] - bootstrap을 가지고 잠시 만들어보았다..


 


앞으로의 목표는 검색기능(?..루씬과 연동하려면..먼훗날이 될지도..ㅋㅋ;;)+간단한 사이트(?)을 하나 만들어보겠습니다.


자~이제 레알! 진짜루! 시작 해볼까요? ㅎㅎ;;

우선, context쪽 부터 시작 해보겠습니다. 관련 된 것은 web.xml이 되겠네요!



resources 아래에 spring folder를 만드신 뒤 context folder 추가!





spring config 관련 xml들을 context폴더 아래에 두겠습니다. 또한 이름들은 context-시작 되게끔 하도록 하겠습니다.


Before


After

resources dir 밑에 spring/context 를 만듭니다. 그 아래로 아래와 같이 context-servlet.xml과 context-root.xml을 넣어줍니다. (단, root-context.xml -> context-root.xml 로 파일명 변경!)







기동하면 안돌아가겠죠잉~ web.xml을 수정하여 봅시다~:D

web.xml file 수정!


1) contextConfigLocation param-value 수정


2) Dispatcher Servlet 관련 수정!



설정이 완료가 되었다면, 톰캣서버를 돌려보세요~~

아래와 같이 로그가 나왔다면 뜬 잘 된 case 입니다!



다시 한번 web에서 확인 해봐도 되겠죠? ㅎㅎ;


2번째로 bootStrap으로 만든 UI를 가지고 연결 시켜보겠습니다.

1) 먼저 jsp 파일을 하나 만들어봅니다. 

main.jsp  

main.jsp




2) Controller file에서 약간의 수정을 해줍니다. return "main" 으로 수정 합니다.



다시 서버를 재기동하여 확인하여 봅니다.




예~~~ view도 붙였고..이제!!!! 이벤트를 주어서 

Client  =>  EVENT => Spring MVC(DispatcherServlet) 로 연결시켜서 코딩을 하면 됩니다~

다음 강좌에서는!! 이벤트를 발생시켜 보겠습니다~~+ㅁ+/


<< 참고 URL >>


2014/02/05 - [OpenSource/Spring 강좌] - [Ace-T의 Spring강좌] Step 04. Spring @MVC 분석-01


2013/12/04 - [OpenSource/Spring 강좌] - [Ace-T의 Spring강좌] Step 03. Spring 환경 구축 하기(was)


2013/11/05 - [OpenSource/Spring 강좌] - [Ace-T의 Spring강좌] Step 02. Spring 환경 구축 하기(Maven+Spring Project)


2013/11/03 - [OpenSource/Spring 강좌] - [Ace-T의 Spring강좌] Step 01. Spring 환경 구축 하기(Eclipse+Jdk)


저작자 표시 비영리 변경 금지
신고

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

[Ace-T의 Spring강좌] Step 04. Spring @MVC 분석-01

OpenSource/Spring 강좌 2014.02.05 01:32
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

[Ace-T의 Spring강좌]

   Step 04. Spring @MVC 만들기>>


<< 목표 환경 >>

1) Eclipse(done)

2) PostgreSQL

3) Apache Tomcat or JBoss

4) JUnit(done)

5) SpringFramework(done)

6) JDK 6.0(done)

 


2013/11/03 - [OpenSource/Spring 강좌] - [Ace-T의 Spring강좌] Step 01. Spring 환경 구축 하기(Eclipse+Jdk)


2013/11/05 - [OpenSource/Spring 강좌] - [Ace-T의 Spring강좌] Step 02. Spring 환경 구축 하기(Maven+Spring Project)


2013/12/04 - [OpenSource/Spring 강좌] - [Ace-T의 Spring강좌] Step 03. Spring 환경 구축 하기(was)


 Step 03. Spring 환경 구축 하기(was)에서 환경을 구축해보았습니다.

이제는 mvc에 대해서 알아보도록 하겠습니다^^

우선 spring에서 자동으로 만들어준 소스를 가지고 상태여야 한다.(step 3 을 참고!!)

그 소스에 대해서 조금 간단히 살펴 보겠습니다~

이 글에서는 일명 @MVC를 토대로 합니다.(즉, 어노테이션 기반 MVC이죵!) 

그리고 오늘 학습을 해야 할것은 HomeController.java의 내용에 있는 어노테이션들 입니다.

@RequestMapping, @Controller

 

HomeController.java      

package kr.pe.acet;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
 
 private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
 
 /**
  * Simply selects the home view to render by returning its name.
  */
 @RequestMapping(value = "/", method = RequestMethod.GET)
 public String home(Locale locale, Model model) {
  logger.info("Welcome home! The client locale is {}.", locale);
  
  Date date = new Date();
  DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
  
  String formattedDate = dateFormat.format(date);
  
  model.addAttribute("serverTime", formattedDate );
  
  return "home";
 }
 
}

 

하지만 우선~~~!! Controller의 메소드 파라미터를 보도록 하겠지만...

아래의 Controller의 메소드 파라미터 블라블라를 보기전에 아래의 MVC의 주요 구성요소와 MVC패턴에 

대해서먼저 학습하면 좋을 것 같습니다.

2012/11/09 - [OpenSource/Spring MVC] - Spring MVC의 주요 구성요소


이제 아래를 학습하여 보자!

 @Controller 의 메소드 파라미터로 올 수 있는 것들!(참고 : 토비님 책3.1v 볼률2, 486p~)

 파라미터(Parameter)

 간단 설명(simple contents)

 HttpServletRequest,

 HttpServletResponse

 서블릿 관련~

 HttpSession

 서블릿 관련~

 WebRequest,

NativeWebRequest

 HttpServletRequest의 요청정보를 대부분 그대로 갖고 있는, 서블릿 API에

 종속적이지 않은 오브젝트 타입이다.(서블릿과 포틀릿 환경 양쪽에 모두 적용

 가능한 범용적인 핸들러 인터셉터를 만들 때 활용하기 위해 만들어졌다.

Locale

 java.util.Locale 타입으로 DispatcherServlet의 지역정보 리졸버(Locale

 Resolver)가 결정한 Locale 오브젝트를 받을 수 있다.

 Locale은 예를들어 ko_KR, jp_JP(?) 암튼 한국어, 일본어, 영어 등등 이라고

 보면  된다.

InputStream, Reader

 HttpServletRequest의 getInputStream()을 통해서 받을 수 있는 콘텐트 스트림

 또는 Reader 타입 오브젝트를 제공 받을 수 있다.

OutputStream, Writer

 HttpServletRequest의 getIOutputStream()을 통해서 받을 수 있는 콘텐트 스트림

 또는 Writer 타입 오브젝트를 제공 받을 수 있다.

@PathVariable

 @RequestMapping의 URL에 {}로 들어가는 패스 변수(path variable)를 받는다.

 http://acet.pe.kr/post/?id=10 이라고 하는걸 http://acet.pe.kr/post/10 으로

 만들 수 있다.

 ex) @RequestMapping("/post/{id}")

      public String view(@PathVariable

@RequestParam

 public String view(@RequestParam("id") int id){....}

@CookieValue

 HTTP요청과 함께 전달된 쿠키 값을 메소드 파라미터에 넣어주도록

 @CookieValue를 사용 할 수 있다.

@RequestHeader

 요청 헤더정보를 메소드 파라미터에 넣어주는 어노테이션이다. 

 헤더정보에 있는 Server정보, Content-Type등의 정보를 이용하여 어디에서 접근

 하는지 알아내서 view를 다르게 해준다던지 하는 것들을 구현 할 수 가 있다. 

Map, Model, ModelMap

 다른 어노테이션이 붙어있지 않다면

 @ModelAttribute

 요청 파라미터를 메소드 파라미터에서 1:1로 받으면 @RequestParam이고,

 도메인 오브젝트나 DTO, VO의 프로퍼티에 요청 파라미터를 바인딩해서 한번에 받으면 @ModelAttribute라고 볼 수 있다.

 ex) @RequestMapping("/acet/search")

         public String search(@ModelAttribute UserSearch  userSearch){

            List<User> list = userService.search(userSearch);

            model.addAttribute("userList", list);

              ..................

        }

Errors, BindingResult 

 변환작업 시 오류가 있을 때 @ModelAttribute를 사용 했을 때는 @RequestParam과는 달리 HTTP 400 이 발생하지 않고 작업은 계속 진행 되어지며, 단지 타입 변환 중에 발생한 예외가 BindException 타입의 오브젝트에 담겨서 컨트롤러로 전달 된다. 즉, 예외처리에 대한 기회를 주어야 하므로

 org.springframework.validation.Errors or org.springframework.validation.

BindingResult 타입의 파라미터를 같이 사용 한다.

 ex) @RequestMapping(value="add", method=RequestMethod.POST)

      public String add(@ModelAttribute User user, BindingResult bindingResult)      { ................... }

 BindingResult 대신 Errors를 사용해도 되며, 사용시 주의 사항으로는 반드시

 @ModelAttribute 뒤에 나와야 한다.@ModelAttribute 검증작업에서 나온 오류만을

 전달하기 때문이다. 

 SessionStatus

 컨트롤러가 제공하는 기능 중에 모델 오브젝트를 세션에 저장했다가 다음 페이지

 에서 다시 활용하게 해주는 기능이 있다. 

 org.springframework.web.bind.support.SessionStatus 오브젝트이며,

 필요없어지면 확실하게 제거해줘야 한다.

 @RequestBody

 Http 요청의 본문(body) 부분이 그대로 전달 된다.

 일반적인 GET/POST의 요청 파라미터라면 사용 할 일이 없다. 

 XML이나 JSON 기반의 메시지를 사용하는 경우에는 이 방법이 매우 유용하다.

 또한 메시지컨버터가 필요하다! ㅎㅎ 

 @Value

 SpEL을 이용해 클래스의 상수를 읽어오거나 특정 메소드를 호출한 결과 값, 조건식 등을 넣을 수 있다.

 ex) @RequestMapping(...)

 public String hello(@Value("#{systemProperties['os.name']}") String osName){...} 필드 주입이라는 것도 있다.

 @Valid

 @Valid는 JSR-303의 빈 검증기를 이용해서 모델 오브젝트를 검증하도록 지시하는지시자다. 

서버 Valid는 토비 책 뒤편에 보면 나오며, @Validate도 있다!~

 

많은 것들이 있네요..하하;

하지만 우리의 소스에서는 아래와 같이 Locale과 Map, Model, ModelMap 중 Model이 쓰였습니다. ㅋㅋ

  public String home(Locale locale, Model model) {


Controller 소스는 매우 간단합니다.  시간을 구해서 해당 View에다가 줘서 찍어주는게 끝이네요^^;

   model.addAttribute("serverTime", formattedDate );  

  return "home";


※ Model Interface (http://docs.spring.io/spring/docs/3.2.x/javadoc-api/ 참조 하시면 됩니다.)

org.springframework.ui

  Interface Model

Model addAttribute(String name, Object value)

value 객체를 name 이름으로 추가 

Model addAttribute(Object value)

value를 추가. value의 패키지 이름을 제외한 단순 클래스 이름을 모델 이름으로 사용(첫 글자는 소문자). value가 배열이거나 콜렉션인 경우 첫 번째 원소의 클래스 이름 뒤에 "List"를 붙인 걸 모델 이름으로 사용(첫 글자는 소문자)

Model addAllAttributes(Collection<?> values)

addAttribute(Object value) 메소드를 이용해서 콜렌션에 포함된 객체들을 차례대로 추가

Model addAllAttributes(Map<String, ?>, attributes)

Map에 포함된 <키, 값>에 대해 키를 모델 이름으로 사용해서 값을 모델로 추가

Model mergeAttributes(Map<String, ?>, attributes>

Map에 포함된 <키, 값>을 현재 모델에 추가. 단 키와 동일한 이름을 갖는 모델 객체가 존재하지 않는 경우에만 추가

boolean containsAttributes(String name)

지정한 이름의 모델 객체를 포함하고 있는 경우 true 리턴


     위의 model에서 시간을 serverTime에다가 넣어주면 그 model은 home.jsp에 전달이 되어진다.

     즉, View단, home.jsp(src/main/webapp/WEB-INF/views/home.jsp)를 보면 아래와 같습니다.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ page session="false" %>

<html>

<head>

<title>Home</title>

</head>

<body>

<h1>

Hello world!  

</h1>


<P>  The time on the server is ${serverTime}. </P>

</body>

</html>



     << 결과 >>     


아래의 주소(http://localhost:8080/)대로 치면 아래처럼 결과가 나오지 않는다. 그 이유는 Step 03 강좌에서도 설명 하였듯이 Context root 가 다른걸로 잡혀있기 때문이다.

그러므로 tomcat의 context root를 / 로 수정을 해주면 된다.

자세한 설명은  

2013/12/04 - [OpenSource/Spring 강좌] - [Ace-T의 Spring강좌] Step 03. Spring 환경 구축 하기(was)


또는 아래의 동영상을 참고 하길 바랍니다^^;; - (단, STS 기반 입니다~!)

(동영상이 구리긴하네요...720 고화질로 보셔야 합니다~~)



쫘잔~~아래의 결과가 나오시나요?? ㅎㅎㅎ

[Locale이 잘 안맞는지...깨져서 나온다 ㅋㅋ; 일단 PASS~~~]


 Model addAttribute(String name, Object value)로 인해서 시간이 name에 binding 되어지고, ${serverTime}으로 찍혀지게 된다.  스트럿츠나 jsp로 코드를 짜던 시절에서는 request로 view단에 넘겨주고는 하였다.

위의 내용을 정확히 알기 위해서는 Spring MVC 패턴, WEB.xml(was꺼 아니죠~) 을 알아야 한다.

다시 한번~링크!!

2012/11/09 - [OpenSource/Spring MVC] - Spring MVC의 주요 구성요소 

2012/11/09 - [OpenSource/Spring MVC] - 웹??? web.xml은 알고 하자!!


Web 브라우저에서 URL 들어오면, WEB.xml에 설정 해 놓은 DispatcherServlet에 전달 되어지고, 

url-mapping에 의해 mapping되어진 Controller를 찾고 해당하는 method부터 시작이 되어진다! 두둥~


옛날 jsp 시절에는 view단에서  <%= request.getParameter("name") %>를 썼었다. ㅋㅋ;




 음...조금 더 디테일하게 써보려고 했는데....새벽 1시간 넘었네요..ㅠ.ㅠ..

 독감이 걸린 상태라..쿨럭 쿨럭~ 이번 강좌는 여기까지 써야겠네요..하하;

 조금이나마 도움이 되셨으면 좋겠네요^-^

 건강이 제일 큰 재산 입니다. 건강하세요~~~~


5번째 강좌에서는 조금 더 자세하게 Spring MVC에 대해서 학습 하도록 하겠습니다^-^

언젠가는...Mybatis도 연동하는 날이 오겄져 뭐~ㅋㅋㅋㅋ


     - to be continue... by Ace-T -

저작자 표시 비영리 변경 금지
신고

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

[Ace-T의 Spring강좌] Step 03. Spring 환경 구축 하기(was)

OpenSource/Spring 강좌 2013.12.04 20:40
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

[Ace-T의 Spring강좌]

Step 03. Spring 환경 구축 하기(was) >>

 

<< 목표 환경 >>

1) Eclipse(done)

2) PostgreSQL

3) Apache Tomcat or JBoss

4) JUnit(done)

5) SpringFramework(done)

6) JDK 6.0(done)

 

세번째 단계로 Spring MVC 사용하기를 해보자^^


개인프로젝트를 하기 위해서 Spring을 아무것도 없는 상태에서 구축을 해보려고 한다.

생각을 우선 해보자~

1. maven project이며, dynamic web project 이다.

spring mvc를 구축하기 위해 무엇이 필요 할까???

우선 무엇을 하고자 하는지 알아야한다.

 

생각해보자...

1) Spring 관련 lib 파일들은 기본!~ : pom.xml를 이용하여 가져오자!(maven prj 이니깐!)

2) MVC.. 즉 웹이다.

3) 웹 => WAS가 필요하다. : tomcat으로 해보자.

4) DB가 필요하다.            : postgreSQL로 하자.

5) SQLMapper가 필요하다. : Mybatis로 하자.

6) Log                             : log4j, slf4j로 하자.

7) 테스트를 위한 Junit도 Junit도 필요!

8) UI는 jsp또는 UI 솔루션을 사용하자.

 

대충 이런것들이 필요 할 것이고

 

spring mvc는 dispacherServlet라는 녀석이 managing을 하기 때문에

web.xml에 셋팅을 하자. 사용 할 수 있도록!~(사실 직접 셋팅하지는 않는걸루~)

2012/11/09 - [OpenSource/Spring MVC] - 웹??? web.xml은 알고 하자!!


 

기본 default 가 아래와 같다.(web.xml)

더보기

 

 

 그리고 tomcat을 연동하여 웹페이지를 띄우자.

ex) http://localhost:7777/index.html


대충 생각해보면 위에 것들이 필요하다. 뭐..더 있을수도있겠지만 필자가 우선 생각나는것은 저러하다--;;


Spring MVC 즉, web 프로젝트를 구축하기 위해서 위처럼 많은 것들이 필요하다.

더욱이 base로 Servlet컨테이너라던지, Servlet 생명주기 등등 web의 기본적인 지식은 필수적이다.


우선은 현재 환경이 갖춰졌다는 가정하에 아래의 설명을 하겠다.


환경은 step 1과 step 2를 참고하라.

2013/11/03 - [OpenSource/Spring 강좌] - Step 01. Spring 환경 구축 하기(Eclipse+Jdk) 

2013/11/05 - [OpenSource/Spring 강좌] - Step 02. Spring 환경 구축 하기(Maven+Spring Project)


 

가장 빠르고 간단히 전체적인 뼈대를 만들 수 가 있다.

바로 Spring template project를 이용하는 것이다.(요즘은 STS 플러그인을 받아도 Spring template project이 없다..ㅠ_ㅠ...) 알고보니..STS 플러그인을 받고 그냥 Spring project를 만들 때 고를수가있다..와우! 아래에서 설명하겠다.

 

Tip. 템플릿 프로젝트 사용 시 아래와 같다.

템플릿 프로젝트 사용

 

Step.2 를 참고하여 간단한 MVC Project를 만든다.

2013/11/05 - [OpenSource/Spring 강좌] - Step 02. Spring 환경 구축 하기(Maven+Spring Project)


 

그리고 간단한 sample이 만들어지게 된다. controller와 jsp정도~

그렇다! 구조를 잡고 이해하는데 위와같은 셋팅이 필요한데 알아서 기본 뼈대를 만들어주는 것이다. 굳..!!!!^0^~


위에서 생각 했던 것들 중에 해결 된 것들이 있는지 확인을 해보면 아래와 같다.

1) Spring 관련 lib 파일들은 기본!~ : pom.xml를 이용하여 가져오자!(maven prj 이니깐!)

2) MVC.. 즉 웹이다.

3) 웹 => WAS가 필요하다. : tomcat으로 해보자.

4) DB가 필요하다.            : postgreSQL로 하자.

5) SQLMapper가 필요하다. : Mybatis로 하자.

6) Log                             : log4j, slf4j로 하자.

7) 테스트를 위한 Junit도 Junit도 필요!

8) UI는 jsp또는 UI 솔루션을 사용하자. 


다음으로는 db와 was를 연결 시켜주면 된다. 굳!!

우선적으로 was를 다운받아서 연결시켜보자. 


<< SERVER Setting >>

1) Servers 아래를 클릭하여 새로운 서버를 추가한다.


2) Tomcat v6.0으로 해보자~~



3) 미리 다운 받은것이 있다면 그것으로 연결시키고 없다면 아래에 보시면 Download and Install이라는게 있다. 다운받아서 연결시키면 된다.^-^good~


4) was에 올릴 프로젝트를 골라 Add 해준다.


5) Server를 가동시켜보자.


6) 컨텍스트 루트를 수정하여 보자. 현재는 /acet  -> /  로 수정!



Tip. Server쪽 Properties 를 눌러서 배포 Location을 선택하면 된다^^



 이제 was 까지 기동하였으니 index.jsp를 만들어 결과를 보자 


아래처럼 ddddd를 한번 넣어보자 ㅋㅋ;;


[index.jsp 소스]

더보기


브라우저에서 http://localhost:8080/  나 http://localhost:8080/index.jsp 로 접근하여 

아래처럼 결과를 확인 해보자^^

 

혹은! 기본적으로 만들어져있는 home.jsp로 결과를 봐도 된다. http://localhost:8080/

특히 jsp가 WEB-INF밑에 있으면 바로 접근이 안된다는거~~~

      

 

 

 결과는 아래와 같다.


 

     이제!! 다음 step에서 mvc를 학습하여 spring을 제대로 써보자.

     추신 : 아..글쓰는건 정말 어렵구나..ㅠ.ㅠ..흑흑...많은 분들이 도움이 되시길 바라며...끝~!!

     - to be continue to the next Step..^^.. -

저작자 표시 비영리 변경 금지
신고

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

[Ace-T의 Spring강좌] Step 02. Spring 환경 구축 하기(Maven+Spring Project)

OpenSource/Spring 강좌 2013.11.05 01:17
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

 

2013/11/03 - [OpenSource/Spring] - Step 01. Spring 환경 구축 하기

 

[Ace-T의 Spring강좌]

 Step 02. Spring 환경 구축 하기(Maven+Spring Project)>>


<< 목표 환경 >>

1) Eclipse

2) PostgreSQL

3) Apache Tomcat or JBoss

4) JUnit

5) SpringFramework

6) JDK 6.0

 

springframework와 junit을 위해 maven project로 할 생각이다.

 

그래서 우선적으로 maven을 다운 받고 이클립스에는 maven plug-in을 설치하여 연동 시키자^-^

 

[01] maven download 하기

http://maven.apache.org/download.cgi

 

 

  maven을 다운을 받고(소스가 아닌 apache-maven-3.1.1-bin.zip 을 다운 받았다.

  글쓴이의 같은 경우 build라는 폴더에 넣어두었다.

 

 

 build dir 밑에 다가 저장!!~

maven은 괜히 받은 것이 아니다~maven > conf에 보면 아주 매우 중요한 settigs.xml 이라는 녀석이 있다.

이클립스와 연동을 해줄 녀석이다. settings.xml을 가지고 Repository를 설정 해줄 수 있다. 

(maven에서 중요 파일은 pom.xml과 settings.xml을 꼽을 수 있다.)

 

 

[2] 이클립스와 maven 연결하기

  우선적으로 Eclipse Marketplace에서 maven plug-In을 다운받자.

  (Eclipse Marketplace는 Help 메뉴 > Eclipse Marketplace..)

 

maven으로 Find 해보자. (케플러 버전이 있다면 그것으로 하자! 중요한건 maven 플러그인이 필요하다느것!

 

 아래의 그림처럼 클릭X2 을 해주면 된다.

 

동의하기~

 

설치가 다되었다면, Eclipse Winodw > Preferences 에서 Maven이 있는지 확인 하자.

있다면 Maven >  User setting을 클릭하면 아래와 같이 나올 것이다. 

 

 우리는 User Settings를 디폴트로 쓰지 않는다. 포터블로 하기 위해 설치된 Maven > conf 에서 settings.xml을 선택하자.

 

그리고나서 settings.xml에서 local repository부분을 수정하여 주자.

 

아래의 그림처럼 주석으로 되어있는 것을 풀고 우리가 임의로 경로를 설정을 할 것 이다. 

 

우선 repository라는 폴더를 하나 생성하자.

아래와 같이 경로를 셋팅하고 저장하자.

 

 

그리고 나서 다시 Maven > User setting 을 가보면 우리가 정해준 path대로 설정이 되어있는 것을 볼 수 있다. 

 

자~~이제 Maven이라는 천군만마를 얻었다!!

 

[3] project 생성

   필자의 삽질..ㅋㅋㅋㅋ 그냥 참고만 하세요..ㅠ.ㅠ...

뻘짓..ㅠㅠ

  

위처럼 노가다를 하지 않겠다. 왜냐면 빨리 개발 환경을 셋팅하는것도 필요하니깐!! 중요한건 환경보다 개발이니깐^^;

       

우리는 매우 간단한 Spring Template Project 를 사용 할 것이다. 하지만 STS 플러그인을 셋팅 한뒤에 나오는 Template Project는 이제 없다!!!....ㅠ.ㅠ..계속 찾았는데-_- ....he's gone....goodbye my bro..kkk

하지만 알고봤더니 사라진게 아니였다.

 

자~이제 초 간단 mvc 프로젝트를 만들어보자.

우선 선작업으로 STS plug-in을 셋팅 해줘야 한다.

 

1) Eclipse plug-in setting 키워드는 spring으로 치면 된다. Spring Template Project를 찾느라..아래처럼 검색 키워드를 넣은 것이다 ㅋㅋ;;

 

2) 필요한것만 체크해서 해도 되고 그냥 다 체크해서 인스톨 시키면 된다.

 

플러그인이 인스톨 된 뒤 이클립스가 재가동 되어진다.

재가동 되어진 후에 프로젝트를 하나 만들어보자.

 

3) File > New > Other를 선택 후 아래와 같이 spring project를 하나 생성해보자.

4) Spring Project 를 생성 시 아래를 보면..Spring MVC Projcet가 있다..ㅠ.ㅠ..

 

 

5) 패키지를 정해준다. ㅎㅎㅎ

 

6) 아래처럼 web.xml과 pom.xml , java, test 폴더로 구분! 더욱이 log4j.xml까지..ㅠ.ㅠ..대박!!!

   

이제 기본적인 뼈대가 생성 되었다..이제 개발만이 남았다~~~~~~+ㅁ+/

다음 시간에는 web project를 구성하였으니! was 연동을 해보겠습니다^^ 차근차근!

 

    - to be continue to the next Step..^^.. -


2013/12/04 - [OpenSource/Spring 강좌] - Step 03. Spring 환경 구축 하기(was)


 

저작자 표시 비영리 변경 금지
신고

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

  • mezzo 2014.01.29 18:07 신고 답글 | 수정/삭제 | ADDR

    안녕하세요 스프링 공부하는중 이런저런 좋은 정보가 있어서 참고하게됬는대요..
    다름이 아니라 말씀하신대로 설치 다하고 기본 스프링 프로젝트 생성하니 에러가뜨는대.. 왜그런걸까요..

    • Favicon of http://acet.pe.kr BlogIcon String Ace-T 2014.01.29 19:58 신고 수정/삭제

      안녕하세요^^ 방문&댓글 감사합니다~(-- (__ 꾸벅~새해 복 많이 받으세요^^

      우선은 궁금한 점이..
      [3] project 생성
      필자의 삽질..ㅋㅋㅋㅋ 그냥 참고만 하세요..ㅠ.ㅠ...
      라는 부분도 따라서 하신건가요?

      아니면 STS plug-in을 셋팅 한 뒤에 Spring project를 생성 하신 건가요?

      음..어떤 에러가 나는지 조금 자세하게 말씀해주실 수 있으세요?

  • mezzo 2014.01.30 09:28 신고 답글 | 수정/삭제 | ADDR

    뎃글 감사합니다.. 우선 필자의 삽질은 따라하지는 않았구요..
    STS plug-in을 셋팅 한 뒤에 Spring project를 생성했습니다
    잘따라한거같은대..
    Spring project를 생성하면 servlet-context.xml와 root-context.xml에 에러가 생깁니다. 직접 열어보면
    에러부분이 없는대도 말이조.. ㅠㅠ

  • mezzo 2014.01.30 10:22 신고 답글 | 수정/삭제 | ADDR

    죄송합니다 해결했내요.. 어떤게 문제였는지는 모르겠지만 이것 저것 검색하다가
    repository폴더를 비우고 다시 하니 잘 생성 되내요 감사합니다.

    • Favicon of http://acet.pe.kr BlogIcon String Ace-T 2014.03.22 16:51 신고 수정/삭제

      ^^; 좋은 경험 하셨네요! 해결 하신 방법을 보니 maven plug-in 관련해서 오류 인것 같아요^^ pom.xml 쪽에 보시면 오류가 떴을꺼라 예상이 드네요 pom.xml 에 설정하신 대로 repository에 jar들이 끌어오는데 간혹 깨지거나 잘 못끌어오는 경우가 종종 있어요 그럴때 오류가 발생을 하구요 해결하신것 처럼 repository에 것을 모두 지우시고 다시 받으시면 됩니다~ 혹은 maven install로 할 수 도있습니다^^

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

[Ace-T의 Spring강좌] Step 01. Spring 환경 구축 하기(Eclipse+Jdk)

OpenSource/Spring 강좌 2013.11.03 16:13
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

[Ace-T의 Spring강좌]

Step 01. Spring 환경 구축 하기(Eclipse+Jdk)>>


<< 목표 환경 >>

1) Eclipse

2) PostgreSQL

3) Apache Tomcat or JBoss

4) JUnit

5) SpringFramework

6) JDK 6.0

 

      이 step에서는 정말 베이직한 환경 구축을 해보겠습니다. 이클립스와 Jdk 입니다^-^good~


 


[1] 이클립스 깔기


IDE : eclipse로 해보자. 인텔리J는..상용 프로그램이라..Pass~~

kepler! 너로 결정했다!(사실 STS를 사용해도 무관하다. 중요한건 IDE가 아니다.)

http://www.eclipse.org/downloads/packages/release/kepler/r

상황에 맞게 PC에 맞게(32bit, 64bit) ~저장을 하면 된다.

 

 


 [2] JDK Setting 

IDE인 Eclipse를 다운받으셨다면 그 다음으로는 jdk(java develope kit)가 필요합니다.

jdk는 현재 8까지 나왔지만..무난하게 6으로 셋팅을 해봅시당~

sun을 흡수한 oracle로 가자!

아래를 보면 이전 릴리즈 버전으로 가는 버튼이 있다. 눌러주자~

 

 

 

OS에 맞게 잘 깔아주면 되겠다.

 

자! 지금까지 이클립스와 jdk를 다운받았다.

 

포맷의 영향이 없이 그냥 복사를 통해서 이리저리 옮길수 있는 포터블 환경을 만들어 볼 것이다.

jdk는 무조건 한번은 windows라면 클릭클릭을 통해 깔아줘야한다~

그런다음에 path를 맞춰주면 된다.

 

더보기

 

eclipse가 뜰 때 jdk를 잡아주기 위해 eclipse.ini에 아래와 같이 추가 합니다.

tip. PSpad는 http://www.fosshub.com/PSPad.html 에서 다운 받으시면 됩니다.

 

Before>> 

 

After>>

 


주의 할 점은  -vm이 -vmargs의 위에 있어야 한다. 그렇지 않으면 글쓴이의 같은 경우 아래와 같이 오류가 났다.

 

 

혹은 아래와 같은 오류가 난다면..

 

 

레지스트리에가서(실행창 -> regedit)

HKEY_LOCAL_MACHINE -> SOFTWARE -> JavaSoft -> Java Runtime에서

아래와 같이 CurrentVersion을 해당 경로로 바꿔주면 된다. 원래는 1.6으로 되어있었다.

참고 사이트 : http://blog.naver.com/sj1004class?Redirect=Log&logNo=60183448307

 


JDK 같은 경우 환경변수를 잡을 필요 없이 위와 같이 셋팅을 해주면 된다.

 

eclipse.ini의 더 나은 정보를 원하신다면..클릭!~

더보기

 

이클립스를 수행 시키면 아래와 같이 수행 되면 성공이다~~~

글쓴이가 겪은 오류말고도 다양한 오류가 발생 할 수 도있다. 모두 성공 하시길 바랍니다^-^/

 

 

굳!~~ 다음 시간에는 프로젝트를 생성 해보겠습니다. 점점 흥미진진 해지는군요^-^/

FUN Coding!~ 불 Coding~! 하는 그날까지~계속 된다잉~~+ㅁ+/ 

 

- to be continue to the next Step..^^.. -


2013/11/05 - [OpenSource/Spring 강좌] - Step 02. Spring 환경 구축 하기(Maven+Spring Project)


저작자 표시 비영리 변경 금지
신고

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

티스토리 툴바