SlideShare a Scribd company logo
시스템

      박기덕
목차

1. 제작과 사용의 분리

2. 확장

3. 자바 프록시

4. 순수 Java AOP 프레임워크

5. 결론
1. 제작과 사용의 분리
● 소프트웨어 시스템은 '시작'과 '실행'으로 분리
  ○ 시작 : 응용 프로그램 객체를 제작하고 의존성을 서로 연결하는 단계
  ○ 실행 : 시작 단계 이후에 실제로 동작하는 단계

● 시작 단계는 모든 응용 프로그램이 풀어야 할 관심사이
  며, 관심사 분리는 우리 분야에서 가장 오래되고 가장 중
  요한 설계 기법

● 설정 논리는 일반 실행 논리와 분리해 모듈성을 높이고,
  주요 의존성 해소 필요
1. 제작과 사용의 분리



       초기화 지연(Lazy Initialization) or 계산 지연(Lazy Evaluation) 기법


● 장점
 ○   실제로 필요할 때까지 객체를 생성하지 않으므로 불필요한 부하 제거
 ○   Null Return 제거

● 단점
 ○   getService() 메소드의 MyServiceImpl 과 생성자 인수에 의존
 ○   테스트의 복잡성 증가
1. 제작과 사용의 분리
● 생성과 관련된 코드는 모두 main이 담당




● main에서 객체를 생성해 application으로 전달하고 객체
  의 사용은 application에서 진행(application은 객체가 생
  성되는 과정은 알지 못한다.)
1. 제작과 사용의 분리
● application에서 객체를 생성할 때는 Abstract Factory 패
  턴을 사용




● LineItem을 생성하는 시점은 OrderProcessing이 결정하
  지만 생성은 main이 담당
1. 제작과 사용의 분리
● 의존성 주입(DI)은 제어 역전(IoC)기법을 의존성 관리에
  적용한 메커니즘


● 클래스가 의존성을 제어하지 않고 수동적으로 DI 컨테이
  너에서 제어


● DI 컨테이너는 요청이 들어올 때 마다 필요한 객체의 인
  스턴스를 만든 후 생성자 인수나 설정 메소드를 사용해
  의존성을 설정
2. 확장
● 소프트웨어 시스템은 물리적 시스템과 다르다. 관심사를
  적절히 분리해서 관리해야 소프트웨어 아키텍처는 점진
  적으로 발전
2. 확장
        ●   비즈니스 논리는 EJB2 컨테이너
            에 강하게 결합된다.

        ●   클래스 생성 시 컨테이너에서 파
            생되야 하고, 컨테이너가 요구하
            는 생성주기 메소드도 제공해야
            하기 때문

        ●   위와 같이 비즈니스 논리가 덩치
            큰 컨테이너와 밀접하게 결합되
            서 단위 테스트가 어렵고, EJB2
            코드는 프레임워크 밖에서는 재
            사용이 불가능 해진다.
2. 확장
● EJB2 아키텍처는 일부 영역에서 관심사를 거의 완벽하
  게 분리한다. 예를 들어, 원하는 트랜잭션, 보안, 일부 영
  속적인 동작은 소스 코드가 아니라 배치 기술자에 정의
  한다.

● EJB 아키첵처의 이러한 방식이 관점 지향 프로그래밍
  (AOP)를 예견했다고 보인다.

● AOP에서 aspect라는 모듈 구성 개념은 "특정 관심사를
  지원하려면 시스템에서 특정 지점들이 동작하는 방식을
  일괄적으로 바꿔야 한다"라고 명시 한다.
3. 자바 프록시




            bank.getAccounts();
            List<Account> act = new ArrayList<Account> ();
            bank.setAccounts(act);
3. 자바 프록시
● 자바 프록시는 개별 객체나 클래스에서 메소드 호출을
  감싸는 경우 사용 (단순한 사용에 적합)

● JDK에서 제공하는 동적 프록시는 인터페이스만을 지원
  하고 클래스 프록시를 사용하려면 CGLIB, ASM,
  Javassist 등과 같은 바이트 코드 처리 라이브러리 필요

