2012년 9월 5일 수요일

스프링 프레임워크(Spring Framework) 설치 및 설정



스프링 프레임워크 설치 및 설정







스프링 프레임워크(Spring Framework) 플러그인 및 실제 라이브러리를 설치, 설정하고 간단하게 사용하는 방법입니다.
여기서 사용되는 이클립스의 종류는 다음과 같습니다.

Eclipse JEE Indigo SR1 64bit (다른 버전이어도 됨)

(포스트의 내용이 상당히 많으니 천천히 커피 한 잔 하시면서 보시면 됩니다. ^^;)


이클립스를 실행합니다.



[Help]-[Install New Software...] 메뉴를 실행시킵니다.



Work with: 항목의 우측 [Add...] 버튼을 누릅니다.



다음과 같은 내용을 입력하고 [OK] 버튼을 누릅니다.

- Name: Spring IDE Plugin


그러면 다음과 같이 설치할 플러그인 목록이 뜨게 됩니다. 여기서는 한 가지 항목만 제외하고 모두 체크를 한 다음 [Next >] 버튼을 누릅니다. (제외할 항목: Integrations / Spring IDE, 이 항목은 선행 설치가 되어야 하는 다른 플러그인을 요구합니다.)



정상적으로 설치할 준비가 되었다면 아래처럼 'Review the items to be installed.' 메시지가 나오게 됩니다. 만일 설치 준비에 문제가 발생하면 그에 따른 이유 메시지가 나타나게 됩니다. [Next >] 버튼을 누릅니다.



스프링 IDE 플러그인 사용 동의 화면을 보여줍니다. 'I accept the terms of the license agreement'를 선택하고 [Finish] 버튼을 누릅니다.



그러면 본격적으로 해당 웹사이트로부터 플러그인 파일들을 다운로드 하고 설치를 시작하게 됩니다.



중간에 아래와 같은 보안 경고가 뜰 수 있습니다. 마치 윈도우 운영체제에서 외부 다른 프로그램이나 액티브X 설치시에 안전하지 않을 수 있다는 선심성(?) 경고와 비슷한 개념입니다. 여기서는 가볍게 무시하고 [OK] 버튼을 누릅니다.

(경고: 서명되지 않은 콘텐츠가 포함된 소프트웨어를 설치하려고 합니다. 이 소프트웨어의 인증 또는 유효성을 확인할 수 없습니다. 설치를 계속 하시겠습니까?)


설치를 모두 완료하게 되면, 이클립스를 재시작을 할 것인지 물어보게 됩니다. 여기서는 확실하게 하기 위해 [Restart Now] 버튼을 누릅니다. 그러면 잠시 후에 이클립스가 종료되고 자동으로 다시 실행됩니다.



이클립스가 다시 실행되면 [Help]-[About Eclipse] 메뉴를 실행시킵니다.



아래와 같이 Spring IDE 라는 녹색 아이콘이 보이면 성공적으로 플러그인이 설치된 것입니다. 좀 더 세부적으로 설치항목을 살펴보려면 그 아래의 [Installation Details] 버튼을 누릅니다.



[Installed Software] 탭에 보면 아래와 같이 Spring IDE 관련된 각종 플러그인이 설치된 것을 상세히 볼 수 있습니다.



여기서 잠깐!
만일 플러그인을 설치하려고 했다가 뭔가의 실수나 오류로 인해 설치가 어정쩡하게 되었을 때, 다시 재설치하려고 하면 이미 등록된 주소라고 나오고 설치를 할 수 없는 상황이 생길 수 있습니다. 이럴 경우에는 이클립스가 기억하고 있는 플러그인 설치 관련 정보를 깨끗이 지워주어야 다시 설치를 할 수 있습니다. 다음과 같이 하면 됩니다.


[Windows]-[Preferences] 메뉴를 실행시킵니다.



좌측에서 Install/Update > Available Software Sites 분류를 선택합니다. 그러면 우측에 현재까지 설치된 플러그인 소프트웨어의 목록이 보입니다. 설치가 정상적으로 되지 않았던 플러그인 항목이 있다면 그것을 선택하고 우측의 [Remove] 버튼을 누르면 깨끗이 삭제가 됩니다.



