Download presentation
Presentation is loading. Please wait.
1
소프트웨어 공학 최신 소프트웨어 공학 기술 1
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
12.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
12.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
12.4 익스트림 프로그래밍 대규모 시스템 개발 과정의 문제점 애자일(agile) 방법
치밀하게 계획, 품질 보증을 철저히 등의 오버헤드 프로그램 개발 자체 보다는 다른 일(문서화, 회의, 설계 등)의 작업에 더 매달리게 됨 무거운 방법론 애자일(agile) 방법 설계와 문서화 보다는 소프트웨어 그 자체에 더 초점을 두는 방법 사용자의 요구가 빈번히 변경될 수 있는 환경 제공 빠른 피드백 예: 익스트림 프로그래밍, SCRUM, Crystal, Adaptive Software Development, Feature Driven Development
30
애자일 방법의 원리 고객 참여 반복적 릴리스 프로세스보다 사람 변경을 포용 단순함을 유지
고객의 역할 – 시스템의 요구를 제공, 우선순위를 정하여 개발하게 하고 평가 반복적 릴리스 요구를 조금씩 개발하여 단계적으로 릴리스 프로세스보다 사람 개인을 존중하여 맡김 변경을 포용 변경에 조화되도록 설계 단순함을 유지 가능하면 단순하게 하고 복잡한 것은 배제
31
익스트림 프로그래밍의 철학 Kent Beck, 1990년대 초반 소프트웨어 제작을 운전에 비유 철학
가볍고도 효율적이며 낮은 위험도를 가진 유연하면서도 예측 가능한 방법을 궁리 1996년 다임 클라이슬러 프로젝트에 적용 소프트웨어 제작을 운전에 비유 조금씩 핸들을 돌려 궤도를 수정하는 것 수많은 변화와 수정 철학 의사소통 단순성 피드백 용기
32
주요 개념과 방법 계획 세우기 - 우선순위와 기술 사항을 고려하여 범위를 결정
작은 릴리스 - 짧은 사이클로 작은 릴리스를 반복하여 개발 메타포 - 시스템 전체에 대하여 은유적인 접근 단순한 설계 - 최대한 설계를 단순하게 유지 지속적인 테스트 - 개발과 동시에 단위 테스트를 병행 리팩토링 - 코드의 품질을 지속적으로 개선 페어 프로그래밍 - 가장 좋은 구현 방법과 전략을 고민 코드를 공유 - 누구나 코드를 수정하고 집단적인 소유로 여긴다 지속적인 통합 - 개발한 것을 즉시에 또는 매일 통합, 빌드 40시간 작업 - 초과근무를 줄이고 계획적으로 작업 현장 고객 - 고객이 개발 사이트에 상주하며 참여 코딩 표준 - 표준에 맞추어 코딩
33
스토리 카드 사용자 스토리 사례 요구를 높은 수준으로 정의한 것 개발하는 데 드는 노력을 예측할 수 있는 충분한 정보를 줌
학생이 월 정기 승차권을 온라인으로 구입한다. 정기 승차권을 신용카드로 지불한다. 교수가 학생의 성적을 입력한다. 학생이 성적증명서를 신청한다. 학생이 이번 학기 신청한 강의의 시간표를 출력한다. 성적증명서는 표준 브라우저에 온라인으로 준비된다.
34
스토리 카드의 사례
35
페어 프로그래밍 두 명이 한 조가 되어 같은 컴퓨터를 사용하면서 개발 장점 단점
한 사람이 코딩할 때 다른 사람은 어떻게 테스트 할 것인지 궁리 장점 혼자 하는 것보다 원리에 충실 더욱 일에 몰입하여 더 좋은 설계와 코드를 작성할 수 있음 작업이 활기차고 중단을 막게 됨 문제를 더 잘 해결. 견고한 설계 멘토링, 결속력이 강해짐 단점 실력 차이가 많은 경우 실증이 날 수도 있음 부담이 될 수도 있음 생산성을 정확히 확인하기가 어려움
36
생명 주기 반복적인 작업 스토리 작성, 릴리스 계획을 반복 인수 테스트와 작은 릴리스를 배출
37
지속적인 테스트와 통합 사용자에게 데모보다는 실행되는 코드를 빨리 안겨주자는 철학 프로그램이 끝나는 대로 시험하고 이를 통합
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(); }
38
12.6 웹 서비스와 SOA 오랜 동안 투자한 정보 시스템을 계속 효과적으로 이용하는 방법 웹 서비스 SOA
웹을 기반으로 한 서비스 통신 방식 Jini 기술에 의하여 소개된 서비스 개념을 채택하고 XML과 같은 기술을 이용하여 웹에 서비스를 제공하도록 구현한 것 SOA 웹과 같은 네트워크 상에서 서비스를 사용하여 소프트웨어 애플리케이션을 구성할 수 있게 하는 아키텍처 스타일
39
SOA 개요 소프트웨어 컴포넌트들 사이에 느슨한 결합을 이용하여 애플리케이션을 구성하는 방법
IT 인프라에 있는 애플리케이션으로 새로운 서비스를 만들 수 있게 함 잘 정의된 비즈니스 기능을 구현한 서비스를 이용 다양한 애플리케이션을 구성할 수 있게 함
40
SOA의 장점 서비스는 구현 기술에 관계없이 잘 정의된 인터페이스를 가진 소프트웨어 컴포넌트
서비스는 내부 함축적이고 느슨하게 결합되어 있음 서비스는 동적으로 발견될 수 있음 복합 서비스는 다른 서비스를 모아서 만들 수 있음
41
SOA 패러다임
42
웹 서비스를 이용한 SOA 구현 UDDI – 플랫폼에 무관한 XML 기반의 레지스트리
WSDL – XML기반의 서비스 정의 명세 SOAP – 네트워크 상에서 XML 기반의 메시지를 교환하기 위한 프로토콜
Similar presentations