[Spring] 스프링 프레임워크 설치와 모듈 구성

Spring/Spring Programming 2012. 12. 10. 22:49

■ 스프링 프레임워크 설치와 모듈 구성


01. 폴더 구성

spring-framework-3.0.1RELEASE-A-with-docs.zip의 압축을 풀면 다음과 같은 폴더가 생성된다.

 ① dist - 스프링 프레임워크의 각 모듈별 jar 파일을 포함하고 있다.

 ② docs - API 문서 및 레퍼런스 문서

 ③ projects - 각 모듈별 소스 코드 및 빌드 관련 파일을 포함하고 있다.

 ④ src - 각 모듈별 소스 jar 파일을 포함하고 있다.


02. 모듈 구성

 ① 스프링의 주요 모듈 목록

모 듈 명

설                                            명

 core

 -. DI 기능을 비록한 프레임워크의 기반을 제공한다.

 beans

 -. BeanFactory 인터페이스를 통해 구현된다.

 expression

 -. 객체에 접근하고 객체를 조작하기 위한 표현 언어를 제공한다.
 -. JSP 2.1 규약에 명시된 통합 EL을 확장하였다.

 context

 -. spring-core와 spring-beans 모듈을 확장해서 국제화, 이벤트 처리, 리소스 로딩, 서블릿 컨테이너를 위한 컨텍스트 생성 등의

    기능을 추가로 제공한다.

 -. ApplicationContext 인터페이스를 통해 구현된다.

 context.support

 -. Ehcache, 메일, 스케줄링, UI의 Velocity 지원 기능을 제공한다.

 aop

 -. AOP Alliance에 호환되는 AOP 구현을 제공한다.

 aspects

 -. AspectJ와의 통합을 제공한다.

 web

 -. 파일 업로드, Locale 처리 등 웹을 위한 통합 기능을 제공한다.

 -. 원격 지원 기능 중 웹 관련 기능을 제공한다.

 web.servlet

 -. 스프링 MVC를 제공한다.

 -. JSP, Velocity에 대한 뷰 연동을 지원한다.

 web.struts

 -. 스프링과 스트럿츠 연동 기능을 제공한다.

 web.portlet

 -. 포틀릿 환경에서 사용되는 MVC 구현을 제공한다.

 transacition

 -. AOP를 이용한 선언적 트랜잭션 관리 및 코드를 이요한 트랜잭션 관리 기능을 제공한다.

 jdbc

 -. JDBC 프로그래밍을 위한 추상 레이어를 제공한다.

 -. JDBC 템플릿을 제공함으로써 간결한 코드로 JDBC 프로그래밍을 할 수 있도록 돕는다.

 orm

 -. 하이버네이트, JPA, iBATIS, JDO 등 API를 위한 통합 레이어를 제공한다.

 -. 스프링이 제공하는 트랜잭션 관리와의 연동을 지원한다.

 oxm

 -. 객체와 XML 사이의 매핑을 처리하기 위한 추상 레이어를 제공한다.

 -. JAXB, Castor, XMLBeans, JiBX, XStream과의 연동을 지원한다.

 jms -. JMS의 메시지를 생성하고 수신하는 기능을 제공한다.

 test

 -. JUnit이나 TestNG를 이용한 스프링 컴포넌트의 테스트를 지원한다.

 instrument

 -. Instrumentation 지원 클래스를 제공한다.

 instrument.tomcat

 -. 톰캣 서버를 위한 Instrumentation 지원 클래스를 제공한다.

 asm

 -. ASM 라이브러리를 재패키징 한 모듈


 ② 스프링 모듈간의 의존 관계


점선 화살표는 화살표 방향으로 모듈 간의 관계가 의존관계가 있다는 것을 보여주고 있다.

    예를 들어, orm 모듈은 jdbc모듈에 의존하고, core 모듈은 asm 모듈에 의존한다는 것을 의미한다.



03. 외부 의존 모듈

 -. 스프링의 각 모듈은 다양한 외부 라이브러리를 사용하고 있다.

 -. 스프링은 Commons Logging이나 SLF4J API를 이용해서 로그를 기록한다.

 -. 하이버네이트, JPA, iBATIS등 DB연동 지원 기능은 다양한 외부 라이브러리를 사용하고 있다.

 -. 스프링을 사용하는 데 필요한 모든 외부 모듈을 다운로드 받으려면 다양한 사이트를 방문해서 일일이 다운로드 받아야 한다.


 스프링은 이런 불편함을 해소하기 위해 스프링 프렘임워크를 사용하는 데 필요한 모든 외부 의존 모듈을 spring-framework-3.0.1.RELEASE-dependencies.zip 파일로 제공하고 있다. 이 파일의 압축을 풀면 javax.servlet 폴더, org.apache.commons폴더 등이 존재하고 있으며, 각 하위 폴더에는 com.springsource.orgapache.commons.httpclient/3.1.0 폴더와 같이 의존 라이브러리의 이름 및 버전에 따른 디렉터리가 존재하며, 해당 디렉터리에는 com.springsource.org.apache.commons.httpclient-3.1.0.jar와 같은 실제 의존하는 jar 파일이 위치한다. 각 jar 파일의 형식은 com.springsource.모듈명-버전.jar이다. 예를 들어, 하이버네이트 3.3.1.GA 버전의 경우 org.hibernate/com.springsource.org.hibernate/3.3.1.GA 폴더에 com.springsource.org.hibernate-3.3.1.GA.jar 파일 이름으로 포함되어 있다.


  스프링 프레임워크를 사용하기 위해서 모든 외부 모듈이 필요한 것은 아니다. 예를 들어, 스프링 프레임워크의 컨테이너 기능만 사용할 경우

 asm, core, beans 모듈과 commons-logging-1.1.1 모듈의 4개의 jar 파일만 필요하다.