이제 간단하게 스프링 프레임워크 플러그인을 이용해 보겠습니다. 이클립스의 Project Explorer(프로젝트 탐색기)의 빈 공간에서 마우스 우측 버튼을 눌러 [New]-[Dynamic Web Project(동적 웹 프로젝트)] 메뉴를 실행합니다.



아래와 같이 설정하고 [Next >] 버튼을 누릅니다.

- Project name: SpringLove (꼭 SpringLove일 필요는 없고, 자신이 원하는 영문으로 입력합니다.)
- Target runtime: Apache Tomcat v7.0 (각자 설치된 톰캣에 따라 다르게 보일 수 있습니다.)
- Dynamic web module version: 기본 값
- Configuration: 기본 값


특별히 소스코드 경로 및 빌드의 출력 경로를 변경할 일이 없으면 바로 [Next >] 버튼을 누릅니다.



web.xml 파일은 생성해야 되므로 Generate web.xml deployment descriptor 항목을 체크하고 [Finish] 버튼을 누릅니다.



그러면 프로젝트 탐색기에 아래와 같이 추가된 것을 볼 수 있습니다.



이제 이 프로젝트에 스프링 프레임워크를 사용할 환경을 만들어야 합니다. SpringLove를 선택하고 마우스 우측 버튼을 눌러 [Spring Tools]-[Add Spring Project Nature] 메뉴를 실행합니다.



그러면 프로젝트 이름 좌측 아이콘에 작은 S 표시가 되고, 프로젝트 목록에 Spring Elements 항목이 추가됩니다.



SpringLove/WebContent/WEB-INF/web.xml 파일을 더블클릭합니다.




그리고 우측 [Source] 탭을 클릭하여 아래와 같은 부분을 수정해야 합니다.

- <web-app> 태그의 id 속성값을 현재의 프로젝트 이름(SpringLove)으로 변경
- <welcome-file> 항목 중 index.jsp만 남기고 나머진 모두 삭제


아래는 모두 수정된 web.xml 코드 내용입니다.



이제 실제 브라우저에서 접근하기 위해 index.jsp 파일을 새로 작성하겠습니다. WebContent 항목(여기가 실제 웹사이트 루트가 됨)을 선택하고 마우스 우측 버튼을 눌러 [New]-[JSP File] 메뉴를 실행합니다.




파일 이름을 index.jsp로 입력하고 [Next >] 버튼을 누릅니다.




테스트를 위한 것이므로 기본 설정 그대로 유지하고 [Finish] 버튼을 누릅니다.



<body> 태그 사이에 아래의 내용을 입력합니다. 자신이 원하는 내용을 입력하시면 됩니다.



이제 SpringLove 웹 APP를 WAR 파일로 만든 후, 실제 톰캣 위치에 Deploy를 해야 합니다. SpringLove 프로젝트 항목을 선택하고 마우스 우측 버튼을 눌러 [Export]-[WAR file] 메뉴를 실행합니다.



WAR 파일이 저장될 위치를 지정하기 위해 [Browse...] 버튼을 누릅니다. 기존에 이미 동일한 WAR가 존재할 경우는 무조건 덮어써야 하므로 아래의 Overwrite existing file 항목도 체크 합니다.



톰캣이 설치된 폴더 아래의 webapps 폴더를 선택하고 이름을 SpringLove.war로 입력하고 [Save] 버튼을 눌러 저장합니다. 그리고 최종적으로 [Finish] 버튼을 누릅니다.




그리고 잠시 수 초 기다리면 아래와 같이 실시간으로 SpringLove라는 폴더가 생기고 웹 APP가 추가된 것을 볼 수 있습니다.



실제 브라우저를 이용하여 localhost/SpringLove 주소를 입력하면 아래와 같이 내용이 정상적으로 나옵니다.




여기까지가 스프링 프레임워크를 이클립스에서 사용하기 위한 환경 만들기였습니다. 지금까지 한 작업은 이클립스 통합환경(IDE)에서 스프링 프레임워크라는 외부 라이브러리를 보다 더 손쉽게 적용시키기 위한 환경을 플러그인이라는 형태를 이용하여 만드는 거였습니다. 즉 이클립스와 스프링 프레임워크 실체와의 중간 연결작업을 한 것이지요. 아직 스프링 프레임워크 본체를 설치한 것은 아닙니다.

