Download presentation
Presentation is loading. Please wait.
1
최신 소프트웨어 공학 개요 11.1 컴포넌트 기반 소프트웨어 개발 11.2 웹 엔지니어링 11.3 정형적 명세 기법
11.4 익스트림 프로그래밍 11.5 관점 지향 프로그래밍 11.6 웹 서비스와 SOA
2
학습 목표 컴포넌트란 무엇이며 그 개발 과정은 어떻게 되는가? 웹 기반 소프트웨어의 개발 과정은 무엇인가?
정형적 명세 방법에는 어떤 것들이 있으며 어떻게 표현하는가? 익스트림 프로그래밍의 철학과 방법은 무엇인가? 관점지향 프로그래밍이란 무엇인가? 웹 서비스를 이용한 SOA란 무엇인가?
3
소프트웨어 공학 기술의 발전 1970년대 초: 구조적 프로그래밍 1970년대 중: 설계 방법론 1970년대 말: 분석 방법론
구조적 코딩 하향식 프로그래밍 정보 은닉(Parnas) 추상화(Dijkstra) 단계적 세분화(Wirth) 1970년대 중: 설계 방법론 구조적 설계(Yourdon과 Constantine) JSP 설계 방법(Jackson) Warnier-Orr 설계 방법 1970년대 말: 분석 방법론 구조적 분석(Demarco, Gane과 Sarson) SADT(SofTech)
4
소프트웨어 공학 기술의 발전 1980년대 초: 자동화 도구 및 객체지향 프로그래밍
PSL/PSA 코드 자동 생성 소프트웨어 공학 도구 객체지향 프로그래밍(Smalltalk, C++) 1980년대 말: 컴퓨터 응용 소프트웨어 공학 분석을 위한 대화식 그래픽 도구 분석, 설계 지원 도구 프로그래밍 환경 통합 소프트웨어 공학 환경 사용자 인터페이스 관리 시스템
5
소프트웨어 공학 기술의 발전 1990년대 초: 객체지향 소프트웨어 공학 1990년대 중: 객체지향 분산처리
객체지향 분석, 설계(Booch, OMT, Shaller-Meller, Yourdon, Fusion, Jacobson, ) 객체지향 분석, 설계 도구 소프트웨어 리엔지니어링 1990년대 중: 객체지향 분산처리 소프트웨어 재사용 설계 패턴 객체 분산 처리 구조(CORBA, OLE/COM, ...) 분산 객체 프로그래밍(JAVA)
6
소프트웨어 공학 기술의 발전 2000년대 초 2000년 대 중 컴포넌트 개발 방법 익스트림 프로그래밍 애스펙트 중심 프로그래밍
웹 서비스와 SOA
7
11.1 컴포넌트 기반 소프트웨어 개발 목적 컴포넌트 기반 개발 과정 개발 생산성 높임 빨리 좋은 품질의 소프트웨어 개발 가능
객체지향 기술 이용 이미 개발된 컴포넌트를 사용하여 시스템을 구성 언어, 방법, 도구, 관리 등의 여러 요소를 함께 적용 소프트웨어 개발에 사용하는 블록은 프로그래밍 언어에 제약을 받지 않아야 하며, 규모가 크고 캡슐화된 단위여야 한다.
8
컴포넌트란 무엇인가? 정의 밀접한 관계에 있는 소프트웨어의 패키지로서 독립적으로 개발되어 분배될 수 있는 단위이며 다른 컴포넌트와 조립될 수 있도록 제공하는 서비스와 사용하는 서비스를 인터페이스로 정의한 것[D’Souza,1999] 밀접한 관계에 있는 소프트웨어의 패키지 독립적으로 개발되어 분배될 수 있는 단위 제공하는 서비스에 대하여 명시적으로 잘 정의된 인터페이스가 있음 다른 것으로부터 제공되어야 할 서비스에 대하여 명시적으로 잘 정의된 인터페이스가 있어야 함 다른 컴포넌트와 조립될 수 있고 컴포넌트 자체를 수정하지 않고 컴포넌트의 성질을 맞게 고칠 수 있어야 함
9
컴포넌트의 특성 패키지의 단위 독립된 배포 단위 제공하는 인터페이스 리스트 요구되는 인터페이스 리스트 외부 명세 수행 코드
검증 코드 설계 독립된 배포 단위 쪼개어져 일부만 전달될 수 없음
10
컴포넌트의 특성 제공되는 인터페이스와 요구되는 인터페이스의 명세 인터페이스와 구현을 완전히 분리 컴포넌트 조립 컴포넌트 명세
클라이언트가 그 컴포넌트에 대하여 사용할 수 있는 모든 인터페이스와 그 컴포넌트가 조립될 환경에서 제공되어야 할 인터페이스를 나타낸다. 내부 충실적(selfcontained) 대칭적(symmetrical) 인터페이스와 구현을 완전히 분리 인터페이스 명세 컴포넌트가 무엇을 제공하고 사용될 때 무엇을 요구하는지 정의 컴포넌트 조립 조립될 수 있는 컴포넌트 선택 제공하는 인터페이스와 요구하는 인터페이스의 연결
11
컴포넌트의 특성 컴포넌트 조립
12
Java 컴포넌트 JavaBeans 리플렉션 Java를 이용하여 컴포넌트를 구축하기 위한 컴포넌트 기술
Java는 컴파일된 클래스, 인터페이스, 메소드 정의에 대하여 런 타임 형태로 보관하는데 이러한 정보를 접근하여 읽을 수 있는 것이 리플렉션 API이다. 리플렉션을 이용하면 알려지지 않은 타입의 객체에 대하여 인터페이스 및 메소드를 호출하는 바인딩을 늦출 수 있다.
13
Java 컴포넌트 기본 JavaBeans JavaBeans 컴포넌트 Jar 파일 패키징 Enterprise JavaBeans
리플렉션 API를 이용하여 Bean을 인스턴스화 한다. JavaBeans 컴포넌트 Jar 파일 패키징 패키지는 컴포넌트 서비스와 특성, 메소드, 이벤트를 명시한 추가 클래스 파일 및 기타 정보를 포함한다. Enterprise JavaBeans 비즈니스 로직을 서버로 옮기는 과정을 단순화한 서버 컴포넌트 모델 응용 프로그램을 규모나 성능, 신뢰성 측면에서 향상시킨다. 미들웨어를 복잡하게 하여 비용은 증가한다.
14
Java 컴포넌트 Enterprise JavaBeans 구성요소 컨테이너 홈 인터페이스 리모트 인터페이스 EJB 클래스
배치 디스크립터 컨테이너 미들웨어 벤더에 의하여 구현된 컴포넌트로 서버 컴포넌트의 컨테이너 역할 클라이언트에게 리모트 접근, 분산 트랜잭션 관리, 보안, 자원 공동 사용, 병렬 서비스, 클러스터링 등의 서비스를 제공
15
COM+ 컴포넌트 컴포넌트 분야에서 Microsoft가 정의한 별도의 표준
모든 인터페이스는 QueryInterface라는 기능을 제공. 이를 통하여 다른 인터페이스에 대한 질의를 한다. COM 인터페이스는 IDL이라 불리는 인터페이스 정의 언어에 의하여 정의 COM은 OLE(COM인터페이스의 집합)이라 불리는 복합 도큐먼트를 위한 모델을 가지고 있다. COM+는 Microsoft의 최신 컴포넌트 기술로 Java 머쉰과 같은 컴포넌트에 대한 가상 기계 모델을 정의하고 있다.
16
CORBA 컴포넌트 OMG(Object Managemnet Group)에서 다양한 플랫폼과 언어에서 객체 사이의 분산 통신을 지원하기 위해 설계 다른 기종 사이에 수행되기 위하여 CORBA는 바이너리보다는 원시코드 표준이 되었다. 컴포넌트 인터페이스는 CORBA IDL을 이용하여 모듈 안에서 정의 여러 가지 프로그래밍 언어에서 IDL과 바인딩하기 위한 표준이 정의되어 있다.
17
CORBA 컴포넌트 CORBA 구조 CORBA 응용 CORBA 수직기능 CORBA 수평기능 CORBA 버스 CORBA 서비스
18
11.2 웹 엔지니어링 목적 고품질의 웹 기반 시스템을 성공적으로 개발하며 배치하고 유지 보수하기 위하여 엔지니어링 및 경영 관리 원리를 확립하고 사용하는 것 웹 기반 응용 시스템의 특성 네트워크 네트워크 상에 수행되며 다양한 클라이언트에 대하여 서비스 해야 함 컨텐트 중심 엔드유저에게 텍스트, 그래픽, 오비오, 비디오 컨텐트를 제공하는 것 계속적인 진화 시간 단위로 수정됨
19
웹 엔지니어링 웹 엔지니어링의 작업 분류 단순 정보 다운로드 커스텀 기능 인터액션 사용자 입력 트랜젝션 중심 서비스 중심 포탈
데이터 웨어하우스
20
웹 엔지니어링 프로세스 공식화 계획 분석 엔지니어링 웹 응용의 목표와 목적, 범위를 정함
비용 예측, 리스크를 파악하여 개발 일정 정의 분석 기술적인 요구 확립, 그래픽 디자인에 대한 요구도 정의 엔지니어링 컨텐트 설계, 프로덕션 구조 설계, 네비게이션 설계, 인터페이스 설계
21
웹 엔지니어링 프로세스 페이지 생성 및 테스트 고객 평가 자동화 도구를 이용하여 웹 페이지를 구축하는 작업
웹 엔지니어링 프로세스가 반복될 때마다 사용자의 평가가 필요 수용된 변경 요구는 다음 프로세스에 반영
22
웹 엔지니어링 프로세스 웹 엔지니어링 프로세스 모델 공식화1 계획1 분석1 고객 평가1 페이지 생성 및 테스트1 엔지니어링1
구조설계 네비게이션 설계 인터페이스 설계 컨텐트 설계 프로덕션 공식화2 계획2 분석2 고객 평가2 페이지 생성 및 테스트2 엔지니어링2
23
웹 구조 설계 선형 구조 그리드 구조 계층적 구조 네트워크 구조 보여지는 순서가 정해져 있음
웹 페이지의 내용이 이차원적으로 분류된 구조 계층적 구조 계층 구조의 수직적 분기를 따라 제어 흐름이 내려간다. 네트워크 구조 진정한 웹 구조. 웹 응용의 컴포넌트가 자유 자재로 제어를 넘겨서 네비게이션이 자유롭게 된다.
24
웹 구조 설계 선형 구조 그리드 구조
25
웹 구조 설계 계층 구조 네트워크 구조
26
네비게이션 설계 네비게이션 경로를 정의 사용자 부류에 따라 네비게이션 목적을 파악하고 네비게이션 방법을 정의
일시적 방문자 등록된 고객 특별 사용자 네비게이션 목적에 맞는 링크 경로 파악 텍스트 링크, 아이콘, 버튼, 스위치, 그래픽 등에서 선택 언제 클릭 가능하게 하는지도 선택 네비게이션 링크의 색상 결정 사이트 맵, 목차, 인덱스, 탑색 메커니즘, 도움말 기능도 선택
27
인터페이스 설계 심각한 오류 혹은 작은 오류이라도 사용자가 웹 사이트를 떠나게 할 수 있음
컴퓨터 모니터를 읽는 속도는 인쇄물을 읽는 것보다 25 퍼센트 정도 느림 ‘공사 중’이란 표시는 피한다. 사용자는 일반적으로 스크롤이 필요 없게 한 화면에 모든 정보가 담겨 있는 것을 좋아함 네비게이션 메뉴와 헤드바는 일관성 있게 설계하고 모든 페이지에서 보이도록 설계 미학적인 부분이 기능적인 부분을 대치할 수는 없음 네비게이션 옵션은 초보자에게도 분명하고 쉽게 이해할 수 있도록
28
웹 테스트 웹 응용에 포함된 컨텐트에 오류가 있는지 살핌 네비게이션 오류를 찾아내기 위하여 웹 설계 모델을 검토
웹 페이지 단위로 테스트 통합 테스트 시스템 테스트를 위하여 웹 응용 전체 기능과 컨텐트가 잘 나타내지는지 점검 웹 응용이 여러 환경에서 잘 수행되는지 테스트 사용자에 의한 테스트
29
11.3 정형적 명세 기법 정형적 명세 전기, 토목 공학 등 전통적인 공학 기법에서는 수학적 표현이 많이 사용 됨
구문 문법 숙어 등이 수학에 기초한 정형 방법으로 정의된 언어로 작성된 명세 모호하지 않게 전기, 토목 공학 등 전통적인 공학 기법에서는 수학적 표현이 많이 사용 됨 소프트웨어 분야에도 수학적 표현이 필요함 원자로 제어 소프트웨어 제어 시스템 시뮬레이션 시스템
30
기본 개념 간단한 게임 Question: 이 게임은 끝날 것인가? 최종 남은 공의 색깔은?
31
정형적 방법 b: 검은 공 w: 하얀 공 f: 변환을 나타내는 함수 (b-2+1, w)
f(b, w) = (b-1, w+1-1) (b+1, w – 2) (b-1, w) f(b, w) = (b-1, w) (b+1, w-2) f(0,1) = (0, 1) f(1, 0) = (1, 0)
32
증명 Theorem 1: 게임은 끝난다. Theorem 2: f* (b, w) = if odd (w) then (0, 1)
else (1, 0).
33
정형 시스템이란 무엇인가? 정형 시스템이 되기 위한 요소 언어(language): 관심 대상을 표현할 언어
예: 공 꺼내는 게임에서 꺼내는 행위를 f(b, w) = (b-1, w-1+1) 로 표현하는 것 2. 규칙(rule): 언어에서 어떤 사실을 추론하는 규칙 예: (b-1, w-1+1)=(b-1, w)로 유도 시키는 것 3. 의미부여(assigning meaning) 예: b가 검은 공의 개수라고 의미를 부여하는 것 4. 검증(validity) 예: 언어로 표현된 의미가 정확한지 체크하는 일
34
정형 시스템의 기본 요소
35
명세 기법의 종류 대수학적 방법 모형 기반 방법 오퍼레이션과 이들 사이의 관계로 시스템을 표현
시스템: 분할된 서브 시스템의 인터페이스 Larch, OBJ, Lotos 모형 기반 방법 시스템: 상태 모형 집합과 수열, 수학적 요소를 이용하여 표현 Z, VDM, CSP, Petri-net
36
Z 명세 타입이 있는 집합 이론과 논리 스키마 스키마 조합 연산 구문 규칙 집합, 관계, 함수
술어 논리(predicate logic) 사용 스키마 이름 있는 짝(tuples) – 레코드와 같은 것 스키마 조합 연산 작은 스키마들을 조합하여 더 큰 스키마를 만들기 위한 연산자 구문 규칙 추적 용이하도록 프로그래밍과 관련 되도록
37
스키마 Z에서 정형 명세를 구성하는 중요한 단위 스키마는 시스템이 처하는 상태와 일어날 수 있는 오퍼레이션
복잡한 시스템 안의 요소들의 관계들을 나타낸다.
38
상태 스페이스 시스템의 상태는 스키마로 표시함 스키마의 일반적인 형태
39
사례: 생일 기록부 Given Sets [NAME, DATE ] BirthdayBook known: P NAME
birthday: NAME § DATE known = dom birthday
40
사례: 생일 기록부 known = { David, Judy, Robert }
소프트웨어 공학 사례: 생일 기록부 known = { David, Judy, Robert } birthday = { David Œ 24-June, Judy Œ 26-August, Robert Œ 8-July} The invariant is satisfied: known= dom birthday (C) Eun Man Choi, 2002
41
시스템 초기 상태 InitBirthdayBook BirthdayBook birthday = known =
known: P NAME birthday: NAME § DATE known = dom birthday birthday = known =
42
오퍼레이션 SchemaName D State input/output param declarations preconditions
시스템의 상태 변화를 스키마로 표시함 SchemaName D State input/output param declarations preconditions postconditions
43
생일 추가 오퍼레이션 AddBirthday D BirthdayBook name?: NAME date?: DATE
Observations: 오퍼레이션 수행 전의 상태 오퍼레이션 수행 후의 상태 입력과 출력
44
오퍼레이션 AddBirthday D BirthdayBook name?: NAME date?: DATE
known, known’: P NAME birthday, birthday’: NAME § DATE known = dom birthday known’ = dom birthday’
45
생일 추가 오퍼레이션 AddBirthday D BirthdayBook name?: NAME date?: DATE
pre-condition post-condition name? known birthday' = birthday { name? Œ date? }
46
생일 기억 오퍼레이션 Remind X BirthdayBook date?: DATE names!: P NAME names! =
{n: known | birthday(n) = date?}
47
11.4 익스트림 프로그래밍 대규모 시스템 개발 과정의 문제점 애자일(agile) 방법
치밀하게 계획, 품질 보증을 철저히 등의 오버헤드 프로그램 개발 자체 보다는 다른 일(문서화, 회의, 설계 등)의 작업에 더 매달리게 됨 무거운 방법론 애자일(agile) 방법 설계와 문서화 보다는 소프트웨어 그 자체에 더 초점을 두는 방법 사용자의 요구가 빈번히 변경될 수 있는 환경 제공 빠른 피드백 예: 익스트림 프로그래밍, SCRUM, Crystal, Adaptive Software Development, Feature Driven Development
48
애자일 방법의 원리 고객 참여 반복적 릴리스 프로세스보다 사람 변경을 포용 단순함을 유지
고객의 역할 – 시스템의 요구를 제공, 우선순위를 정하여 개발하게 하고 평가 반복적 릴리스 요구를 조금씩 개발하여 단계적으로 릴리스 프로세스보다 사람 개인을 존중하여 맡김 변경을 포용 변경에 조화되도록 설계 단순함을 유지 가능하면 단순하게 하고 복잡한 것은 배제
49
익스트림 프로그래밍의 철학 Kent Beck, 1990년대 초반 소프트웨어 제작을 운전에 비유 철학
가볍고도 효율적이며 낮은 위험도를 가진 유연하면서도 예측 가능한 방법을 궁리 1996년 다임 클라이슬러 프로젝트에 적용 소프트웨어 제작을 운전에 비유 조금씩 핸들을 돌려 궤도를 수정하는 것 수많은 변화와 수정 철학 의사소통 단순성 피드백 용기
50
주요 개념과 방법 계획 세우기 - 우선순위와 기술 사항을 고려하여 범위를 결정
작은 릴리스 - 짧은 사이클로 작은 릴리스를 반복하여 개발 메타포 - 시스템 전체에 대하여 은유적인 접근 단순한 설계 - 최대한 설계를 단순하게 유지 지속적인 테스트 - 개발과 동시에 단위 테스트를 병행 리팩토링 - 코드의 품질을 지속적으로 개선 페어 프로그래밍 - 가장 좋은 구현 방법과 전략을 고민 코드를 공유 - 누구나 코드를 수정하고 집단적인 소유로 여긴다 지속적인 통합 - 개발한 것을 즉시에 또는 매일 통합, 빌드 40시간 작업 - 초과근무를 줄이고 계획적으로 작업 현장 고객 - 고객이 개발 사이트에 상주하며 참여 코딩 표준 - 표준에 맞추어 코딩
51
스토리 카드 사용자 스토리 사례 요구를 높은 수준으로 정의한 것 개발하는 데 드는 노력을 예측할 수 있는 충분한 정보를 줌
학생이 월 정기 승차권을 온라인으로 구입한다. 정기 승차권을 신용카드로 지불한다. 교수가 학생의 성적을 입력한다. 학생이 성적증명서를 신청한다. 학생이 이번 학기 신청한 강의의 시간표를 출력한다. 성적증명서는 표준 브라우저에 온라인으로 준비된다.
52
스토리 카드의 사례
53
페어 프로그래밍 두 명이 한 조가 되어 같은 컴퓨터를 사용하면서 개발 장점 단점
한 사람이 코딩할 때 다른 사람은 어떻게 테스트 할 것인지 궁리 장점 혼자 하는 것보다 원리에 충실 더욱 일에 몰입하여 더 좋은 설계와 코드를 작성할 수 있음 작업이 활기차고 중단을 막게 됨 문제를 더 잘 해결. 견고한 설계 멘토링, 결속력이 강해짐 단점 실력 차이가 많은 경우 실증이 날 수도 있음 부담이 될 수도 있음 생산성을 정확히 확인하기가 어려움
54
생명 주기 반복적인 작업 스토리 작성, 릴리스 계획을 반복 인수 테스트와 작은 릴리스를 배출
55
지속적인 테스트와 통합 사용자에게 데모보다는 실행되는 코드를 빨리 안겨주자는 철학 프로그램이 끝나는 대로 시험하고 이를 통합
JUnit 테스트 케이스를 Java 언어로 작성하여 클래스를 코딩할 때 끼워 넣는 식의 시험 방법 package com.sample import junit.framework.TestCase public class TC_Account extends TestCase { public TC_Account(String arg0) { super(arg0); } protected void setUp() throws Exception { super.setUp(); public void testDeposit() { Account account = new Account(); assertEquals("Account should start with no funds.", 0, account.balance()); protected void tearDown() throws Exception { super.tearDown(); }
56
JUnit을 이용한 테스트
57
11.5 관점 지향 프로그래밍
58
AOP의 목표와 장점 AOP의 목표 AOP의 장점 분산된 기능을 모듈로 선언하는 관점을 생성하는데 초점
제어구조가 엉키는 일이 적게 된다. 코드의 크기가 줄어든다. 애플리케이션의 유지보수가 쉬워진다. 디버깅, 리팩토링, 수정이 쉬워진다. 객체지향 프로그래밍의 클래스 라이브러리와 같이 애스펙트 라이브러리를 만들어 재사용할 수 있다.
59
OOP의 문제점(사례) 객체지향 애플리케이션 관점 1: 시스템은 모든 상품의 도매가격을 보관하여야 한다.
관점 2: 가격에 대한 변화가 기록되어야 한다. public abstract class Product { private real price; product () { price = 0.0; } public void putPrice(real p) { price = p; public int getPrice() { return price; } public class Logger { private OutputStream ostream; Logger() { // open log file } void writeLog(String value) { // write value to log file }
60
가격 변동 저장 public abstract class Product { private real price;
Logger loggerObject; product () { price = 0.0; loggerObject = new Logger(); } public void putPrice(real p) { loggerObject.writeLog("Changed Price from" + price + " to " + p); price = p; } public int getPrice() { return price;
61
횡단과 AOP 시스템의 요구가 하나의 객체에 캡슐화 되어 있지 않고 여러 객체에 퍼져 널려있는 현상 AOP
예: Product 클래스 타이밍 정보나 인증, 영구 데이터 저장과 같은 것을 추가한다면 Product 안에 추가됨 AOP 호스트 언어에 맞는 관점의 분리를 허용 다른 컴포넌트를 횡단하는 관심사를 기술할 수 있는 메커니즘을 제공
62
AOP의 도구 애스펙트 define aspect Logging{
관심사를 정의할 수 있는 문법적 단위, 컴포넌트 언어 하나의 컴포넌트에서 다른 컴포넌트에 있는 기능을 호출하는 횡단을 기술할 수 있는 언어 define aspect Logging{ Logger loggingObject = new Logger(); when calling set*(talkng one parameter) { loggingObject.writeLog("Called set method"); } }
63
AOP의 도구 직조 컴포넌트 언어와 애스팩트와의 통합
64
주요 구문 조인 포인트 사례 관심사가 주 프로그램의 어디에 횡단할 것인지를 나타내는 위치
예: 메소드의 호출, 생성자의 호출, 예외 처리 등 사례 데이터베이스 안에 있는 모든 SQL 실행을 기록 트랜젝션 컴포넌트 클래스 안에 updateTable()이라는 메소드를 만들어 모든 변경을 처리 애스펙트 - 타임스탬프를 기록하고 성공을 알림 조인포인트 - public String DBTrans.updateTable(string)
65
포인트 컷 AOP 언어에게 언제 조인 포인트가 매치될 것인지를 알려주는 구문 예 포인트 컷
특정 객체가 다른 객체에게 호출할 때 동일한 객체가 호출 될 때 call(public String DBTrand.updateTables(String)) 포인트 컷 조인트 포인트로 지정하는 문장을 그루핑 Pointcut updateTable() : call(public String DBTrans.updateTables(String))
66
어드바이스 포인트 컷이 활성화 되면 해당되는 어드바이스 코드가 실행됨 위치 before around after
before(String s) : updateTables(s) { System.out.println("Passed parameter - " + s); }
67
애스펙트 조인 포인트, 포인트 컷, 어드바이스의 캡슐화 public aspect TableAspect {
pointcut updateTable(String s); call (public String DBTrans.updateTables(String) && args(s); before(String s) : updateTable(s) { System.out.println("Passed parameter - " + s); } }
68
AspectJ Xerox의 Palo Alto 연구소의 연구 결과 목표 Java 언어를 위한 애스펙트 정의 기능을 제공
public class Simple { private String name; public String getName() { return name; } public static void main(String args[]) { Simple simple = new Simple(); System.out.println(simple.getName()); }
69
AspectJ ajc 컴파일러 public aspect SimpleAspect {
pointcut nsmePC() : call (public String getName()); before() : MatchAllgetName() { System.out.println(thisJoinPoint.getSingnature()); } } ajc 컴파일러 애스펙트 고유의 구문을 컴파일 하여 바이트 코드로 만듦 직조하기 쉬운 형태 애스펙트 코드는 클래스로 변환되고 AOP 고유의 문장은 Java 언어로 바뀜
70
11.6 웹 서비스와 SOA 오랜 동안 투자한 정보 시스템을 계속 효과적으로 이용하는 방법 웹 서비스 SOA
웹을 기반으로 한 서비스 통신 방식 Jini 기술에 의하여 소개된 서비스 개념을 채택하고 XML과 같은 기술을 이용하여 웹에 서비스를 제공하도록 구현한 것 SOA 웹과 같은 네트워크 상에서 서비스를 사용하여 소프트웨어 애플리케이션을 구성할 수 있게 하는 아키텍처 스타일
71
SOA 개요 소프트웨어 컴포넌트들 사이에 느슨한 결합을 이용하여 애플리케이션을 구성하는 방법
IT 인프라에 있는 애플리케이션으로 새로운 서비스를 만들 수 있게 함 잘 정의된 비즈니스 기능을 구현한 서비스를 이용 다양한 애플리케이션을 구성할 수 있게 함
72
SOA의 장점 서비스는 구현 기술에 관계없이 잘 정의된 인터페이스를 가진 소프트웨어 컴포넌트
서비스는 내부 함축적이고 느슨하게 결합되어 있음 서비스는 동적으로 발견될 수 있음 복합 서비스는 다른 서비스를 모아서 만들 수 있음
73
SOA 패러다임
74
웹 서비스를 이용한 SOA 구현 UDDI – 플랫폼에 무관한 XML 기반의 레지스트리
WSDL – XML기반의 서비스 정의 명세 SOAP – 네트워크 상에서 XML 기반의 메시지를 교환하기 위한 프로토콜
75
SOA를 이루는 층
Similar presentations