레퍼런스 Spring프레임워크 소개문서 (3)

황제낙엽 2007.03.22 07:01 조회 수 : 35 추천:87

sitelink1  
sitelink2  
sitelink3  
extra_vars6  
출처따위 없슴

테스팅

당신들이 대개 추측하는 것처럼 나 그리고 다른 Spring개발자들은 포괄적인 단위 테스팅의 중요성을 믿는다. 우리는 프레임워크가 철저히 단위 테스트를 하고 프레임워크 디자인의 가장 중요한 목표는 애플리케이션을 단위 테스트를 위해 프레임워크를 쉽게 빌드하는 것이 필수라고 믿는다.

Spring스스로는 훌륭한 단위 테스팅을 가진다. 우리는 이 프로젝트에서 첫번째 개발 테스트의 잇점을 발견했다. 예를 들면 이것은 내부적으로 분산된 팀의 대단히 큰 효과처럼 작동하고 사용자는 CVS스냅샷이 안정되고 사용하기 안전한것을 언급한다.

우리는 Spring에 빌드된 애플리케이션이 다음과 같은 이유로 테스트 하기 매우 쉽다고 믿는다.

  • IoC가 단위테스팅을 돕는다.
  • 애플리케이션들은 테스트가 전형적으로 힘든 JNDI와 같은 J2EE서비스를 직접적으로 사용하기 위한 연관된 코드를 포함하지 않는다.
  • Spring bean factory또는 컨텍스트는 컨테이너 밖에서 셋팅될수 있다.

컨테이너 밖에서 Spring bean factory을 셋팅하는 능력은 개발 프로세스를 위해 흥미로운 옵션을 제공한다. Spring을 사용하는 다양한 웹 애플리케이션 프로젝트는 작업이 비지니스 인터페이스와 웹 컨테이너밖에서 그들의 구현을 통합 테스팅을 정의함으로써 시작된다. 단지 비지니스 성능이 사실상 완벽해진 후에 웹 인터페이스를 제공하기 위해 추가된 가벼운(thin)레이어이다.

Spring 1.1.1이후 Spring은 배치된 환경밖에서 통합테스팅의 형식을 위해 강력하고 유일한 지원을 제공하고 있다. 이것은 배치된 환경에 대해서 단위테스팅이나 테스팅을 위해 대리인같은 영향을 끼지지 않는다. 어쨌든 이것은 명백하게 품질을 향상시킬수 있다. org.springframework.test패키지는 Spring컨테이너를 사용해서 통합테스팅을 위한 가치있는 수퍼클래스를 제공한다. 하지만 애플리케이션버서나 다른 배치환경에 의존하지는 않는다. 그러한 테스트는 특별한 배치작업없이 IDE없이 JUnit만으로도 실행할수 있따. 그들은 단위테스트보다 실행하는것이 좀더 늦다. 하지만 Cactus테스트나 애플리케이션서버에 배치를 의존하는 원격테스트보다는 훨씬 빠르다. 전형적으로 이것은 내장 데이터베이스가 아닌 데이터베이스에 배치하는 수백개의 테스트를 수행하는것이 가능하다. 하지만 제품은 수초내 제품내에서 사용된다. 그러한 테스트는 당신의 Spring컨텍스트의 정확한 묶음과 JDBC나 ORM툴을 사용한 데이터접근을 빨리 확인할수 있다. 당신은 당신의 DAO구현 클래스를 테스트할수 있다.

org.springframework.test패키지내 가능한 기능은 다음을 포함한다.

  • DI를 통한 JUnit테스트 케이스를 활성화하는 능력. 이것은 테스트할때 Spring XML설정을 재사용하는것을 가능하게 만든다. 그리고 테스트를 위한 사용자 정의 셋업 코드를 위한 필요성을 제거한다.
  • 테스트 케이스 사이 컨테이너 설정을 캐시하기 위한 능력. JDBC connection pools 또는 Hibernate SessionFactories와 같은 늦게 초기화(slow-to-initialize)하는 자원이 있는 곳에 성능을 크게 증가시킨다.
  • 각각의 테스트 메소드에서 트랜잭션을 생성하고 디폴트로 테스트의 결말에 롤백을 수행하기 위한 기반구조. 이것은 다른 테스트의 환경에 대한 영향을 끼치는것없이 어떠한 데이터접근을 수행하기 위한 테스트를 위해 이것을 가능하게 만든다. 이 기능을 사용한 복잡한 프로젝트내 나의 경험으로 롤백 기반의 접근법같은 생산성과 속도의 획득은 매우 명백하다.

