개발 환경 구축
- 응용 소프트 웨어 개발을 위해 개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축하는 것
하드웨어 환경
- 사용자와 인터페이스 역할을 하는 클라이언트(client), 클라이언트와 통신하여 서비스를 제공하는 서버(server)로 구성
- 클라이언트 종류 : 개인용 컴퓨터(PC), 스마트폰 드
- 서버의 종류
- 웹 서버(WEB SERVER)
- 웹 애플리케이션 서버(WAS)
- 데이터베이스 서버(DB SERVER)
- 파일 서버(FILE SERVER)
소프트웨어 환경
- 클라이언트와 서버 운영을 위한 시스템 소프트웨어와 개발에 사용되는 개발 소프트웨어로 구성
- 시스템 소프트웨어 종류 : 운영체제(OS), 웹서버 및 WAS 운용을 위한 서버 프로그램, DBMS 등
- 개발 소프트웨어 종류 : 요구사항 관리 도구, 설계/모델링 도구, 구현 도구, 빌드 도구, 테스트 도구, 형상 관리 도구 등
웹서버(WEB SERVER)의 기능
- HTTP/HTTPS 지원 : 브라우저로부터 요청을 받아 응답할 때 사용되는 프로토콜
- 통신 기록 : 처리한 요청들을 로그 파일로 기록하는 기능
- 정적 파일 관리 : HTML, CSS, 이미지 등의 정적 파일들을 저장하고 관리하는 기능
- 대역폭 제한 : 네트워크 트래픽의 포화를 방지하기 위해 응답속도를 제한하는 기능
- 가상호스팅 : 하나의 서버로 여러개의 도메인 이름을 연결하는 기능
- 인증 : 사용자가 합법적인 사용자인지를 확인하는 기능
개발 언어의 선정 기준
- 적정성 : 개발하려는 소프트웨어에 목적 적합
- 효율성 : 코드의 작성 및 구현이 효율적
- 이식성 : 다양한 시스템 및 환경에 적용 가능
- 친밀성 : 개발 언어에 대한 개발자들의 이해도와 활용도가 높아야함
- 범용성 : 다른 개발 사례가 존재, 여러분야 활용 등
소프트웨어 아키텍처
- 소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체이다.
- 기본원리 : 모듈화, 추상화, 단계적 분해, 정보은닉
소프트웨어 아키텍처 - 모듈화
- 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 시스템의 기능들을 모듈 단위로 나누는 것
- 결합도 최소화와 응집도 최대화가 목표
소프트웨어 아키텍처 - 추상화
- 전체적이고 포괄적인 개념을 설계한 후, 구체화 시켜나가는 것
- 유형
- 과정 추상화 : 수행 과정 정의하지 않고, 전반적인 흐름만 파악할 수 있게 설계
- 자료 추상화 : 세부적인 속성이나 용도 정의 X, 데이터 구조를 대표할 수 있는 표현으로 대체
- 제어 추상화 : 이벤트 발생의 정확한 절차나 방법 정의 X, 대표할 수 있는 표현으로 대체
소프트웨어 아키텍처 - 단계적 분해
- 상위의 중요 개념으로부터 하위의 개념으로 구체화시키는 분할 기법
- NIKLAUS WIRTH에 의해 제안된 하향식 설계 전략
소프트웨어 아키텍처 - 정보은닉
- 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나, 변경하지 못하도록 하는 기법
- 정보 은닉을 통해 모듈을 독립적으로 수행 가능
상위설계와 하위설계
- 상위 설계
- 별칭 : 아키텍처 설계, 예비 설계
- 설계 대상 : 시스템 전체 구조
- 세부 목록 : 구조, DB, 인터페이스
- 하위 설계
- 별칭 : 모듈 설계, 상세 설계
- 설계 대상 : 시스템의 내부 구조 및 행위
- 세부 목록 : 컴포넌트, 자료 구조, 알고리즘
소프트웨어 아키텍처의 품질 속성
- 소프트웨어 아키텍처가 이해 관계자들이 요구하는 수준의 품질을 유지 및 보장할 수 있게 설계되었는지 확인하기 위해 품질 평가요소를 구체화 시켜놓은 것
- 시스템 측면 : 성능, 보안, 가용성, 기능성, 사용성, 변경 용이성, 확장성 등
- 비즈니스 측면 : 시장 적시성, 비용과 혜택, 예상 시스템 수명, 목표 시장, 공개일정 등
- 아키텍처 측면 : 개념적 무결성, 정확성, 완결성, 구축 가능성, 변경성, 시험성
협약(CONTRACT)에 의한 설계
- 컴포넌트 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것
- 컴포넌트에 대한 정확한 인터페이스를 명세한다.
- 명세에 포함될 조건
- 선행 조건 : 오퍼레이션이 호출되기 전에 참이 되어야할 조건
- 결과 조건 : 오퍼레이션이 수행된 후 만족되어야 할 조건
- 불변 조건 : 오퍼레이션이 실행되는 동안 항상 만족되어야 할 조건
아키텍처 패턴
- 아키텍처를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 레이어 패턴, 클라이언트-서버 패턴, 파이프-필터 패턴, 모델-뷰-컨트롤러 패턴
아키텍처 패턴 - 레이어패턴
- 시스템을 계층으로 구분하여 구성하는 방법의 패턴
- 하위 계층은 상위 계층에 대한 서비스 제공자, 상위 계층은 하위 계층의 클라이언트
- 대표적으로 OSI 참조 모델
아키텍처 패턴 - 클라이언트-서버 패턴
- 하나의 서버 컴포넌트와 다수의 클라이언트 컴포넌트로 구성되는 패턴
- 사용자가 클라이언트를 통해 서버에 요청하면, 클라이언트가 응답을 받아 사용자에게 제공
아키텍처 패턴 - 파이프-필터 패턴
- 데이터 스트림 절차의 각 단계를 필터로 캡슐화하여 파이프를 통해 전송하는 패턴
- 앞 시스템의 처리 결과물을 파이프를 통해 전달 받아 처리하여 다시 파이프를 통해 시스템으로 넘겨주는 패턴
- 데이터 변환 ,버퍼링, 동기화 등에 사용
- 대표적으로 UNIX-SHELL 이 있다
아키텍처 패턴 - 모델-뷰-컨트롤러 패턴
- 서브시스템을 모델,뷰,컨트롤러로 구조화 하는 패턴
- 사용자의 요청을 받으면 핵심 기능과 데이터를 보관하는 모델을 이용해서 뷰에 정보를 출력하는 구조
- 여러 개의 뷰를 만들 수 있다.
- 한 개 모델에 대해 여러 개의 뷰를 필요로 하는 대화형 애플리케이션에 적합
아키텍처 패턴 - 기타 패턴
- 마스터 슬레이브 패턴
슬레이브 컴포넌트에서 처리된 결과물을 다시 돌려받는 방식으로 작업 수행(병렬 컴퓨팅 시스템, 장애 허용 시스템) - 브로커 패턴
사용자가 원하는 서비스와 특성을 브로커 컴포넌트에 요청해서 브로커 컴포넌트가 요청에 맞는 컴포넌트와 사용자를 연결
(분산 환경 시스템) - 피어-투-피어 패턴
피어라 불리는 하나의 컴포넌트가 클라이언트가 될 수도, 서버가 될 수 도 있는 패턴
(파일 공유 네트워크) - 이벤트-버스 패턴
소스가 특정 채널에 이벤트 메시지를 발행하면, 해당 채널을 구독한 리스너들이 메시지를 받아 이벤트를 처리(알림 서비스) - 블랙보드 패턴
모든 컴포넌트들이 공유 데이터 저장소와 블랙보드 컴포넌트에 접근이 가능한 패턴(음성 인식, 차량 식별, 신호 해석) - 인터프리터 패턴
프로그램 코드의 각 라인을 수행하는 방법을 지정하고, 기호마다 클래스를 갖도록 구성된 패턴(번역기, 컴파일러, 인터프리터)
객체지향
- 소프트웨어의 각 요소들을 객체로 만든 후 객체들을 조립해서 소프트웨어를 개발하는 기법
- 객체지향의 구성요소 : 객체,클래스, 메시지
- 객체지향의 특징 : 캡슐화, 상속, 다형성, 연관성
객체지향 - 객체
- 데이터와 이를 처리하기 위한 함수를 묶어 놓은 소프트웨어 모듈
- 데이터 : 객체가 가지고 있는 정보, 속성 상태 분류 등
- 함수 : 객체가 수행하는 기능으로 데이터를 처리하는 알고리즘
객체지향 - 클래스
- 공통된 속성과 연산을 갖는 객체의 집합
- 객체들이 갖는 속성이나 연산을 정의하고 있는 틀
- 클래스에 속한 각각의 객체를 인스턴스
객체지향 - 메시지
- 객체의 동작이나 연산을 일으키는 외부의 요구사항
객체지향 - 캡슐화
- 외부에서 접근을 제한하기 위해 인터페이스를 제외한 세부내용을 은닉하는 것
- 인터페이스가 단순해지고, 객체 간의 결합도를 낮출 수 있음
객체지향 - 상속
- 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려 받는 것
객체지향 - 다형성
- 하나의 메시지에 대해 각각의 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력
- 객체들은 동일한 메소드명을 사용하며, 같은 의미의 응답을 한다
객체지향 - 연관성
- 두 개 이상의 객체들이 상호 참조하는 관계
- 연관성의 종류
- 연관화(IS MEMBER OF) : 2개 이상의 객체가 상호 관련
- 분류화(IS INSTANCE OF) : 동일한 형의 특성을 갖는 객체들을 모아 구성
- 집단화(IS PART OF)(PART-WHOLE) : 관련 있는 객체들을 묶어 하나의 상위 객체 구성
- 일반화(IS A) : 공통적인 성질들로 추상화한 상위 객체를 구성하는 것
- 특수화(IS A) : 상위 객체를 구체화하여 하위 객체를 구성하는 것
객체지향 분석(OOA)
- 객체, 속성, 연산, 관계등을 정의하여 모델링하는 작업
- 개발을 위한 업무를 객체와 속성, 클래스와 멤버, 전체와 부분등으로 나누어서 분석
- 클래스를 식별하는 것이 목표
객체지향 분석의 방법론
- 럼바우 방법 : 분석활동을 객체모델, 동적모델, 기능모델로 나누어 수행(객동기)
- 부치 방법 : 미시적 개발 프로세스, 거시적 개발 프로세스 모두 사용, 클래스, 객체들을 식별하고 속성 연산을 정의
- JACOBSON 방법 : 유스케이스를 강조하여 사용
- COAD와 YOURDON 방법 : E-R 다이어그램 사용
- WIRFS-BROCK 방법 : 분석과 설계 간 구분 X, 고객 명세서를 평가하여 설계 작업까지 연속 수행
객체지향 분석의 방법론 - 럼바우의 분석기법
- 모든 소프트웨어 구성요소를 그래픽 표기법을 이용하여 모델링하는 방법
- 객체 모델링 기법(OMT, OBJECT-MODELING TECHNIQUE)이라고도 한다.
- 분석활동은 '객체 모델링 -> 동적 모델링 -> 기능 모델링' 순으로 이뤄진다.
- 객체 모델링(OBJET, INFORMATION MDDELING) : 시스템 요구 객체를 찾아내어 속성과 연산 식별 및 객체 간 관계 규정하여 객체 다이어그램으로 표시하는 모델링
- 동적 모델링(DYNAMIC MODELING) : 상태 다이어그램 이용, 시간 흐름에 따른 객체들 간 제어흐름, 상호작용, 동작 순서 등 동적인 행위를 표현
- 기능 모델링(FUNCTIONAL MODELING) : 자료흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료흐름을 중심으로 처리과정을 표현한 모델링
객체지향 설계 원칙(SOLID 원칙)
- 단일 책임 원칙(SRP) : 객체는 단 하나의 책임만 가져야한다는 원칙
- 개방-폐쇄 원칙(OCP) : 기존 코드를 변경하지 않고, 기능을 추가할 수 있도록 설계해야한다는 원칙
- 리스코프 치환 원칙(LSP) : 자식 클래스는 최소한 부모 클래스의 기능은 수행할 수 있어야한다는 원칙
- 인터페이스 분리 원칙(ISP) : 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야한다는 원칙
- 의존 역전 원칙(DIP) : 의존 관계 성립 시 추상성이 높은 클래스와 의존 관계를 맺어야한다는 원칙
'정보처리기사' 카테고리의 다른 글
[정보처리기사] 실기 대비 요약 정리 - 인터페이스 구현 (0) | 2023.04.02 |
---|---|
[정보처리기사] 실기 대비 요약 정리 - 서버 프로그램 구현2 (0) | 2023.04.02 |
[정보처리기사] 실기 대비 요약 정리 - 통합구현 (0) | 2023.04.01 |
[정보처리기사] 실기 대비 요약 정리 - 데이터 입출력 구현2 (0) | 2023.04.01 |
[정보처리기사] 실기 대비 요약 정리 - 데이터 입출력 구현1 (0) | 2023.04.01 |