JPetStore[1]

Download Report

Transcript JPetStore[1]

JPetStore 분석자료 1.0
작성자 : 김태완
JPetStore란?



JPetStore 어플리케이션은 클린턴 비긴Clinton Begin 이
만든 iBatis용 JPetStore를 기초로 만들어졌다.
전체 DAO계층을 포함하고 있으며 Spring, iBatis
를 사용하여 Oracle, MS-SQL, MySQL,
PostgreSQL를 지원한다. 비즈니스 계층은 전적으
로 Spring으로 관리하고 DAO계층에 의존한다.
Spring MVC, Struts, Spring Remoting, JAX-RPC
도 포함되어 있다.
구동 및 테스트환경
Apache Tomcat 5.5
 Eclipse Galileo IDE
 JDK 1.6
 My-SQL 5.5




Spring 2.5.5
iBatis 2.3
본 문서는 JPetStore에서 WebService(Spring Remoting,
JAX-RPC)와 관련된 부분과 Struts에 관련된 부분을 제외
하고 작성되었다.
분석순서
1.
화면분석
2.
환경분석
3.
흐름분석
4.
소스분석
5.
DB 분석
1. 화면분석

JPetStore의 화면 분석
메인화면
카테고리 목록
장바구니
로그인
검색
로그인화면
회원가입
장바구니에서
나의 관심동물
목록이 보임.
관심동물에 대
한 배너정보가
보임.
상품목록
세부 상품목록
상품상세보기
장바구니
체크아웃
결제정보
배송 주소정보
주문서 확인
주문 완료
개인정보 수정
나의 구매목록
2. 환경분석

Spring 설정파일과 배포서술자에 대한 분석.