누가 Spring을 사용하는가?

Spring을 사용한 많은 제품의 애플리케이션이 있다. 사용자는 주요한 세계적인 투자은행, 잘 알려진 닷컴, 다양한 컨설턴트, 교육기관, 정부조직, 방어기구, 다양한 항공사 등을 포함한다.

많은 사용자는 Spring의 모든 부분을 사용하지만 몇몇 사용자는 격리수준내에서 컴포넌트들을 사용한다. 예를 들면 많은 수의 사용자는 우리의 JDBC나 다른 데이터접근 기능을 사용하여 시작한다.

로드맵

2003년 10월에 이 글의 첫번째 버전이 나간후 Spring은 2004년 3월 1.0, 2004년 9월, 2005년 5월 1.2버전으로 진행되어 왔다. 우리는 "빠른 릴리즈, 자주 릴리즈"라는 기본적인 철학을 가지고 있다. 그래서 유지관리를 위한 버전과 하위 향상을 위한 버전은 전형적으로 4-6주 사이에 계속적으로 릴리즈된다.

이 시간 이후로 향상되는 사항은 다음을 포함한다.

  • RMI와 다양한 웹 서비스 프로토콜을 포함한 다중 프로토콜을 지원하는 원격 프레임워크의 소개
  • 정적이거나 인스턴스 factory메소드를 위한 호출로 부터 얻어지는 관리 객체를 위한 능력과 같은 메소드 삽입과 다른 IoC컨테이너 향상을 위한 지원
  • TopLink와 Hibernate 3.x를 포함한 좀더 많은 데이터접근 기술과의 통합
  • Java 5.0 annotations(1.2)에 의해 설정되는 선언적인 트랜잭션 관리를 위한 지원. 트랜잭션적인 메소드를 확인하기 위한 XML메타데이터를 위한 필요성을 제거한다.
  • Spring 관리객체(1.2)의 JMX관리를 위한 지원
  • Jasper 리포트, Quartz 스케줄러 그리고 AspectJ와의 통합
  • 웹 레이어 기술의 JSF와의 통합

우리는 빠른 기술혁신과 향상을 지속할것이다. 다음의 큰 릴리즈는 1.3(2005년 3분기쯤에 기대하고 있다.)이 될것이다. 계획된 향상사항은 다음을 포함한다.

  • XML설정상의 향상(1.3에서 계획중). 하나의 XML문서로 한개 이상의 객체를 정의함으로써 기본적인 Spring설정 형식을 확장하는 사용자정의 XML태그를 허락한다. 이것은 전형적인 설정을 명백하게 단순화하고 설정에러를 줄일뿐 아니라 Spring에 기초를 둔 다른 제품의 개발을 위해 이상적인 것이 될것이다.
  • Spring핵심에 Spring Web Flow 통합(1.3에서 계획중)
  • 수행중인 애플리케이션의 동적인 재설정을 위한 지원
  • Groovy, Jython또는 다른 Java플랫폼에서 구동되는 스크립트 언어에서 애플리케이션 객체를 묶기 위한 지원. 그러한 객체는 Spring IoC컨테이너의 완전한 서비스로부터 이득이 될것이고 스크립트가 변경되었을때 IoC컨테이너에 의해 그들에게 참조를 주는 데 영향이 없이 동적으로 재로딩될것이다.

민첩한 프로젝트처럼 Spring은 사용자 요구사항에 의해 조정된다. 그래서 우리는 아무도 사용하지 않는 기능에 대해서는 개발을 하지 않는다. 그리고 우리는 사용자 커뮤니티에서 주의깊게 듣고 있다.

