Spring Architecture – Eberhard Wolff

참조: http://www.parleys.com/display/PARLEYS/Home#slide=1;title=Spring%20Architectures;talk=20676612

아키텍처

The software architecture of a program or computing system is the structure or structures of the system, which comprise software components, the externally visible properties of those components, and the relationships between them.

Wikipedia

객체: Information hiding

클래스: 객체의 타입을 정의. White box 재사용.

재사용:

A Software Component is a unit of composition with contractually-specified interfaces and explicit  context dependencies only. A software component can be deployed independently and is subject to composition by third parties.

C. Szyperski: Component Software – Beyond Object-
Oriented Programming, Addison-Wesley, 1999

컴포넌트: note the plugability.
– 계약 같은 인터페이스
– Only 명시적인 의존성
– 독립적인 배포
– 컴포지션
– 결과: 간편한 재사용(black box)
– 결과: 간편한 수정(인터페이스는 놔두고 내부만 바꿀 수 있으니.)

객체는 컴포넌트인가?
– 계약 같은 인터페이스? 있네, public 메소드
– 명시적인 의존성? 없네. 코드 내부에서 암거나 만들 수 있으니까.
– 독립적인 배포? 대부분은 안 돼지.
– 컴포지션? No.

DI를 사용하는 객체는 컴포넌트?
– 계약 기반인가? 응
– 명시적인 의존성? 응 설정하자나. setter/constuctor injection,
– 독립적인 배포? Yes. Everything else is injected
– 컴포지션? Yes. DI 컨테이너를 사용해서 조합하니까.

계층
– 각각의 계층은 하위 계층에만 의존해. -> 더 나은 의존성 관리(계층을 쉽게 바꿀 수 있으니까..)
– Typical technical
– 퍼사드를 사용할 수 있음.

스프링을 사용하는 컴포넌트
– 스프링 설정 파일을 각각의 컴포넌트 별로 만든다.
– 추가적인 기반 설정 파일은 javase.xml로..
– Facade를 인터페이스로 추가하고, bean 설정 파일에서 의존성을 정의한다.
– 각각의 컴포넌트는 JAR 파일로.
– 자신만의 빌드 스크립트를 가지고 있고
– 그들 컴포넌트를 묶을 때는 classpath*을 사용한다.

ApplicationContext applicationContext =
 new ClassPathXmlApplicationContext(
  “classpath*:/config/applicationContext.xml”);

스프링 설정 파일 + Facade 사용했을 때 컴포넌트 체크 리스트
– Contractually-specific 인터페이스? Yes. Facade 사용했으니까.
– Only explicit context depedencies? No. 스프링 빈 의존성이 명시적이지 않을 수도 있다.
– 독립적인 배포 가능? Yes. 설정 파일 + 참조하는 클래스
– A way of composition? Yes. 스프링 DI.

계층은 어떤가?
– ApplicationContext 계층 구조를 사용해서 구현했다.
– DispatcherServlet과 ApplicationContext 같은 예.
– 예제 코드

ApplicationContext environmentApplicationContext =
 new ClassPathXmlApplicationContext(
  “javase.xml”);

ApplicationContext persistenceApplicationContext =
 new ClassPathXmlApplicationContext(
  new String[] { “classpath*:*-persistence.xml” },
 environmentApplicationContext);

ApplicationContext logicApplicationContext =
 new ClassPathXmlApplicationContext(
  new String[] { “classpath*:*-logic.xml” },
  persistenceApplicationContext);

ApplicationContext guiApplicationContext =
 new ClassPathXmlApplicationContext(
  new String[] { “classpath*:*-gui.xml” },
  logicApplicationContext);

Vertical Slices.
– 예제 코드

ApplicationContext environmentApplicationContext =
 new ClassPathXmlApplicationContext(“javase.xml”);

ApplicationContext catalogApplicationContext =
 new ClassPathXmlApplicationContext(
  new String[] { “classpath*:/catalog-*.xml”},
 environmentApplicationContext);

ApplicationContext configuratorApplicationContext =
 new ClassPathXmlApplicationContext(
  new String[] { “classpath*:/configurator-*.xml” },
 catalogApplicationContext);

ApplicationContext trackingApplicationContext =
 new ClassPathXmlApplicationContext(
  new String[] { “classpath*:/tracking-*.xml”},
configuratorApplicationContext);

이후 발표는…
– 스프링 JavaConfig를 사용해서 스프링을 사용해서 컴포넌트 설정 예제
– 스프링 DM을 사용하여 컴포넌트 개발 예제
가 이어집니다.

Leave a Reply

Your email address will not be published. Required fields are marked *