Spring Framework Bean 설정 파일 관리

2015. 11. 27. 22:55Framework/Spring Framework

    목차

5. Bean 설정 파일 관리

Spring 프레임워크의 Bean 설정 파일은 작은 어플리케이션의 경우 단 하나만으로 모든 Bean을 관리할 수 있지만 중/대규모의 어플리케이션일 경우 하나의 Bean 설정 파일로 모든 Bean을 관리한다는 것은 좋지 않다. 이때 Bean 설정 파일을 일정한 원칙하에 분리하는 것이 중요하다.

5.1. 수평적 분리 방법

각 컴포넌트마다 하나씩의 Bean 설정 파일을 가지는 것이다. 이 설정 파일에 해당 컴포넌트와 관련된 모든 정보를 가지는 구조.

1) User 컴포넌트
applicationContext-user.xml (UI계층, 비즈니스 계층, 퍼시스턴스 계층)

2) Board 컴포넌트
applicationContext-board.xml (UI계층, 비즈니스 계층, 퍼시스턴스 계층)
수평적 분리 방법을 사용할 경우 각 컴포넌트마다 설정 파일을 관리할 수 있으므로 명확한 분리가 되는 이정이 있지만 각 계층에서 공통적으로 사용하는 정보의 중복이 발생되는 단점이 있다.

5.2. 수직적 분리 방법

각 계층마다 하나씩의 Bean 설정 파일을 가지는 방법.

UI 계층 - applicationContext-ui.xml
비즈니스 계층 - applicationContext-biz.xml
퍼시스턴스 계층 - applicationContext-dao.xml

계층마다 중복되는 내용을 방지할 수 있는 장점이 있지만 각각의 컴포넌트를 분리하는 것이 명확하지 않을 수 있으며, 컴포넌트가 많아질 경우 설정 파일이 비대해져서 개발 용이성 및 유지보수성을 저하시킬 수 있다.

5.3. 프로젝트 규모에 따른 Bean 설정 파일 관리 전략

프로젝트 초반에 Bean 설정 파일을 어떻게 관리할 것인지에 대한 전략을 수립하는 것이 중요하다.

1) applicationContext.xml
어플리케이션에서 공통적으로 사용되는 Aspect, Mail, MessageSource에 대한 Bean을 정의.

2) applicationContext-jdbc.xml
퍼시스턴스 계층에서 공통적으로 사용되는 Bean을 정의.

3) applicationContext-user.xml
사용자 관리 구현을 위한 Bean을 정의.

4) applicationContext-board.xml
게시판 구현을 위한 Bean을 정의.

6. 트랜잭션

하나의 유즈 케이스에 해당하는 업무를 처리하는 단위는 비즈니스 계층에서 담당하고 있다.
각 유즈 케이스에 해당하는 업무들은 비즈니스 계층의 각 메소드 내에서 하나의 업무 단위로 구현하게 된다. 
그러므로 트랜잭션 처리는 비즈니스 계층의 메소드 단위 별로 처리하는 것이 좀 더 바람직하다. 이는 퍼시스턴스 계층에서 트랜잭션을 처리할 때보다 각 계층간의 독립성을 유지할 뿐만 아니라 재사용 성을 증가시킨다는 것을 알 수 있다.

6.1. 트랜잭션의 특성

트랜잭션은 ACID로 표현할 수 있다.

1) 원자성(Automiccity)
하나 이상의 행위들이 단일한 작업단위로 함께 묶여 구성된다. 이는 성공, 실패 시 모두 함께 반영된다는 것을 의미한다.

2) 일관성(Consistency)
트랜잭션이 종료되면 시스템은 모델링한 비즈니스 상태와의 일관성을 유지해야 한다.

3) 격리성(Isolation)
사용자들의 작업이 서로 엉키지 않고 다수가 동일한 데이터에 대해 작업하는 것을 허용해야 한다. 따라서 각 트랜잭션은 독립적이어야 하며, 동일한 데이터에 대해 동시에 읽기와 쓰기가 발생하는 일을 막아야 한다.

4) 지속성(Durability)
트랜잭션이 완료되면 트랜잭션의 결과는 지속됨으로써 어떤 시스템 문제가 일어나도 살아남을 수 있어야 한다.

6.2. Spring 트랜잭션 기본 
Spring 프레임워크는 트랜잭션을 지원하기 위해 PlatformTransactionManager, TransactionDefinition, TransactionStatus 세 개의 인터페이스를 핵심 API로 사용하고 있다.

1) TransactionDefinition
개발자들이 제어 가능한(트랜잭션 전달, timeout, read-only상태, 격리성) 부분을 추상화 하고 있다.

2) TransactionStatus
트랜잭션의 상태를 관리하는 역할을 담당하는 인터페이스.
PlatformTransactionManager에서 트랜잭션을 commit할지 rollback할지를 결정하기 위하여 사용된다.

3) PlatformTransactionManager
실질적은 트랜잭션을 실행하는 역할.


[출처] - 이 종 화 (ingenuity.egloos.com) -

'Framework > Spring Framework' 카테고리의 다른 글

Spring Framework form 처리  (0) 2015.12.03
Spring Framework MVC  (0) 2015.12.01
Spring Framework AOP  (0) 2015.11.26
Spring Framework IoC  (0) 2015.11.24
Spring Framework 개요  (0) 2015.11.24