Spring Modules는 Interface21의 Rob Harrop에 의해 진행되는 관련 프로젝트이다. 이것은 Spring핵심으로 완전하지 않은 영역으로 Spring플랫폼의 범위를 확장하는것이다. 이 프로젝트는 아직 계획중인 상태이다. 그래서 이 기능의 몇몇은 Spring핵심에 통합될것이다. Spring Modules는 Lucene검색엔진과 OSWorkflow워크플러우엔진등과의 통합같은 영역을 포함한다.

흥미있게도 이 문서의 첫번째 버전이 Spring 1.0릴리즈의 6개월전에 배포가 됐음에도 불구하고 대부분의 코드와 설정이 현재의 1.2에서 거의 변화가 없이 작동을 하고 있다. 우리는 이러한 이전버전과의 호환성을 굉장히 자랑스럽게 여기고 있다. 이것은 침략적이지 않은 API를 제공하기 위한 DI와 AOP의 능력을 설명하고 치명적인 애플리케이션을 수행하기 위해 안정적인 프레임워크를 제공하기 위한 커뮤니티에 응답을 다양하게 표시하고 있다.

요약

Spring은 J2Ee에서 공통적으로 발생하는 많은 문제를 해결하는 강력한 프레임워크이다. 많은 Spring의 기능은 기존의 J2EE를 넘어서 자바환경의 넓은 범위에 사용가능하다.

Spring은 클래스보다 인터페이스에 프로그래밍하는 것과 같은 좋은 상황을 장려하고 비지니스 객체를 관리하는 일관적인 방법을 제공한다. Spring의 구조적인 기본은 자바빈즈 프라퍼티의 사용에 기초를 둔 Inversion of Control이다. 어쨌든 이것은 전체 그림의 일부이다. Spring은 모든 구조적인 티어들을 할당하는 포괄적인 솔루션내 기본적인 빌딩블럭처럼 IoC컨테이너를 사용하는 것중에 유일하다.

Spring은 생산성을 증가시키고 에러를 줄이는 간단하고 제품같은 JDBC프레임워크를 포함한 유일한 데이터접근 추상화를 제공한다. Spring의 데이터접근 구조는 Hibernate와 다른 O/R맵핑 솔루션과 통합한다.

Spring은 또한 JTA나 JDBC같은 트랜잭션 기술에 기초를 둔 일관적인 프로그래밍 모델을 가능하게 하는 유일한 트랜잭션 관리 추상화를 제공한다.

Spring은 선언적인 트랜잭션 관리와 POJO를 적용하기 위한 다른 기업용 서비스 또는 당신이 바란다면 당신 자신의 사용자 정의 aspect를 구현하는 능력을 제공하는 표준적인 자바로 쓰여진 AOP프레임워크를 제공한다. 이 프레임워크는 EJB의 복잡함을 줄이도록 많은 애플리케이션에 가능하도록 할수 있도록 충분히 강력하다.

Spring은 또한 전체의 IoC컨테이너로 통합될수 있는 강력하고 유연한 MVC웹 프레임워크를 제공한다.

좀더 많은 정보를 얻기 위해서는

Spring에 대해서 좀더 많은 정보를 얻기 위해서는 다음의 자원을 보라.

  • Interface21에서 제공하는 Spring핵심 훈련 과정 - http://www.springframework.com/training.
  • Expert One-on-One J2EE Design and Development (Rod Johnson, Wrox, 2002). Spring이 이 책이 발간된 이후 많은 것이 향상되었으나 Spring의 기본개념을 이해하는데는 여전히 훌륭하다.
  • J2EE without EJB (Rod Johnson with Juergen Hoeller, Wrox, 2004). Spring과 가벼운 컨테이너 구조를 위한 이론적 설명을 순차적으로 J2EE 디자인과 개발을 다루고
  • Spring참조문서. 프린트가능한 형태로 240페이지 넘는다. Spring은 당신의 애플리케이션을 위한 템플릿처럼 사용될수 있는 가장 좋은 상황을 설명한 다양한 샘플 애클리케이션을 포함하고 있다.
  • Pro Spring: 핵심 개발자인 Rob Harrop에 의해 심도있게 Spring을 다루었다. 역자가 Spring관련책 중에 가장 추천하는 책이다. Spring의 기본개념을 이해하거나 다양한 ORM과의 연동및 Spring MVC를 위한 책으로 최고라고 생각한다.
  • Spring: A Developer's Notebook : Bruce Tate 와 Justin Gehtland에 의해 Spring을 소개했다.
  • Spring Framework 홈페이지: http://www.springframework.org/. javadoc와 다양한 튜토리얼을 포함하고 있다.
  • 포럼과 소스포지의 다운로드.
  • Spring 개발자 메일링 리스트

