스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처

20
박성철 스프링 프레임워크 코어 Spring Web App Architecture

Upload: sungchul-park

Post on 11-Jun-2015

2.448 views

Category:

Software


3 download

DESCRIPTION

사내에서 진행 된 스프링 웹 애플리케이션 개발 과정 중 스프링 코어 부분의 세번째 발표 자료입니다

TRANSCRIPT

Page 1: 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처

박성철

스프링 프레임워크 코어Spring Web App Architecture

Page 2: 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처

다중 계층 아키텍쳐

Page 3: 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처

다중 계층 아키텍쳐

표현 계층

애플리케이션 계층

비지니스 로직 계층

인프라 계층

업무A 업무B 업무C

Page 4: 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처

스프링 MVC + 다중 계층

사용자 측

프론트컨트롤러 컨트롤러

모델뷰

애플리케이션 계층

비지니스 로직 계층

인프라 계층

Page 5: 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처

스프링 컨테이너 분리

프론트컨트롤러 컨트롤러

모델뷰

최상단 애플리케이션 컨텍스트

웹 애플리케이션 컨텍스트Dispatch Servlet이 생성

WebApplicationInitializer 구현체에서 직접 만들거나 ContextLoeaderListner가 생성

애플리케이션 계층

비지니스 로직 계층

인프라 계층

Page 6: 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처

트랜잭션 스크립트 패턴(Transaction Script)

표현 계층

애플리케이션 계층

비지니스 로직 계층

인프라 계층

업무A 업무B 업무C

중복

발생

Page 7: 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처

다중 계층 + 도메인 모델

표현 계층

애플리케이션 계층

비지니스 로직 계층

인프라 계층

도메인

모델

Page 8: 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처

육각 아키텍쳐인프라

사용자

측데이터

도메인모델

서비스App 서비스

Page 9: 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처

스프링 MVC + 육각 아키텍쳐

사용자 측

데이터

인프라

App 서비스

도메인모델

프론트컨트롤러 컨트롤러

모델뷰

서비스

Page 10: 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처

스프링 컨테이너 분리

프론트컨트롤러 컨트롤러

모델뷰

인프라

도메인모델

서비스

App 서비스

최상단 애플리케이션 컨텍스트

웹 애플리케이션 컨텍스트Dispatch Servlet이 생성

WebApplicationInitializer 구현체에서 직접 만들거나 ContextLoeaderListner가 생성

Page 11: 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처

데이터

인프라

도메인모델

서비스

애플리케이션 서비스애플리케이션의 사용자 쓰임새애플리케이션의 컨트롤러 역할비 도메인 로직과 도메인 로직의 통합도메인 로직은 도메인 서비스나 도메인 모델에 위임스프링 @

App 서비스

애플리케이션 서비스

UI

도메인 서비스

Page 12: 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처

데이터

인프라

도메인모델

서비스

도메인 서비스

여러 도메인 객체가 관여하는 복잡적 업무 처리순수 도메인 로직외부 도메인 로직 노출 단순화, 파싸드(Facade)

App 서비스

도메인 서비스

애플리케이션 서비스

도메인 서비스

Page 13: 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처

데이터

인프라

도메인모델

서비스

도메인 모델복잡한 업무를 도메인 객체의 협력 구조로 모델링OO 도메인 모델객체로 업무 규칙(rule)데이터베이스 모델과 유사단순한 도메인 모델 = DB

App 서비스

Page 14: 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처

도메인 모델 VS DTO

도메인 모델

- 모델링 된 결과

- 영속화 대상

- 리치 도메인 모델은 중량 객체

DTO(

- 계층간 데이터 전송용 객체

- 주고 받는 쌍방 간의 관심사 반영

- 도메인 로직 은익

- 과거 값 객체(

애플리케이션 서비스

UI

요청

반환도메인

DTO

전송 객체 생성기

DTO

참조

참조

Page 15: 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처

도메인 모델: 저장소

도메인 모델이 인프라에 의존하지 않도록 저장소 추상화데이터 검색/저장 작업을 일반 자료구조와 유사하게 처리스프링의

데이터

인프라

도메인모델

서비스

App 서비스저장소 인터페이스

저장소 클래스

도메인객체

도메인 모델

인프라

Page 16: 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처

도메인 모델: 인프라 서비스

도메인 모델이 인프라에 의존하지 않도록 외부 연동 추상화

데이터

인프라

도메인모델

서비스

App 서비스인프라 서비스 인터페이스

인프라 서비스클래스

도메인객체

도메인 모델

인프라

Page 17: 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처

데이터 접근: 테이블 데이터 GW일반적으로 DAODB 단일 테이블에 대한 모든 SQL무상태 객체

find(int) findWithLastName(String) update(…) insert(…) delete(int)

PersonGateway

Page 18: 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처

데이터 접근: 행 데이터 GW데이터와 DBDB 데이터와 DB검색은 Finder

update(…) insert(…) delete(int)

PersonGateway

find(int) findWithLastName(String)

PersonFinder

lastname firstname numberOfDependents

Page 19: 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처

데이터 접근: 액티브 레코드

행 데이터 게이트웨이 + 도메인 로직

update(…) insert(…) delete(int) isValid() getFullName()

Person

find(int) findWithLastName(String)

PersonFinder

lastname firstname numberOfDependents

Page 20: 스프링 코어 강의 3부 - 웹 애플리케이션 아키텍처

데이터 접근: 데이터 매퍼

도메인 객체와 DB 도메인 객체 그래프와 DB

isValid() getFullName()

Person

lastname firstname numberOfDependents

PersonMapper

insert() update() delte()