iBatis설정에 대한 내용 추가.
Project 구성
DAO interface들
iBatis를 이용한 DAO 구현클래스들
iBatis 설정파일들
JavaBean들(직렬화 구현)
Business Logic들
JAX-RPC/Axis 웹서비스 (확실하지 않음)
JAX-RPC/Axis 웹서비스 클라이언트
Spring MVC의 Controller 구현클래스들
Struts의 Action 구현클래스들
JSP 파일들
Spring 설정파일들, 배포서술자, 프로퍼티파
일들, iBatis 설정파일, 웹서비스 설정파일
Library
라이브러리
용도
jpetstore.jar
JPetStore의 Class파일들.
spring.jar
Spring의 기본 라이브러리. Spring Core를 비롯하여 기
본적인 라이브러리 내장.
spring-webmvc.jar
Spring MVC 라이브러리.
commons-logging.jar
로깅에 관련되어 있으며 Spring 전반에 걸쳐 사용.
aspectjweaver.jar
@AspectJ 애스펙트를 Spring설정으로 사용하기 위함.
commons-dbcp.jar,
commons-pool.jar
Spring에서 Jakarta DBCP(커넥션 풀)을 사용하기 위함.
ibatis-2.3.2.715.jar
iBatis 기본 라이브러리.
jstl.jar
JSTL 지원을 위해 필요함. j2ee 기본 라이브러리.
standard.jar
Jakarta의 JSTL 구현체.
axis.jar, saaj-api.jar,
wsdl4j.jar
Apache Axis 프로젝트를 통해 JAX-RPC 리모팅을 사
용하기 위함.
jaxrpc.jar
Spring 리모팅의 JAX-RPC를 사용하기 위해 필요한
j2ee 라이브러리.
hessian-3.1.3.jar
Spring 리모팅이 Caucho의 Hessian 프로토콜을 사용
하기 위함.
struts.jar
Struts 기본 라이브러리.
commons-beanutils.jar,
commons-collections.jar,
commons-digester.jar,
commons-discovery.jar,
commons-validator.jar
Struts에서 사용하는 Jakarta Commons 프로젝트.
hsqldb.jar
JPetStore에서 hsqldb를 사용하기 위함. DB에 따라 필
요없을 수 있음.
환경설정
파일명
용도
web.xml
JPetStore 프로젝트의 배포서술자.
applicationContext.xml
JPetStore 전반에 걸친 공통 Bean 설정.
Validator, Property, 퍼사드패턴을 이용한 Business
Logic 집합 Bean, 트랜잭션 AOP 설정.
dataAccessContext-local.xml
JPetStore의 Data Access Layer.
Database 접근에 관련된 공통 Bean 설정.
DataSource 선언, 트랜잭션 매니저, iBatis 연동을
위한 SqlMapClient, 각 DAO 구현체
jdbc.properties
DataSource 를 위한 DB 설정 프로퍼티.
log4j.properties
Log4J 설정 프로퍼티.
petstore-servlet.xml
JPetStore 의 기본 DispatcherServlet에 대한 설정.
ViewResolver, HandlerMapping, 각종 명령에 대한
Controller Bean.
sql-map-config.xml
iBatis의 기본 설정파일.
각 SqlMap에 대한 설정파일의 위치 기록됨.
dataAccessContext-jta.xml
JPetStore의 Data Access Layer.
JNDI DataSource를 사용하여 두개의 DataBase에
접근하려 할 때 사용함.
mail.properties
메일지원 프로퍼티. 내용 없음.
remoting-servlet.xml
Spring 리모팅을 위한 DispatcherServlet에 대한 설
정. via Hessian, Burlap, Spring’s HTTP invoker에
대한 Bean.
server-config.wsdd
Axis에 대한 Server 설정인듯. 불명확함.
struts-config.xml
Spring MVC가 아닌 Struts를 사용할 때의 설정 파일
배포서술자 web.xml
Root 디렉토리를 절대가 아닌 상대
디렉토리로 쓰기 위한 파라미터
Log4J 의 설정파일 위치
Spring의 Context 설정파일 위치
서로 다른 DIspatcherServlet이 공통 빈을 필요
로 하는 경우 사용.
ContextLoaderListener 를 ServletListener로 등
록하고 contextConfigLocation 컨텍스트 파라미
터를 이용하여 공통으로 사용될 빈 정보를 담고
있는 설정 파일 목록을 지정.
서블릿의 이름과 클래스를 설정.
DispatcherServlet은 WEB-INF/ 디렉토리에 위
치한 [서블릿이름]-servlet.xml 파일을 기본 스프
링 설정 파일로 사용함.
applicationContext.xml
XML Schema 기반의 설정
해당 클래스를 빈으로 등록하면 외
부의 프로퍼티 파일에 저장된 정보
를 Spring 설정 파일에서 사용할
수 있게 된다.
(고유) : Business Logic의 집합체.
퍼사드 패턴을 이용하여
PetStoreFacade를 구현하고 있음.
각각의 DAO구현체를 DI받는다.
(고유) : 요구값이 부족할 경
우 Error를 리턴하도록 작성
된 Validator Bean.
PetStoreFacade 인터페이스의 모든
메소드를 pointcut으로 물고있음.
선언적 트랜잭션.
insert* , update* : insert와 update문자가 앞에 붙은 메소드가
수행될 때 트랜잭션이 발동
* : 위의 메소드를 제외한 나머지 메소드가 수행될 때 read-only
형태의 트랜잭션이 발동
dataAccessContext-local.xml
DTD기반의 설정.
Apache의 Common 라이브러리를 이용하여
커넥션풀을 잡는 dataSource 빈을 설정.
PropertyPlaceholderConfigurer 에서 설정된
외부 프로퍼티 파일에서 해당 값을 로딩.
트랜잭션 관리자. dataSource 프로퍼티
를 사용하여 전달받은 DataSource로부
터 Connection을 가져온 뒤, Connection
의 commit(), rollback() 등의 메소드를 이
용하여 트랜잭션을 관리
Spring과 iBatis를 쉽게 연동하기 위해
SqlMapClient를 Bean으로 설정시켜주는
클래스.
dataSource, configLocation (iBatis 설정
파일 위치)이 필요함.
iBatis를 이용한 각 DAO구현 Bean.
petstore-servlet.xml
-1
JSP나 HTML 파일과 같이 웹 어플리
케이션의 내부 자원을 이용하여 뷰를
생성.
컨트롤러가 지정한 뷰 이름으로부터
실제로 사용될 뷰를 선택
JstlView : JSTL을 사용하여 뷰를 구현
URL과 일치하는 이름을 갖는 빈을
컨트롤러로 사용함. 다수의 핸들러
매핑을 동시에 설정하게 되면
order 프로퍼티에 적힌 순서대로
실행하며 order 프로퍼티값이 없을
경우 설정 파일에 입력한 순서에
따라 매핑되는 컨트롤러를 검색함.
DB연동이나 별도의 처리 없이 뷰
페이지를 바로 보여주고 싶을 경우,
정적인 뷰를 제공하고 싶은 경우에
사용
petstore-servlet.xml
-2
가장 많이 사용되는 HandlerMapping.
패턴 매칭을 이용하여 매핑.
여기서는 보안에 관련된 매핑을 하기
위해 두번째 HandlerMapping으로 설
정되었슴.
요청 가로채기. 요청을 처리하기 전과
처리한 후에 알맞는 기능을 수행.
Database 설정 with iBatis
dataAccessContext-local.xml
applicationContext.xml
jdbc.properties
Next Page
Database 설정 with iBatis
sql-map-config.xml
Next Page
Database 설정 with iBatis
iBatis 사용 Example
3. 흐름분석