● BankProxyHandler는 자바 리플렉션 API를 사용해 제네
  릭 메소드를 상응하는 BankImpl 메소드로 사상

● 코드 '양', '크기'는 프록지의 단점이며, 프록시를 사용하
  면 클린 코드를 작성하기 어렵다.
4. 순수 Java AOP 프레임워크
● 스프링은 비즈니스 논리를 POJO(Plain-Old Java Object)
  로 구현

● 스프링 프레임워크는 사용자가 모르게 프록시나 바이트
  코드 라이브러리를 사용해 앞에서 살펴본 횡단 관심사를
  구현

● 즉, 요청에 따라 주요 객체를 생성하고 서로 연결하는 등
  DI 컨테이너의 구체적인 동작을 제어
4. 순수 Java AOP 프레임워크




●   bank 객체는 DAO로 프록시 되고, DAO는 JDBC 드라이버로 프록시 된다.

●   클라이언트는 bank 객체에서 getAccounts()를 호출한다고 믿지만 실제로 bank POJO의 기
    본 동작을 확장한 중첩 Decorator 객체 집합의 가장 외곽과 통신 ( 즉, bank객체에서
    getAccounts()를 호출하면 실질적인 동작은 appDataSource에서 DB작업을 실행한다.)
4. 순수 Java AOP 프레임워크
● 응용 프로그램에서 DI 컨테이너에게 시스템 내 최상위
  객체를 요청하려면 아래와 같이 요청
 XmlBeanFactory bf = new XmlBeanFactory(new ClassPathResource("app.xml", getClass()));
 Bank bank = (Bank) bf.getBean("bank");



● 스프링에 관련한 자바 코드가 거의 필요 없으므로 응용
  프로그램은 사실상 스프링과 독립적이므로 EJB2 시스템
  이 지녔던 강한 결합성 문제가 해결

● XML을 사용하면 '정책'이 겉으로 보이지 않지만 자동으
  로 생성되는 프록시나 관점 논리보다는 단순하며, 이러
  한 장점이 EJB3에서 횡단 관심사를 선언적으로 지원하
  는 스프링 모델을 따르도록 변경하게 만들었다.
4. 순수 Java AOP 프레임워크
                ●   EJB2에서 사용했던 프레임워크 의존
                    적인 부분이 사라진 것을 확인 할 수
                    있다.

                ●   일부 상세한 정보는 주석에 포함되어
                    그대로 남아있지만, 모든 정보가 주석
                    속에 있으므로 코드 자체는 깔끔하고
                    깨끗해 진다.

                ●   즉, 코드를 테스트하고, 개선하고, 보
                    수하기가 용이해졌다.

                ●   주석으로 들어있는 영속성 정보는 일
                    부든 전부든, 필요하다면 xml 배치 기
                    술자로 옮겨 사용해도 된다. 그러면
                    POJO가 되게 된다.
5. 결론
● 의사 결정을 최적화 하라.
  ○ 관심사를 모듈로 분리한 POJO 시스템 사용

● 명백한 가치가 있을 때 표준을 현명하게 사용하라.
  ○ 표준을 사용하면 재사용이 쉽고, 캡슐화가 용이하고, 컴포넌트를 엮기
     쉽지만, 시간이 너무 오래걸리고, 복잡도를 증가 시킬 가능성이 존재

● 시스템은 도메인 특화 언어가 필요하다.
  ○ DSL(Domain-Specifie Language)을 사용하면 고차원 정책에서 저차원
     세부 사항에 이르기까지 모든 추상화 수준과 모든 도메인을 POJO로 표
     현 가능

● 시스템은 깨끗 해야 한다. 즉, 이해하기 쉽고, 단순하며,
  관점이 잘 분리되어야 한다.

More Related Content

Similar to 11장 시스템

자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
DK Lee
 