이제 가장 중요한 작업이 남았습니다. 바로 자신의 웹 APP에서 스프링 프레임워크의 기능을 쓰기 위해 스프링 프레임워크의 실제 JAR 파일을 자신의 웹 APP의 라이브러리 폴더로 가져오는 작업입니다.


먼저 스프링 공식 사이트에서 스프링 프레임워크 페이지로 이동한 후, 다운로드를 합니다. 스프링 프레임워크 페이지의 우측 부분에 아래의 다운로드 경로가 있습니다.



Download 링크를 클릭하면, 실제 다운로드를 할 수 있는 페이지로 이동하는데 사용자의 간단한 정보를 입력받는 폼이 나타납니다. 물론 필수로 입력해야 하는 것은 아니므로, 맨 아래의 작은 글씨로 된 download page 링크를 누르세요. (절대 낚이면 안됩니다. 농담이구요, 스프링 커뮤니티의 최신 개발소식 등을 이메일로 받고 싶으신 분은 폼을 작성하셔도 됩니다.)



아래와 같이 두 가지의 링크가 있는데, 관련문서와 소스코드가 포함된 압축파일 링크를 클릭하여 임의의 위치에 다운로드 합니다.



spring-framework-3.1.0.RC2-with-docs.zip 파일을 다운로드 하였습니다. 이제 압축을 풀어줍니다. 파일의 개수가 상당히 많기 때문에 약간의 시간이 소요될 수 있습니다. 역시나 폴더 유지형 압축파일이므로 현재 위치를 대상으로 '여기에 압축풀기'를 하시면 됩니다.



압축 해제를 완료하면 아래와 같은 폴더가 생성됩니다. 무려 1,612개의 폴더와 10,110개의 파일이 풀린 것을 확인할 수 있습니다. 개수가 엄청나게 많습니다. 왜냐 하면 문서와 소스코드가 포함된 압축파일이기 때문이죠. ㅋㅋ



눈여겨 봐야 할 부분은 하위 dist 라는 폴더에 있는 JAR 파일들입니다. 실제 이 파일들이 스프링 프레임워크를 이루고 있는 주인공들입니다. 나머지 폴더와 파일은 중요하지 않습니다.



이클립스의 프로젝트 탐색기에서 SpringLove/WebContent/WEB-INF/lib를 선택하고 마우스 우측 버튼을 눌러 [Import...] 메뉴를 실행합니다.



[General]-[File System]을 선택하고 [Next >] 버튼을 누릅니다.



우측의 [Browse...] 버튼을 누릅니다.



좀 전에 압축을 풀었던 경로의 dist 폴더를 선택하고 [OK] 버튼을 누릅니다.



좌측의 dist 폴더를 체크 해주면 우측의 하위 파일들이 모두 선택됩니다. 체크 하고 [Finish] 버튼을 누릅니다.