우리는 Spring문서와 예제를 향상시키는데 최선을 다하고 있다. 우리는 포럼과 메일링리스트의 훌륭한 응답비율에 자부심을 가지고 있다. 우리는 우리의 커뮤니티에 당신을 환영한다.

 

저자에 대해서

Rod Johnson has almost ten years experience as a Java developer and architect and has worked with J2EE since the platform emerged. He is the author of the best-selling Expert One-on-One J2EE Design and Development (Wrox, 2002), and J2EE without EJB (Wrox, 2004, with Juergen Hoeller) and has contributed to several other books on J2EE. Rod serves on two Java specification committees and is a regular conference speaker. He is CEO of Interface21, an international consultancy that leads Spring Framework development and offers expert services on the Spring Framework and J2EE in general.

//포스팅
번호 제목 글쓴이 날짜 조회 수
공지 (확인전) [2021.03.12] Eclipse에서 Spring Boot로 JSP사용하기(Gradle) 황제낙엽 2023.12.23 0
공지 [작성중/인프런] 스프링부트 시큐리티 & JWT 강의 황제낙엽 2023.12.20 6
43 스프링의 구조별 기능 설명 황제낙엽 2007.06.26 42
42 실습 STEP2 - 기초편 (데이터 베이스 접속) file 황제낙엽 2007.06.21 21
41 java.util.MissingResourceException: Can't find bundle for base name xxx, locale ko_KR 황제낙엽 2007.06.21 2362
40 자바지기 스프링 프레임웍 아티클 황제낙엽 2007.06.04 54
39 AOP(Aspect Oriented Programming) 황제낙엽 2007.06.03 39
38 Spring MVC 어플리케이션 개발 <12> 간단한 조회 구현 방안 비교 황제낙엽 2007.05.27 31
37 Spring MVC 어플리케이션 개발 <11> 간단한 조회 구현 방안 비교 황제낙엽 2007.05.27 164
36 Spring MVC 어플리케이션 개발 <10> 도메인 객체 수정시 변경 사항 황제낙엽 2007.05.27 10
35 Spring MVC 어플리케이션 개발 <9> JSP 화면 작성 황제낙엽 2007.05.27 28
34 Spring MVC 어플리케이션 개발 <8> Spring기반 iBatis DAO 작성 황제낙엽 2007.05.27 51
33 Spring MVC 어플리케이션 개발 <7> Spring과 iBatis 연동을 위한 준비 황제낙엽 2007.05.26 17
32 Spring MVC 어플리케이션 개발 <5> MVC 컨트롤러 작성 황제낙엽 2007.05.26 22
31 Spring MVC 어플리케이션 개발 <4> 화면 요구 작성 황제낙엽 2007.05.26 19
30 Spring MVC 어플리케이션 개발 <3> Web Application Context 파일 작성 황제낙엽 2007.05.26 125
29 Spring MVC 어플리케이션 개발 <2> Spring MVC 구동을 위한 web.xml 작성 황제낙엽 2007.05.26 32
28 Spring MVC 어플리케이션 개발 <1> 프로젝트 디렉토리 생성 황제낙엽 2007.05.26 51
27 Struts에서 Spring으로의 이주 가이드 - Spring (java/j2ee Application Framework) 황제낙엽 2006.02.27 29
26 실습 STEP1 - 기초편 (Hello Spring 출력) file 황제낙엽 2007.04.27 18
25 Bean 생명주기 관리 황제낙엽 2007.03.23 24
» Spring프레임워크 소개문서 (3) 황제낙엽 2007.03.22 35