[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개
HYUN-JOO LEE
 
JavaEE6 - 설계 차원의 단순성
JavaEE6 - 설계 차원의 단순성JavaEE6 - 설계 차원의 단순성
JavaEE6 - 설계 차원의 단순성
Jay Lee
 
마이크로 프론트엔드 아키텍쳐를 위한 모노레포 관리
마이크로 프론트엔드 아키텍쳐를 위한 모노레포 관리마이크로 프론트엔드 아키텍쳐를 위한 모노레포 관리
마이크로 프론트엔드 아키텍쳐를 위한 모노레포 관리
경식 최
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
Kyung Koo Yoon
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장
Seongchan Kang
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수
Yeon Soo Kim
 
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
beom kyun choi
 
[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계
AnselmKim
 
Implementing_AOP_in_Spring_SYS4U
Implementing_AOP_in_Spring_SYS4UImplementing_AOP_in_Spring_SYS4U
Implementing_AOP_in_Spring_SYS4Usys4u
 
C++ 코딩의 정석.pptx
C++ 코딩의 정석.pptxC++ 코딩의 정석.pptx
C++ 코딩의 정석.pptx
sung suk seo
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Daum DNA
 
클린 코드 part2
클린 코드 part2클린 코드 part2
클린 코드 part2
Minseok Jang
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
SangIn Choung
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)
중선 곽
 
Architecture patterns with python (2)
Architecture patterns with python (2)Architecture patterns with python (2)
Architecture patterns with python (2)
동환 김
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
중선 곽
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core
Ji-Woong Choi
 
Spring vs. spring boot
Spring vs. spring bootSpring vs. spring boot
Spring vs. spring boot
ChloeChoi23
 

Similar to 11장 시스템 (20)

자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
 
[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개
 
JavaEE6 - 설계 차원의 단순성
JavaEE6 - 설계 차원의 단순성JavaEE6 - 설계 차원의 단순성
JavaEE6 - 설계 차원의 단순성
 
마이크로 프론트엔드 아키텍쳐를 위한 모노레포 관리
마이크로 프론트엔드 아키텍쳐를 위한 모노레포 관리마이크로 프론트엔드 아키텍쳐를 위한 모노레포 관리
마이크로 프론트엔드 아키텍쳐를 위한 모노레포 관리
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수
 
ecdevday4
ecdevday4ecdevday4
ecdevday4
 
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
 
[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계
 
Implementing_AOP_in_Spring_SYS4U
Implementing_AOP_in_Spring_SYS4UImplementing_AOP_in_Spring_SYS4U
Implementing_AOP_in_Spring_SYS4U
 
C++ 코딩의 정석.pptx
C++ 코딩의 정석.pptxC++ 코딩의 정석.pptx
C++ 코딩의 정석.pptx
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기
 
클린 코드 part2
클린 코드 part2클린 코드 part2
클린 코드 part2
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)
 
Architecture patterns with python (2)
Architecture patterns with python (2)Architecture patterns with python (2)
Architecture patterns with python (2)
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core
 
Spring vs. spring boot
Spring vs. spring bootSpring vs. spring boot
Spring vs. spring boot
 

More from kidoki

Hadoop io
Hadoop ioHadoop io
Hadoop io
kidoki
 
Chapter 14. json
Chapter 14. jsonChapter 14. json
Chapter 14. json
kidoki
 
전문 검색 기술
전문 검색 기술전문 검색 기술
전문 검색 기술
kidoki
 
Http 헤더
Http 헤더Http 헤더
Http 헤더
kidoki
 
로그 수집, 집약
로그 수집, 집약로그 수집, 집약
로그 수집, 집약kidoki
 
14. no sql을 넘어
14. no sql을 넘어14. no sql을 넘어
14. no sql을 넘어kidoki
 
My sql 장애복구
My sql 장애복구My sql 장애복구
My sql 장애복구kidoki
 
9장. 문서 데이터베이스
9장. 문서 데이터베이스9장. 문서 데이터베이스
9장. 문서 데이터베이스kidoki
 
[NoSQL] 2장. 집합적 데이터 모델
[NoSQL] 2장. 집합적 데이터 모델[NoSQL] 2장. 집합적 데이터 모델
[NoSQL] 2장. 집합적 데이터 모델kidoki
 
Code chapter15
Code chapter15Code chapter15
Code chapter15
kidoki
 
Code chapter5
Code chapter5Code chapter5
Code chapter5
kidoki
 
Ch18. 빅리그 거물에서 선지자로
Ch18. 빅리그 거물에서 선지자로Ch18. 빅리그 거물에서 선지자로
Ch18. 빅리그 거물에서 선지자로kidoki
 
Ch.11 승진
Ch.11 승진Ch.11 승진
Ch.11 승진kidoki
 
Ch7. 소프트웨어 r&d 조직
Ch7. 소프트웨어 r&d 조직Ch7. 소프트웨어 r&d 조직
Ch7. 소프트웨어 r&d 조직kidoki
 
Ch2. 좋은 소프트웨어란
Ch2. 좋은 소프트웨어란Ch2. 좋은 소프트웨어란
Ch2. 좋은 소프트웨어란kidoki
 
11장. 분석 패턴의 적용
11장. 분석 패턴의 적용11장. 분석 패턴의 적용
11장. 분석 패턴의 적용
kidoki
 
2장. 의사소통과 언어 사용
2장. 의사소통과 언어 사용2장. 의사소통과 언어 사용
2장. 의사소통과 언어 사용
kidoki
 
클러스터링을 통한 패턴 추출
클러스터링을 통한 패턴 추출클러스터링을 통한 패턴 추출
클러스터링을 통한 패턴 추출kidoki
 
정규확률분포
정규확률분포정규확률분포
정규확률분포
kidoki
 
Composite pattern
Composite patternComposite pattern
Composite pattern
kidoki
 

More from kidoki (20)

Hadoop io
Hadoop ioHadoop io
Hadoop io
 
Chapter 14. json
Chapter 14. jsonChapter 14. json
Chapter 14. json
 
전문 검색 기술
전문 검색 기술전문 검색 기술
전문 검색 기술
 
Http 헤더
Http 헤더Http 헤더
Http 헤더
 
로그 수집, 집약
로그 수집, 집약로그 수집, 집약
로그 수집, 집약
 
14. no sql을 넘어
14. no sql을 넘어14. no sql을 넘어
14. no sql을 넘어
 
My sql 장애복구
My sql 장애복구My sql 장애복구
My sql 장애복구
 
9장. 문서 데이터베이스
9장. 문서 데이터베이스9장. 문서 데이터베이스
9장. 문서 데이터베이스
 
[NoSQL] 2장. 집합적 데이터 모델
[NoSQL] 2장. 집합적 데이터 모델[NoSQL] 2장. 집합적 데이터 모델
[NoSQL] 2장. 집합적 데이터 모델
 
Code chapter15
Code chapter15Code chapter15
Code chapter15
 
Code chapter5
Code chapter5Code chapter5
Code chapter5
 
Ch18. 빅리그 거물에서 선지자로
Ch18. 빅리그 거물에서 선지자로Ch18. 빅리그 거물에서 선지자로
Ch18. 빅리그 거물에서 선지자로
 
Ch.11 승진
Ch.11 승진Ch.11 승진
Ch.11 승진
 
Ch7. 소프트웨어 r&d 조직
Ch7. 소프트웨어 r&d 조직Ch7. 소프트웨어 r&d 조직
Ch7. 소프트웨어 r&d 조직
 
Ch2. 좋은 소프트웨어란
Ch2. 좋은 소프트웨어란Ch2. 좋은 소프트웨어란
Ch2. 좋은 소프트웨어란
 
11장. 분석 패턴의 적용
11장. 분석 패턴의 적용11장. 분석 패턴의 적용
11장. 분석 패턴의 적용
 
2장. 의사소통과 언어 사용
2장. 의사소통과 언어 사용2장. 의사소통과 언어 사용
2장. 의사소통과 언어 사용
 
클러스터링을 통한 패턴 추출
클러스터링을 통한 패턴 추출클러스터링을 통한 패턴 추출
클러스터링을 통한 패턴 추출
 
정규확률분포
정규확률분포정규확률분포
정규확률분포
 
Composite pattern
Composite patternComposite pattern
Composite pattern
 

11장 시스템

  • 1. 시스템 박기덕
  • 2. 목차 1. 제작과 사용의 분리 2. 확장 3. 자바 프록시 4. 순수 Java AOP 프레임워크 5. 결론
  • 3.
  • 4. 1. 제작과 사용의 분리 ● 소프트웨어 시스템은 '시작'과 '실행'으로 분리 ○ 시작 : 응용 프로그램 객체를 제작하고 의존성을 서로 연결하는 단계 ○ 실행 : 시작 단계 이후에 실제로 동작하는 단계 ● 시작 단계는 모든 응용 프로그램이 풀어야 할 관심사이 며, 관심사 분리는 우리 분야에서 가장 오래되고 가장 중 요한 설계 기법 ● 설정 논리는 일반 실행 논리와 분리해 모듈성을 높이고, 주요 의존성 해소 필요
  • 5. 1. 제작과 사용의 분리 초기화 지연(Lazy Initialization) or 계산 지연(Lazy Evaluation) 기법 ● 장점 ○ 실제로 필요할 때까지 객체를 생성하지 않으므로 불필요한 부하 제거 ○ Null Return 제거 ● 단점 ○ getService() 메소드의 MyServiceImpl 과 생성자 인수에 의존 ○ 테스트의 복잡성 증가
  • 6. 1. 제작과 사용의 분리 ● 생성과 관련된 코드는 모두 main이 담당 ● main에서 객체를 생성해 application으로 전달하고 객체 의 사용은 application에서 진행(application은 객체가 생 성되는 과정은 알지 못한다.)
  • 7. 1. 제작과 사용의 분리 ● application에서 객체를 생성할 때는 Abstract Factory 패 턴을 사용 ● LineItem을 생성하는 시점은 OrderProcessing이 결정하 지만 생성은 main이 담당
  • 8. 1. 제작과 사용의 분리 ● 의존성 주입(DI)은 제어 역전(IoC)기법을 의존성 관리에 적용한 메커니즘 ● 클래스가 의존성을 제어하지 않고 수동적으로 DI 컨테이 너에서 제어 ● DI 컨테이너는 요청이 들어올 때 마다 필요한 객체의 인 스턴스를 만든 후 생성자 인수나 설정 메소드를 사용해 의존성을 설정
  • 9. 2. 확장 ● 소프트웨어 시스템은 물리적 시스템과 다르다. 관심사를 적절히 분리해서 관리해야 소프트웨어 아키텍처는 점진 적으로 발전
  • 10. 2. 확장 ● 비즈니스 논리는 EJB2 컨테이너 에 강하게 결합된다. ● 클래스 생성 시 컨테이너에서 파 생되야 하고, 컨테이너가 요구하 는 생성주기 메소드도 제공해야 하기 때문 ● 위와 같이 비즈니스 논리가 덩치 큰 컨테이너와 밀접하게 결합되 서 단위 테스트가 어렵고, EJB2 코드는 프레임워크 밖에서는 재 사용이 불가능 해진다.
  • 11. 2. 확장 ● EJB2 아키텍처는 일부 영역에서 관심사를 거의 완벽하 게 분리한다. 예를 들어, 원하는 트랜잭션, 보안, 일부 영 속적인 동작은 소스 코드가 아니라 배치 기술자에 정의 한다. ● EJB 아키첵처의 이러한 방식이 관점 지향 프로그래밍 (AOP)를 예견했다고 보인다. ● AOP에서 aspect라는 모듈 구성 개념은 "특정 관심사를 지원하려면 시스템에서 특정 지점들이 동작하는 방식을 일괄적으로 바꿔야 한다"라고 명시 한다.
  • 12. 3. 자바 프록시 bank.getAccounts(); List<Account> act = new ArrayList<Account> (); bank.setAccounts(act);
  • 13. 3. 자바 프록시 ● 자바 프록시는 개별 객체나 클래스에서 메소드 호출을 감싸는 경우 사용 (단순한 사용에 적합) ● JDK에서 제공하는 동적 프록시는 인터페이스만을 지원 하고 클래스 프록시를 사용하려면 CGLIB, ASM, Javassist 등과 같은 바이트 코드 처리 라이브러리 필요 ● BankProxyHandler는 자바 리플렉션 API를 사용해 제네 릭 메소드를 상응하는 BankImpl 메소드로 사상 ● 코드 '양', '크기'는 프록지의 단점이며, 프록시를 사용하 면 클린 코드를 작성하기 어렵다.
  • 14. 4. 순수 Java AOP 프레임워크 ● 스프링은 비즈니스 논리를 POJO(Plain-Old Java Object) 로 구현 ● 스프링 프레임워크는 사용자가 모르게 프록시나 바이트 코드 라이브러리를 사용해 앞에서 살펴본 횡단 관심사를 구현 ● 즉, 요청에 따라 주요 객체를 생성하고 서로 연결하는 등 DI 컨테이너의 구체적인 동작을 제어
  • 15. 4. 순수 Java AOP 프레임워크 ● bank 객체는 DAO로 프록시 되고, DAO는 JDBC 드라이버로 프록시 된다. ● 클라이언트는 bank 객체에서 getAccounts()를 호출한다고 믿지만 실제로 bank POJO의 기 본 동작을 확장한 중첩 Decorator 객체 집합의 가장 외곽과 통신 ( 즉, bank객체에서 getAccounts()를 호출하면 실질적인 동작은 appDataSource에서 DB작업을 실행한다.)
  • 16. 4. 순수 Java AOP 프레임워크 ● 응용 프로그램에서 DI 컨테이너에게 시스템 내 최상위 객체를 요청하려면 아래와 같이 요청 XmlBeanFactory bf = new XmlBeanFactory(new ClassPathResource("app.xml", getClass())); Bank bank = (Bank) bf.getBean("bank"); ● 스프링에 관련한 자바 코드가 거의 필요 없으므로 응용 프로그램은 사실상 스프링과 독립적이므로 EJB2 시스템 이 지녔던 강한 결합성 문제가 해결 ● XML을 사용하면 '정책'이 겉으로 보이지 않지만 자동으 로 생성되는 프록시나 관점 논리보다는 단순하며, 이러 한 장점이 EJB3에서 횡단 관심사를 선언적으로 지원하 는 스프링 모델을 따르도록 변경하게 만들었다.
  • 17. 4. 순수 Java AOP 프레임워크 ● EJB2에서 사용했던 프레임워크 의존 적인 부분이 사라진 것을 확인 할 수 있다. ● 일부 상세한 정보는 주석에 포함되어 그대로 남아있지만, 모든 정보가 주석 속에 있으므로 코드 자체는 깔끔하고 깨끗해 진다. ● 즉, 코드를 테스트하고, 개선하고, 보 수하기가 용이해졌다. ● 주석으로 들어있는 영속성 정보는 일 부든 전부든, 필요하다면 xml 배치 기 술자로 옮겨 사용해도 된다. 그러면 POJO가 되게 된다.
  • 18. 5. 결론 ● 의사 결정을 최적화 하라. ○ 관심사를 모듈로 분리한 POJO 시스템 사용 ● 명백한 가치가 있을 때 표준을 현명하게 사용하라. ○ 표준을 사용하면 재사용이 쉽고, 캡슐화가 용이하고, 컴포넌트를 엮기 쉽지만, 시간이 너무 오래걸리고, 복잡도를 증가 시킬 가능성이 존재 ● 시스템은 도메인 특화 언어가 필요하다. ○ DSL(Domain-Specifie Language)을 사용하면 고차원 정책에서 저차원 세부 사항에 이르기까지 모든 추상화 수준과 모든 도메인을 POJO로 표 현 가능 ● 시스템은 깨끗 해야 한다. 즉, 이해하기 쉽고, 단순하며, 관점이 잘 분리되어야 한다.