JPetStore의 웹 흐름 분석.

내부 Model부의 흐름 분석.

주요 Controller에 대한 세부 분석.

정확한 흐름이 아닌 이해가 편한 형태로 분석되었음.
JPetStore 요청 정리
요청
Controller 종류
설명
/shop/index.do
없음. 정적인 뷰 제공.
JPetStore의 메인화면으로 가기 위한 요청.
/shop/newAccount.do
SimpleFormController
회원가입 폼 제공. 폼 Validator. 회원가입.
/shop/editAccount.do
SimpleFormController
회원정보 수정 폼 제공. 폼 Validator. 회원정보 수정.
/shop/signonForm.do
없음. 정적인 뷰 제공.
로그인 화면 폼.
/shop/signon.do
Controller
로그인.
/shop/signoff.do
Controller
로그아웃.
/shop/viewCart.do
Controller
장바구니 목록.
/shop/viewCategory.do
Controller
카테고리 목록.
/shop/viewProduct.do
Controller
해당 카테고리의 상품 목록.
/shop/viewItem.do
Controller
상품상세정보 화면.
/shop/searchProducts.do
Controller
상품검색 목록.
/shop/addItemToCart.do
Controller
장바구니에 해당 상품 추가.
/shop/checkout.do
Controller
선택한 상품을 체크아웃함. 주문요청함.
/shop/removeItemFromCart.do
Controller
장바구니목록에서 상품 제거.
/shop/updateCartQuantities.do
Controller
장바구니에서 해당 상품의 구매 요청 갯수 갱신.
/shop/newOrder.do
AbstractWizardFormController
상품 주문. 주문정보 추가. 폼 Validator.
/shop/listOrders.do
Controller
로그인된 회원의 주문 목록.
/shop/viewOrder.do
Controller
주문상세정보 화면.
SignOn 확인. SignOnInterceptor 설정.
Project 실행 흐름
HandlerMapping 1
BeanNameUrlHandlerMapping
Controller
org.springframework.samples.
jpetstore.web.spring
HandlerMapping 2
SimpleUrlHandlerMapping
2. Controller 검색 및 요청
4. 처리 요청
3. 해당 Controller Bean 리턴
5. ModelAndView 리턴
(View 이름)
1. Request(*.do)
Client
DispatcherServlet
8. Response 생성 요청
6. View 검색 및 요청
7. View 리턴
JSP
WEB-INF/jsp/spring
ViewResolver
InternalResourceViewResolver
Model부 실행 흐름
Controller
처리요청
자체처리
AccountFormController
AccountDao
Transaction
with AOP
SignonController
ViewCartController
ViewCategoryController
DAO
PetStoreFacade
SqlMapAccountDao
CategoryDao
SqlMapCategoryDao
DB처리
PetStoreImpl
OrderFormController
ItemDao
...
SqlMapItemDao
ModelAndView
...
요청흐름 : 정적인 View 예제
http://localhost:8080/jpetstore/shop/index.do
1. petstore-servlet.xml
2. JSP
요청흐름 : Controller 구현체 예제
http://localhost:8080/jpetstore/shop/viewCategory.do?categoryId=FISH
1. petstore-servlet.xml
applicationContext.xml
Next Page
요청흐름 : Controller 구현체 예제
http://localhost:8080/jpetstore/shop/viewCategory.do?categoryId=FISH
Next Page
요청흐름 : Controller 구현체 예제
http://localhost:8080/jpetstore/shop/viewCategory.do?categoryId=FISH
2. PetStoreImpl.class
Next Page
요청흐름 : Controller 구현체 예제
http://localhost:8080/jpetstore/shop/viewCategory.do?categoryId=FISH
3. SqlMapCategoryDao.class
Category.xml
Next Page