1.2.3 사용 시나리오 spring reference


2.3 Usage scenarios

앞에서 설명한 빌딩블락은 리소스가 제한된 장비에서 돌아가는 임베디드 응용 프로그램부터 스프링의 트랜젝션 관리 기능과 웹 프레임워크 통합을 사용하는 완전한 엔터프라이즈 응용 프로그램에 이르기까지 다양한 시나리오에서 스프링을 논리적인 선택으로 만듭니다.  

스프링의 선언적 트랜젝션 관리 기능은 EJB 컨테이너로 관리하는 트랜젝션들을 사용하는 것 처럼 웹 어플리케이션을 완전히 트랜젝션적으로 만듭니다. 
모든 당신의 커스텀 비지니스 로직은 간단한 POJO로 구현되고 스프링 IOC 컨테이너에 관리된다.  추가 서비스에는 배리데이션 규칙을 실행할 위치를 선택 할 수 있는 웹계층과 독립적인 유효성 검사 및 이메일 전송 지원이 포함됩니다. 스프링 ORM 지원은 JPA, 하이버네이트, JDO들과의 통합되었다. 
즉, 하이버 네이트를 사용할 때 당신은 존재하는 매핑 파일과 표준 하이퍼베이트 session factory 설정을 지속할 수 있다. 
폼 컨트롤러는 웹 모델과 도메인 모델을 완벽하게 통합하여 HTTP 매개변수를 도메인 모델의 값으로 변환하는 ActionForms 또는 기타 클래스의 필요성을 제거합니다.
때때로 당신이 완전히 다른 프레임워크로 바꾸는 것이 어려울 수 있다.  스프링 프레임워크는 당신이 스프링 안에서 사용하는것을 모든 일을 하도록 강제하지 않는다. 스프링은 all or nothing 솔루션이 아니다.  
Struts, Tapestry, JSP등 다른 UI프레임워크로 만들어진 front-end가 스프링 트랜젝션 기능이 사용하는 스프링 기반의 미들티어에 통합될 수 있다. 
어플리케이션 컨텍스트를 사용하여 비즈니스 로직을 연결하고, 웹 어플리케이션 컨텍스트를 사용하여 당신의 웹 레이어에 통합 하기만 하면 됩니다. 

웹 서비스를 통하여 존재하는 코드에 접근해야 할 때, 스프링 Hessian-, Burlap-, Rmi-, JaxRpcProxyFactory클래스를 이용할 수 있습니다. 
존재하는 어플리케이션에 원격으로 접근하는 것은 어렵지 않습니다.

스프링 프레임워크는 access와 EnterPrise JavaBean, 존재하는 POJO의 재사용을 허용, 선언적 보안이 필요한 확장성 있고 안전한 웹 어플리케이션을 사용하는 무상태 세션 빈을 감싸기 위해 접근과 추상화 계층을 제공한다.

2.3.1 Dependency Management and Naming Conventions