그러면 WEB-INF/lib 위치에 스프링 프레임워크 라이브러리 파일들이 모두 들어오게 됩니다. 즉, 복사가 된 것입니다. 사실 위의 Import 기능을 이용하지 않고, 직접 탐색기 등에서 범위로 선택하여 Ctrl + C 키를 눌러 복사한 후, 이클립스의 WEB-INF/lib를 선택하고 Ctrl + V 키를 눌러 붙이기를 해도 됩니다. (ㅎ.ㅎ


잠깐!
스프링 프레임워크를 정상적으로 사용하려면 추가적으로 복사해야 하는 종속 라이브러리가 있습니다. 바로 JSTL과 Commons Logging 라이브러리 입니다. 이 2개 라이브러리를 복사하지 않으면 서블릿을 찾지 못하는 오류가 발생합니다. 본 포스트에 파일로 첨부하였습니다.


2개의 압축파일을 임의의 위치에 다운로드 하고, '여기에 압축풀기'를 하면 다음과 같은 폴더와 파일이 풀립니다.

jstl-1.2\jstl-1.2.jar
commons-logging-1.1.1\commons-logging-1.1.1.jar

위 2개의 파일을 웹 APP에 추가해야 합니다. 이번에는 Import 기능을 이용하지 않고 파일을 복사하기/붙이기 기능을 이용하여 추가하여 보도록 하겠습니다. 위의 파일들을 각각 탐색기에서 Ctrl + C 키를 눌러 복사한 다음 SpringLove/WebContent/WEB-INF/lib를 선택하고 Ctrl + V 키를 눌러 붙이기를 합니다. 그러면 다음과 같이 2개의 JAR 파일이 추가됩니다.


스프링 프레임워크 2.5.x 버전까지는 Dependency라고 해서 종속적인(의존적인) 라이브러리가 같이 포함되어 있었는데, 현재 버전은 Dependency 라이브러리가 포함되어 있지 않습니다. 그래서 별도로 위 2개의 라이브러리를 수동으로 추가해주어야 합니다.


이제 마지막으로 할 일이 남았습니다. 스프링 프레임워크 실체를 가져왔으니 이것을 간단하게 사용 해보는 것입니다. 스프링 프레임워크를 이용한 일종의 컨트롤 역할을 수행하는 클래스(Spring Controller Class)를 만드는 것입니다. 커다란 구조는 컨트롤러 빈 하나, 그리고 이것을 이용하는 JSP 하나로 이루어 집니다.


자바를 오래 하셨던 분들은 아시겠지만, 자바 라이브러리의 기본 단위는 패키지입니다. 따라서 여기서도 패키지를 먼저 만들어 보겠습니다. com.arumizz.controller 라는 이름의 패키지를 추가합니다. SpringLove/Java Resources/src를 선택하고 마우스 우측 버튼을 눌러 [New]-[Package] 메뉴를 실행합니다.



이름 항목(Name:)에 패키지 이름을 입력하고 [Finish] 버튼을 누릅니다.

- Name: com.arumizz.controller


그러면 아래와 같이 com.arumizz.controller 빈 패키지가 생성된 것을 볼 수 있습니다.



이제 이 패키지 안에 컨트롤러 역할을 수행하는 클래스를 추가합니다. com.arumizz.controller 패키지를 선택하고 마우스 우측 버튼을 눌러 [New]-[Class] 메뉴를 실행합니다.



클래스 이름은 SpringLoveController로 입력하고 [Finish] 버튼을 누릅니다.



아래와 같이 SpringLoveController.java 파일이 추가됩니다.



소스코드를 편집합니다. 우선 스프링 프레임워크의 객체들을 사용하기 위해 import 항목을 추가합니다.


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;


그리고 클래스 골격 및 내부 루틴을 다음과 같이 작성합니다.


@Controller public class SpringLoveController {

    @RequestMapping("/spring")

    public ModelAndView springLove() {

        String sMessage = "I Love Spring Framework!";
        return new ModelAndView("spring""message", sMessage);

    }
}

@Controller 표기
클래스 선언 앞의 @Controller 표기는 스프링 프레임워크에게 이 클래스가 Controller 형태의 빈(Bean)임을 알리는 역할을 수행합니다.

@RequestMapping 표기
@RequestMapping("/spring") 부분은 말 그대로 브라우저에 입력하는 URL 부분에서 "/spring"으로 시작하는 모든 요청에 대해 이 클래스가 처리할 것이라는 것을 뜻합니다.

springLove() 메서드
이 메서드는 ModelAndView 객체를 반환하는데, ModelAndView 객체는 "spring"이라는 이름을 가진 뷰(View)를 찾도록 해주고, 데이터 모델들은 다시 브라우저로 전달되어 JSP에서도 데이터에 접근할 수 있도록 해줍니다.


이제 컨트롤러 빈이 만들어졌으므로 JSP 페이지를 만들겠습니다. 참고로 스프링 프레임워크를 이용한 JSP 파일은 외부로부터 접근을 할 수 없는 위치에 존재해야 합니다. 보통 자주 사용하는 방법으로 WEB-INF 폴더 아래에 둡니다. 프로젝트 탐색기에서 SpringLove/WebContent/WEB-INF를 선택하고 마우스 우측 버튼을 눌러 [New]-[Folder] 메뉴를 실행합니다.



폴더 이름(Folder name:) 항목에 jsp라고 입력하고 [Finish] 버튼을 누릅니다.



그리고 새로 생성된 jsp 폴더를 선택하고 마우스 우측 버튼을 눌러 [New]-[JSP File] 메뉴를 실행합니다.



파일 이름(File name:) 항목에 spring.jsp로 입력하고 [Finish] 버튼을 누릅니다.



그리고 추가된 spring.jsp 소스코드에 다음과 같이 ${message} 라는 내용을 추가합니다.



본 포스트에서 처음으로 만든 index.jsp 소스코드에 다음과 같은 내용을 추가합니다.


<p>
<a href="spring.nhn">컨트롤러 테스트 하기</a>
</p>

뭔가 좀 이상하지요? 만든 JSP 파일은 spring.jsp인데 왜 index.jsp에서는 spring.nhn이라고 지정할까요? 이제 이것을 가능하도록 하기 위한 매핑 설정을 할 것입니다. (확장자를 nhn으로 한 것은 네이버를 흉내낸 것입니다. ^^;)


SpringLove/WebContent/WEB-INF/web.xml 코드에 다음과 같이 내용을 추가합니다.


<servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>
    org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>*.nhn</url-pattern>
</servlet-mapping>

web.xml에 설정된 내용을 보면 *.nhn의 패턴을 가지는 모든 요청에 대해 DispatcherServlet으로 매핑됩니다. 여기서 눈여겨 보아야 할 부분은, web.xml 파일에서 서블릿의 이름을 뜻하는 <servlet-name> 태그인데, 만일 <servlet-name>arumizz</servlet-name> 이렇게 지정했다고 한다면, 웹서버 시작시 DispatcherServlet이 초기 구동되면서 웹 APP 하위에 있는 WEB-INF 폴더에서 arumizz-servlet.xml라는 이름의 파일을 찾게 됩니다. 여기서는 서블릿 이름이 spring이므로 spring-servlet.xml 파일을 찾게 됩니다. 따라서 별도로 스프링 프레임워크가 필요로 하는 서블릿 설정 파일인 spring-servlet.xml 파일을 추가하고 내용을 작성해야 합니다.


SpringLove/WebContent/WEB-INF를 선택하고 [New]-[Other...] 메뉴를 실행합니다.



XML > XML File 항목을 선택하고 [Next >] 버튼을 누릅니다.



파일 이름(File name:) 항목에 spring-servlet.xml을 입력하고 [Finish] 버튼을 누릅니다.



spring-servlet.xml 코드에 다음과 같은 내용을 추가합니다.


<?xml version="1.0" encoding="UTF-8"?>
  xsi:schemaLocation="http://www.springframework.org/schema/beans   
  
  <context:component-scan base-package="com.arumizz.controller" />  

  <bean id="viewResolver"  
    class="org.springframework.web.servlet.view.UrlBasedViewResolver">  
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />  
    <property name="prefix" value="/WEB-INF/jsp/" />  
    <property name="suffix" value=".jsp" />  
  </bean>  

</beans>  

<context:component-scan> 태그는 com.arumizz.controller 패키지 및 모든 하위 패키지에 있는 모듈들을 스프링 프레임워크가 구동될 때 같이 로드하라는 의미입니다. 당연히 새로 작성한 SpringLoveController 클래스도 로드될 것입니다.

viewResolver라는 이름의 <bean> 태그는 다음의 역할을 수행합니다. SpringLoveController 클래서에서 사용한 ModelAndView 객체의 첫 번째 파라미터로 spring 키워드가 지정되었기 때문에, <bean> 하위 <property> 태그 설정에 의해 아래와 같이 물리적 URL이 조립됩니다.

- 접두사(prefix) : /WEB-INF/jsp/
- ModelAndView 파라미터 : spring
- 접미사(suffix) : .jsp

조립결과 : <웹 APP 루트>/WEB-INF/jsp/spring.jsp


이제 작성한 웹 APP를 Deploy를 한 후, 브라우저에 다음과 같이 입력해봅니다.


--------------------------------------------
출처 - http://arumizz.blog.me/70126691795

블로그 보관함