Anyframe Java
Template Guide
Anyframe Java
Ver. 3.2.0
Preface
이
문서는 Anyframe Template에
대한
내용을
담고
있으며, 작성자나
검증자의
실수로
인해
오류가
있을
수도
있음에
양해를
구합니다. 문서에
심각한
오류가
있다고
판단될
경우
Anyframe 포럼에
등록해
주시면
담당자가
적절한
조치를
취할
수
있도록
할
것입니다. 본
문서는
개인적인
용도로
사용될
수
있으며, 다른
사람에게
배포되어야
하는
경우
반드시
이와
같은 Copyright Notice를
포함하도록
합니다. 내용에
대한
자유로운
추가
및
수정
작업은
허용하나, 본
문서의
상업적인
사용은
허용하지
않습니다. 상업적
사용시
반드시
Anyframe Portal Site를
통해
요청하셔야
함에
유의하시기
바랍니다.
Copyright 2008, www.anyframejava.org - Site maintained by SAMSUNG SDS
목
차
제 1 장 개 요 5
1.1 목 적 5
1.2 유의사항 5
제 2 장 설치하기 6
2.1 설치 환경 6
2.2 Template 설치 6
2.2.1 Basic Template설치 6
2.2.2 MiPlatform Template설치 7
2.3. Template실행 9
제 3 장 Basic Template 소개 11
3.1. 개 요 11
3.2. 구 현 11
3.2.1. 비즈니스 레이어 11
3.2.2. 프리젠테이션 레이어 13
제 4 장 MiPlatform Template 소개 15
4.1. 개요 15
4.2. 구 현 15
4.2.1. 비즈니스 레이어 15
4.2.2. 프리젠테이션 레이어 17
제 5 장 Base Framework 19
5.1. Spring IoC 19
5.2. Spring AOP 20
5.3. Hibernate 23
5.4. Query 서비스 26
5.5. MiPQueryService 28
5.6. Spring MVC 30
5.7. MiPlatform 34
5.8. 기타 36
별첨-1. 주요 클래스 다이어그램 Category @Basic Template 38
별첨-2. 주요 클래스 다이어그램 Category @MiPlatform Template 39
제 1 장 개 요
1.1 목 적
Anyframe Java에 대한 대표적인 적용 방안을 제시함으로써 Anyframe Java를 기반으로 어플리케이션을 개발하는 프로젝트에 효과적인 개발구조 가이드를 제시하고 개발 초기에 해당 프로젝트에서 개발 템플릿을 정의하는데 소요되는 시간을 줄이고자 구현 기준 샘플 프로젝트를 Template으로 제공하고, 설치에서부터 구현 기능 및 활용 서비스에 대한 설명을 하고자 한다.
Anyframe Java 3.2.0 (jdk 1.4)은 다음과 같이 기본 템플릿과 MiPlatform 템플릿 두 가지로 제공된다. 또한 기본 템플릿은 웹 어플리케이션에 따라 두 가지로 나뉜다.
기본 템플릿
MiPlatform 템플릿
서비스 어플리케이션 : Spring 기반, MiPQueryService를 이용한 DB Access Layer
웹 어플리케이션 : SpringMVC 기반, MiPlatform을 이용하여 구현
1.2 유의사항
본
문서에서
사용된
코드와
아키텍처
스타일은
다양한
프레임워크
기능의
사용예와
아키텍처의
유연성을
고려한
샘플이며
성능에
최적화되어
제공하는
것은
아니므로
실제로
프레임워크를
적용하여
프로젝트
수행
시
디자인
및
코드와
성능에
대한
여러
요구
사항들(주로
비기능적인
요구조건)을
적절히
고려하여
어플리케이션을
구축하여야
한다
제 2 장 설치하기
2.1 설치 환경
JDK: JDK 1.4.2 이상
Web Container: Tomcat 5.0.28 이상, WebLogic 8.1.6 이상
DataBase: HSQL DB 1.8.0.4 이상, Oracle 8i 이상
IDE : Eclipse 3.3 이상(프레임워크에서 제공하는 플러그인이 포함된 Eclipse 권장)
Anyframe : Anyframe Core / Web 3.2.0 이상
Anyframe 설치는 Anyframe Portal Site의 설치문서 참고
※ MiPlatform의 경우 MiPlatform 클라이언트 프로그램이 설치되어야 한다. MiPlatform은 상용프로그램이므로 사용자가 S/W를 구입하여 설치하였다고 가정한다.
2.2 Template 설치
2.2.1 Basic Template설치
- 압축파일 해제
- 적당한 폴더를 선택하여 템플릿 압축 해제 실시 à [템플릿 압축해제 폴더]
- Eclipse 실행
- 프로젝트 Import
- Eclipse 메뉴의 File – Import 선택
- Existing Projects into Workspace 선택 후 Next 버튼 클릭
- Select root directory의 Browse버튼 클릭 하고 [템플릿 압축해제 폴더] 선택
- 하단 Projects 리스트에서 "anyframe-template-service", "anyframe-template-web-struts", "anyframe-template-web-springmvc"를 선택하고 Finish 버튼 클릭
- Anyframe Core와 Web 설치 폴더의 모든 jar 파일을 [템플릿 압축해제 폴더]/anyframe-template-web-struts/src/webapp/WEB_INF/lib와 [템플릿 압축해제 폴더]/anyframe-template-web-springmvc/src/webapp/WEB_INF/lib로 복사
- Eclipse 메뉴의 Window – Preferences선택
- 좌측의 트리 메뉴에서 Java – Build Path – User Libraries 선택
- New 버튼 클릭하고 User Library Name에 'TEMPLATE_LIB' 입력
- 우측의 Add JARs 버튼을 클릭하여 Anyframe Core와 Web 설치 폴더의 모든 jar 파일을 선택
- Eclipse 메뉴의 Window – Preferences선택
- 좌측의 트리 메뉴에서 Server – Installed Runtimes 선택
- Add 버튼 클릭하고 Apache Tomcat 5.0 선택하고 Next 버튼 클릭
- Browse 버튼을 클릭하여 설치된 Tomcat Root 폴더를 선택
※ Eclipse의 default JRE 버전이 JDK 1.4일 경우 Tomcat 5.0을,
JDK 1.5일 경우 Tomcat 5.5 버전을 사용한다.
- Eclipse에서 anyframe-template-service프로젝트의 build.xml파일을 열어서 anyframe.lib의 위치를 Anyframe Core와 Web 설치 폴더로 변경
(artifacts.dir 변수는 오픈 소스 자바 코드 코드커버리지 툴킷인 emma를 사용하기 위한 변수로, emma를 통해 생성되는 리포트 파일이 만들어질 위치이다.)
- Eclipse의 Package Explorer에서 build.xml을 선택하고 마우스 오른쪽 버튼을 클릭하여 Run As – Ant Build를 선택하고 all target을 선택하여 Run 버튼 클릭
※ 템플릿을 구성하는 서비스 코드 및 속성 정의가 변경 됐을 경우 all target을 실행시키면 자신의 환경에 수정 내용을 배포할 수 있다.
※ Junit 테스트와 emma를 통한 리포팅을 모두 적용하려면 test target을 실행시키면 된다.
2.2.2 MiPlatform Template설치
- 압축파일 해제
- 적당한 폴더를 선택하여 템플릿 압축 해제 실시 à [템플릿 압축해제 폴더]
- Eclipse 실행
프로젝트 Import
- Eclipse 메뉴의 File – Import 선택
- Existing Projects into Workspace 선택 후 Next 버튼 클릭
- Select root directory의 Browse버튼 클릭 하고 [템플릿 압축해제 폴더] 선택
- 하단 Projects 리스트에서 "anyframe-template-mi-service","anyframe-template-mi-web"를 선택하고 Finish 버튼 클릭
라이브러리 설정
- Anyframe Core와 Web 설치 폴더의 모든 jar 파일을 [템플릿 압축해제 폴더]/anyframe-template-mi-web/src/webapp/WEB_INF/lib로 복사
- Eclipse 메뉴의 Window – Preferences선택
- 좌측의 트리 메뉴에서 Java – Build Path – User Libraries 선택
- New 버튼 클릭하고 User Library Name에 'TEMPLATE_LIB' 입력
- 우측의 Add JARs 버튼을 클릭하여 Anyframe Core와 Web 설치 폴더의 모든 jar 파일을 선택
※ MiPlatform을 사용할 경우 MiPlatform의 library가 필요하다. MiPlatform은 상용소프트웨어이므로 구매하여 추가하기 바란다.
Web Container 설정
- Eclipse 메뉴의 Window – Preferences선택
- 좌측의 트리 메뉴에서 Server – Installed Runtimes 선택
- Add 버튼 클릭하고 Apache Tomcat 5.0 선택하고 Next 버튼 클릭
- Browse 버튼을 클릭하여 설치된 Tomcat Root 폴더를 선택
※ Eclipse의 default JRE 버전이 JDK 1.4일 경우 Tomcat 5.0을,
JDK 1.5일 경우 Tomcat 5.5 버전을 사용한다.
사용자 환경에 맞추어 서비스 배포
- Eclipse에서 anyframe-template-mi-service프로젝트의 build.xml파일을 열어서 anyframe.lib의 위치를 Anyframe Core와 Web 설치 폴더로 변경
- Eclipse의 Package Explorer에서 build.xml을 선택하고 마우스 오른쪽 버튼을 클릭하여 Run As – Ant Build를 선택하고 all target을 선택하여 Run 버튼 클릭
※ 템플릿을 구성하는 서비스 코드 및 속성 정의가 변경 됐을 경우 all target을 실행시키면 자신의 환경에 수정 내용을 배포할 수 있다.
2.3. Template실행
- 테이블 및 데이터 생성
Hsql DB의 경우,
- [템플릿 압축해제 폴더]/anyframe-template-service/DATABASE/db 폴더 (MiPlatform Template의 경우 [템플릿 압축해제 폴더]/anyframe-template-mi-service/DATABASE/db 폴더)의 insertvalue.sql의 내용을 sampledb.script의 기존 내용(DDL)에 이어 붙여 넣은 후 runHsqlDB.cmd 파일 실행
Oracle DB의 경우,
- [템플릿 압축해제 폴더]/anyframe-template-service/DATABASE/db 폴더의 templateDB.sql을 이용하여 테이블 및 데이터 생성
※ 사용하는 DBMS의 종류에 따라 Data Source 설정을 바꿔야 한다.
anyframe-template-service/src/main/resources/spring/common/context-
datasource.xml 파일에 있는 dataSource의 속성을 사용자의 환경에 맞게
수정한 후 build.xml을 선택하고 마우스 오른쪽 버튼을 클릭하여
Run As – Ant Build 를 실행해 다시 배포한다.
- Eclipse의 Package Explorer에서 anyframe-template-web-springmvc 또는 anyframe-template-web-struts 프로젝트 선택
MiPlatform Template의 경우 anyframe-template-mi-web 프로젝트 선택.
- src/webapp/login.jsp를 선택하고 마우스 오른쪽 버튼을 클릭하여 Run AS – Run on Server 을 선택하여 실행. 또는 Internet Explorer에서 anyframe-template-web-springmvc 또는 anyframe-template-web-struts 프로젝트의 주소를 입력하여 로그인 화면이 나타나는 것을 확인.
MiPlatform Template의 경우 anyframe-template-mi-web 프로젝트 주소.
예) http://localhost:8080/anyframe-template-web-springmvc
http://localhost:8080/anyframe-template-mi-web
- 실행 결과
① 로그인 할 수 있는 화면
② ID, Password에 'test/test123'을 입력하고 Login 버튼 클릭 시 Welcome
페이지로 이동
③ 좌측 메뉴를 클릭하여 이용
제 3 장 Basic Template 소개
3.1. 개 요
Anyframe Template은 기본적으로 Eclipse의 프로젝트 형태로 제공된다. Anyframe Basic Template은 비즈니스 레이어를 구현한 Service(anyframe-template-service)프로젝트와 프리젠테이션 레이어를 구현한 Web(anyframe-template-web-springmvc와 anyframe-template-web-struts)프로젝트로 구성되어 있다.
Service프로젝트는 Anyframe Core 3.2.0의 Spring IoC, Spring AOP, Hibernate, Query 서비스를 이용하여 구현하였고, Web프로젝트는 Spring MVC를 기반으로 구현한 것과 Struts기반으로 구현한 것, 이렇게 두 가지로 구성되어 있다.
Template에서 구현한 서비스는 제품(Product)의 등록, 수정, 삭제, 조회 및 분류체계(Category)의 등록, 수정, 삭제, 조회 기능으로 일반적으로 많이 사용되는 기능을 중심으로 하되 확대가 용이한 구조로 구현하였다.
3.2. 구 현
3.2.1. 비즈니스 레이어
비즈니스 서비스는 아래 그림과 같이 도메인 모델, 서비스 인터페이스 클래스, 서비스 구현클래스, DAO 인터페이스 클래스 및 DAO 구현 클래스로 구성되어 있다
1) 제품(Product) 관련 클래스
종류 | 클래스 | 클래스
설명 |
도메인
모델 | Product | Product 테이블
컬럼과
동일한
멤버변수와
그에
대한 Setter/Getter 메소드로
구성 |
서비스
인터페이스 | ProductService | Product 관리
기능을
제공하기
위한
인터페이스로 Create/Find/Update/Remove 기본 CRUD 메소드에
카테고리별
제품
수량
정보
추출을
위한 countProductListByCategory와
카테고리별
제품
리스트
제공을
위한 findProductList 메소드로
구성
|
서비스
구현 | ProductServiceImpl | ProductService를 implements 하는
클래스로 ProductDAO의
메소드를
호출하여 DB처리를
하도록
하고, IIdGenerationService를
이용하여 Product 키
정보를
생성하고, MessageSource를
이용하여
오류메세지를
처리하는
기능
구현
※ Spring IoC 활용 |
DAO 인터페이스 | ProductDAO | Product관련 DB를
조작하기
위한
메소드를
정의한
인터페이스 |
DAO 구현 | ProductDAOHibernateImpl | ProductDAO를 implements 하는
클래스로 HibernateDaoSupport를
상속받아서 DB를
조작하고 propertiesService를
이용하여 findProductList 메소드내에서 Page관련
정보를
처리함
※ Hibernate 활용, Spring IoC 활용 |
ProductDAOQueryImpl | ProductDAO를 implements 하는
클래스로 AbstractDAO를
상속받아서 DB를
조작하고 propertiesService를
이용하여 findProductList내에서 Page관련
정보를
처리함
※ Query서비스
활용, Spring IoC 활용 |
※ Category 관련 클래스와 Code 관련 클래스도 동일하게 구성.
2) 공통(Common) 클래스
종류 | 클래스 | 클래스
설명 |
Data Transfer Object | SearchVO | 검색
기능과
관련된
정보를
가진
클래스로
멤버변수의 Setter/Getter 메소드로
구성 |
서비스구현 | EmpException | BaseException을
상속받은
클래스. 여러가지
입력
파라미터를
받는
생성자로
구성 |
EmpUtil | Null 처리를
위한
메소드
등
여러가지 String utility 메소드를
담고
있음 |
ExceptionTransfer | Exception이
발생되었을
때 Spring AOP에
의해 transfer 메소드가
호출된다. 각 Exception 별로
정의된
메시지를 MessageSource를
이용하여
처리를
하도록
함
※ Spring AOP, Spring IoC 활용 |
LoggingAspect | 각
클래스의
메소드가
호출
되었을
때Spring AOP에
의해 beforeLogging 메소드가
실행된다. 호출된
클래스와
메소드명
그리고
호출
시점에
입력된 parameter 값까지
추출하여 Logging하는
클래스임
※ Spring AOP, Spring IoC 활용 |
※ 이외, 클래스들은 Security 관련 클래스로 서비스 인터페이스 클래스인 AuthenticationService와 그 구현클래스인 DBAuthenticationService, java.util.Properties를 상속받은 Credential 클래스로 구성되어 있다.
3.2.2. 프리젠테이션 레이어
Anyframe Basic Template에서 제공하는 프리젠테이션 레이어 어플리케이션은 Spring MVC 기반으로 구현된 것과 Struts를 기반으로 구현된 것, 두 가지가 있다. 이 중 Spring MVC 기반으로 구현된 Template에 대해서 설명하도록 한다. Spring MVC 기반의 프리젠테이션 레이어는 아래 그림 같이 DispatcherServlet, Interceptor, Controller, JSP, Custom Tag Library로 구성되어 있다.
[프리젠테이션 레이어 구성]
1) 제품(Product) 관련 구성요소
종류 | 구성요소 | 설
명 |
Controller | ProductController.java | Product 도메인에
관련된
기본 CRUD 기능을
호출하는
각각의 addView(), add(), get(), update(), list(), delete() 메소드로
구성되며 double submit 방지
기능이
적용되어
있지
않다. |
JSP | addProduct.jsp | 제품
등록을
위한
화면으로 ProductController의 add()메소드를
호출하여
제품등록처리를
한다 |
listProduct.jsp | 제품리스트를
조회하기
위한
화면으로 ProductController 의
list()메소드를
호출하여
리스트를
보여준다 |
updateProduct.jsp | 제품
수정을
위한
화면으로 ProductController의 get()메소드를
이용하여
내용을
조회하고 update()메소드를
호출하여
수정되도록
한다 |
Config File | product-servlet.xml | 제품(Product)관련
웹페이지
요청에
대한 ProductController 매핑정보가
정의
되어
있으며, ProductController Bean에서
사용하는
서비스 Bean정보와
프로퍼티
정보가
정의되어
있다. |
2) 카테고리(Category) 관련 구성요소
종류 | 구성요소 | 설
명 |
Controller | CategoryController.java | 카테고리
도메인에
관련된
기본 CRUD 기능을
호출하는
각각의 add(), update(), list(), delete() 메소드로
구성되며 Add, Update, Delete에
대한 double submit 방지
기능이
적용되어
있다 |
JSP | addCategory.jsp | 카테고리
등록을
위한
화면으로 CategoryController의 add()메소드를
호출하여
제품등록처리를
한다 |
listCategory.jsp | 카테고리
리스트를
조회하기
위한
화면으로 CategoryController 의
list()메소드를
호출하여
리스트를
보여준다 |
updateCategory.jsp | 카테고리
수정을
위한
화면으로 CategoryController의 get()메소드를
이용하여
내용을
조회하고 update()메소드를
호출하여
수정되도록
한다 |
Config File | category-servlet.xml | 카테고리
관련
웹페이지
요청에
대한 CategoryController 매핑정보가
정의
되어
있으며, CategoryController Bean에서
사용하는
서비스 Bean정보와
프로퍼티
정보가
정의되어
있다. |
3) 공통(Common) 구성요소
종류 | 구성요소 | 설
명 |
Interceptor | AuthorizationInterceptor.java | 페이지
별
권한처리를
위한
인터셉터로
세션에서
로그인
아이디를
받아서
권한
정의된
사용자
여부를
체크 |
LoginInterceptor.java | 중간접속
차단을
위해
만든 Login여부
체크
인터셉터 |
Config File | common-servlet.xml | Spring MVC에서
제공하는
기본적인 Resolver들을
정의하여
사용한다. (ex> viewResolver, paramResolver, handlerMapping) |
security-servlet.xml | 사용자
로그인에
관련된
매핑
정보가
정의되어
있다. |
제 4 장 MiPlatform Template 소개
4.1. 개요
Anyframe MiPlatform Template은 비즈니스 레이어를 구성하는 Service(anyframe-template-mi-service)프로젝트와 프리젠테이션 레이어를 구성하는 Web(anyframe-template-mi-web)프로젝트로 구성되어 있다.
Service프로젝트는 Anyframe Core 3.2.0의 Spring IoC, Spring AOP, MiPQueryService를 이용하여 구현하였고, Web프로젝트는 Anyframe Web 3.2.0의 Spring MVC를 기반으로 구현되어 있다.
Template에서 구현한 서비스는 분류체계(Category)의 등록, 수정, 삭제, 조회 기능으로 일반적으로 많이 사용되는 기능을 중심으로 하되 확대가 용이한 구조로 구현하였다. 단, MiPlatform을 이용한 화면 구성(jsp, xml)에 대해서는 MiPlatform에서 제공하는 툴을 이용하도록 한다.
4.2. 구 현
4.2.1. 비즈니스 레이어
비즈니스 서비스는 아래 그림과 같이 서비스 인터페이스 클래스, 서비스 구현클래스, DAO 클래스로 구성되어 있다.
1) 분류체계(Category) 관련 클래스
종류 | 클래스 | 클래스
설명 |
서비스
인터페이스
서비스
구현 | CategoryService | Category관리
기능을
제공하기
위한
인터페이스로 CRUD 작업을
하는 saveAll메소드에
카테고리
리스트
제공을
위한 findProductList 메소드로
구성
|
CategoryServiceImpl | CategoryService를 implements 하는
클래스로 CategoryDAO의
메소드를
호출하여 DB처리를
하도록
한다.
※ Spring IoC 활용 |
DAO 클래스 | CategoryDAO | Category 관련 DB를
조작하는
로직을
수행하고 IIdGenerationService를
사용하여
유일한
아이디를
생성한다.
※ MiPQueryService활용, Spring IoC 활용 |
2) 공통(Common) 클래스
종류 | 클래스 | 클래스
설명 |
도메인
모델 | SearchVO | 검색
기능과
관련된
정보를
가진
클래스로
멤버변수의 Setter/Getter 메소드로
구성 |
서비스구현 | EmpException | BaseException을
상속받은
클래스. 여러가지
입력
파라미터를
받는
생성자로
구성 |
ExceptionTransfer | Exception이
발생되었을
때 Spring AOP에
의해 transfer 메소드가
호출된다. 각 Exception 별로
정의된
메시지를 MessageSource를
이용하여
처리를
하도록
함
※ Spring AOP, Spring IoC 활용 |
LoggingAspect | 각
클래스의
메소드가
호출
되었을
때Spring AOP에
의해 beforeLogging 메소드가
실행된다. 호출된
클래스와
메소드명
그리고
호출
시점에
입력된 parameter 값까지
추출하여 Logging하는
클래스임
※ Spring AOP, Spring IoC 활용 |
※ 이외, 클래스들은 Security 관련 클래스로 서비스 인터페이스 클래스인 AuthenticationService와 그 구현클래스인 DBAuthenticationService, java.util.Properties를 상속받은 Credential 클래스로 구성되어 있다.
4.2.2. 프리젠테이션 레이어
MiPlatform Template의 프레젠테이션 레이어는 Spring MVC 기반으로 작성되어 있어 아래 그림 같이 DispatcherServlet, Interceptor, Controller 로 구성되어 있다.
[프레젠테이션 레이어 구성]
1) 카테고리(Category) 관련 구성요소
종류 | 구성요소 | 설
명 |
Controller | CategoryMiPController.java | Category 도메인에
관련된
리스트
출력을
위한 getCategoryLIst()메소드와, 데이터의
일괄
저장을
위한create, update, delete 기능을
동시에
처리하는 updateCategory() 메소드가
정의되어
있다. |
Config File | category -servlet.xml | Category 관련
웹페이지
요청에
대한 Category관련 Controller에
대한
매핑정보가
정의
되어
있으며, 각 Controller Bean에서
사용하는
서비스 Bean정보와
프로퍼티
정보가
정의되어
있다. |
2) 공통(Common) 구성요소
종류 | 구성요소 | 설
명 |
Interceptor | LoginInterceptor.java | 중간접속
차단을
위해
만든 Login여부
체크
인터셉터 |
Config File | common-servlet.xml | Spring MVC에서
제공하는
기본적인 Resolver들을
정의하여
사용한다. (ex> viewResolver, paramResolver, handlerMapping) |
security-servlet.xml | 사용자
로그인에
관련된
매핑
정보가
정의되어
있다. |
제 5 장 Base Framework
본 문서에서는 템플릿에서 활용하고 있는 기능들에 대해서 개발자들이 꼭 알아야 할 사항에 대해서만 기술하므로, 여기서 언급하는 내용에 대한 자세한 가이드는 Anyframe Java 매뉴얼 참고하기 바란다.
5.1. Spring IoC
- 개 요
한 클래스가 특정 작업을 수행하기 위해 필요한 다른 클래스들을 직접 생성하거나 획득하지 않고, 이러한 의존성들을 외부에 정의하고 컨테이너에 의해 공급받는 방법을 IoC(Inversion of Control)라고 한다. 이는 Spring Framework의 핵심적인 개념으로 템플릿에서는 모든 클래스에서 외부 클래스를 참조할 때 이 방법을 이용하고 있다.
서비스 사용 설명
- 서비스 속성 정의 파일 생성
[템플릿 압축해제 폴더]/src/main/resource/spring/common/*.xml
[템플릿 압축해제 폴더]/src/main/resource/spring/hibernate/*.xml
[템플릿 압축해제 폴더]/src/main/resource/spring/query/*.xml
- 서비스 속성 정의 파일에 bean class 선언
- 서비스 속성 정의 파일에 클래스에서 참조하는 다른 클래스 정의
- bean class에서 사용하기 위한 Setter 정의
5.2. Spring AOP
- 개 요
비즈니스 로직이 구현된 코드를 수정하지 않고서 특정 클래스 및 메소드를 패턴 매칭 방법으로 정의하여 지정된 패턴이 실행되는 시점에 필요한 공통 작업을 수행하게 해주는 서비스로 템플릿에서는 Logging, Exception, Transaction 등의 처리를 수행하는 샘플을 제시함
Logging Aspect
- 서비스 속성 정의 파일 생성
[템플릿 압축해제 폴더]/src/main/resource/spring/common/context-aspect.xml
- 서비스 속성 정의 파일에 Logging처리 Class 선언
- 서비스 속성 정의 파일에 수행시점을 패턴매칭방법으로 정의
- 서비스 속성 정의 파일에 동작시점과 수행 메소드 선언
- Logging처리 Class에 수행 메소드 구현
Exception Aspect
- 서비스 속성 정의 파일 생성
[템플릿 압축해제 폴더]/src/main/resource/spring/common/context-aspect.xml
- 서비스 속성 정의 파일에 Exception처리 Class 선언
- 서비스 속성 정의 파일에 수행시점을 패턴매칭방법으로 정의
- 서비스 속성 정의 파일에 동작시점과 수행 메소드 선언
- Exception처리 Class에 수행 메소드 구현
구현 기능 : Exception을 EmpException, Exception으로 구분하여 처리하며. Exception을 throw하기 전에 ERROR 레벨의 로그를 남김. 각 Exception을 구현 클래스에서 처리하지 않고 정해진 규칙에 맞게 해당하는 Exception key를 찾아 처리함. 따라서 메소드 별 특정 값에 대한 로그 처리는 개별적으로 구현 필요함
Transaction 관리
- 서비스 속성 정의 파일 생성
[템플릿 압축해제 폴더]/src/main/resource/spring/hibernate/context-transaction.xml
[템플릿 압축해제 폴더]/src/main/resource/spring/query/context-transaction.xml
- 서비스 속성 정의 파일에 Transaction처리 Class 선언
- 서비스 속성 정의 파일에 수행시점을 패턴매칭방법으로 정의
- 서비스 속성 정의 파일에 동작시점과 수행 메소드 선언
5.3. Hibernate
- 개 요
Hibernate는 객체지향모델링(Object Oriented Modeling)과 관계형 데이터 모델링 (Relational Data Modeling) 사이의 불일치를 해결해 주는 ORM 도구로 특정 플랫폼에 의존적인 제약을 정의하고 있지 않기 때문에 POJO 기반의 개발이 가능하고 또한 Java에서 지원하는 다양한 Collection 유형을 지원함으로써 객체 모델링을 관계형 모델링으로 매칭하는데 따르는 제약을 최소화하고 있다. 본 Template에서는 Hibernate를 활용하여 CRUD를 구현하는 샘플을 제시함.
서비스 사용 설명
- 서비스 속성 정의 파일 생성
[템플릿 압축해제 폴더]/src/main/resource/spring/hibernate/context-hibernate.xml
- 서비스 속성 정의 파일에 매핑 정의 파일 위치 지정
- 서비스 속성 정의 파일에 dynamicHibernateService를 위한 설정 파일 지정
- 매핑정의 파일 설정(②에서 위치 지정한): hibernate 툴 이용해 자동생성 가능
[템플릿 압축해제 폴더]/src/main/resource/hibernate/Category.hbm.xml
ⓐ테이블 컬럼과의 매핑정보 정의
ⓑCRUD외 Query 정의 (CRUD는 Query 정의 없이 가능)
- dynamicHibernateService를 위한 설정 파일 정의(③에서 파일 지정한)
- DAO 클래스에서의 사용
DataSource 서비스 설정 (Hibernate와 Query에서 모두 사용함)
- 서비스 속성 정의 파일 생성
[템플릿 압축해제 폴더]/src/main/resource/spring/common/context-datasource.xml
- DB 관련 정보 설정(HSQL 설정 정보)
아래QueryService의 'DataSource 서비스 설정'설명 참고.
5.4. Query 서비스
- 개 요
쿼리 문이나 객체의 입력만으로 DB 데이터 조작을 가능하게 하는 서비스로 JDBC(Java Database Connectivity)를 이용한 데이터 액세스 수행 부분을 추상화함으로써 간편한 데이터 액세스 방법을 제공하고, JDBC 사용시 발생할 수 있는 공통 에러를 줄여주게 된다. 본 Template에서는 DAO 클래스에서 Query 서비스에서 제공하는 AbstractDAO를 상속받아 CRUD를 구현하는 샘플을 제시함.
서비스 사용 설명
- 서비스 속성 정의 파일 생성
- 서비스 속성 정의 파일에 매핑 정의 파일 위치 지정
- 매핑정의 파일 설정(②에서 위치 지정한)
- DAO 클래스에서의 사용
QueryService의 AbstractDAO에서 제공하는 메소드들을 사용하면 DAO클래스를 간단하게 만들 수 있다. 자세한 내용은 Anyframe Java의 Query서비스 매뉴얼 참고.
DataSource 서비스 설정 (Hibernate와 Query에서 모두 사용함)
- 서비스 속성 정의 파일 생성
[템플릿 압축해제 폴더]/src/main/resource/spring/common/context-datasource.xml
- DB 관련 정보 설정(HSQL 설정 정보)
- Anyframe에서 제공하는 ID Generation 서비스가 사용하는 DataSource는 따로 분리.
5.5. MiPQueryService
- 개 요
MiPQueryService는 MiPlatform 기반 개발을 위해 Query 서비스를 확장한 서비스이며 query작성만으로 Table에 특정 Data를 insert, update, delete, select할 수 있다.
기본적으로 QueryService를 확장한 것이기 때문에 설정방법은 QueryService와 유사하다. 설정 XML의 자세한 속성 정보들은 Anyframe Java 의 매뉴얼을 참고하기 바란다.
기본 서비스 사용 설명
- 서비스 속성 정의 파일 생성
[MiPlatform 템플릿 압축해제 폴더]/src/main/resource/spring/context-query.xml
- 서비스 속성 정의 파일에 매핑 정의 파일 위치 지정
- 매핑 정의 파일 설정(②에서 위치 지정한)
- DAO 클래스에서 사용
※ MiPQueryService를 이용해 DB에 값을 전달하기 전, 후에 특정 값을 셋팅해야 하는 경우가 있다. 이 때 위의 CategoryMiPActionCommand 클래스처럼 anyframe.core.query.ria.mip.IMiPActionCommand를 구현한 클래스를 통해 필요한 비즈니스 로직을 추가할 수 있다.
5.6. Spring MVC
- 개 요
Spring MVC를 이용하여 프리젠테이션 레이어를 개발 할 때에는 크게 Controller와 Config 파일(Mapping XML), JSP(Custom Tag) 세 개의 파일을 작성해야 한다. 또한 필요에 따라 Interceptor, Validator등을 구현할 수 있다.
기본 서비스 사용 설명
- Config 파일(Mapping) 작성
ⓐ Control Class 정의, ⓑ 호출 Service Bean 정의 ⓒ 사용 프로퍼티 정의
ⓓ 중복 서브밋 방지 프로퍼티 정의 – 이중 저장 방지를 위한 기능 구현
- Controller 구현
ⓐ Service Bean Setter 정의, ⓑ 폼 입력 데이터 바인딩, ⓒ ModelAndView 객체 리턴
- JSP 구현
Interceptor 구현
- Config 파일(Mapping)에 Interceptor 정의
- Interceptor 구현
Anyframe Tag Library 사용
- Page Navigator Tag 사용
- Message Tag 사용
5.7. MiPlatform
- 개 요
SpringMVC와 MiPlatform을 이용하여 Presentation Layer를 개발 할 때에는 크게 Controller와 Config 파일(Mapping XML), MiPlatform 관련 화면 구성 파일(이는 MiPlatform에서 제공하는 툴을 사용하여 별도로 작성)을 작성해야 한다.
기본 서비스 사용 설명
- Config파일(Mapping XML) 작성
ⓐ Control Class 정의, ⓑ 호출 Service Bean 정의
- Controller구현
ⓐ Service Bean Setter 정의, ⓑ 비즈니스 서비스 호출 후 Dataset 생성,
ⓒ ds_access에 리턴할 Dataset 셋팅
5.8. 기타
본 Template은 설명된 서비스 외에도 PropertiesService, IdGenerationService, MessageSource를 이용하여 구현되었다. 각각에 대한 사용 방법은 아래와 같다.
- Properties Service
변경 사항이 빈번한 property(여기에선 PAGE_SIZE와 PAGE_UNIT)에 대해 소스가 아닌 XML에 정의하여 관리할 수 있다.
- ID Generation Service
TableIdGenerationService를 사용하여 Table기반의 유일한 Id를 자동 생성시킬 수 있도록 작성하였다.
- MessageSource
프로젝트에 맞는 message 정의 properties파일을 만들고 이 properties 파일의 위치를 MessageSource bean에서 정의한다.
별첨-1. 주요 클래스 다이어그램
Category @Basic Template
별첨-2. 주요 클래스 다이어그램
Category @MiPlatform Template