의존성 관리와 의존성 주입은 다르다. (의존성 주임과 같은 이런 좋은 스프링의 기능들을 사용하기 위해 모든 라이브러리가 필요하고, 런터임시에 혹은 가능하다면 컴파일 시에 클래스 경로에 올로와 있어야 한다. 이런 의존성들은 주입되는 가상 컴포넌트가 아닌 파일시스템상의 물리적 자원이다. 
이런 의존성 관리 프로세스는 그런 자원들의 배치, 저장, 그리고 클래스 경로에 추가하는 과정들을 포함한다.  의존성들은 직접적이 될수도 간접적이 될수도 있다. (직접적 : 런터임에 의존, 간접적 :  commons-pool 기반의 common-cbcp에 의존).  간접적 의존성은 transitive로 알려져있다 그리고 이런 의존성들은 구별하고 관리하는게 힘들다. 

스프링을 쓸 계획이라면, 필요한 스플이의 일부를 포함하는 jar라이브러리의 복사본이 필요하다. 스프링은 의존성이 최대한 분리되도록 모듈이 패키징 되어 있어 이 작업을 쉽게 할 수 있다. 그래서 예를들어 스프링 웹 어플리케이션을 작성할 것이 아니라면 스프링 웹 모듈은 필요가 없다.
이 가이드의 스프링 라이브러리 모듈을 참조하기 위해 spring-*, spring-*.jar와 같은 ?짧은 작명 컨벤션을 사용한다.  (* 이 spring-core나 spring-webmvc같은 해당 모듈의 짧은 이름이 들어간다)

보통 결과물은 아래의 위치에 배포한다.

  - 메이븐 센트럴(Maven Central). 메이븐 센트럴은 메이븐의 기본 저장소이므로 사용하기 위해서 특별한 설정을 할 필요는 없다. 스프링이 의존하는 공통 라이브러리 중 다수는 메이슨 센트럴에서 이용할 수 있고 스프링 커뮤니티의 많은 부분은 의존성 관리에 메이븐을 사용하므로 편리하다. 메이븐 센트럴의 jar 파일명은 spring-*-<version>.jar의 형식을 따르고 메이븐 groupId는 org.springframework이다.
  - 특별히 스프링을 위해 호스팅된 공용 메이븐 저장소. 최종 GA릴리즈 외에도 이 저장소는 개발 스냅샷 및 마일스톤을 제공한다. jar파일 이름들은 메이븐 센트럴과 동일하다, 그래서 메이븐 센트럴에 배포된 스프링의 다른 라이브러리와 함께 스프링 개발 버전을 사용할 때 용이한 곳이다.
이 저장소는 또한 쉡게 다운로드 할 수 있또록 함게 번들로 묶인 모든 모든 스프링의 jar를 포함하는 번들을 포함합니다. 

그래서 어떻게 의존성을 관리할 것인지를 먼저 결정해야 한다. 대부분은 메이븐이나 아이비같은 자동화된 시스템을 사용한다. 하지만 수동으로 모든 jar를 다운받아서 관리할 수도 있다.

아래 리스트는 sprint artifacts이다. 각 모듈별설명을 더 자세히 보고싶은 2.2섹션을 보라. 

Spring Dependices and Depending on Spring 

스프링이 큰 범위의 엔터프라이즈 및 외부 도구에 대한 통합 및 지원을 제공하지만, 강제적 종속성을 의도적으로 최소한으로 유지합니다.
간단한 유즈케이스를 위한 스프링을 사용을 위해 많은 양의 jar라이브러리들을 다운받고 위치시킬 필요가 없습니다. (심지어 자동으로 되더라도요)
기본적인 의존성 주입을 위해 필요한 외부 dependency는 단 하나뿐이고 그것조차 로깅을 위한 것입니다. ( 아래에 더 자세한 로깅 옵션에 대한 설명이 있습니다.)

다음은 스프링에 의존하는 애플리케이션을 설정하는데 필요한 기본적인 과정을 설명할 차례이다. 먼저 메이븐으로 그리고 그래들로 마지막으로 아이비를 사용한다. 모든 경우에 명확한 것이 없다면, 의존성 관리 시스템의 문서를 참고하거나 예제코드를 보아라. 스프링은 빌드시에 의존성을 관리하기 위해서 그래들을 사용한다 그리고 우리 샘플들은 대부분 그래들이나 메이븐을 사용한다. 

Maven Dependency Management

만약 니가 의존성 관리를 위해 메이븐을 이용한다면 너는 로깅 dependency도 명시적으로 제공할 필요 없다.  예를들어 애플리케이션 컨택스트를 만들고 의존성 주입을 애플리케이션을 구성하는데 사용하고자 할 때 너의 메이븐 dependencise는 아래와 같을것이다. 


<dependencies>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-context</artifactId>        <version>4.3.10.RELEASE</version>        <scope>runtime</scope>    </dependency></dependencies>
기본 종속성 삽입 사용시 spring api에 대해 컴파일 할 필요가 없는 경우 범위를 런타입으로 선언 할 수 있다.

위의 예시는 Maven Central Repository에서 작동한다. 스프링 메이븐 저장소를 이용하기 위해 repository locaiton을 메이븐 설정에 지정해야 한다. 
<repositories>    <repository>        <id>io.spring.repo.maven.release</id>        <url>http://repo.spring.io/release/</url>        <snapshots><enabled>false</enabled></snapshots>    </repository></repositories>

For milestones:

<repositories>    <repository>        <id>io.spring.repo.maven.milestone</id>        <url>http://repo.spring.io/milestone/</url>        <snapshots><enabled>false</enabled></snapshots>    </repository></repositories>

And for snapshots:

<repositories>    <repository>        <id>io.spring.repo.maven.snapshot</id>        <url>http://repo.spring.io/snapshot/</url>        <snapshots><enabled>true</enabled></snapshots>    </repository></repositories>


Maven "Bills Of Materials" Dependency

메이븐 쓰다보면 spring jar 파일이 다른버전이 우연히 섞일 수 있다. 예를들어 외부 라이브러리를 쓸 때 아니면 다른 스프링 프로젝트가 이전 배포 버전에 대해 의존성을 가져올 수 있습니다. 만약 니가 적접적으로 의존성을 명시하는 것을 까먹었다면 모든 종류의 예상치 못한 문제가 발생할 수 있습니다. 

그런 문제를 해결하기 위해 메이븐은 Bills Of Materials(BOM) 의존성이란느 개념을 지원합니다.  spring framework-bom 를 dependencyManagement 섹션에 넣어서 스프링 의존성이 같은 버전임을 확신할 수 있게 됩니다. 

<dependencyManagement>    <dependencies>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-framework-bom</artifactId>            <version>4.3.10.RELEASE</version>            <type>pom</type>            <scope>import</scope>        </dependency>    </dependencies></dependencyManagement>

BOMs를 넣음으로써 생기는 이점은 더이상 버전이라는 속성이 필요가 없어집니다. 

<dependencies>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-context</artifactId>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-web</artifactId>    </dependency><dependencies>


Gradle Dependency Management


스프링 저장소를 그래들 시스템으로 이용하고자 한다면 적절한 URL을 repositories 구역에 넣어야 합니다. 

repositories {    mavenCentral()    // and optionally...    maven { url "http://repo.spring.io/release" }}

repositories의 url을 /release, /milestone or /snapshot 등 적절하게 바꿀 수 있습니다. 

저장소가 한번 정해지면 그래들의 방식으로 의존성을 선언 할 수 있습니다. 

dependencies {    compile("org.springframework:spring-context:4.3.10.RELEASE")    testCompile("org.springframework:spring-test:4.3.10.RELEASE")}






덧글

댓글 입력 영역