04. Maven에서 스프링 모듈 의존 설정


 프로젝트 빌드 / 관리를 위해 Maven 프레임워크가 널리 사용되고 있는데, Maven의 pom.xml 파일에 스프링 3 버전에 대한 의존을 추가하려면 groupId로 org.springframework를 사용하고, artifactid로 spring-* 형식을 사용하면 된다.

<dependenies>

      <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-aop</artifactId>

            <version>3.0.1.RELEASE</version>

      </dependency>

      ...

</dependencies>

 -. artifactId의 명명규칙은 스프링 프레임워크 배포판에 포함된 jar 파일의 이름과 차이가 있다.

 -. 배포판의 모듈명에 점( . )이 포함되어 있는 경우, Maven의 artifactId는 점 대신에 '-'를 사용한다.

 -. 예를 들어, web.servlet 모듈의 경우 배포판에 포함된 jar 파일의 이음른 org.springframework.web.servlet인데 반해

     Maven 의존에서 사용하는 artifactId는 spring-webmvc 이다.

 -. 아래 코드는 web.servlet 모듈에 의존하는 Maven  파일의 작성 예를 보여주고 있다.

<dependencies>
      ...
      <dependency>
            <groupId>org.springframework</groupId>

            <artifactId>spring-web</artifactId>

            <version>3.0.1RELEASE</version>

      </dependency>

      <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-webmvc</artifactId>

            <version>3.0.1.RELEASE</version>

      </dependency>

      ...

</dependencies>



[Spring] 스프링 프레임 워크란?

Spring/Spring Programming 2012. 12. 10. 22:10

스프링 프레임 워크란?


 -. 스프링(Spring)은 간단히 말하면 엔터프라이즈 어플리케이션에서 필요로 하는 기능을 제공하는 프레임 워크이다.

 -. 스프링은 JEE(Java Enterprise Edition)가 제공하는 다수의 기능을 지원하기 때문에, JEE를 대체하는 프레임워크로 자리잡고 있다.

 -. 실제 스프링은 JEE가 제공하는 다양한 기능을 제공하는것 뿐만 아니라 DI(Dependency Injection)나 AOP(Aspect Oriented Programming)와 같은

    기능도 지원하고 있다.

 -. 스프링은 자체적으로 MVC 프레임워크를 제공하고 있다. 따라서, 스프링만 사용해도 MVC 기반의 웹 어플리케이션을 어렵지 않게 개발할 수 있다.

 -. 스트럿츠2, JSF아 같은 프레임워크와의 연동을 지원하고 있기 때문에 이들 프레임워크에서 스프링이 제공하는 다양한 기능을 사용할 수 있다.


① 스프링은 경량 컨테이너다. 스프링은 자바 객체를 담고 있는 컨테이너다. 스프링 컨테이너는 이들 자바 객체의 생성, 소멸과 같은 라이프 사이클을 관리하며,

   스프링 컨테이너로부터 필요한 객체를 가져와 사용할 수 있다.

② 스프링은 DI(Dependency Injection)를 지원한다. 스프링은 설정 파일이나 어노테이션을 통해서 객체 간의 의존 관계를 설정할 수 있도록 하고 있다.

   따라서, 객체는 의존하고 있는 객체를 직접 생성하거나 검색할 필요가 없다.

③ 스프링은 AOP(Aspect Oriented Programming)를 지원한다. 스프링 자체적으로 AOP를 지원하고 있기 때문에 트랜재견이나 로깅, 보안과 같이 모듈에서 공통으로

   필요로 하지만 실제 모듈의 핵심은 아닌 기능들을 분리해서 각 모율에 적용할 수 있다.

④ 스프링은 POJO(Plain Old Java)를 지원한다. 스프링 컨테이너에 저장되는 자바 객체는 특정한 인터페이스를 구현하거나 클래스를 상속받지 않아도 된다.

   따라서, 기존에 작성한 코드를 수정할 필요 없이 스프링에서 사용할 수 있다.

⑤ 스프링은 트랜잭션 처리를 위한 일관된 바업을 제공한다. JDBC를 사용하든, JTA를 사용하든, 또는 컨테이너가 제공하는 트랜잭션을 사용하든, 설정 파일을 통해

   트랜잭션 관련 정보를 입력하기 때문에, 트랜잭션 구현에 상관없이 동일한 코드를 여러 환경에서 사용할 수 있다.

⑥ 스프링은 영속성과 관련된 다양한 API를 지원한다. 스프링은 JDBC를 비롯하여 iBATIS, 하이버네이트, JPA등 데이터베이스 처리를 위해 널리 사용되는

   라이브러리와의 연동을 지원하고 있다.

⑦ 스프링은 다양한 API에 대한 연동을 지원한다. 스프링은 JMS, 메일, 스케줄링 등 엔터프라이즈 어플리케이션을 개발하는데 필요한 다양한 API를 설정 파일과

   어노테이션을 통해서 손쉽게 사용할 수 있도록 지원하고 있다.