개발

이클립스에서 스프링 MVC 프로젝트를 만들고 테스트해보자

mt프로젝트 2016. 10. 3. 19:54

최근의 웹 개발은 거의 대부분이 스프링MVC (Spring MVC)구조로 만들어져 있다.

그런데 스프링을처음 사용하는 사람들은 스프링MVC의 가장 기본적인 사용법을 익히는 부분부터 많은 어려움을 겪곤 한다.

이 글에서는 그런 사람들을 위하여 스프링에서 기본으로 제공하는 MVC 샘플 프로젝트를 받고 테스트 해보기로 한다.


순서대로 따라하기만 하면 기본적인 동작은 모두 확인 할 수 있을것이다.


----------------------------------------------------------------------------


 STS 다운받기

 아래 링크에서 STS(SPRING TOOL SUITE)를 다운받은 후 적절한 위치에서 압축을 푼다.(STS는 이클립스를 기반으로 만들어진 웹 개발도구이다)

압축을 푼 이후에는 sts-bundle\sts-3.7.3.RELEASE\STS.exe를 더블클릭하여 실행할 수 있다.

물론 실행을 위해서는 적절한 버전의 JDK를 설치해주어야 한다.


(링크: https://spring.io/tools)




STS가 실행되면 좌측의 탐색기를 우클릭하여 아래와 같이 신규 프로젝트를 생성한다.

스프링 MVC 프로젝트는 Spring Legacy Project쪽에 있다. (Spring Starter Project쪽은 대부분 스프링 부트 프로젝트이 있다.)




아래와 같이 Spring MVC Project를 선택하고 프로젝트 이름을 넣어준다.

이 단계에서 프로젝트를 다운로드 받게 되므로 약간의 시간이 걸릴 수 있다.



기본적인 패키지를 입력하고 계속 진행한다



 프로젝트는 아래와 같은 구조를 하고있다.



먼저 컨트롤러를 열어보면 아래와 같은 코드를 볼 수 있다.

코드에대한 설명은 아래에서 다시 하기로 하며, @Requestmapping의 value 값이 "/" 인 것만 먼저 보도록 한다. 이는 해당 컨트롤러 메소드의 주소가 "/" 임을 의미한다.

일단 해당 프로젝트를 동작시켜보기위해 서버설정을 하도록 한다.

아래와 같이 Servers 탭에서 서버를 우클릭하여 Add and Remove.. 를 선택한다.


팝업창이 열리면 프로젝트를 서버에 추가해준 후


서버를 시작해준다.




서버가 시작하면 테스트페이지의 주소를 알기 위해 Context Root를 알아야한다.

Context Root는 아래 위치에서 확인 할 수 있다.

여기서 기본적으로 만들어진 ContextRoot는 /springmvc 이다.


테스트페이지의 주소는 아래와 같은 구성으로 이루어지며

프로토콜: http:// + 호스트:localhost(127.0.0.1로 대체 가능) + 포트: 8080(톰캣서버의 기본 포트는 8080이다.) + 컨텍스트 루트: /springmvc 

+ 페이지 주소: /

= http://localhost:8080/springmvc/


아래 사진과 같은 결과를 보여주는데, 여기서 ? 는 한글이 깨져서 표시되는 것이다.

한글이 깨지는 부분을 해결해주기 위해 jsp 페이지에 아래와 같이 인코딩을 먹여준다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

이후 페이지를 다시 로드하면 한글이 정상적으로 표시되는것을 확인 할 수 있다.




 이로서 스프링 MVC 샘플 프로젝트를 받아서 구동시켜보는부분은 끝났다.

 그렇다면 해당 샘플은 어떤 구조로 되어있으며 테스트 주소(http://localhost:8080/springmvc/)에 들어갔을 때 위 샘플 페이지가 어떤 과정을 거쳐서 노출 되는 것인지 한번 간단하게 살펴보자


1. 해당 주소는 먼저 거기에 매치되는 주소로 연결된다.

 아래와 같이 클래스 시작 부분에서 @Controller 라는 어노테이션을 달아줘서 아래 클래스가 서버 시작 시 객체가 생성되어 스프링컨테이너에 등록된다.

 그리고 @RequestMapping 부분에서 컨트롤러 메소드들 각각의 주소값(value)을 설정해줄 수 있으며, 아래의 home 메소드는 "/" 라는 주소를 가지게 된다. 또한 해당 컨트롤러 메소드는 HTTP 메소드 중 get방식만을 받아들인다.

 컨트롤러가 호출된 후에는 이런저런 필요한 동작들을 하고 응답 화면으로 연결 해 주고 있다. 여기서 return "home" 이라는 부분은 home.jsp 화면으로 연결하겠다는 표시이다. 이부분에 대한 설정은 아래 servlet-context.xml에서 이루어진다.


아래에서 먼저 <context:component-scan base-package="com.mt.springmvc" /> 이 있다. 이 부분은 com.mt.springmvc 패키지 아래에 있는 스프링 컴포넌트들을 스캔하여 서버 시작 시 해당 컴포넌트를 스프링 컨테이너에 넣어두겠다는 의미다. 이부분이 잘못되면 서버 시작 시 위의 HomeController를 찾을 수 없게 된다.

 그리고 붉은색 박스로 표시된 부분은 InternalResourceViewResolver를 통해서 return 값을 처리하는 부분이다.

 위에서 return 값으로 home을 주고 있으므로 여기에 아래의 prefix와 suffix가 붙어 /WEB-INF/views/home.jsp 파일로 return 시켜 주는 것이다.

 (이때 Controller 메소드에서 return타입을 String으로 넣어주면 위와 같이 특정 jsp 파일로 연결되지만, json을 리턴하면 화면에 json view가 표시된다.)




이로서 기본적인 스프링 MVC 프로젝트를 만들고 그 구조를 간단히 살펴보는 부분까지 완료되었다.


이 글을 쓰게 된 계기는 내가 스프링을 처음 사용할 때 생각지도 못한 곳에서 자꾸 쓸데 없는 삽질을 한 기억 때문이었다.

부디 이 글이 많은 사람들을 삽질에서 구원해주었으면 한다.