정보시스템 구축관리
개별 환경 구축
- 개발 환경 구축
- 개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축
- 응용 소프트웨어가 운영될 환경과 유사한 구조로 구축
- 하드웨어와 소프트웨어를 선정함
- 성능, 편의성, 라이선스 등의 비즈니스 환경에 적합한 제품들을 최종적으로 결정하여 구축함
- 하드웨어 환경
- 사용자와의 인터페이스 역할을 하는 클라이언트, 서비스를 제공하는 서버로 구성
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/fdcae290-8799-49e3-8f8e-d909a5ecd7c2/스크린샷_2024-10-12_오후_10.31.17.png
- 클라이언트의 종류
- 개인용 컴퓨터(PC), 스마트폰 등
- 서버의 종류종류 특징
웹 서버 - 직접 요청을 받아 처리함 - 정적 파일들을 제공함 | | 웹 애플리케이션 서버(WAS) | 동적 서비스를 제공하거나 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행함 | | 데이터베이스 서버 | 데이터베이스와 이를 관리하는 DBMS를 운영함 | | 파일 서버 | 데이터베이스에 저장하기에는 비효율적이거나, 서비스 제공을 목적으로 유지하는 파일들을 저장함 |
- 소프트웨어 환경
- 클라이언트와 서버 운영을 위한 시스템 소프트웨어와 개발에 사용되는 개발 소프트웨어로 구성됨
- 시스템 소프트웨어의 종류
- 운영체제, 웹 서버 및 WAS 운용을 위한 서버 프로그램, DBMS
- 개발 소프트웨어의 종류종류 특징
요구사항 관리 도구 요구사항의 수집과 분석, 추적 등을 편리하게 도와주는 소프트웨어 설계/모델링 도구 UML을 지원하며, 전 과정에서 설계 및 모델링을 도와주는 소프트웨어 구현 도구 개발 언어를 통해 실제 구현을 지원하는 소프트웨어 빌드 도구 소스의 빌드 및 배포, 라이브러리 관리를 지원하는 소프트웨어 테스트 도구 모듈들이 요구사항에 적합하게 구현되었는지 테스트하는 소프트웨어 형상 관리 도구 버전별로 관리하여 품질 형상을 지원하는 소프트웨어 - 웹 서버의 기능기능 내용
HTTP/HTTPS 지원 브라우저로부터 요청을 받아 응답할 때 사용되는 프로토콜 통신 기록 처리한 요청들을 로그 파일로 기록하는 기능 정적 파일 관리 HTML, CSS, 이미지 등의 정적 파일들을 저장하고 관리 대역폭 제한 트래픽의 포화를 방지하기 위해 응답 속도 제한 가상 호스팅 여러 개의 도메인 이름을 연결하는 기능 인증 합법적인 사용자인지를 확인 - 개발 언어의 선정 기준기준 내용
적정성 개발하려는 소프트웨어의 목적에 적합해야 함 효율성 코드의 작성 및 구현이 효율적이어야 함 이식성 다양한 시스템 및 환경에 적용이 가능해야 함 친밀성 개발 언어에 대한 개발자들의 이해도와 활용도가 높아야 함 범용성 다른 개발 사례가 존재하고 여러 분야에서 활용되고 있어야 함
소프트웨어 아키텍처
- 소프트웨어 아키텍처
- 소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체
- 분할 방법과 분할된 모듈에 할당될 기능, 모듈 간의 인터페이스 등을 결정함
- 소프트웨어 아키텍처 설계의 기본 원리, 모듈화, 추상화, 단계적 분, 정보은닉이 있음
- 모듈화
- 소프트웨어의 성능 향상, 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 시스템의 기능들을 모듈 단위로 나누는 것을 의미함
- 모듈의 크기를 너무 작게 나누면 개수가 많아져 모듈 간의 통합 비용이 많이 듬
- 모듈의 크기를 너무 크게 나누면 개수가 적어 통합 비용은 적게 들지만 모듈 하나의 개발 비용이 많이 듬
- 추상화
- 전체적이고 포괄적인 개념을 설계한 후 구체화시켜 나가는 것
- 완전한 시스템을 구축하기 전에, 유사한 모델을 만들어서 여러 가지 요인들을 테스트 할 수 있음
- 추상화의 유형과정 추상화 전반적인 흐름만 파악
데이터 추상화 데이터 구조를 대표할 수 있는 표현으로 대체하는 방법 제어 추상화 이벤트 발생의 대표할 수 있는 표현
- 단계적 분해
- 상위의 중요 개념으로부터 하위의 개념으로 구체화 시키는 분할 기법
- 하향식 설계 전략
- 포괄적인 기능에서부터 점차적으로 구체화
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/50d04f5a-7fcf-4c1e-b9e5-493ff044b48d/스크린샷_2024-10-12_오후_11.25.52.png
- 정보 은닉
- 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법
- 모듈을 독립적으로 수행할 수 있음
- 하나의 모듈이 변경되더라도 다른 모듈에 영향을 주지 않으므로 수정, 시험, 유지보수가 용이함
- 상위 설계와 하위 설계
- 소프트웨어 개발의 설계 단계는 크게 상위 설계와 하위 설계로 구분할 수 있음
별칭 아키텍쳐 설계, 예비 설계 모듈 설계, 상세 설계 설계 대상 전체적인 구조 내부 구조 및 행위 세부 목록 구조, DB, 인터페이스 컴포넌트, 자료구조, 알고리즘 - 소프트웨어 아키텍처의 품질 속성
- 이해관계자들이 요구하는 수준의 품질을 유지 및 보장할 수 있게 설계되었는지 확인하기 위해 품질 평가 요소들을 구체화 시켜 놓은 것
- 품질 평가 요소의 종류시스템 측면 성증, 보안, 가용성, 기능성, 사용성, 변경 용이성, 확장성 등
비즈니스 측면 시장 적시성, 비용과 혜택, 예상 시스템 수명, 목표 시장, 공개 일정 등 아키텍처 측면 개념적 무결성, 정확성, 완결성, 구축 가능성, 변경성, 시험성 등
- 소프트웨어 아키텍쳐의 설계 과정
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/f58f2955-b009-4fbf-b275-e8b26a59fe93/스크린샷_2024-10-12_오후_11.30.37.png
- 협약(Contract)에 의한 설계
- 컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것
- 정확한 인터페이스를 명세함
- 명세에 포함될 조건조건 내용
선행 조건 오퍼레이션이 호출되기 전에 참이 되어야 할 조건 결과 조건 오퍼레이션이 수행된 후 만족되어야 할 조건 불변 조건 오퍼레이션이 실행되는 동안 항상 만족되어야 할 조건
아키텍처 패턴
- 아키택처 패턴
- 아키택처를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 주요 아키텍처 패턴의 종류
- 레이어 패턴
- 클라이언트-서버 패턴
- 파이프-필터 패턴
- 모델-뷰-컨트롤러 패턴
- 레이어 패턴
- 시스템을 계층으로 구분하여 구성하는 패턴
- 서로 마주보는 두 개의 계층 사이에서만 사용작용이 이루어짐
- 대표적으로 OSI참조 모델이 있음
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ab3f22c4-63c5-40e2-893d-cb7558a31719/스크린샷_2024-10-12_오후_11.50.54.png
- 클라이언트-서버 패턴
- 파이프-필터 패턴
- 데이터 스트림 절차를 필터로 캡슐화하여 파이프를 통해 전송하는 패턴
- 앞 시스템의 처리 결과물을 처리한 후 다시 파이프를 통해 다음 시스템으로 넘겨주는 패턴을 반복함
- 데이터 변환, 버퍼링, 동기화 등에 주로 사용됨
- 대표적으로 UNIX의 쉘이 있음
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/c0f0c61e-109f-43dd-aa8f-917de3ad3a2f/스크린샷_2024-10-12_오후_11.53.22.png
- 모델-뷰-컨트롤러 패턴
- 서브시스템을 모델, 뷰, 컨트롤러로 구조화하는 패턴
- 사용자의 요청을 받으면 핵심 기능과 데이터를 보관하는 모델을 이용하여 뷰에 정보를 출력하는 구조임
- 여러 개의 뷰를 만들 수 있음
- 한 개의 모델에 대해 여러 개의 뷰를 필요로 하는 대화형 애플리케이션에 적합함
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/797097ff-90b3-430f-8eed-7737a9a4de38/스크린샷_2024-10-12_오후_11.55.48.png
- 기타 패턴종류 내용
마스터-슬레이브 패턴 슬레이브 컴포넌트에서 처리된 결과물을 다시 돌려받는 방식으로 작업 예) 장애 허용 시스템, 병렬 컴퓨팅 시스템 브로커 패턴 사용자가 원하는 서비스와 특성을 브로커 컴포넌트에 요청하면 요청에 맞는 컴포넌트와 사용자를 연결해주는 패턴 예) 분산 환경 시스템 피어-투-피어 패턴 피어라 불리는 하나의 컴포넌트가 클라이언트가 될 수도, 서버가 될 수도 있는 패턴 예) 파일 공유 네트워크 이벤트-버스 패턴 이벤트 메시지를 발행(Publish)하면, 해당 채널을 구독(Subscribe)한 리스너들이 메시지를 받아 이벤트를 처리 예) 알림 서비스 블랙보드 패턴 모든 컴포넌트들이 공유 데이터 저장소와 블랙보드 컴포넌트에 접근이 가능한 패턴 예) 음성 인식, 차량 식별, 신호 해석 인터프리터 패턴 프로그램 코드의 각 라인을 수행하는 방법을 지정하고, 기호마다 클래스를 갖도록 구성된 패턴 예) 번역기, 컴파일러, 인터프리터
객체지향
- 객체지향
- 각 요소들을 객체로 만든 후, 객체들을 조립해서 소프트웨어를 개발하는 기법
- 재사용 및 확장이 용이
- 객체지향의 구성 요소
- 객체
- 클래스
- 메시지
- 객체지향의 특징
- 캡슐화
- 상속
- 다형성
- 연관성
- 객체
- 데이터와 함수를 묶어 놓은 소프트웨어 모듈
- 데이터
- 객체가 가지고 있는 정보로, 속성이나 상태, 분류 등
- 함수
- 객체가 수행하는 기능으로 객체가 갖는 데이터를 처리하는 알고리즘
- 객체의 상태를 참조하거나 변경하는 수단
- 데이터
- 데이터와 함수를 묶어 놓은 소프트웨어 모듈
- 클래스
- 공통된 속성과 연산을 갖는 객체의 집합
- 속성과 연산을 정의하고 있는 틀
- 클래스에 속한 각각의 객체를 인스턴스 라고 함
- 메시지
- 객체들 간의 상호작용에 사용되는 수단으로, 객체의 동작이나 연산을 일으키는 외부의 요구사항
- 메시지를 받은 객체는 예상된 결과를 반환함
- 캡슐화
- 외부에서의 접근을 제한하기 위해 인터페이스를 제외한 세부 내용을 은닉하는 것
- 외부 모듈의 변경으로 인한 파급효과가 적다
- 상대 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 단순해지고, 객체 간의 결합도가 낮아짐
- 상속
- 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
- 하위 클래스는 물려받은 속성과 연산을 다시 정의하지 않아도 즉시 자신의 속성으로 사용할 수 있음
- 하위 클래스는 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용할 수 있음
- 다형성
- 하나의 메시지에 대해 각각의 객체가 고유한 방법으로 응답할 수 있는 능력
- 예) ‘+’ 연산자의 경우 숫자 클래스에서는 덧셈, 문자 클래스에서는 문자열의 연결 기능으로 사용됨
- 연관성
객체지향 분석 및 설계
- 객체지향 분석의 방법론
- 사용자의 요구사항과 객체, 속성, 연산, 관계 등을 정의하여 모델링하는 작업
- 업무를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석함
- 클래스를 식별하는 것이 주요 목적임
- 객체지향 분석의 방법론종류 내용
Rumbaugh(럼바우) 방법 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어서 수행함 Booch(부치) 방법 - 미시적 개발 프로세스와 거시적 개발 프로세스를 모두 사용함 - 클래스와 객체들을 분석 및 식별하고 속성과 연산을 정의 | | Jacobson 방법 | 유스케이스(Use Case)를 강조하여 사용함 | | Coad와 Yourdon 방법 | - E-R 다이어그램을 사용하여 객체의 행위를 모델링함
- 객체 식별, 구조 식별, 주제 정의, 속성과 인스턴스 연결 정의, 연산과 메시지 연결 정의 등의 과정으로 구성함 | | Wirfs-Brock 방법 | 분석과 설계 간의 구분이 없고 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행함 |
- 럼바우 분석 기법
- 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법
- 객체 모델링 기법
- 분석 활동은 객체 모델링 → 동적 모델링 → 기능 모델링 순
동적 모델링 상태 다이어그램을 이용하여 시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현하는 모델링 기능 모델링 자료 흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링 - 객체지향 설계 원칙
- 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜져야 할 원칙
- SRP, OCP, LSP, ISP, DIP의 다섯 가지 원칙의 앞 글자를 따 SOLID 원칙이라고 부름
- 객체지향 설계 원칙의 종류종류 내용
단일 책임 원칙(SRP) 객체는 단 하나의 책임만 가져야 한다는 원칙 개방-폐쇄 원칙(OCP) 기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계 리스코프 치환 원칙(LSP) 자식 클래스는 부모 클래스의 기능을 수행할 수 있어야 한다. 인터페이스 분리 원칙(ISP) 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다는 원칙 의존 역전 원칙(DIP) 의존 관계 성립 시 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 원칙
모듈
- 모듈
- 모듈화를 통해 분리된 시스템의 각 기능으로, 서브루틴, 서브시스템, 소프트웨어 내의 프로그램, 작업 단위 등을 의미함
- 소프트웨어를 구성하는 각 모듈의 기능이 서로 독립됨을 의미함
- 모듈의 독립성은 결합도와 응집도에 의해 측정됨
- 결합도
- 모듈간의 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계
- 결합도가 약할수록 품질이 높고, 강할수록 품질이 낮음
- 결합도의 종류와 강도
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/8407a7b0-ece0-40c5-b0c9-7f346e809eb7/스크린샷_2024-10-17_오전_12.00.49.png
- 결합도의 종류종류 내용
내용 결합도 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때의 결합도 공통(공유) 결합도 공유되는 공통 데이터 영역을 여러 모듈이 사용할 떄의 결합도 외부 결합도 어떤 모듈에서 선언한 데이터를 외부의 다른 모듈에서 참조할 때의 결합도 제어 결합도 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어 신호나 제어 요소를 전달하는 결합도 - 결합도의 종류종류 내용
스탬프(검인) 결합도 배열이나 레코드 등의 자료 구조로 전달될 때의 결합도 자료 결합도 모듈 간의 인터페이스가 조료 요소로만 구성될 떄의 결합도 - 응집도
- 모듈의 내부 요소들이 서로 관련되어 있는 정도
- 응집도가 강할수록 품질이 높고, 약할수록 품질이 낮음
- 응집도의 종류와 강도
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/74b04a60-4dbc-409d-954b-f398e896efd6/스크린샷_2024-10-17_오전_4.04.12.png
- 응집도의 종류종류 내용
기능적 응집도 모듈 내부의 모든 기능 요소들이 단일 문제와 연관 순차적 응집도 하나의 활동으로부터 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우 교환적 응집도 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 절차적 응집도 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 순차적으로 수행할 경우 시간적 응집도 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성 논리적 응집도 유사한 성격을 갖거나 특정 형태로 분류 우연적 응집도 각 구성 요소들이 서로 관련 없는 요소로만 구성 - 팬인 / 팬아웃
- 팬인은 제어하는 모듈의 수
- 팬아웃은 제어되는 모듈의 수
- 팬인이 높다는 것은 재사용 측면에서 설계가 잘 되어있다고 볼 수 있음
- 팬인이 높은 경우 단일 장애점이 발생할 수 있으므로 중점적인 관리 및 테스트가 필요
- ex) 다음의 시스템 구조도에서 각 모듈의 팬인과 팬아웃을 구하시오.
- 팬인은 빨간색, 팬아웃은 파란색
- N-S차트(Nassi-Schneiderman Chart)
- 논리의 기술에 중점을 두고 도형을 이용해 표현하는 방법
- GOTO나 화살표 이용X
- 연속, 선택 및 다중 선택, 반복의 3가지 제어 논리 구조로 표현
- 시각적으로 명확히 식별하는 데 적합함
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/2e6572e7-1281-4a2c-9941-aed494c5facb/스크린샷_2024-10-17_오전_4.09.53.png
단위 모듈
- 단위 모듈
- 소프트웨어 구현에 필요한 여러 동작 중 한 가지 동작을 수행하는 기능을 모듈로 구현한 것
- 단위 모듈로 구현되는 하나의 기능을 단위 기능
- 독립적인 컴파일이 가능하며, 다른 모듈에 호출되거나 삽입되기도 함
- 단위 모듈의 구현 과정
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/aff3c21d-4b1c-40b9-b055-66c4e27e9528/스크린샷_2024-10-17_오전_4.11.37.png
- IPC(Inter-Process Communication)
- 모듈 간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합
- 복수의 프로세스를 수행, 프로세스 간 통신까지 구현
- IPC의 대표 메소드 5가지
Shared Memory 공유 가능한 메모를 구성 Socket 네트워크 소켓을 이용 Semaphores 공유 자원에 대한 접근 제어를 통해 통신 Pipes&named Pipes - Pipe라고 불리는 선입선출 형태 - Pipe는 하나의 프로세스가 이용 중이라면 다른 프로세스는 접근할 수 없음 | | Message Queueing | 메시지가 발생하면 이를 전달하는 방식으로 통신하는 방식 |
- 단위 모듈 테스트
- 모듈이 정해진 기능을 정확히 수행하는 지 검증하는 것
- 단위 테스트라고도 불림
- 시스템 수준의 오류는 잡아낼 수 없음
- 테스트 케이스
- 소프트웨어가 사용자의 요구사항을 정확하게 준수 했는지를 확인하기 위한 테스트 항목에 대한 명세서
- 테스트 케이스를 이용하지 않은 테스트는 검증이 누락되거나 불필요한 검증의 반복으로 인력과 시간을 낭비 할 수 있음
- ISO/IEC/IEEE 29119-3 표준에 따른 테스트 케이스의 구성 요소
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/5cea3691-6e43-4415-93fb-4f2df80b465d/스크린샷_2024-10-17_오전_4.16.03.png
공통 모듈
- 공통 모듈
- 여러 프로그램에서 공통으로 사용할 수 있는 모듈
- 해당 기능을 명확히 이해할 수 있도록 명세 기법을 준수해야 함
- 공통 모듈 명세 기법의 종류명세 기법 내용
정확성 해당 기능이 필요하다는 것을 알 수 있도록 명확성 이해할 때 중의적으로 해석되지 않도록 작성 완전성 필요한 모든 것을 기술 일관성 상호 충돌이 발생하지 않도록 작성 추적성 요구사항의 출처, 관련 시스템 등의 관계를 파악 - 재사용
- 이미 개발된 기능들을 새로운 시스템이나 기능 개발에 사용하기 적합하도록 최적화하는 작업
- 필요한 비용과 시간을 절약 가능
- 사용법을 공개해야함
- 재사용 규모에 따른 분류함수와 객체 클래스나 메소드 단위
컴포넌트 컴포넌트 자체에 대한 수정 없이 인터페이스를 통해 통신 애플리케이션 공통된 기능들을 제공하는 애플리케이션을 공유
- 효과적인 모듈 설계 방안
- 결합도를 줄이고 응집도를 높여서 모듈의 독립성과 재사용성을 높임
- 복잡도와 중복성을 줄이고 일관성을 유지시킴
- 모듈의 기능이 예측이 가능해야 하며 지나치게 제한적이어서는 안 됨
- 모듈 크기는 시스템의 전반적인 기능과 구조를 이해하기 쉬운 크기로 분해함
- 효과적인 제어를 위해 모듈 간의 계층적 관계를 정의하는 자료가 제시
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/64a6d882-a2c2-40c4-ac20-68fcf342a85b/스크린샷_2024-10-17_오전_6.09.51.png
코드
- 코드
- 자료의 분류, 조합, 집계, 추출을 용이하게 하기 위해 사용하는 기호
- 코드의 주요 기능식별기능 데이터 간의 성격에 따라 구분
분류기능 특정 기준이나 동일한 유형에 해당하는 데이터를 그룹화 배열기능 의미를 부여하여 나열할 수 있음 표준화기능 기준에 맞추어 표현 간소화 기능 복잡한 데이터를 간소화 - 코드의 종류종류 내용
순차코드 발생 순서, 크기 순서 등 일정 기준에 따라 일련번호 부여 예) 1, 2, 3, 4 … 블록 코드 공통성이 있는 것끼리 블록으로 구분하고 일련번호 부여 예) 1001~1100: 총무부, 1101~1200: 영업부 10진 코드 0~9까지 10진 분할하고 다시 그 각각에 대하여 10진 분할하는 방법을 필요한 만큼 반복하는 방법 예) 1000: 공학, 1100: 소프트웨어 공학 1110: 소프트웨어 설계 그룹 분류 코드 일정 기준에 따라 대분류, 중분류, 소분류 등으로 구분하여 일련번호 부여 예) 1-01-001: 본사-총무부-인사계, 2-01-001: 지사-총무부-인사계 연상 코드 명칭이나 약호와 관계있는 숫자와 문자, 기호 이용 예) TV-40: 40인치 TV, L-15-220: 15W 220V의 램프 표의 숫자 코드 성질 즉, 길이, 넓이, 부피, 지름 높이 등의 물리적 수치를 그대로 코드에 적용 예) 120-720-1500: 두께표길이가 1207201500인 강판 합성 코드 하나의 코드로 수행하기 어려운 경우 2개 이상의 코드를 조합하여 만드는 방법 예) 연상 코드 + 순차 코드 KE-711: 대한항공 711기, AC-253: 에어캐나다 253기
디자인 패턴
- 디자인 패턴
- 모듈 간의 관계 및 인터페이스를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 개발 과정 중에 문제가 발생하면 새로 해결책을 구상하는 것보다 문제에 해당하는 디자인 패턴을 참고하여 적용하는 것이 더 효율적임
- GOF의 디자인 패턴은 생성 패턴, 구조 패턴, 행위 패턴으로 구분
- 생성 패턴
- 클래스나 객체의 생성과 참조 과정을 정의하는 패턴
- 추상팩토리
- 구체적인 클래스에 의존하지 않고, 인터페이스를 통해 서로 연관,의존하는 객체들의 그룹으로 생성하여 추상적으로 표현함
- 연관된 서브 클래스를 묶어 한 번에 교체하는 것이 가능함
- ex) 요리 내부의 값을 김치찌개에서 된장찌개로 바꿔도 구체적인 클래스에 의존하지 않았기에 문제가 없는 상황
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/25bb3e1e-5930-42f6-bd97-2910690712ae/스크린샷_2024-10-17_오전_6.19.58.png
- 팩토리 메소드
- 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화한 패턴
- 상위 클래스에서 인터페이스만 정의하고 실제 생성은 서브 클래스가 담당
- ex) 구체적인 선언은 하위 요리 클래스 내부에서 하는 방식
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/462fd286-7cb8-4e76-a338-7d6ebe9a1312/스크린샷_2024-10-17_오전_6.23.13.png
- 빌더
- 작게 분리된 인스턴스를 건축 하듯이 조합하여 객체를 생성함
- 객체의 생성과정과 표현방법을 분리하고 있어, 동일한 객체 생성에서도 서로 다른 결과를 만들어 낼 수 있음
- 프로토타입
- 원본 객체를 복제하는 방법으로 객체를 생성하는 방법
- 싱글톤
- 클래스 내에서 인스턴스가 하나뿐임을 보장
- 하나의 객체를 생성하면 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수 없음.
- 구조 패턴
- 복잡한 시스템을 개발하기 쉽도록 클래스나 객체들을 조합하여 더 큰 구조로 만드는 패턴
- 어댑터
- 다른 클래스가 이용할 수 있도록 변환해주는 패턴
- 인터페이스가 일치하지 않을 때 이용함
- 브릿지
- 구현부에서 추상층을 분리하여, 서로가 독립적으로 확장할 수 있도록 구성
- 기능과 구현을 두 개의 별도 클래스로 구현함
- 컴포지트
- 복합 객체와 단일 객체를 구분 없이 다루고자 할 때 사용하는 패턴
- 객체들을 트리 구조로 구성하여, 복합 객체 안에 복합 객체가 포함되는 구조
- 데코레이터
- 객체 간의 결합을 통해 능동적으로 기능들을 확장
- 임의의 객체에 부가적인 기능을 추가하기 위해 다른 객체들을 덧붙이는 방식으로 구현
- 파싸드
- 서브 클래스들을 피해 인터페이스를 구성함으로써 서브 클래스들의 기능을 간편하게 사용할 수 있는 패턴
- 서브 클래스들 사이의 통합 인터페이스를 제공하는 Wrapper 객체가 필요함
- 플라이웨이트
- 매번 생성하는 것이 아니고 가능한 한 공유해서 사용
- 다수의 유사 객체를 생성하거나 조작할 때 유용
- 프록시
- 네트워크 연결, 메모리의 대용량 객체로의 접근
- 접근이 어려운 객체와 객체 사이에서 인터페이스 역할 수행
- 행위 패턴
- 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴
- 책임 연쇄
- 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴
- 각 객체들이 고리로 묶여 있어 요청이 해결될 때 까지 고리를 따라 책임이 넘어감
- 커맨드
- 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 저장하거나 로그에 남기는 패턴
- 각종 명령어들을 추상클래스와 구체 클래스로 분리
- 인터프리터
- 언어의 문법 표현을 정의하는 패턴
- SQL이나 통신 프로토콜 같은 것을 개발할 때 사용
- 반복자(Iterator)
- 접근이 잦은 객체에 대해 동일한 인터페이스 사용
- 내부 표현 방법의 노출 없이 순차적인 접근 간으
- 중재자
- 수많은 객체들 간의 복잡한 상호작용을 캡슐화 하여 객체로 정의
- 의존성을 줄여 결합도를 감소
- 메멘토
- 특정 시점에서의 객체 내부 상태를 객체화함으로 써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공
- [Ctrl] + [Z]와 같은 되돌리기 기능을 개발할 때 주로 이용함
- 옵저버
- 한 객체의 상태가 변화하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태를 전달하는 패턴
- 상태
- 객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용
- 객체 상태를 캡슐화하고 참조하는 방식으로 처리
- 전략
- 동일한 계열의 알고리즘들을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의하는 패턴
- 독립적으로 원하는 알고리즘을 선택하여 사용할 수 있으며, 클라이언트에 영향 없이 알고리즘의 변경이 가능함
- 템플릿 메소드
- 상위 클래스에서 골격을 정의하고, 세부 처리를 구체화하는 구조의 패턴
- 유사한 서브 클래스를 묶어 상위 클래스에서 정의함으로써 코드의 양을 줄이고 유지보수를 용이하게 해줌
- 팩토리 메소드랑 유사한 개념
- 방문자
- 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성
- 처리 기능은 각 클래스를 방문하여 수행함
개발 지원 도구
- 통합 개발 환경(IDE)
- 개발에 필요한 환경, 편집기, 컴파일러, 디버거 등의 다양한 툴을 하나의 인터페이스로 통합하여 제공하는 환경
- 통합 개발 환경 도구의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/75d3e0ec-ebbb-4cf8-a15d-87081f469a8c/스크린샷_2024-10-17_오전_6.36.36.png
- 빌드 도구
- 소스 코드 파일들을 컴퓨터에서 실행할 수 있는 제품 소프트웨어로 변환하는 과정 또는 결과물
- 빌드 도구는 전처리, 컴파일 등의 작업을 수행함
- 대표적인 빌드 도구
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/9ead9c7d-9b55-4491-99e5-45eab4bb2dfc/스크린샷_2024-10-17_오전_6.38.07.png
- 기타 협업 도구
- 개발에 참여하는 사람들이 서로 다른 작업 환경에서 원활하게 프로젝트를 수행할 수 있도록 도와주는 도구
서버 개발
- 서버 개발
- 웹 애플리케이션의 로직을 구현할 서버 프로그램을 제작하여 웹 어플리케이션 서버(WAS)에 탑재하는 것
- 프로그래밍 언어는 Java, Js, Python 등
- 서버 개발 프레임워크
- 서버 프로그램 개발 시 다양한 네트워크 설정, 요청 및 응답 처리, 아키텍처 모델 구현 등을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어
- 대부분 MVC 패턴 기반
- 서버 개발 프레임워크의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ab47a184-5820-48a6-a1dc-825762eb055b/스크린샷_2024-10-17_오전_6.40.49.png
- 서버 개발 과정
- DTO/VO, SQL, DAO, Service, Controller를 각각 구현하는 과정
- 순서는 임의로 변경 가능
- MVC 접근법!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/88a56a82-f952-457f-8a0b-33efc75524ba/스크린샷_2024-10-17_오전_6.42.08.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/f856da4b-e749-42d1-a66b-525b79357309/스크린샷_2024-10-17_오전_6.41.51.png
- 구현 과정과정 내용
DTO/VO 구현 - 데이터 교환을 위해 사용할 객체를 만드는 과정 - 송, 수신할 데이터의 자료형에 맞는 변수 및 객체를 생성함 | | SQL 구현 | - 데이터의 삽입, 변경, 삭제등의 작업을 수행할 SQL문 생성
- 소스 코드 내에 직접 입력, 또는 별도의 XML 파일로 관리 | | DAO 구현 | 데이터베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드를 구현 | | Service 구현 | 요청에 응답하기 위한 로직을 구현 | | Controller 구현 | 적절한 서비스를 호출하여 결과를 반환하는 코드 구현 |
배치 프로그램
- 배치 프로그램
- 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하도록 만든 프로그램을 의미함
- 배치 프로그램의 필수 요소
- 대용량 데이터
- 자동화
- 견고성
- 안정성/신뢰성
- 성능
- 배치 스케줄러
- 일괄 처리 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구
- 특정 업무를 원하는 시간에 처리할 수 있도록 지원
- 잡 스케줄러라고도 불림
- 배치 스케줄러의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/94ee26a1-6696-4351-9301-aff965427e50/스크린샷_2024-10-17_오전_6.54.41.png
- crontab 명령어 작성 방법!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/fbe11882-5246-4e94-9184-ddb656d62b67/스크린샷_2024-10-17_오전_6.56.06.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/590757e4-e084-4755-8a2b-b4e21db29389/스크린샷_2024-10-17_오전_6.55.04.png
시스템 인터페이스 요구사항 분석
- 시스템 인터페이스 요구사항
- 개발할 시스템과 외부 시스템을 연동하는데 필요한 시스템
- 시스템 인터페이스 요구사항 명세서의 구성 요소
- 인터페이스 이름
- 연계 대상 시스템
- 연계 범위 및 내용
- 연계 방식
- 송신 데이터
- 인터페이스 주기
- 기타 고려사항
- 시스템 인터페이스 요구사항 분석
- 요구사항 분류하고 구체적으로 명세한 후 이를 이해관계자에게 전달
- 요구사항 분석 기법을 적절히 이용함
- 요구사항 분해가 필요한 경우 적절한 수준으로 세분화함
- 요구사항 분석 시 누락된 요구사항이나 제한 조건을 추가함
- 상대적 중요도를 평가하여 우선순위를 부여함
- 시스템 인터페이스 요구사항 분석 절차
- 관련 요구사항을 선별하여 별도로 요구사항 목록을 만듦
- 관련된 자료를 준비
- 기능, 비기능 요구사항으로 분리
- 요구사항 명세서에 내용을 추가하거나 수정
- 요구사항 명세서와 요구사항 목록을 이해관계자에게 전달
인터페이스 요구사항 검증
- 인터페이스 요구사항 검증
- 사용자들의 요구사항이 요구사항 명세서에 기술되었는지 검토하고 베이스라인 설정
- 검증 수행 순서
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/715b61d2-dc78-43a7-8169-eaadaf75908f/스크린샷_2024-10-17_오전_7.12.45.png
- 요구사항 검증 방법
- 요구사항 검토
- 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석동료 검토 명세서 작성자가 내용을 직접 설명하고 동려들이 결함을 발견
워크스루 요구사항 명세서를 미리 배포하여 사전 검토 후 검토회를 통해 결함 발견 인스펙션 다른 검토 전문가들이 결함을 발견하는 형태의 검토 방법
- 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석동료 검토 명세서 작성자가 내용을 직접 설명하고 동려들이 결함을 발견
- 프로토 타이핑
- 견본품을 만들어 최종 결과물을 예측
- 테스트 설계
- 요구사항이 현실적으로 테스트 가능한지를 검토
- CASE 도구 활용
- 일관성 분석
- 요구사항 검토
- 요구사항 검증의 주요 항목
- 완전성
- 일관성
- 명확성
- 기능성
- 검증 가능성
- 추적 가능성
- 변경 용이성
송,수신 데이터 식별
- 식별 대상 데이터
- 송 수신 시스템 사이에서 교환되는 데이터로, 규격화된 표준 형식에 따라 전송
- 교환되는 데이터의 종류
- 인터페이스 표준 항목
- 송,수신 데이터 항목
- 공통 코드
- 인터페이스 표준 항목
- 송 수신 시스템을 연계하는데 표준적으로 필요한 데이터
- 시스템 공통부와 거래 공통부시스템 공통부 시스템 간 연동 시 공통 정보
거래 공통부 송 수신되는 데이터를 처리할 때 필요한 정보
- 송, 수신 데이터 항목
- 송 수신 시스템이 업무를 수행하는데 사용하는 데이터
- 데이터 항목과 순서는 인터페이스별로 다름
- 공통 코드
- 시스템들에서 공통적으로 사용하는 코드
- 정보 흐름 식별
- 개발할 시스템과 내 외부 시스템 사이 방향성을 식별
- 송, 수신 데이터 식별
- 개발할 시스템과 연계할 내, 외부 시스템 사이의 정보 흐름과 데이터베이스 산출물을 기반으로 식별
- 인터페이스 표준 항목과 송, 수신 데이터 항목 식별
- 교환 범위를 확인하고 송, 수신 데이터 항목을 식별
- 코드성 데이터 항목 식별
- 코드성 데이터 항목에 대해 코드, 코드명, 코드 설명 등의 코드 정보를 식별
인터페이스 방법 명세화
- 인터페이스 방법 명세화
- 내, 외부 시스템에 연계하여 작동할 때 인터페이스별 송, 수신 방법, 송, 수신 데이터, 오류 식별 및 처리 방안 내용을 문서로 정리
- 송, 수신 방법 명세화
- 각각의 인터페이스에 대해 연계 방식, 통신 및 처리 유형, 발생 주기 등의 송, 수신 방법을 정의하고 명세를 정의
- 송, 수신 데이터 명세화
- 송, 수신 데이터에 대한 명세를 작성
- 오류 식별 및 처리 방안 명세화
- 오류를 식별하고 오류 처리 방안에 대한 명세를 작성
- 인터페이스별로 송, 수신 방법을 명세화하기 위해 필요한 정보
- 시스템 연계 기술
- 인터페이스 통신 유형
- 처리 유형
- 발생 주기
- 시스템 연계 기술
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ea517563-223a-405f-b09e-7ad04e74137d/스크린샷_2024-10-17_오전_7.21.49.png
- 인터페이스 통신 유형유형 내용
단방향 요청만 하고 응답이 없는 형식 동기 요청 후 응답이 올 때 까지 대기 비동기 요청 후 다른 작업을 수행하다 응답이 오면 처리 - 인터페이스 처리 유형유형 내용
실시간 방식 요청 내용을 바로 처리 지연 처리 방식 데이터를 매 건 단위로 처리할 경우 비용이 많이 발생할 때 배치 방식 대량의 데이터를 처리할 때 사용 - 인터페이스 발생 주기
- 개발할 시스템과 내,외부 시스템 간 송, 수신 데이터가 전송되어 인터페이스가 사용되는 주기를 의미
미들웨어 솔루션
- 미들웨어
- 운영체제와 응용 프로그램, 서버와 클라이언트 사이에서 다양한 서비스를 제공하는 소프트웨어
- 표준화된 인터페이스를 제공함으로써 시스템 간의 데이터 교환에 일관성을 보장함
- 미들웨어의 종류
- DB
- RPC
- MOM
- TP-Monitor
- ORB
- WAS
- DB
- 클라이언트에서 원격의 데이터베이스와 연결하는 미들웨어
- RPC(원격 프로시저 호출)
- 원격 프로시저를 마치 로컬 프로시저처럼 호출하는 미들웨어
- MOM(메시지 지향 미들웨어)
- 비동기형 메시지를 전달하는 미들웨어
- 이기종 분산 데이터 시스템의 데이터 동기를 위해 많이 사용됨
- TP-Monitor(트랜잭션 처리 모니터)
- 트랜잭션을 처리 및 감시하는 미들웨어
- 사용자 수가 증가해도 빠른 응답 속도를 유지해야 하는 업무로 사용함
- ORB(객체 요청 브로커)
- 객체 지향 미들웨어
- TP-Monitor의 장점인 트랜잭션 처리와 모니터링 등을 추가로 구현한 제품도 존재
- WAS(웹 애플리케이션 서버)
- 동적인 콘텐츠를 처리하기 위한 미들웨어
- 웹 환경을 구현하기 위한 미들웨어
모듈 연계를 위한 인터페이스 기능 식별
- 모듈 연계
- 내부 모듈과 외부 모듈 또는 내부 모듈 간 데이터의 교환을 위해 관계를 설정
- 대표적인 모듈 연계 방법
- EAI(Enterprise Application Integration)
- ESB(Enterprise Service Bus)
- 웹 서비스
- EAI
- 기업 내 각종 애플리케이션 및 플랫폼 간의 정보 전달, 연계, 통합 등 상호 연동이 가능하게 해주는 솔루션
- EAI의 구축 유형!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/a0aa8dfd-9951-4aea-af16-c87a22f594df/스크린샷_2024-10-17_오전_7.30.46.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/2b0b459f-2766-47a5-90ad-6da23f43bb0a/스크린샷_2024-10-17_오전_7.30.26.png
- ESB
- 애플리케이션 간 연계, 표준 기반의 인터페이스를 제공하는 솔루션
- 애플리케이션 통합측면에서 EAI와 유사하지만 서비스 중심의 통합을 지향
- 범용적으로 사용하기 위해 결합도 약하게 유지
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/e66c3ffa-ac3d-4d18-adf6-cdd66bd2cf14/스크린샷_2024-10-17_오전_7.31.40.png
- 웹 서비스
- 네트워크의 정보를 표준화된 서비스 형태로 만들어 공유하는 기술
- 서비스 지향 아키텍처(SOA) 개념
- 웹 서비스의 구성
- SOAP
- HTTP, HTTPS, SMTP 등을 활용하여 XML기반의 메시지 교환
- UDDI
- WSDL을 등록하여 서비스와 서비스 제공자를 검색하고 접근하는데 사용
- WSDL
- 웹 서비스명, 서비스 제공 위치, 프로토콜 XML 형식으로 구현
- SOAP
- 모듈 간 인터페이스 기능 식별
- 식별된 모듈 간 관련 기능을 검토하여 인터페이스 동작에 필요한 기능을 식별
- 모듈 간 동작하는 기능을 통해 인터페이스 기능을 식별
- 시나리를 통해 내부 모듈과 관련된 인터페이스 기능을 식별
- 실제적으로 필요한 인터페이스 기능을 최종적으로 선별
- 인터페이스 기능 구현을 정의하는데 사용
모듈 간 인터페이스 데이터 표준 확인
- 인터페이스 데이터 표준
- 모듈 간 인터페이스에 사용되는 데이터의 형식을 표준화하는 것
- 기존의 데이터 중에서 공통 영역을 추출하거나 어느 한쪽의 데이터를 변환하여 정의함
- 인터페이스 데이터 표준 확인
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/63553d08-9c94-475c-8a0e-7b4d8d7403ad/스크린샷_2024-10-17_오전_7.35.24.png
인터페이스 기능 구현의 정의
- 인터페이스 기능 구현의 정의
- 인터페이스를 실제로 구현하기 위해 인터페이스 기능에 대한 구현 방법을 기능별로 기술하는 것
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/8f142ab7-d2a2-40d8-aa12-e077b965e368/스크린샷_2024-10-17_오전_7.36.10.png
- 모듈 세부 설계서
- 모듈의 구성 요소와 세부적인 동작 등을 정의한 설계서
- 모듈 세부 설계서 종류컴포넌트 명세서 컴포넌트 개요, 내부 클래스의 동작, 외부와의 통신하는 명세 등을 정의
인터페이스 명세서 인터페이스 클래스의 세부 조건 및 기능 등을 정의
인터페이스 구현
- 인터페이스 구현
- 송, 수신 시스템 간의 데이터 교환 및 처리를 실현해 주는 작업
- 대표적인 인터페이스 구현 방법
- 데이터 통신을 이용한 인터페이스 구현
- 인터페이스 엔티티를 이용한 인터페이스 구현
- AJAX
- JS를 이용하여 클라이언트와 서버 간에 XML 데이터를 주고 받는 비동기 통신 기술
- 웹 페이지 일부 영역만을 업데이트 할 수 있음
- JSON
- 용량이 적은 데이터를 교환하기 위해 데이터 객체를 속성, 값의 쌍 형태로 표현하는 개방형 표준 포맷
- 데이터 통신을 이용한 인터페이스 구현
- ex) JSON을 이용한 인터페이스 구현 순서
- 인터페이스 객체를 생성, 각 시스템 환경에 맞게 선택함
- JSON 이용해 인터페이스 객체를 만듦
- 인터페이스 객체를 AJAX 기술 등을 이용하여 수신 측으로 보냄
- 인터페이스 객체를 수신해 파싱한 후 처리함
- 수신 측에서 송신 측으로 처리 결과를 보냄
- ex) JSON을 이용한 인터페이스 구현 순서
- 인터페이스 엔티티를 이용한 인터페이스 구현
- 인터페이스가 필요한 시스템 사이에 별도의 인터페이스 엔티티를 두어 상호 연계하는 것
- 테이블을 엔티티로 활용함
- ex) 인터페이스 테이블을 이용한 인터페이스 구현 순서
- 인터페이스 이벤트가 발생하면 인터페이스 데이터를 기록
- 송신 측 인터페이스 테이블에 인터페이스 데이터를 전송
- 수신 측 인터페이스 테이블에 입력되면 인터페이스 데이터를 읽음
- 수신 측 인터페이스 테이블에서 읽은 후 사전에 정의된 데이터 트랜잭션 수행
인터페이스 보안
- 인터페이스 보안
- 인터페이스의 보안 취약점 분석 후 적절한 보안 기능을 적용
- 인터페이스 보안 기능 적용
- 인터페이스 아키텍처에 따라 IPSec, SSL, S-HTTP를 사용 | | --- | --- | | 애플리케이션 영역 | 보안 가이드를 참조하여 코드 상의 보안 취약점을 보완 | | 데이터베이스 영역 | - 데이터베이스, 스키마, 엔티티의 접근 권한과 프로시저, 트리거 등 동작 객체의 보안 취약점에 보안 기능 적용
- 개인 정보나 업무상 민감한 데이터의 경우 암호화나 익명화 등 데이터 자체의 보안 방안도 고려 |
- | 네트워크 영역 | - 스니핑 등을 이용한 데이터 탈취 및 변조 위협을 방지하기 위해 네트워크 트래픽에 대한 암호화를 설정
- 데이터 무결성 검사 도구
- 인터페이스 보안 취약점을 분석하는데 사용되는 도구
- 시스템 파일의 변경 유무를 확인하고, 파일이 변경되었을 경우 이를 관리자에게 알려줌
- 종류
- TripWire
- AIDE
- Samhain
- Claymore
- Slipwire
- Fcheck
인터페이스 구현 검증
- 인터페이스 구현 검증
- 인터페이스가 정상적으로 문제없이 작동하는지 확인
- 인터페이스 구현 검증 도구, 감시 도구를 이용
- 인터페이스 구현 검증 도구
- 인터페이스 단위 기능과 시나리오 등을 기반으로 하는 통합 테스트가 필요함
- 테스트 자동화 도구
- 인터페이스 구현 감시 도구
- 동작 상태는 APM(애플리케이션 성능 관리)을 사용하여 감시(Monitoring)할 수 있음
- APM을 통해 종합적인 정보를 조회하고 분석할 수 있음
- 대표적인 APM
- 스카우터
- 제니퍼
- APM(Application Performance Management/Monitoring)
- 애플리케이션의 성능 관리를 위해 다양한 모니터링 기능을 제공하는 도구
- APM은 리소스 방식과 엔드투엔드의 두 가지 유형이 있음
- 리소스 방식
- Nagios, Zabbix, Carti
- 엔드투엔드 방식
- VisualVM, 제니퍼, 스카우터
- 리소스 방식
사용자 인터페이스
- 사용자 인터페이스(UI, User Interface)
- 사용자와 시스템 간의 상호작용이 이뤄지도록 도와주는 장치나 소프트웨어
- 사용자 인터페이스의 세 가지 분야
- 물리적 제어
- 상세적인 표현과 전체적인 구성
- 편리하고 간편하게 사용하도록 하는 기능
- 사용자 인터페이스의 구분구분 내용
CLI 명령과 출력이 텍스트 형태로 이루어지는 인터페이스 GUI 아이콘이나 메뉴를 마우스로 선택하여 작업을 수행하는 그래픽 환경의 인터페이스 NUI 말이나 행동으로 기기를 조작하는 인터페이스 - 사용자 인터페이스의 기본 원칙
- 직관성
- 유효성
- 학습성
- 유연성
UI 설계 도구
- 와이어프레임
- 페이지에 대한 개략적인 레이아웃이나 뼈대를 설계하는 도구
- 페이지의 영역 구분, 콘텐츠, 텍스트 배치 등을 화면 단위로 설계함
- 목업
- 실제 화면과 유사하게 만든 정적인 형태의 모형
- 스토리보드
- 와이어프레임에 콘텐츠에 대한 설명, 페이지 간 이동 흐름 등을 추가한 문서
- 디자이너와 개발자가 최종적으로 참고하는 작업 지침서
- 서비스 구축을 위한 모든 정보가 들어 있음
- 프로토타입
- 와이어프레임이나 스토리보드 등에 인터랙션을 적용함으로써 실제 구현된 것처럼 테스트가 가능한 동적인 형태의 모형
- 종류
- 제작 기간이 짧은 경우, 제작 비용이 적을 경우, 업무 협의가 빠를 경우 | | --- | --- | | 디지털 프로토타입 | - 파워포인트, 아크로뱃, 비지오, 옴니그래플 등과 같은 프로그램을 사용
- 재사용이 필요한 경우, 산출물과 비슷한 효과가 필요한 경우, 숙력된 전문가가 있는 경우 |
- | 페이퍼 프로토타입 | - 아날로그적인 방법
- 유스케이스
- 사용자의 요구사항을 기능 단위로 표현
- 사용자가 원하는 목표를 달성하기 위해 수행할 내용을 기술함
- 사용자의 요구사항을 빠르게 파악함으로써 초기에 시스템의 기능적인 요구를 결정
- 다이어그램 형식으로 묘사됨
품질 요구사항
- 품질 요구사항
- 사용자의 입장에서 얼마나 충족하는가
- 사용자의 요구사항을 충족시킴으로써 확립
- 소프트웨어 품질 관련 표준
- ISO/IEC 9126의 소프트웨어 품질 특성
UI 설계서
- UI 설계서
- 요구사항을 바탕으로 UI 설계를 구체화하여 작성하는 문서
- 기획자, 개발자, 디자이너 등과의 원할한 의사소통을 위함
- UI 흐름 설계
- UI 상세 설계
- 실제 설계 구현을 위해 자세하게 설계
- 반드시 시나리오를 작성해야함
- UI 시나리오 문서
- 사용자 인터페이스의 기능 구조, 대표 화면, 화면 간 인터랙션의 흐름, 다양한 상황에서의 예외 처리 등을 정리한 문서
- 사용자가 최종 목표를 달성하기 위한 방법이 순차적으로 묘사되어 있음
- UI 시나리오 문서의 요건
- 완전성
- 일관성
- 이해성
- 가독성
- 수정 용이성
- 추적 용이성
- UI 상세 설계 순서
HCI / UX / 감성공학
- HCI(Human Computer Interaction or Inteface)
- 사람이 시스템을 보다 편리하고 안전하게 사용할 수 있도록 연구하고 개발하는 학문
- 최종목표는 최적의 UX 만드는 것
- 어떤 제품이 좋은 제품인지, 어떻게 하면 좋은 제품을 만들 수 있는지 연구
- UX(User Experience)
- 사용자가 시스템이나 서비스를 이용하면서 느끼고 생각하게 되는 총체적인 경험
- UI가 사용성, 접근성, 편의성을 중시한다면, UX는 UI를 통해 사용자가 느끼는 만족이나 감정 중시
- 기술을 효용성 측면만 아니라 삶의 질을 향상시키는 하나의 방향으로 봄
- UX의 특징
- 주관성
- 정황성
- 총체성
- 감성공학
- 제품이나 작업환경을 사용자의 감성에 알맞도록 설계 및 제작하는 기술
- 여러 분야의 학문이 공존하는 종합과학임
- 목적은 인간의 삶을 편리하고 안전하며 쾌적하게 만드는 것
- 인간의 감성을 제품 설계에 적용하기 위해 공학적인 접근 방법 사용
애플리케이션 테스트
- 애플리케이션 테스트
- 애플리케이션에 잠재되어 있는 결함을 찾아내는 일련의 행위 또는 절차
- 고객의 요구사항을 만족시키는지 확인하고 소프트웨어가 기능을 정확히 수행하는지 검증함
- 애플리케이션의 기본 원리기본 원리 설명
완벽한 테스트 불가능 잠재적인 결함을 줄일 수 있지만 결함이 없다고 증명할 수 없음 파레토 법칙 20%에 해당하는 코드에서 전체 결함의 80%가 발견된다는 법칙 살충제 패러독스 동일한 테스트 케이스로 동일한 테스트를 반복하면 더 이상 결함이 발견되지 않는 현상 테스팅은 정황 의존 소프트웨어의 특징, 테스트 환경, 테스터의 역량 등 정황에 따라 테스트 결과가 달라질 수 있으므로, 정황에 따라 다르게 테스트를 수행해야함 오류-부재의 궤변 결함을 모두 제거해도, 사용자의 요구사항을 만족시키지 못하면 품질이 높다고 할 수 없다. 테스트와 위험은 반비례 테스트를 할 수록 미래에 발생할 위험을 줄일 수 있음 테스트의 점진적 확대 작은 부분에서 시작하여 점점 확대하며 진행 테스트의 별도 팀 수행 개발자와 관계없는 별도의 팀에서 수행
애플리케이션 테스트의 분류
- 프로그램 실행 여부에 따른 테스트
- 소스 코드에 대한 코딩 표준, 코딩 스타일, 코드 복잡도, 남은 결합 등을 발견하기 위함
- 종류: 워크스루, 인스펙션, 코드 검사 | | --- | --- | | 동적 테스트 | - 프로그램을 실행하여 오류를 찾는 테스트
- 개발의 모든 단계에서 테스트를 수행
- 종류: 블랙박스 테스트, 화이트박스 테스트 |
- | 정적 테스트 | - 프로그램을 실행하지 않고 명세사나 소스 코드를 대상으로 분석
- 테스트 기반에 따른 테스트
- 종류: 동등 분할, 경계 값 분석 등 | | --- | --- | | 구조 기반 테스트 | - 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인
- 종류: 구문 기반, 결정 기반, 조건 기반 등 | | 경험 기반 테스트 | - 유사 소프트웨어나 기술 등에 대한 테스터의 경험을 기반으로 수행
- 명세가 불충분하거나 테스트 시간에 제약이 있는 경우
- 종류: 에러 추정, 체크 리스트, 탐색적 테스팅 |
- | 명세 기반 테스트 | - 사용자의 요구사항에 대한 명세를 빠짐없이 테스트 케이스로 만들어 구현하고 있는지 확인하는 테스트
- 시각에 따른 테스트
- 명세서대로 완성됐는지 테스트 | | --- | --- | | 확인 테스트 | - 사용자의 시각에서 생산된 제품의 결과를 테스트
- 요구한대로 제품이 완성됐는지, 정상적으로 동작하는지 테스트 |
- | 검증 테스트 | - 개발자의 시각에서 제품의 생산 과정을 테스트
- 목적에 따른 테스트회복 테스트 실패하도록 한 후 올바르게 복구되는지 확인
안전 테스트 불법적인 침입으로부터 시스템을 보호할 수 있는지 강도 테스트 과도한 정보량이나 빈도 등을 부과하여 과부하 시에도 정상적으로 실행되는지 성능 테스트 실시간 성능이나 전체적인 효율성을 진단, 응답 시간, 처리량 등을 테스트 구조 테스트 논리적인 경로, 소스 코드의 복잡도 등을 평가 회귀 테스트 변경 또는 수정된 코드에 새로운 결함이 없음을 확인하는 테스트 병행 테스트 변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력하여 결과를 비교하는 테스트
개발 단계에 따른 애플리케이션 테스트
- 개발 단계에 따른 애플리케이션 테스트
- 개발 단계에 따라 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트로 분류됨
- 애플리케이션 테스트와 소프트웨어 개발 단계를 연결하여 표현한 것을 V-모델이라고 함
- 단위 테스트
- 코딩 직후 모듈이나 컴포넌트에 초점을 맞춰 테스트함
- 기능성 테스트를 최우선으로 수행
- 구조 기반 테스트와 명세 기반 테스트로 나뉘지만 주로 구조 기반 테스트를 시행함
- 통합 테스트
- 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트를 의미
- 모듈 간 또는 통합된 컴포넌트 간의 상호 작용 오류를 검사함
- 시스템 테스트
- 완벽하게 수행되는가를 점검
- 기능정 요구사항과 비기능적 요구사항으로 구분하여 각각을 만족하는지 테스트
- 인수 테스트
- 사용자의 요구사항을 충족하는지에 중점을 둠
- 사용자가 직접 테스트함
사용자 인수 테스트 시스템 사용의 적절성 여부를 확인함 운영상의 인수 테스트 - 시스템 관리자가 시스템 인수 시 수행하는 테스트 기법 - 백업/복원 시스템, 재난 복구, 사용자 관리, 정기 점검 | | 계약 인수 테스트 | 계약상의 인수/검수 조건을 준수하는지 여부 | | 규정 인수 테스트 | 정부 지침, 법규, 규정에 맞게 개발 되었는지 여부 | | 알파 테스트 | 사용자가 개발자 앞에서 행하는 테스트 기법 | | 베타 테스트 | 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법 |
통합 테스트
- 통합 테스트
- 단위 테스트가 끝난 모듈을 통합하는 과정에서 발생하는 오류 및 결함을 찾는 테스트 기법
- 종류
- 종류: 빅뱅 통합 테스트 방식 | | --- | --- | | 점진적 통합 방식 | - 모듈 단위로 단계적으로 통합하면서 테스트 하는 방법
- 종류: 하향식 통합 테스트, 상향식 통합 테스트, 혼합식 통합 테스트 |
- | 비점진적 통합 방식 | - 통합하는 절차 없이 모든 모듈이 미리 결합되어 있는 프로그램 전체를 테스트 하는 방법
- 하향식 통합 테스트
- 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트
- 깊이 우선 통합법이나 넓이 우선 통합법을 사용함
- 하향식 통합 테스트 절차
- 제어 모듈은 작성된 프로그램을 사용, 주요 제어 모듈의 종속 모듈들은 스텁으로 대체
- 깊이 우선 또는 넓이 우선 등의 통합 방식에 따라 하위 모듈인 스텁들이 한 번에 하나씩 실제 모듈로 교체
- 모듈이 통합할 때 마다 테스트를 실시함
- 새로운 오류가 발생하지 않음을 보증하기 위해 회귀 테스트를 실시
- 상향식 통합 테스트
- 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트
- 상향식 통합 테스트 절차
- 하위 모듈들을 클러스터로 결합
- 상위 모듈에서 데이터 입,출력을 확인하기 위해 더미 모듈인 드라이버를 작성함
- 통합된 클러스터 단위로 테스트
- 테스트 완료 시, 프로그램 구조의 상위로 이동하여 결합하고 드라이버는 실제 모듈로 대체됨
- 혼합식 통합 테스트
- 하위 수준에는 상향식 통합, 상위 수준에서는 하향식 통합을 사용하여 최적의 테스트를 지원
- 샌드위치 식 통합 테스트 방법이라고도 함
- 회귀 테스팅
- 통합 테스트로 인해 변경된 모듈이나 컴포넌트에 새로운 오류가 있는지 확인
- 이미 테스트된 프로그램의 테스팅을 반복
- 수정한 모듈이나 컴포넌트가 다른 부분에 영향을 미치는지, 오류가 생기지 않았는지 새로운 오류가 발생하지 않음을 보증하기 위해 반복 테스트함.
테스트 케이스/ 테스트 시나리오 / 테스트 오라클
- 테스트 케이스
- 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력 값, 실행 조건, 기대 결과 등으로 구성 된 테스트 항목에 대한 명세서
- 오류 방지, 인력 시간, 자원 낭비를 지울 수 있음
- 테스트 시나리오
- 테스트 케이스를 적용하는 순서에 따라 여러 개의 테스트 케이스를 묶은 집합
- 적용하는 구체적인 절차를 명세함
- 구체적인 절차, 사전 조건, 입력 데이터 등이 설정되어 있음
- 테스트 오라클
- 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입하여 비교
- 테스트 케이스에 대한 예상 결과를 계산하거나 확인함
- 테스트 오라클의 특징
- 제한된 검증
- 모든 테스트 케이스에 적용할 수 없음
- 수학적 기법
- 값을 수학적 기법을 이용하여 구할 수 있음
- 자동화 기법
- 대상 프로그램의 실행, 결과 비교, 커버리지 측정 등을 자동화 할 수 있음
- 제한된 검증
- 테스트 오라클의 종류
- 모든 오류를 검출할 수 있음 | | --- | --- | | 샘플링 오라클 | - 특정한 몇몇 테스트 케이스의 입력 값들에 대해서만 기대하는 결과를 제공
- 전수 테스트가 불가능한 경우 사용 | | 추정 오라클 | - 특정 테스트 케이스의 입력값에 대해 기대하는 결과 제공
- 나머지 입력 값들에 대해서는 추정으로 처리하는 오라클 | | 일관성 검사 오라클 | 애플리케이션에 변경이 있을 때, 테스트 케이스의 수행 전과 후의 결과 값이 동일한지를 확인 |
- | 참 오라클 | - 입력 값에 대해 기대하는 결고라르 제공하는 오라클
테스트 자동화 도구
- 테스트 자동화
- 사람이 반복적으로 수행하던 테스트 절차를 스크립트 형태로 구현하는 자동화 도구를 적용함으로써 쉽고 효율적으로 테스트를 수행할 수 있도록 한 것
- 테스트 유형에 따른 테스트 자동화 도구의 종류
- 정적 분석 도구
- 테스트 실행 도구
- 성능 테스트 도구
- 테스트 통제 도구
- 정적 분석 도구
- 프로그램을 실행하지 않고 분석하는 도구
- 테스트 실행 도구
- 스크립트 언어를 사용하여 테스트를 실행하는 도구
- 데이터 주도 접근 방식
- 데이터를 저장하고 이를 읽어 실행하는 방식
- 키워드 주도 접근 방식
- 수행할 동작을 나타내는 키워드와 테스트 데이터를 저장하여 실행하는 방식
- 성능 테스트 도구
- 가상의 사용자를 만들어 성능의 목표 달성 여부를 확인하는 도구
- 테스트 통제 도구
- 테스트 계획 및 관리, 테스트 수행, 결함 관리 등을 수행하는 도구
- 종류
- 형상 관리 도구
- 결함 추적 / 관리 도구
- 테스트 하네스 도구
- 테스트가 실행될 환경을 시뮬레이션하여 컴포넌트 및 모듈이 정상적으로 테스트되도록 하는 도구
- 테스트 하네스
- 컴포넌트 및 모듈을 테스트하는 환경의 일부분으로, 테스트를 지원하기 위해 생성된 코드와 데이터
- 테스트 하네스의 구성 요소테스트 드라이버
테스트 스텁 테스트 슈트 컴포넌트나 모듈, 시스템에 사용되는 테스트 케이스의 집합 테스트 케이스 테스트 스크립트 테스트 실행절차에 대한 명세서 목 오브젝트 조건부로 입력해 두면, 그 상황에 맞는 예정된 행위를 수행 - 테스트 수행 단계별 테스트 자동화 도구테스트 단계 자동화도구 설명
테스트 계획 요구사항 관리 요구사항 정의 및 변경 사항 등을 관리하는 도구 테스트 분석 / 설계 테스트 케이스 생성 테스트 데이터 및 테스트 케이스 작성을 지원 테스트 수행 테스트 자동화 자동화를 도와주는 도구 정적 분석 코딩 표준, 런타임 오류 검증 동적 분석 시뮬레이션을 통해 오류를 검출 성능 테스트 가상의 사용자를 생성하여 처리 능력을 측정 모니터링 CPU, Memory 등과 같은 시스템 자원의 상태 확인 및 분석을 지원 테스트 관리 커버리지 분석 충분성 여부 검증 형상 관리 도구 및 데이터 관리 결함 추적/ 관리 발생한 결함 추적 및 관리 활동을 지원
결함 관리
- 결함
- 소프트웨어가 개발자가 설계한 것과 다르게 동작하거나 다른 결과가 발생되는 것
- 결함 관리 프로세스
- 결함 상태 추적
- 발견된 결함은 지속적ㄱ으로 상태 변화를 추적하고 관리해야ㅏㅎㅁ
정보시스템 구축관리
개별 환경 구축
- 개발 환경 구축
- 개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축
- 응용 소프트웨어가 운영될 환경과 유사한 구조로 구축
- 하드웨어와 소프트웨어를 선정함
- 성능, 편의성, 라이선스 등의 비즈니스 환경에 적합한 제품들을 최종적으로 결정하여 구축함
- 하드웨어 환경
- 사용자와의 인터페이스 역할을 하는 클라이언트, 서비스를 제공하는 서버로 구성
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/fdcae290-8799-49e3-8f8e-d909a5ecd7c2/스크린샷_2024-10-12_오후_10.31.17.png
- 클라이언트의 종류
- 개인용 컴퓨터(PC), 스마트폰 등
- 서버의 종류종류 특징
웹 서버 - 직접 요청을 받아 처리함 - 정적 파일들을 제공함 | | 웹 애플리케이션 서버(WAS) | 동적 서비스를 제공하거나 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행함 | | 데이터베이스 서버 | 데이터베이스와 이를 관리하는 DBMS를 운영함 | | 파일 서버 | 데이터베이스에 저장하기에는 비효율적이거나, 서비스 제공을 목적으로 유지하는 파일들을 저장함 |
- 소프트웨어 환경
- 클라이언트와 서버 운영을 위한 시스템 소프트웨어와 개발에 사용되는 개발 소프트웨어로 구성됨
- 시스템 소프트웨어의 종류
- 운영체제, 웹 서버 및 WAS 운용을 위한 서버 프로그램, DBMS
- 개발 소프트웨어의 종류종류 특징
요구사항 관리 도구 요구사항의 수집과 분석, 추적 등을 편리하게 도와주는 소프트웨어 설계/모델링 도구 UML을 지원하며, 전 과정에서 설계 및 모델링을 도와주는 소프트웨어 구현 도구 개발 언어를 통해 실제 구현을 지원하는 소프트웨어 빌드 도구 소스의 빌드 및 배포, 라이브러리 관리를 지원하는 소프트웨어 테스트 도구 모듈들이 요구사항에 적합하게 구현되었는지 테스트하는 소프트웨어 형상 관리 도구 버전별로 관리하여 품질 형상을 지원하는 소프트웨어 - 웹 서버의 기능기능 내용
HTTP/HTTPS 지원 브라우저로부터 요청을 받아 응답할 때 사용되는 프로토콜 통신 기록 처리한 요청들을 로그 파일로 기록하는 기능 정적 파일 관리 HTML, CSS, 이미지 등의 정적 파일들을 저장하고 관리 대역폭 제한 트래픽의 포화를 방지하기 위해 응답 속도 제한 가상 호스팅 여러 개의 도메인 이름을 연결하는 기능 인증 합법적인 사용자인지를 확인 - 개발 언어의 선정 기준기준 내용
적정성 개발하려는 소프트웨어의 목적에 적합해야 함 효율성 코드의 작성 및 구현이 효율적이어야 함 이식성 다양한 시스템 및 환경에 적용이 가능해야 함 친밀성 개발 언어에 대한 개발자들의 이해도와 활용도가 높아야 함 범용성 다른 개발 사례가 존재하고 여러 분야에서 활용되고 있어야 함
소프트웨어 아키텍처
- 소프트웨어 아키텍처
- 소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체
- 분할 방법과 분할된 모듈에 할당될 기능, 모듈 간의 인터페이스 등을 결정함
- 소프트웨어 아키텍처 설계의 기본 원리, 모듈화, 추상화, 단계적 분, 정보은닉이 있음
- 모듈화
- 소프트웨어의 성능 향상, 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 시스템의 기능들을 모듈 단위로 나누는 것을 의미함
- 모듈의 크기를 너무 작게 나누면 개수가 많아져 모듈 간의 통합 비용이 많이 듬
- 모듈의 크기를 너무 크게 나누면 개수가 적어 통합 비용은 적게 들지만 모듈 하나의 개발 비용이 많이 듬
- 추상화
- 전체적이고 포괄적인 개념을 설계한 후 구체화시켜 나가는 것
- 완전한 시스템을 구축하기 전에, 유사한 모델을 만들어서 여러 가지 요인들을 테스트 할 수 있음
- 추상화의 유형과정 추상화 전반적인 흐름만 파악
데이터 추상화 데이터 구조를 대표할 수 있는 표현으로 대체하는 방법 제어 추상화 이벤트 발생의 대표할 수 있는 표현
- 단계적 분해
- 상위의 중요 개념으로부터 하위의 개념으로 구체화 시키는 분할 기법
- 하향식 설계 전략
- 포괄적인 기능에서부터 점차적으로 구체화
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/50d04f5a-7fcf-4c1e-b9e5-493ff044b48d/스크린샷_2024-10-12_오후_11.25.52.png
- 정보 은닉
- 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법
- 모듈을 독립적으로 수행할 수 있음
- 하나의 모듈이 변경되더라도 다른 모듈에 영향을 주지 않으므로 수정, 시험, 유지보수가 용이함
- 상위 설계와 하위 설계
- 소프트웨어 개발의 설계 단계는 크게 상위 설계와 하위 설계로 구분할 수 있음
별칭 아키텍쳐 설계, 예비 설계 모듈 설계, 상세 설계 설계 대상 전체적인 구조 내부 구조 및 행위 세부 목록 구조, DB, 인터페이스 컴포넌트, 자료구조, 알고리즘 - 소프트웨어 아키텍처의 품질 속성
- 이해관계자들이 요구하는 수준의 품질을 유지 및 보장할 수 있게 설계되었는지 확인하기 위해 품질 평가 요소들을 구체화 시켜 놓은 것
- 품질 평가 요소의 종류시스템 측면 성증, 보안, 가용성, 기능성, 사용성, 변경 용이성, 확장성 등
비즈니스 측면 시장 적시성, 비용과 혜택, 예상 시스템 수명, 목표 시장, 공개 일정 등 아키텍처 측면 개념적 무결성, 정확성, 완결성, 구축 가능성, 변경성, 시험성 등
- 소프트웨어 아키텍쳐의 설계 과정
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/f58f2955-b009-4fbf-b275-e8b26a59fe93/스크린샷_2024-10-12_오후_11.30.37.png
- 협약(Contract)에 의한 설계
- 컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것
- 정확한 인터페이스를 명세함
- 명세에 포함될 조건조건 내용
선행 조건 오퍼레이션이 호출되기 전에 참이 되어야 할 조건 결과 조건 오퍼레이션이 수행된 후 만족되어야 할 조건 불변 조건 오퍼레이션이 실행되는 동안 항상 만족되어야 할 조건
아키텍처 패턴
- 아키택처 패턴
- 아키택처를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 주요 아키텍처 패턴의 종류
- 레이어 패턴
- 클라이언트-서버 패턴
- 파이프-필터 패턴
- 모델-뷰-컨트롤러 패턴
- 레이어 패턴
- 시스템을 계층으로 구분하여 구성하는 패턴
- 서로 마주보는 두 개의 계층 사이에서만 사용작용이 이루어짐
- 대표적으로 OSI참조 모델이 있음
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ab3f22c4-63c5-40e2-893d-cb7558a31719/스크린샷_2024-10-12_오후_11.50.54.png
- 클라이언트-서버 패턴
- 파이프-필터 패턴
- 데이터 스트림 절차를 필터로 캡슐화하여 파이프를 통해 전송하는 패턴
- 앞 시스템의 처리 결과물을 처리한 후 다시 파이프를 통해 다음 시스템으로 넘겨주는 패턴을 반복함
- 데이터 변환, 버퍼링, 동기화 등에 주로 사용됨
- 대표적으로 UNIX의 쉘이 있음
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/c0f0c61e-109f-43dd-aa8f-917de3ad3a2f/스크린샷_2024-10-12_오후_11.53.22.png
- 모델-뷰-컨트롤러 패턴
- 서브시스템을 모델, 뷰, 컨트롤러로 구조화하는 패턴
- 사용자의 요청을 받으면 핵심 기능과 데이터를 보관하는 모델을 이용하여 뷰에 정보를 출력하는 구조임
- 여러 개의 뷰를 만들 수 있음
- 한 개의 모델에 대해 여러 개의 뷰를 필요로 하는 대화형 애플리케이션에 적합함
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/797097ff-90b3-430f-8eed-7737a9a4de38/스크린샷_2024-10-12_오후_11.55.48.png
- 기타 패턴종류 내용
마스터-슬레이브 패턴 슬레이브 컴포넌트에서 처리된 결과물을 다시 돌려받는 방식으로 작업 예) 장애 허용 시스템, 병렬 컴퓨팅 시스템 브로커 패턴 사용자가 원하는 서비스와 특성을 브로커 컴포넌트에 요청하면 요청에 맞는 컴포넌트와 사용자를 연결해주는 패턴 예) 분산 환경 시스템 피어-투-피어 패턴 피어라 불리는 하나의 컴포넌트가 클라이언트가 될 수도, 서버가 될 수도 있는 패턴 예) 파일 공유 네트워크 이벤트-버스 패턴 이벤트 메시지를 발행(Publish)하면, 해당 채널을 구독(Subscribe)한 리스너들이 메시지를 받아 이벤트를 처리 예) 알림 서비스 블랙보드 패턴 모든 컴포넌트들이 공유 데이터 저장소와 블랙보드 컴포넌트에 접근이 가능한 패턴 예) 음성 인식, 차량 식별, 신호 해석 인터프리터 패턴 프로그램 코드의 각 라인을 수행하는 방법을 지정하고, 기호마다 클래스를 갖도록 구성된 패턴 예) 번역기, 컴파일러, 인터프리터
객체지향
- 객체지향
- 각 요소들을 객체로 만든 후, 객체들을 조립해서 소프트웨어를 개발하는 기법
- 재사용 및 확장이 용이
- 객체지향의 구성 요소
- 객체
- 클래스
- 메시지
- 객체지향의 특징
- 캡슐화
- 상속
- 다형성
- 연관성
- 객체
- 데이터와 함수를 묶어 놓은 소프트웨어 모듈
- 데이터
- 객체가 가지고 있는 정보로, 속성이나 상태, 분류 등
- 함수
- 객체가 수행하는 기능으로 객체가 갖는 데이터를 처리하는 알고리즘
- 객체의 상태를 참조하거나 변경하는 수단
- 데이터
- 데이터와 함수를 묶어 놓은 소프트웨어 모듈
- 클래스
- 공통된 속성과 연산을 갖는 객체의 집합
- 속성과 연산을 정의하고 있는 틀
- 클래스에 속한 각각의 객체를 인스턴스 라고 함
- 메시지
- 객체들 간의 상호작용에 사용되는 수단으로, 객체의 동작이나 연산을 일으키는 외부의 요구사항
- 메시지를 받은 객체는 예상된 결과를 반환함
- 캡슐화
- 외부에서의 접근을 제한하기 위해 인터페이스를 제외한 세부 내용을 은닉하는 것
- 외부 모듈의 변경으로 인한 파급효과가 적다
- 상대 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 단순해지고, 객체 간의 결합도가 낮아짐
- 상속
- 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
- 하위 클래스는 물려받은 속성과 연산을 다시 정의하지 않아도 즉시 자신의 속성으로 사용할 수 있음
- 하위 클래스는 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용할 수 있음
- 다형성
- 하나의 메시지에 대해 각각의 객체가 고유한 방법으로 응답할 수 있는 능력
- 예) ‘+’ 연산자의 경우 숫자 클래스에서는 덧셈, 문자 클래스에서는 문자열의 연결 기능으로 사용됨
- 연관성
객체지향 분석 및 설계
- 객체지향 분석의 방법론
- 사용자의 요구사항과 객체, 속성, 연산, 관계 등을 정의하여 모델링하는 작업
- 업무를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석함
- 클래스를 식별하는 것이 주요 목적임
- 객체지향 분석의 방법론종류 내용
Rumbaugh(럼바우) 방법 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어서 수행함 Booch(부치) 방법 - 미시적 개발 프로세스와 거시적 개발 프로세스를 모두 사용함 - 클래스와 객체들을 분석 및 식별하고 속성과 연산을 정의 | | Jacobson 방법 | 유스케이스(Use Case)를 강조하여 사용함 | | Coad와 Yourdon 방법 | - E-R 다이어그램을 사용하여 객체의 행위를 모델링함
- 객체 식별, 구조 식별, 주제 정의, 속성과 인스턴스 연결 정의, 연산과 메시지 연결 정의 등의 과정으로 구성함 | | Wirfs-Brock 방법 | 분석과 설계 간의 구분이 없고 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행함 |
- 럼바우 분석 기법
- 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법
- 객체 모델링 기법
- 분석 활동은 객체 모델링 → 동적 모델링 → 기능 모델링 순
동적 모델링 상태 다이어그램을 이용하여 시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현하는 모델링 기능 모델링 자료 흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링 - 객체지향 설계 원칙
- 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜져야 할 원칙
- SRP, OCP, LSP, ISP, DIP의 다섯 가지 원칙의 앞 글자를 따 SOLID 원칙이라고 부름
- 객체지향 설계 원칙의 종류종류 내용
단일 책임 원칙(SRP) 객체는 단 하나의 책임만 가져야 한다는 원칙 개방-폐쇄 원칙(OCP) 기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계 리스코프 치환 원칙(LSP) 자식 클래스는 부모 클래스의 기능을 수행할 수 있어야 한다. 인터페이스 분리 원칙(ISP) 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다는 원칙 의존 역전 원칙(DIP) 의존 관계 성립 시 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 원칙
모듈
- 모듈
- 모듈화를 통해 분리된 시스템의 각 기능으로, 서브루틴, 서브시스템, 소프트웨어 내의 프로그램, 작업 단위 등을 의미함
- 소프트웨어를 구성하는 각 모듈의 기능이 서로 독립됨을 의미함
- 모듈의 독립성은 결합도와 응집도에 의해 측정됨
- 결합도
- 모듈간의 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계
- 결합도가 약할수록 품질이 높고, 강할수록 품질이 낮음
- 결합도의 종류와 강도
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/8407a7b0-ece0-40c5-b0c9-7f346e809eb7/스크린샷_2024-10-17_오전_12.00.49.png
- 결합도의 종류종류 내용
내용 결합도 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때의 결합도 공통(공유) 결합도 공유되는 공통 데이터 영역을 여러 모듈이 사용할 떄의 결합도 외부 결합도 어떤 모듈에서 선언한 데이터를 외부의 다른 모듈에서 참조할 때의 결합도 제어 결합도 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어 신호나 제어 요소를 전달하는 결합도 - 결합도의 종류종류 내용
스탬프(검인) 결합도 배열이나 레코드 등의 자료 구조로 전달될 때의 결합도 자료 결합도 모듈 간의 인터페이스가 조료 요소로만 구성될 떄의 결합도 - 응집도
- 모듈의 내부 요소들이 서로 관련되어 있는 정도
- 응집도가 강할수록 품질이 높고, 약할수록 품질이 낮음
- 응집도의 종류와 강도
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/74b04a60-4dbc-409d-954b-f398e896efd6/스크린샷_2024-10-17_오전_4.04.12.png
- 응집도의 종류종류 내용
기능적 응집도 모듈 내부의 모든 기능 요소들이 단일 문제와 연관 순차적 응집도 하나의 활동으로부터 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우 교환적 응집도 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 절차적 응집도 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 순차적으로 수행할 경우 시간적 응집도 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성 논리적 응집도 유사한 성격을 갖거나 특정 형태로 분류 우연적 응집도 각 구성 요소들이 서로 관련 없는 요소로만 구성 - 팬인 / 팬아웃
- 팬인은 제어하는 모듈의 수
- 팬아웃은 제어되는 모듈의 수
- 팬인이 높다는 것은 재사용 측면에서 설계가 잘 되어있다고 볼 수 있음
- 팬인이 높은 경우 단일 장애점이 발생할 수 있으므로 중점적인 관리 및 테스트가 필요
- ex) 다음의 시스템 구조도에서 각 모듈의 팬인과 팬아웃을 구하시오.
- 팬인은 빨간색, 팬아웃은 파란색
- N-S차트(Nassi-Schneiderman Chart)
- 논리의 기술에 중점을 두고 도형을 이용해 표현하는 방법
- GOTO나 화살표 이용X
- 연속, 선택 및 다중 선택, 반복의 3가지 제어 논리 구조로 표현
- 시각적으로 명확히 식별하는 데 적합함
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/2e6572e7-1281-4a2c-9941-aed494c5facb/스크린샷_2024-10-17_오전_4.09.53.png
단위 모듈
- 단위 모듈
- 소프트웨어 구현에 필요한 여러 동작 중 한 가지 동작을 수행하는 기능을 모듈로 구현한 것
- 단위 모듈로 구현되는 하나의 기능을 단위 기능
- 독립적인 컴파일이 가능하며, 다른 모듈에 호출되거나 삽입되기도 함
- 단위 모듈의 구현 과정
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/aff3c21d-4b1c-40b9-b055-66c4e27e9528/스크린샷_2024-10-17_오전_4.11.37.png
- IPC(Inter-Process Communication)
- 모듈 간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합
- 복수의 프로세스를 수행, 프로세스 간 통신까지 구현
- IPC의 대표 메소드 5가지
Shared Memory 공유 가능한 메모를 구성 Socket 네트워크 소켓을 이용 Semaphores 공유 자원에 대한 접근 제어를 통해 통신 Pipes&named Pipes - Pipe라고 불리는 선입선출 형태 - Pipe는 하나의 프로세스가 이용 중이라면 다른 프로세스는 접근할 수 없음 | | Message Queueing | 메시지가 발생하면 이를 전달하는 방식으로 통신하는 방식 |
- 단위 모듈 테스트
- 모듈이 정해진 기능을 정확히 수행하는 지 검증하는 것
- 단위 테스트라고도 불림
- 시스템 수준의 오류는 잡아낼 수 없음
- 테스트 케이스
- 소프트웨어가 사용자의 요구사항을 정확하게 준수 했는지를 확인하기 위한 테스트 항목에 대한 명세서
- 테스트 케이스를 이용하지 않은 테스트는 검증이 누락되거나 불필요한 검증의 반복으로 인력과 시간을 낭비 할 수 있음
- ISO/IEC/IEEE 29119-3 표준에 따른 테스트 케이스의 구성 요소
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/5cea3691-6e43-4415-93fb-4f2df80b465d/스크린샷_2024-10-17_오전_4.16.03.png
공통 모듈
- 공통 모듈
- 여러 프로그램에서 공통으로 사용할 수 있는 모듈
- 해당 기능을 명확히 이해할 수 있도록 명세 기법을 준수해야 함
- 공통 모듈 명세 기법의 종류명세 기법 내용
정확성 해당 기능이 필요하다는 것을 알 수 있도록 명확성 이해할 때 중의적으로 해석되지 않도록 작성 완전성 필요한 모든 것을 기술 일관성 상호 충돌이 발생하지 않도록 작성 추적성 요구사항의 출처, 관련 시스템 등의 관계를 파악 - 재사용
- 이미 개발된 기능들을 새로운 시스템이나 기능 개발에 사용하기 적합하도록 최적화하는 작업
- 필요한 비용과 시간을 절약 가능
- 사용법을 공개해야함
- 재사용 규모에 따른 분류함수와 객체 클래스나 메소드 단위
컴포넌트 컴포넌트 자체에 대한 수정 없이 인터페이스를 통해 통신 애플리케이션 공통된 기능들을 제공하는 애플리케이션을 공유
- 효과적인 모듈 설계 방안
- 결합도를 줄이고 응집도를 높여서 모듈의 독립성과 재사용성을 높임
- 복잡도와 중복성을 줄이고 일관성을 유지시킴
- 모듈의 기능이 예측이 가능해야 하며 지나치게 제한적이어서는 안 됨
- 모듈 크기는 시스템의 전반적인 기능과 구조를 이해하기 쉬운 크기로 분해함
- 효과적인 제어를 위해 모듈 간의 계층적 관계를 정의하는 자료가 제시
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/64a6d882-a2c2-40c4-ac20-68fcf342a85b/스크린샷_2024-10-17_오전_6.09.51.png
코드
- 코드
- 자료의 분류, 조합, 집계, 추출을 용이하게 하기 위해 사용하는 기호
- 코드의 주요 기능식별기능 데이터 간의 성격에 따라 구분
분류기능 특정 기준이나 동일한 유형에 해당하는 데이터를 그룹화 배열기능 의미를 부여하여 나열할 수 있음 표준화기능 기준에 맞추어 표현 간소화 기능 복잡한 데이터를 간소화 - 코드의 종류종류 내용
순차코드 발생 순서, 크기 순서 등 일정 기준에 따라 일련번호 부여 예) 1, 2, 3, 4 … 블록 코드 공통성이 있는 것끼리 블록으로 구분하고 일련번호 부여 예) 1001~1100: 총무부, 1101~1200: 영업부 10진 코드 0~9까지 10진 분할하고 다시 그 각각에 대하여 10진 분할하는 방법을 필요한 만큼 반복하는 방법 예) 1000: 공학, 1100: 소프트웨어 공학 1110: 소프트웨어 설계 그룹 분류 코드 일정 기준에 따라 대분류, 중분류, 소분류 등으로 구분하여 일련번호 부여 예) 1-01-001: 본사-총무부-인사계, 2-01-001: 지사-총무부-인사계 연상 코드 명칭이나 약호와 관계있는 숫자와 문자, 기호 이용 예) TV-40: 40인치 TV, L-15-220: 15W 220V의 램프 표의 숫자 코드 성질 즉, 길이, 넓이, 부피, 지름 높이 등의 물리적 수치를 그대로 코드에 적용 예) 120-720-1500: 두께표길이가 1207201500인 강판 합성 코드 하나의 코드로 수행하기 어려운 경우 2개 이상의 코드를 조합하여 만드는 방법 예) 연상 코드 + 순차 코드 KE-711: 대한항공 711기, AC-253: 에어캐나다 253기
디자인 패턴
- 디자인 패턴
- 모듈 간의 관계 및 인터페이스를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 개발 과정 중에 문제가 발생하면 새로 해결책을 구상하는 것보다 문제에 해당하는 디자인 패턴을 참고하여 적용하는 것이 더 효율적임
- GOF의 디자인 패턴은 생성 패턴, 구조 패턴, 행위 패턴으로 구분
- 생성 패턴
- 클래스나 객체의 생성과 참조 과정을 정의하는 패턴
- 추상팩토리
- 구체적인 클래스에 의존하지 않고, 인터페이스를 통해 서로 연관,의존하는 객체들의 그룹으로 생성하여 추상적으로 표현함
- 연관된 서브 클래스를 묶어 한 번에 교체하는 것이 가능함
- ex) 요리 내부의 값을 김치찌개에서 된장찌개로 바꿔도 구체적인 클래스에 의존하지 않았기에 문제가 없는 상황
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/25bb3e1e-5930-42f6-bd97-2910690712ae/스크린샷_2024-10-17_오전_6.19.58.png
- 팩토리 메소드
- 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화한 패턴
- 상위 클래스에서 인터페이스만 정의하고 실제 생성은 서브 클래스가 담당
- ex) 구체적인 선언은 하위 요리 클래스 내부에서 하는 방식
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/462fd286-7cb8-4e76-a338-7d6ebe9a1312/스크린샷_2024-10-17_오전_6.23.13.png
- 빌더
- 작게 분리된 인스턴스를 건축 하듯이 조합하여 객체를 생성함
- 객체의 생성과정과 표현방법을 분리하고 있어, 동일한 객체 생성에서도 서로 다른 결과를 만들어 낼 수 있음
- 프로토타입
- 원본 객체를 복제하는 방법으로 객체를 생성하는 방법
- 싱글톤
- 클래스 내에서 인스턴스가 하나뿐임을 보장
- 하나의 객체를 생성하면 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수 없음.
- 구조 패턴
- 복잡한 시스템을 개발하기 쉽도록 클래스나 객체들을 조합하여 더 큰 구조로 만드는 패턴
- 어댑터
- 다른 클래스가 이용할 수 있도록 변환해주는 패턴
- 인터페이스가 일치하지 않을 때 이용함
- 브릿지
- 구현부에서 추상층을 분리하여, 서로가 독립적으로 확장할 수 있도록 구성
- 기능과 구현을 두 개의 별도 클래스로 구현함
- 컴포지트
- 복합 객체와 단일 객체를 구분 없이 다루고자 할 때 사용하는 패턴
- 객체들을 트리 구조로 구성하여, 복합 객체 안에 복합 객체가 포함되는 구조
- 데코레이터
- 객체 간의 결합을 통해 능동적으로 기능들을 확장
- 임의의 객체에 부가적인 기능을 추가하기 위해 다른 객체들을 덧붙이는 방식으로 구현
- 파싸드
- 서브 클래스들을 피해 인터페이스를 구성함으로써 서브 클래스들의 기능을 간편하게 사용할 수 있는 패턴
- 서브 클래스들 사이의 통합 인터페이스를 제공하는 Wrapper 객체가 필요함
- 플라이웨이트
- 매번 생성하는 것이 아니고 가능한 한 공유해서 사용
- 다수의 유사 객체를 생성하거나 조작할 때 유용
- 프록시
- 네트워크 연결, 메모리의 대용량 객체로의 접근
- 접근이 어려운 객체와 객체 사이에서 인터페이스 역할 수행
- 행위 패턴
- 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴
- 책임 연쇄
- 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴
- 각 객체들이 고리로 묶여 있어 요청이 해결될 때 까지 고리를 따라 책임이 넘어감
- 커맨드
- 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 저장하거나 로그에 남기는 패턴
- 각종 명령어들을 추상클래스와 구체 클래스로 분리
- 인터프리터
- 언어의 문법 표현을 정의하는 패턴
- SQL이나 통신 프로토콜 같은 것을 개발할 때 사용
- 반복자(Iterator)
- 접근이 잦은 객체에 대해 동일한 인터페이스 사용
- 내부 표현 방법의 노출 없이 순차적인 접근 간으
- 중재자
- 수많은 객체들 간의 복잡한 상호작용을 캡슐화 하여 객체로 정의
- 의존성을 줄여 결합도를 감소
- 메멘토
- 특정 시점에서의 객체 내부 상태를 객체화함으로 써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공
- [Ctrl] + [Z]와 같은 되돌리기 기능을 개발할 때 주로 이용함
- 옵저버
- 한 객체의 상태가 변화하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태를 전달하는 패턴
- 상태
- 객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용
- 객체 상태를 캡슐화하고 참조하는 방식으로 처리
- 전략
- 동일한 계열의 알고리즘들을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의하는 패턴
- 독립적으로 원하는 알고리즘을 선택하여 사용할 수 있으며, 클라이언트에 영향 없이 알고리즘의 변경이 가능함
- 템플릿 메소드
- 상위 클래스에서 골격을 정의하고, 세부 처리를 구체화하는 구조의 패턴
- 유사한 서브 클래스를 묶어 상위 클래스에서 정의함으로써 코드의 양을 줄이고 유지보수를 용이하게 해줌
- 팩토리 메소드랑 유사한 개념
- 방문자
- 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성
- 처리 기능은 각 클래스를 방문하여 수행함
개발 지원 도구
- 통합 개발 환경(IDE)
- 개발에 필요한 환경, 편집기, 컴파일러, 디버거 등의 다양한 툴을 하나의 인터페이스로 통합하여 제공하는 환경
- 통합 개발 환경 도구의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/75d3e0ec-ebbb-4cf8-a15d-87081f469a8c/스크린샷_2024-10-17_오전_6.36.36.png
- 빌드 도구
- 소스 코드 파일들을 컴퓨터에서 실행할 수 있는 제품 소프트웨어로 변환하는 과정 또는 결과물
- 빌드 도구는 전처리, 컴파일 등의 작업을 수행함
- 대표적인 빌드 도구
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/9ead9c7d-9b55-4491-99e5-45eab4bb2dfc/스크린샷_2024-10-17_오전_6.38.07.png
- 기타 협업 도구
- 개발에 참여하는 사람들이 서로 다른 작업 환경에서 원활하게 프로젝트를 수행할 수 있도록 도와주는 도구
서버 개발
- 서버 개발
- 웹 애플리케이션의 로직을 구현할 서버 프로그램을 제작하여 웹 어플리케이션 서버(WAS)에 탑재하는 것
- 프로그래밍 언어는 Java, Js, Python 등
- 서버 개발 프레임워크
- 서버 프로그램 개발 시 다양한 네트워크 설정, 요청 및 응답 처리, 아키텍처 모델 구현 등을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어
- 대부분 MVC 패턴 기반
- 서버 개발 프레임워크의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ab47a184-5820-48a6-a1dc-825762eb055b/스크린샷_2024-10-17_오전_6.40.49.png
- 서버 개발 과정
- DTO/VO, SQL, DAO, Service, Controller를 각각 구현하는 과정
- 순서는 임의로 변경 가능
- MVC 접근법!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/88a56a82-f952-457f-8a0b-33efc75524ba/스크린샷_2024-10-17_오전_6.42.08.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/f856da4b-e749-42d1-a66b-525b79357309/스크린샷_2024-10-17_오전_6.41.51.png
- 구현 과정과정 내용
DTO/VO 구현 - 데이터 교환을 위해 사용할 객체를 만드는 과정 - 송, 수신할 데이터의 자료형에 맞는 변수 및 객체를 생성함 | | SQL 구현 | - 데이터의 삽입, 변경, 삭제등의 작업을 수행할 SQL문 생성
- 소스 코드 내에 직접 입력, 또는 별도의 XML 파일로 관리 | | DAO 구현 | 데이터베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드를 구현 | | Service 구현 | 요청에 응답하기 위한 로직을 구현 | | Controller 구현 | 적절한 서비스를 호출하여 결과를 반환하는 코드 구현 |
배치 프로그램
- 배치 프로그램
- 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하도록 만든 프로그램을 의미함
- 배치 프로그램의 필수 요소
- 대용량 데이터
- 자동화
- 견고성
- 안정성/신뢰성
- 성능
- 배치 스케줄러
- 일괄 처리 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구
- 특정 업무를 원하는 시간에 처리할 수 있도록 지원
- 잡 스케줄러라고도 불림
- 배치 스케줄러의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/94ee26a1-6696-4351-9301-aff965427e50/스크린샷_2024-10-17_오전_6.54.41.png
- crontab 명령어 작성 방법!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/fbe11882-5246-4e94-9184-ddb656d62b67/스크린샷_2024-10-17_오전_6.56.06.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/590757e4-e084-4755-8a2b-b4e21db29389/스크린샷_2024-10-17_오전_6.55.04.png
시스템 인터페이스 요구사항 분석
- 시스템 인터페이스 요구사항
- 개발할 시스템과 외부 시스템을 연동하는데 필요한 시스템
- 시스템 인터페이스 요구사항 명세서의 구성 요소
- 인터페이스 이름
- 연계 대상 시스템
- 연계 범위 및 내용
- 연계 방식
- 송신 데이터
- 인터페이스 주기
- 기타 고려사항
- 시스템 인터페이스 요구사항 분석
- 요구사항 분류하고 구체적으로 명세한 후 이를 이해관계자에게 전달
- 요구사항 분석 기법을 적절히 이용함
- 요구사항 분해가 필요한 경우 적절한 수준으로 세분화함
- 요구사항 분석 시 누락된 요구사항이나 제한 조건을 추가함
- 상대적 중요도를 평가하여 우선순위를 부여함
- 시스템 인터페이스 요구사항 분석 절차
- 관련 요구사항을 선별하여 별도로 요구사항 목록을 만듦
- 관련된 자료를 준비
- 기능, 비기능 요구사항으로 분리
- 요구사항 명세서에 내용을 추가하거나 수정
- 요구사항 명세서와 요구사항 목록을 이해관계자에게 전달
인터페이스 요구사항 검증
- 인터페이스 요구사항 검증
- 사용자들의 요구사항이 요구사항 명세서에 기술되었는지 검토하고 베이스라인 설정
- 검증 수행 순서
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/715b61d2-dc78-43a7-8169-eaadaf75908f/스크린샷_2024-10-17_오전_7.12.45.png
- 요구사항 검증 방법
- 요구사항 검토
- 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석동료 검토 명세서 작성자가 내용을 직접 설명하고 동려들이 결함을 발견
워크스루 요구사항 명세서를 미리 배포하여 사전 검토 후 검토회를 통해 결함 발견 인스펙션 다른 검토 전문가들이 결함을 발견하는 형태의 검토 방법
- 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석동료 검토 명세서 작성자가 내용을 직접 설명하고 동려들이 결함을 발견
- 프로토 타이핑
- 견본품을 만들어 최종 결과물을 예측
- 테스트 설계
- 요구사항이 현실적으로 테스트 가능한지를 검토
- CASE 도구 활용
- 일관성 분석
- 요구사항 검토
- 요구사항 검증의 주요 항목
- 완전성
- 일관성
- 명확성
- 기능성
- 검증 가능성
- 추적 가능성
- 변경 용이성
송,수신 데이터 식별
- 식별 대상 데이터
- 송 수신 시스템 사이에서 교환되는 데이터로, 규격화된 표준 형식에 따라 전송
- 교환되는 데이터의 종류
- 인터페이스 표준 항목
- 송,수신 데이터 항목
- 공통 코드
- 인터페이스 표준 항목
- 송 수신 시스템을 연계하는데 표준적으로 필요한 데이터
- 시스템 공통부와 거래 공통부시스템 공통부 시스템 간 연동 시 공통 정보
거래 공통부 송 수신되는 데이터를 처리할 때 필요한 정보
- 송, 수신 데이터 항목
- 송 수신 시스템이 업무를 수행하는데 사용하는 데이터
- 데이터 항목과 순서는 인터페이스별로 다름
- 공통 코드
- 시스템들에서 공통적으로 사용하는 코드
- 정보 흐름 식별
- 개발할 시스템과 내 외부 시스템 사이 방향성을 식별
- 송, 수신 데이터 식별
- 개발할 시스템과 연계할 내, 외부 시스템 사이의 정보 흐름과 데이터베이스 산출물을 기반으로 식별
- 인터페이스 표준 항목과 송, 수신 데이터 항목 식별
- 교환 범위를 확인하고 송, 수신 데이터 항목을 식별
- 코드성 데이터 항목 식별
- 코드성 데이터 항목에 대해 코드, 코드명, 코드 설명 등의 코드 정보를 식별
인터페이스 방법 명세화
- 인터페이스 방법 명세화
- 내, 외부 시스템에 연계하여 작동할 때 인터페이스별 송, 수신 방법, 송, 수신 데이터, 오류 식별 및 처리 방안 내용을 문서로 정리
- 송, 수신 방법 명세화
- 각각의 인터페이스에 대해 연계 방식, 통신 및 처리 유형, 발생 주기 등의 송, 수신 방법을 정의하고 명세를 정의
- 송, 수신 데이터 명세화
- 송, 수신 데이터에 대한 명세를 작성
- 오류 식별 및 처리 방안 명세화
- 오류를 식별하고 오류 처리 방안에 대한 명세를 작성
- 인터페이스별로 송, 수신 방법을 명세화하기 위해 필요한 정보
- 시스템 연계 기술
- 인터페이스 통신 유형
- 처리 유형
- 발생 주기
- 시스템 연계 기술
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ea517563-223a-405f-b09e-7ad04e74137d/스크린샷_2024-10-17_오전_7.21.49.png
- 인터페이스 통신 유형유형 내용
단방향 요청만 하고 응답이 없는 형식 동기 요청 후 응답이 올 때 까지 대기 비동기 요청 후 다른 작업을 수행하다 응답이 오면 처리 - 인터페이스 처리 유형유형 내용
실시간 방식 요청 내용을 바로 처리 지연 처리 방식 데이터를 매 건 단위로 처리할 경우 비용이 많이 발생할 때 배치 방식 대량의 데이터를 처리할 때 사용 - 인터페이스 발생 주기
- 개발할 시스템과 내,외부 시스템 간 송, 수신 데이터가 전송되어 인터페이스가 사용되는 주기를 의미
미들웨어 솔루션
- 미들웨어
- 운영체제와 응용 프로그램, 서버와 클라이언트 사이에서 다양한 서비스를 제공하는 소프트웨어
- 표준화된 인터페이스를 제공함으로써 시스템 간의 데이터 교환에 일관성을 보장함
- 미들웨어의 종류
- DB
- RPC
- MOM
- TP-Monitor
- ORB
- WAS
- DB
- 클라이언트에서 원격의 데이터베이스와 연결하는 미들웨어
- RPC(원격 프로시저 호출)
- 원격 프로시저를 마치 로컬 프로시저처럼 호출하는 미들웨어
- MOM(메시지 지향 미들웨어)
- 비동기형 메시지를 전달하는 미들웨어
- 이기종 분산 데이터 시스템의 데이터 동기를 위해 많이 사용됨
- TP-Monitor(트랜잭션 처리 모니터)
- 트랜잭션을 처리 및 감시하는 미들웨어
- 사용자 수가 증가해도 빠른 응답 속도를 유지해야 하는 업무로 사용함
- ORB(객체 요청 브로커)
- 객체 지향 미들웨어
- TP-Monitor의 장점인 트랜잭션 처리와 모니터링 등을 추가로 구현한 제품도 존재
- WAS(웹 애플리케이션 서버)
- 동적인 콘텐츠를 처리하기 위한 미들웨어
- 웹 환경을 구현하기 위한 미들웨어
모듈 연계를 위한 인터페이스 기능 식별
- 모듈 연계
- 내부 모듈과 외부 모듈 또는 내부 모듈 간 데이터의 교환을 위해 관계를 설정
- 대표적인 모듈 연계 방법
- EAI(Enterprise Application Integration)
- ESB(Enterprise Service Bus)
- 웹 서비스
- EAI
- 기업 내 각종 애플리케이션 및 플랫폼 간의 정보 전달, 연계, 통합 등 상호 연동이 가능하게 해주는 솔루션
- EAI의 구축 유형!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/a0aa8dfd-9951-4aea-af16-c87a22f594df/스크린샷_2024-10-17_오전_7.30.46.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/2b0b459f-2766-47a5-90ad-6da23f43bb0a/스크린샷_2024-10-17_오전_7.30.26.png
- ESB
- 애플리케이션 간 연계, 표준 기반의 인터페이스를 제공하는 솔루션
- 애플리케이션 통합측면에서 EAI와 유사하지만 서비스 중심의 통합을 지향
- 범용적으로 사용하기 위해 결합도 약하게 유지
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/e66c3ffa-ac3d-4d18-adf6-cdd66bd2cf14/스크린샷_2024-10-17_오전_7.31.40.png
- 웹 서비스
- 네트워크의 정보를 표준화된 서비스 형태로 만들어 공유하는 기술
- 서비스 지향 아키텍처(SOA) 개념
- 웹 서비스의 구성
- SOAP
- HTTP, HTTPS, SMTP 등을 활용하여 XML기반의 메시지 교환
- UDDI
- WSDL을 등록하여 서비스와 서비스 제공자를 검색하고 접근하는데 사용
- WSDL
- 웹 서비스명, 서비스 제공 위치, 프로토콜 XML 형식으로 구현
- SOAP
- 모듈 간 인터페이스 기능 식별
- 식별된 모듈 간 관련 기능을 검토하여 인터페이스 동작에 필요한 기능을 식별
- 모듈 간 동작하는 기능을 통해 인터페이스 기능을 식별
- 시나리를 통해 내부 모듈과 관련된 인터페이스 기능을 식별
- 실제적으로 필요한 인터페이스 기능을 최종적으로 선별
- 인터페이스 기능 구현을 정의하는데 사용
모듈 간 인터페이스 데이터 표준 확인
- 인터페이스 데이터 표준
- 모듈 간 인터페이스에 사용되는 데이터의 형식을 표준화하는 것
- 기존의 데이터 중에서 공통 영역을 추출하거나 어느 한쪽의 데이터를 변환하여 정의함
- 인터페이스 데이터 표준 확인
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/63553d08-9c94-475c-8a0e-7b4d8d7403ad/스크린샷_2024-10-17_오전_7.35.24.png
인터페이스 기능 구현의 정의
- 인터페이스 기능 구현의 정의
- 인터페이스를 실제로 구현하기 위해 인터페이스 기능에 대한 구현 방법을 기능별로 기술하는 것
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/8f142ab7-d2a2-40d8-aa12-e077b965e368/스크린샷_2024-10-17_오전_7.36.10.png
- 모듈 세부 설계서
- 모듈의 구성 요소와 세부적인 동작 등을 정의한 설계서
- 모듈 세부 설계서 종류컴포넌트 명세서 컴포넌트 개요, 내부 클래스의 동작, 외부와의 통신하는 명세 등을 정의
인터페이스 명세서 인터페이스 클래스의 세부 조건 및 기능 등을 정의
인터페이스 구현
- 인터페이스 구현
- 송, 수신 시스템 간의 데이터 교환 및 처리를 실현해 주는 작업
- 대표적인 인터페이스 구현 방법
- 데이터 통신을 이용한 인터페이스 구현
- 인터페이스 엔티티를 이용한 인터페이스 구현
- AJAX
- JS를 이용하여 클라이언트와 서버 간에 XML 데이터를 주고 받는 비동기 통신 기술
- 웹 페이지 일부 영역만을 업데이트 할 수 있음
- JSON
- 용량이 적은 데이터를 교환하기 위해 데이터 객체를 속성, 값의 쌍 형태로 표현하는 개방형 표준 포맷
- 데이터 통신을 이용한 인터페이스 구현
- ex) JSON을 이용한 인터페이스 구현 순서
- 인터페이스 객체를 생성, 각 시스템 환경에 맞게 선택함
- JSON 이용해 인터페이스 객체를 만듦
- 인터페이스 객체를 AJAX 기술 등을 이용하여 수신 측으로 보냄
- 인터페이스 객체를 수신해 파싱한 후 처리함
- 수신 측에서 송신 측으로 처리 결과를 보냄
- ex) JSON을 이용한 인터페이스 구현 순서
- 인터페이스 엔티티를 이용한 인터페이스 구현
- 인터페이스가 필요한 시스템 사이에 별도의 인터페이스 엔티티를 두어 상호 연계하는 것
- 테이블을 엔티티로 활용함
- ex) 인터페이스 테이블을 이용한 인터페이스 구현 순서
- 인터페이스 이벤트가 발생하면 인터페이스 데이터를 기록
- 송신 측 인터페이스 테이블에 인터페이스 데이터를 전송
- 수신 측 인터페이스 테이블에 입력되면 인터페이스 데이터를 읽음
- 수신 측 인터페이스 테이블에서 읽은 후 사전에 정의된 데이터 트랜잭션 수행
인터페이스 보안
- 인터페이스 보안
- 인터페이스의 보안 취약점 분석 후 적절한 보안 기능을 적용
- 인터페이스 보안 기능 적용
- 인터페이스 아키텍처에 따라 IPSec, SSL, S-HTTP를 사용 | | --- | --- | | 애플리케이션 영역 | 보안 가이드를 참조하여 코드 상의 보안 취약점을 보완 | | 데이터베이스 영역 | - 데이터베이스, 스키마, 엔티티의 접근 권한과 프로시저, 트리거 등 동작 객체의 보안 취약점에 보안 기능 적용
- 개인 정보나 업무상 민감한 데이터의 경우 암호화나 익명화 등 데이터 자체의 보안 방안도 고려 |
- | 네트워크 영역 | - 스니핑 등을 이용한 데이터 탈취 및 변조 위협을 방지하기 위해 네트워크 트래픽에 대한 암호화를 설정
- 데이터 무결성 검사 도구
- 인터페이스 보안 취약점을 분석하는데 사용되는 도구
- 시스템 파일의 변경 유무를 확인하고, 파일이 변경되었을 경우 이를 관리자에게 알려줌
- 종류
- TripWire
- AIDE
- Samhain
- Claymore
- Slipwire
- Fcheck
인터페이스 구현 검증
- 인터페이스 구현 검증
- 인터페이스가 정상적으로 문제없이 작동하는지 확인
- 인터페이스 구현 검증 도구, 감시 도구를 이용
- 인터페이스 구현 검증 도구
- 인터페이스 단위 기능과 시나리오 등을 기반으로 하는 통합 테스트가 필요함
- 테스트 자동화 도구
- 인터페이스 구현 감시 도구
- 동작 상태는 APM(애플리케이션 성능 관리)을 사용하여 감시(Monitoring)할 수 있음
- APM을 통해 종합적인 정보를 조회하고 분석할 수 있음
- 대표적인 APM
- 스카우터
- 제니퍼
- APM(Application Performance Management/Monitoring)
- 애플리케이션의 성능 관리를 위해 다양한 모니터링 기능을 제공하는 도구
- APM은 리소스 방식과 엔드투엔드의 두 가지 유형이 있음
- 리소스 방식
- Nagios, Zabbix, Carti
- 엔드투엔드 방식
- VisualVM, 제니퍼, 스카우터
- 리소스 방식
사용자 인터페이스
- 사용자 인터페이스(UI, User Interface)
- 사용자와 시스템 간의 상호작용이 이뤄지도록 도와주는 장치나 소프트웨어
- 사용자 인터페이스의 세 가지 분야
- 물리적 제어
- 상세적인 표현과 전체적인 구성
- 편리하고 간편하게 사용하도록 하는 기능
- 사용자 인터페이스의 구분구분 내용
CLI 명령과 출력이 텍스트 형태로 이루어지는 인터페이스 GUI 아이콘이나 메뉴를 마우스로 선택하여 작업을 수행하는 그래픽 환경의 인터페이스 NUI 말이나 행동으로 기기를 조작하는 인터페이스 - 사용자 인터페이스의 기본 원칙
- 직관성
- 유효성
- 학습성
- 유연성
UI 설계 도구
- 와이어프레임
- 페이지에 대한 개략적인 레이아웃이나 뼈대를 설계하는 도구
- 페이지의 영역 구분, 콘텐츠, 텍스트 배치 등을 화면 단위로 설계함
- 목업
- 실제 화면과 유사하게 만든 정적인 형태의 모형
- 스토리보드
- 와이어프레임에 콘텐츠에 대한 설명, 페이지 간 이동 흐름 등을 추가한 문서
- 디자이너와 개발자가 최종적으로 참고하는 작업 지침서
- 서비스 구축을 위한 모든 정보가 들어 있음
- 프로토타입
- 와이어프레임이나 스토리보드 등에 인터랙션을 적용함으로써 실제 구현된 것처럼 테스트가 가능한 동적인 형태의 모형
- 종류
- 제작 기간이 짧은 경우, 제작 비용이 적을 경우, 업무 협의가 빠를 경우 | | --- | --- | | 디지털 프로토타입 | - 파워포인트, 아크로뱃, 비지오, 옴니그래플 등과 같은 프로그램을 사용
- 재사용이 필요한 경우, 산출물과 비슷한 효과가 필요한 경우, 숙력된 전문가가 있는 경우 |
- | 페이퍼 프로토타입 | - 아날로그적인 방법
- 유스케이스
- 사용자의 요구사항을 기능 단위로 표현
- 사용자가 원하는 목표를 달성하기 위해 수행할 내용을 기술함
- 사용자의 요구사항을 빠르게 파악함으로써 초기에 시스템의 기능적인 요구를 결정
- 다이어그램 형식으로 묘사됨
품질 요구사항
- 품질 요구사항
- 사용자의 입장에서 얼마나 충족하는가
- 사용자의 요구사항을 충족시킴으로써 확립
- 소프트웨어 품질 관련 표준
- ISO/IEC 9126의 소프트웨어 품질 특성
UI 설계서
- UI 설계서
- 요구사항을 바탕으로 UI 설계를 구체화하여 작성하는 문서
- 기획자, 개발자, 디자이너 등과의 원할한 의사소통을 위함
- UI 흐름 설계
- UI 상세 설계
- 실제 설계 구현을 위해 자세하게 설계
- 반드시 시나리오를 작성해야함
- UI 시나리오 문서
- 사용자 인터페이스의 기능 구조, 대표 화면, 화면 간 인터랙션의 흐름, 다양한 상황에서의 예외 처리 등을 정리한 문서
- 사용자가 최종 목표를 달성하기 위한 방법이 순차적으로 묘사되어 있음
- UI 시나리오 문서의 요건
- 완전성
- 일관성
- 이해성
- 가독성
- 수정 용이성
- 추적 용이성
- UI 상세 설계 순서
HCI / UX / 감성공학
- HCI(Human Computer Interaction or Inteface)
- 사람이 시스템을 보다 편리하고 안전하게 사용할 수 있도록 연구하고 개발하는 학문
- 최종목표는 최적의 UX 만드는 것
- 어떤 제품이 좋은 제품인지, 어떻게 하면 좋은 제품을 만들 수 있는지 연구
- UX(User Experience)
- 사용자가 시스템이나 서비스를 이용하면서 느끼고 생각하게 되는 총체적인 경험
- UI가 사용성, 접근성, 편의성을 중시한다면, UX는 UI를 통해 사용자가 느끼는 만족이나 감정 중시
- 기술을 효용성 측면만 아니라 삶의 질을 향상시키는 하나의 방향으로 봄
- UX의 특징
- 주관성
- 정황성
- 총체성
- 감성공학
- 제품이나 작업환경을 사용자의 감성에 알맞도록 설계 및 제작하는 기술
- 여러 분야의 학문이 공존하는 종합과학임
- 목적은 인간의 삶을 편리하고 안전하며 쾌적하게 만드는 것
- 인간의 감성을 제품 설계에 적용하기 위해 공학적인 접근 방법 사용
애플리케이션 테스트
- 애플리케이션 테스트
- 애플리케이션에 잠재되어 있는 결함을 찾아내는 일련의 행위 또는 절차
- 고객의 요구사항을 만족시키는지 확인하고 소프트웨어가 기능을 정확히 수행하는지 검증함
- 애플리케이션의 기본 원리기본 원리 설명
완벽한 테스트 불가능 잠재적인 결함을 줄일 수 있지만 결함이 없다고 증명할 수 없음 파레토 법칙 20%에 해당하는 코드에서 전체 결함의 80%가 발견된다는 법칙 살충제 패러독스 동일한 테스트 케이스로 동일한 테스트를 반복하면 더 이상 결함이 발견되지 않는 현상 테스팅은 정황 의존 소프트웨어의 특징, 테스트 환경, 테스터의 역량 등 정황에 따라 테스트 결과가 달라질 수 있으므로, 정황에 따라 다르게 테스트를 수행해야함 오류-부재의 궤변 결함을 모두 제거해도, 사용자의 요구사항을 만족시키지 못하면 품질이 높다고 할 수 없다. 테스트와 위험은 반비례 테스트를 할 수록 미래에 발생할 위험을 줄일 수 있음 테스트의 점진적 확대 작은 부분에서 시작하여 점점 확대하며 진행 테스트의 별도 팀 수행 개발자와 관계없는 별도의 팀에서 수행
애플리케이션 테스트의 분류
- 프로그램 실행 여부에 따른 테스트
- 소스 코드에 대한 코딩 표준, 코딩 스타일, 코드 복잡도, 남은 결합 등을 발견하기 위함
- 종류: 워크스루, 인스펙션, 코드 검사 | | --- | --- | | 동적 테스트 | - 프로그램을 실행하여 오류를 찾는 테스트
- 개발의 모든 단계에서 테스트를 수행
- 종류: 블랙박스 테스트, 화이트박스 테스트 |
- | 정적 테스트 | - 프로그램을 실행하지 않고 명세사나 소스 코드를 대상으로 분석
- 테스트 기반에 따른 테스트
- 종류: 동등 분할, 경계 값 분석 등 | | --- | --- | | 구조 기반 테스트 | - 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인
- 종류: 구문 기반, 결정 기반, 조건 기반 등 | | 경험 기반 테스트 | - 유사 소프트웨어나 기술 등에 대한 테스터의 경험을 기반으로 수행
- 명세가 불충분하거나 테스트 시간에 제약이 있는 경우
- 종류: 에러 추정, 체크 리스트, 탐색적 테스팅 |
- | 명세 기반 테스트 | - 사용자의 요구사항에 대한 명세를 빠짐없이 테스트 케이스로 만들어 구현하고 있는지 확인하는 테스트
- 시각에 따른 테스트
- 명세서대로 완성됐는지 테스트 | | --- | --- | | 확인 테스트 | - 사용자의 시각에서 생산된 제품의 결과를 테스트
- 요구한대로 제품이 완성됐는지, 정상적으로 동작하는지 테스트 |
- | 검증 테스트 | - 개발자의 시각에서 제품의 생산 과정을 테스트
- 목적에 따른 테스트회복 테스트 실패하도록 한 후 올바르게 복구되는지 확인
안전 테스트 불법적인 침입으로부터 시스템을 보호할 수 있는지 강도 테스트 과도한 정보량이나 빈도 등을 부과하여 과부하 시에도 정상적으로 실행되는지 성능 테스트 실시간 성능이나 전체적인 효율성을 진단, 응답 시간, 처리량 등을 테스트 구조 테스트 논리적인 경로, 소스 코드의 복잡도 등을 평가 회귀 테스트 변경 또는 수정된 코드에 새로운 결함이 없음을 확인하는 테스트 병행 테스트 변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력하여 결과를 비교하는 테스트
개발 단계에 따른 애플리케이션 테스트
- 개발 단계에 따른 애플리케이션 테스트
- 개발 단계에 따라 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트로 분류됨
- 애플리케이션 테스트와 소프트웨어 개발 단계를 연결하여 표현한 것을 V-모델이라고 함
- 단위 테스트
- 코딩 직후 모듈이나 컴포넌트에 초점을 맞춰 테스트함
- 기능성 테스트를 최우선으로 수행
- 구조 기반 테스트와 명세 기반 테스트로 나뉘지만 주로 구조 기반 테스트를 시행함
- 통합 테스트
- 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트를 의미
- 모듈 간 또는 통합된 컴포넌트 간의 상호 작용 오류를 검사함
- 시스템 테스트
- 완벽하게 수행되는가를 점검
- 기능정 요구사항과 비기능적 요구사항으로 구분하여 각각을 만족하는지 테스트
- 인수 테스트
- 사용자의 요구사항을 충족하는지에 중점을 둠
- 사용자가 직접 테스트함
사용자 인수 테스트 시스템 사용의 적절성 여부를 확인함 운영상의 인수 테스트 - 시스템 관리자가 시스템 인수 시 수행하는 테스트 기법 - 백업/복원 시스템, 재난 복구, 사용자 관리, 정기 점검 | | 계약 인수 테스트 | 계약상의 인수/검수 조건을 준수하는지 여부 | | 규정 인수 테스트 | 정부 지침, 법규, 규정에 맞게 개발 되었는지 여부 | | 알파 테스트 | 사용자가 개발자 앞에서 행하는 테스트 기법 | | 베타 테스트 | 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법 |
통합 테스트
- 통합 테스트
- 단위 테스트가 끝난 모듈을 통합하는 과정에서 발생하는 오류 및 결함을 찾는 테스트 기법
- 종류
- 종류: 빅뱅 통합 테스트 방식 | | --- | --- | | 점진적 통합 방식 | - 모듈 단위로 단계적으로 통합하면서 테스트 하는 방법
- 종류: 하향식 통합 테스트, 상향식 통합 테스트, 혼합식 통합 테스트 |
- | 비점진적 통합 방식 | - 통합하는 절차 없이 모든 모듈이 미리 결합되어 있는 프로그램 전체를 테스트 하는 방법
- 하향식 통합 테스트
- 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트
- 깊이 우선 통합법이나 넓이 우선 통합법을 사용함
- 하향식 통합 테스트 절차
- 제어 모듈은 작성된 프로그램을 사용, 주요 제어 모듈의 종속 모듈들은 스텁으로 대체
- 깊이 우선 또는 넓이 우선 등의 통합 방식에 따라 하위 모듈인 스텁들이 한 번에 하나씩 실제 모듈로 교체
- 모듈이 통합할 때 마다 테스트를 실시함
- 새로운 오류가 발생하지 않음을 보증하기 위해 회귀 테스트를 실시
- 상향식 통합 테스트
- 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트
- 상향식 통합 테스트 절차
- 하위 모듈들을 클러스터로 결합
- 상위 모듈에서 데이터 입,출력을 확인하기 위해 더미 모듈인 드라이버를 작성함
- 통합된 클러스터 단위로 테스트
- 테스트 완료 시, 프로그램 구조의 상위로 이동하여 결합하고 드라이버는 실제 모듈로 대체됨
- 혼합식 통합 테스트
- 하위 수준에는 상향식 통합, 상위 수준에서는 하향식 통합을 사용하여 최적의 테스트를 지원
- 샌드위치 식 통합 테스트 방법이라고도 함
- 회귀 테스팅
- 통합 테스트로 인해 변경된 모듈이나 컴포넌트에 새로운 오류가 있는지 확인
- 이미 테스트된 프로그램의 테스팅을 반복
- 수정한 모듈이나 컴포넌트가 다른 부분에 영향을 미치는지, 오류가 생기지 않았는지 새로운 오류가 발생하지 않음을 보증하기 위해 반복 테스트함.
테스트 케이스/ 테스트 시나리오 / 테스트 오라클
- 테스트 케이스
- 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력 값, 실행 조건, 기대 결과 등으로 구성 된 테스트 항목에 대한 명세서
- 오류 방지, 인력 시간, 자원 낭비를 지울 수 있음
- 테스트 시나리오
- 테스트 케이스를 적용하는 순서에 따라 여러 개의 테스트 케이스를 묶은 집합
- 적용하는 구체적인 절차를 명세함
- 구체적인 절차, 사전 조건, 입력 데이터 등이 설정되어 있음
- 테스트 오라클
- 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입하여 비교
- 테스트 케이스에 대한 예상 결과를 계산하거나 확인함
- 테스트 오라클의 특징
- 제한된 검증
- 모든 테스트 케이스에 적용할 수 없음
- 수학적 기법
- 값을 수학적 기법을 이용하여 구할 수 있음
- 자동화 기법
- 대상 프로그램의 실행, 결과 비교, 커버리지 측정 등을 자동화 할 수 있음
- 제한된 검증
- 테스트 오라클의 종류
- 모든 오류를 검출할 수 있음 | | --- | --- | | 샘플링 오라클 | - 특정한 몇몇 테스트 케이스의 입력 값들에 대해서만 기대하는 결과를 제공
- 전수 테스트가 불가능한 경우 사용 | | 추정 오라클 | - 특정 테스트 케이스의 입력값에 대해 기대하는 결과 제공
- 나머지 입력 값들에 대해서는 추정으로 처리하는 오라클 | | 일관성 검사 오라클 | 애플리케이션에 변경이 있을 때, 테스트 케이스의 수행 전과 후의 결과 값이 동일한지를 확인 |
- | 참 오라클 | - 입력 값에 대해 기대하는 결고라르 제공하는 오라클
테스트 자동화 도구
- 테스트 자동화
- 사람이 반복적으로 수행하던 테스트 절차를 스크립트 형태로 구현하는 자동화 도구를 적용함으로써 쉽고 효율적으로 테스트를 수행할 수 있도록 한 것
- 테스트 유형에 따른 테스트 자동화 도구의 종류
- 정적 분석 도구
- 테스트 실행 도구
- 성능 테스트 도구
- 테스트 통제 도구
- 정적 분석 도구
- 프로그램을 실행하지 않고 분석하는 도구
- 테스트 실행 도구
- 스크립트 언어를 사용하여 테스트를 실행하는 도구
- 데이터 주도 접근 방식
- 데이터를 저장하고 이를 읽어 실행하는 방식
- 키워드 주도 접근 방식
- 수행할 동작을 나타내는 키워드와 테스트 데이터를 저장하여 실행하는 방식
- 성능 테스트 도구
- 가상의 사용자를 만들어 성능의 목표 달성 여부를 확인하는 도구
- 테스트 통제 도구
- 테스트 계획 및 관리, 테스트 수행, 결함 관리 등을 수행하는 도구
- 종류
- 형상 관리 도구
- 결함 추적 / 관리 도구
- 테스트 하네스 도구
- 테스트가 실행될 환경을 시뮬레이션하여 컴포넌트 및 모듈이 정상적으로 테스트되도록 하는 도구
- 테스트 하네스
- 컴포넌트 및 모듈을 테스트하는 환경의 일부분으로, 테스트를 지원하기 위해 생성된 코드와 데이터
- 테스트 하네스의 구성 요소테스트 드라이버
테스트 스텁 테스트 슈트 컴포넌트나 모듈, 시스템에 사용되는 테스트 케이스의 집합 테스트 케이스 테스트 스크립트 테스트 실행절차에 대한 명세서 목 오브젝트 조건부로 입력해 두면, 그 상황에 맞는 예정된 행위를 수행 - 테스트 수행 단계별 테스트 자동화 도구테스트 단계 자동화도구 설명
테스트 계획 요구사항 관리 요구사항 정의 및 변경 사항 등을 관리하는 도구 테스트 분석 / 설계 테스트 케이스 생성 테스트 데이터 및 테스트 케이스 작성을 지원 테스트 수행 테스트 자동화 자동화를 도와주는 도구 정적 분석 코딩 표준, 런타임 오류 검증 동적 분석 시뮬레이션을 통해 오류를 검출 성능 테스트 가상의 사용자를 생성하여 처리 능력을 측정 모니터링 CPU, Memory 등과 같은 시스템 자원의 상태 확인 및 분석을 지원 테스트 관리 커버리지 분석 충분성 여부 검증 형상 관리 도구 및 데이터 관리 결함 추적/ 관리 발생한 결함 추적 및 관리 활동을 지원
결함 관리
- 결함
- 소프트웨어가 개발자가 설계한 것과 다르게 동작하거나 다른 결과가 발생되는 것
- 결함 관리 프로세스
- 결함 상태 추적
- 발견된 결함은 지속적ㄱ으로 상태 변화를 추적하고 관리해야ㅏㅎㅁ
정보시스템 구축관리
개별 환경 구축
- 개발 환경 구축
- 개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축
- 응용 소프트웨어가 운영될 환경과 유사한 구조로 구축
- 하드웨어와 소프트웨어를 선정함
- 성능, 편의성, 라이선스 등의 비즈니스 환경에 적합한 제품들을 최종적으로 결정하여 구축함
- 하드웨어 환경
- 사용자와의 인터페이스 역할을 하는 클라이언트, 서비스를 제공하는 서버로 구성
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/fdcae290-8799-49e3-8f8e-d909a5ecd7c2/스크린샷_2024-10-12_오후_10.31.17.png
- 클라이언트의 종류
- 개인용 컴퓨터(PC), 스마트폰 등
- 서버의 종류종류 특징
웹 서버 - 직접 요청을 받아 처리함 - 정적 파일들을 제공함 | | 웹 애플리케이션 서버(WAS) | 동적 서비스를 제공하거나 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행함 | | 데이터베이스 서버 | 데이터베이스와 이를 관리하는 DBMS를 운영함 | | 파일 서버 | 데이터베이스에 저장하기에는 비효율적이거나, 서비스 제공을 목적으로 유지하는 파일들을 저장함 |
- 소프트웨어 환경
- 클라이언트와 서버 운영을 위한 시스템 소프트웨어와 개발에 사용되는 개발 소프트웨어로 구성됨
- 시스템 소프트웨어의 종류
- 운영체제, 웹 서버 및 WAS 운용을 위한 서버 프로그램, DBMS
- 개발 소프트웨어의 종류종류 특징
요구사항 관리 도구 요구사항의 수집과 분석, 추적 등을 편리하게 도와주는 소프트웨어 설계/모델링 도구 UML을 지원하며, 전 과정에서 설계 및 모델링을 도와주는 소프트웨어 구현 도구 개발 언어를 통해 실제 구현을 지원하는 소프트웨어 빌드 도구 소스의 빌드 및 배포, 라이브러리 관리를 지원하는 소프트웨어 테스트 도구 모듈들이 요구사항에 적합하게 구현되었는지 테스트하는 소프트웨어 형상 관리 도구 버전별로 관리하여 품질 형상을 지원하는 소프트웨어 - 웹 서버의 기능기능 내용
HTTP/HTTPS 지원 브라우저로부터 요청을 받아 응답할 때 사용되는 프로토콜 통신 기록 처리한 요청들을 로그 파일로 기록하는 기능 정적 파일 관리 HTML, CSS, 이미지 등의 정적 파일들을 저장하고 관리 대역폭 제한 트래픽의 포화를 방지하기 위해 응답 속도 제한 가상 호스팅 여러 개의 도메인 이름을 연결하는 기능 인증 합법적인 사용자인지를 확인 - 개발 언어의 선정 기준기준 내용
적정성 개발하려는 소프트웨어의 목적에 적합해야 함 효율성 코드의 작성 및 구현이 효율적이어야 함 이식성 다양한 시스템 및 환경에 적용이 가능해야 함 친밀성 개발 언어에 대한 개발자들의 이해도와 활용도가 높아야 함 범용성 다른 개발 사례가 존재하고 여러 분야에서 활용되고 있어야 함
소프트웨어 아키텍처
- 소프트웨어 아키텍처
- 소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체
- 분할 방법과 분할된 모듈에 할당될 기능, 모듈 간의 인터페이스 등을 결정함
- 소프트웨어 아키텍처 설계의 기본 원리, 모듈화, 추상화, 단계적 분, 정보은닉이 있음
- 모듈화
- 소프트웨어의 성능 향상, 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 시스템의 기능들을 모듈 단위로 나누는 것을 의미함
- 모듈의 크기를 너무 작게 나누면 개수가 많아져 모듈 간의 통합 비용이 많이 듬
- 모듈의 크기를 너무 크게 나누면 개수가 적어 통합 비용은 적게 들지만 모듈 하나의 개발 비용이 많이 듬
- 추상화
- 전체적이고 포괄적인 개념을 설계한 후 구체화시켜 나가는 것
- 완전한 시스템을 구축하기 전에, 유사한 모델을 만들어서 여러 가지 요인들을 테스트 할 수 있음
- 추상화의 유형과정 추상화 전반적인 흐름만 파악
데이터 추상화 데이터 구조를 대표할 수 있는 표현으로 대체하는 방법 제어 추상화 이벤트 발생의 대표할 수 있는 표현
- 단계적 분해
- 상위의 중요 개념으로부터 하위의 개념으로 구체화 시키는 분할 기법
- 하향식 설계 전략
- 포괄적인 기능에서부터 점차적으로 구체화
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/50d04f5a-7fcf-4c1e-b9e5-493ff044b48d/스크린샷_2024-10-12_오후_11.25.52.png
- 정보 은닉
- 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법
- 모듈을 독립적으로 수행할 수 있음
- 하나의 모듈이 변경되더라도 다른 모듈에 영향을 주지 않으므로 수정, 시험, 유지보수가 용이함
- 상위 설계와 하위 설계
- 소프트웨어 개발의 설계 단계는 크게 상위 설계와 하위 설계로 구분할 수 있음
별칭 아키텍쳐 설계, 예비 설계 모듈 설계, 상세 설계 설계 대상 전체적인 구조 내부 구조 및 행위 세부 목록 구조, DB, 인터페이스 컴포넌트, 자료구조, 알고리즘 - 소프트웨어 아키텍처의 품질 속성
- 이해관계자들이 요구하는 수준의 품질을 유지 및 보장할 수 있게 설계되었는지 확인하기 위해 품질 평가 요소들을 구체화 시켜 놓은 것
- 품질 평가 요소의 종류시스템 측면 성증, 보안, 가용성, 기능성, 사용성, 변경 용이성, 확장성 등
비즈니스 측면 시장 적시성, 비용과 혜택, 예상 시스템 수명, 목표 시장, 공개 일정 등 아키텍처 측면 개념적 무결성, 정확성, 완결성, 구축 가능성, 변경성, 시험성 등
- 소프트웨어 아키텍쳐의 설계 과정
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/f58f2955-b009-4fbf-b275-e8b26a59fe93/스크린샷_2024-10-12_오후_11.30.37.png
- 협약(Contract)에 의한 설계
- 컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것
- 정확한 인터페이스를 명세함
- 명세에 포함될 조건조건 내용
선행 조건 오퍼레이션이 호출되기 전에 참이 되어야 할 조건 결과 조건 오퍼레이션이 수행된 후 만족되어야 할 조건 불변 조건 오퍼레이션이 실행되는 동안 항상 만족되어야 할 조건
아키텍처 패턴
- 아키택처 패턴
- 아키택처를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 주요 아키텍처 패턴의 종류
- 레이어 패턴
- 클라이언트-서버 패턴
- 파이프-필터 패턴
- 모델-뷰-컨트롤러 패턴
- 레이어 패턴
- 시스템을 계층으로 구분하여 구성하는 패턴
- 서로 마주보는 두 개의 계층 사이에서만 사용작용이 이루어짐
- 대표적으로 OSI참조 모델이 있음
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ab3f22c4-63c5-40e2-893d-cb7558a31719/스크린샷_2024-10-12_오후_11.50.54.png
- 클라이언트-서버 패턴
- 파이프-필터 패턴
- 데이터 스트림 절차를 필터로 캡슐화하여 파이프를 통해 전송하는 패턴
- 앞 시스템의 처리 결과물을 처리한 후 다시 파이프를 통해 다음 시스템으로 넘겨주는 패턴을 반복함
- 데이터 변환, 버퍼링, 동기화 등에 주로 사용됨
- 대표적으로 UNIX의 쉘이 있음
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/c0f0c61e-109f-43dd-aa8f-917de3ad3a2f/스크린샷_2024-10-12_오후_11.53.22.png
- 모델-뷰-컨트롤러 패턴
- 서브시스템을 모델, 뷰, 컨트롤러로 구조화하는 패턴
- 사용자의 요청을 받으면 핵심 기능과 데이터를 보관하는 모델을 이용하여 뷰에 정보를 출력하는 구조임
- 여러 개의 뷰를 만들 수 있음
- 한 개의 모델에 대해 여러 개의 뷰를 필요로 하는 대화형 애플리케이션에 적합함
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/797097ff-90b3-430f-8eed-7737a9a4de38/스크린샷_2024-10-12_오후_11.55.48.png
- 기타 패턴종류 내용
마스터-슬레이브 패턴 슬레이브 컴포넌트에서 처리된 결과물을 다시 돌려받는 방식으로 작업 예) 장애 허용 시스템, 병렬 컴퓨팅 시스템 브로커 패턴 사용자가 원하는 서비스와 특성을 브로커 컴포넌트에 요청하면 요청에 맞는 컴포넌트와 사용자를 연결해주는 패턴 예) 분산 환경 시스템 피어-투-피어 패턴 피어라 불리는 하나의 컴포넌트가 클라이언트가 될 수도, 서버가 될 수도 있는 패턴 예) 파일 공유 네트워크 이벤트-버스 패턴 이벤트 메시지를 발행(Publish)하면, 해당 채널을 구독(Subscribe)한 리스너들이 메시지를 받아 이벤트를 처리 예) 알림 서비스 블랙보드 패턴 모든 컴포넌트들이 공유 데이터 저장소와 블랙보드 컴포넌트에 접근이 가능한 패턴 예) 음성 인식, 차량 식별, 신호 해석 인터프리터 패턴 프로그램 코드의 각 라인을 수행하는 방법을 지정하고, 기호마다 클래스를 갖도록 구성된 패턴 예) 번역기, 컴파일러, 인터프리터
객체지향
- 객체지향
- 각 요소들을 객체로 만든 후, 객체들을 조립해서 소프트웨어를 개발하는 기법
- 재사용 및 확장이 용이
- 객체지향의 구성 요소
- 객체
- 클래스
- 메시지
- 객체지향의 특징
- 캡슐화
- 상속
- 다형성
- 연관성
- 객체
- 데이터와 함수를 묶어 놓은 소프트웨어 모듈
- 데이터
- 객체가 가지고 있는 정보로, 속성이나 상태, 분류 등
- 함수
- 객체가 수행하는 기능으로 객체가 갖는 데이터를 처리하는 알고리즘
- 객체의 상태를 참조하거나 변경하는 수단
- 데이터
- 데이터와 함수를 묶어 놓은 소프트웨어 모듈
- 클래스
- 공통된 속성과 연산을 갖는 객체의 집합
- 속성과 연산을 정의하고 있는 틀
- 클래스에 속한 각각의 객체를 인스턴스 라고 함
- 메시지
- 객체들 간의 상호작용에 사용되는 수단으로, 객체의 동작이나 연산을 일으키는 외부의 요구사항
- 메시지를 받은 객체는 예상된 결과를 반환함
- 캡슐화
- 외부에서의 접근을 제한하기 위해 인터페이스를 제외한 세부 내용을 은닉하는 것
- 외부 모듈의 변경으로 인한 파급효과가 적다
- 상대 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 단순해지고, 객체 간의 결합도가 낮아짐
- 상속
- 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
- 하위 클래스는 물려받은 속성과 연산을 다시 정의하지 않아도 즉시 자신의 속성으로 사용할 수 있음
- 하위 클래스는 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용할 수 있음
- 다형성
- 하나의 메시지에 대해 각각의 객체가 고유한 방법으로 응답할 수 있는 능력
- 예) ‘+’ 연산자의 경우 숫자 클래스에서는 덧셈, 문자 클래스에서는 문자열의 연결 기능으로 사용됨
- 연관성
객체지향 분석 및 설계
- 객체지향 분석의 방법론
- 사용자의 요구사항과 객체, 속성, 연산, 관계 등을 정의하여 모델링하는 작업
- 업무를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석함
- 클래스를 식별하는 것이 주요 목적임
- 객체지향 분석의 방법론종류 내용
Rumbaugh(럼바우) 방법 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어서 수행함 Booch(부치) 방법 - 미시적 개발 프로세스와 거시적 개발 프로세스를 모두 사용함 - 클래스와 객체들을 분석 및 식별하고 속성과 연산을 정의 | | Jacobson 방법 | 유스케이스(Use Case)를 강조하여 사용함 | | Coad와 Yourdon 방법 | - E-R 다이어그램을 사용하여 객체의 행위를 모델링함
- 객체 식별, 구조 식별, 주제 정의, 속성과 인스턴스 연결 정의, 연산과 메시지 연결 정의 등의 과정으로 구성함 | | Wirfs-Brock 방법 | 분석과 설계 간의 구분이 없고 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행함 |
- 럼바우 분석 기법
- 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법
- 객체 모델링 기법
- 분석 활동은 객체 모델링 → 동적 모델링 → 기능 모델링 순
동적 모델링 상태 다이어그램을 이용하여 시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현하는 모델링 기능 모델링 자료 흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링 - 객체지향 설계 원칙
- 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜져야 할 원칙
- SRP, OCP, LSP, ISP, DIP의 다섯 가지 원칙의 앞 글자를 따 SOLID 원칙이라고 부름
- 객체지향 설계 원칙의 종류종류 내용
단일 책임 원칙(SRP) 객체는 단 하나의 책임만 가져야 한다는 원칙 개방-폐쇄 원칙(OCP) 기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계 리스코프 치환 원칙(LSP) 자식 클래스는 부모 클래스의 기능을 수행할 수 있어야 한다. 인터페이스 분리 원칙(ISP) 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다는 원칙 의존 역전 원칙(DIP) 의존 관계 성립 시 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 원칙
모듈
- 모듈
- 모듈화를 통해 분리된 시스템의 각 기능으로, 서브루틴, 서브시스템, 소프트웨어 내의 프로그램, 작업 단위 등을 의미함
- 소프트웨어를 구성하는 각 모듈의 기능이 서로 독립됨을 의미함
- 모듈의 독립성은 결합도와 응집도에 의해 측정됨
- 결합도
- 모듈간의 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계
- 결합도가 약할수록 품질이 높고, 강할수록 품질이 낮음
- 결합도의 종류와 강도
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/8407a7b0-ece0-40c5-b0c9-7f346e809eb7/스크린샷_2024-10-17_오전_12.00.49.png
- 결합도의 종류종류 내용
내용 결합도 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때의 결합도 공통(공유) 결합도 공유되는 공통 데이터 영역을 여러 모듈이 사용할 떄의 결합도 외부 결합도 어떤 모듈에서 선언한 데이터를 외부의 다른 모듈에서 참조할 때의 결합도 제어 결합도 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어 신호나 제어 요소를 전달하는 결합도 - 결합도의 종류종류 내용
스탬프(검인) 결합도 배열이나 레코드 등의 자료 구조로 전달될 때의 결합도 자료 결합도 모듈 간의 인터페이스가 조료 요소로만 구성될 떄의 결합도 - 응집도
- 모듈의 내부 요소들이 서로 관련되어 있는 정도
- 응집도가 강할수록 품질이 높고, 약할수록 품질이 낮음
- 응집도의 종류와 강도
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/74b04a60-4dbc-409d-954b-f398e896efd6/스크린샷_2024-10-17_오전_4.04.12.png
- 응집도의 종류종류 내용
기능적 응집도 모듈 내부의 모든 기능 요소들이 단일 문제와 연관 순차적 응집도 하나의 활동으로부터 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우 교환적 응집도 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 절차적 응집도 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 순차적으로 수행할 경우 시간적 응집도 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성 논리적 응집도 유사한 성격을 갖거나 특정 형태로 분류 우연적 응집도 각 구성 요소들이 서로 관련 없는 요소로만 구성 - 팬인 / 팬아웃
- 팬인은 제어하는 모듈의 수
- 팬아웃은 제어되는 모듈의 수
- 팬인이 높다는 것은 재사용 측면에서 설계가 잘 되어있다고 볼 수 있음
- 팬인이 높은 경우 단일 장애점이 발생할 수 있으므로 중점적인 관리 및 테스트가 필요
- ex) 다음의 시스템 구조도에서 각 모듈의 팬인과 팬아웃을 구하시오.
- 팬인은 빨간색, 팬아웃은 파란색
- N-S차트(Nassi-Schneiderman Chart)
- 논리의 기술에 중점을 두고 도형을 이용해 표현하는 방법
- GOTO나 화살표 이용X
- 연속, 선택 및 다중 선택, 반복의 3가지 제어 논리 구조로 표현
- 시각적으로 명확히 식별하는 데 적합함
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/2e6572e7-1281-4a2c-9941-aed494c5facb/스크린샷_2024-10-17_오전_4.09.53.png
단위 모듈
- 단위 모듈
- 소프트웨어 구현에 필요한 여러 동작 중 한 가지 동작을 수행하는 기능을 모듈로 구현한 것
- 단위 모듈로 구현되는 하나의 기능을 단위 기능
- 독립적인 컴파일이 가능하며, 다른 모듈에 호출되거나 삽입되기도 함
- 단위 모듈의 구현 과정
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/aff3c21d-4b1c-40b9-b055-66c4e27e9528/스크린샷_2024-10-17_오전_4.11.37.png
- IPC(Inter-Process Communication)
- 모듈 간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합
- 복수의 프로세스를 수행, 프로세스 간 통신까지 구현
- IPC의 대표 메소드 5가지
Shared Memory 공유 가능한 메모를 구성 Socket 네트워크 소켓을 이용 Semaphores 공유 자원에 대한 접근 제어를 통해 통신 Pipes&named Pipes - Pipe라고 불리는 선입선출 형태 - Pipe는 하나의 프로세스가 이용 중이라면 다른 프로세스는 접근할 수 없음 | | Message Queueing | 메시지가 발생하면 이를 전달하는 방식으로 통신하는 방식 |
- 단위 모듈 테스트
- 모듈이 정해진 기능을 정확히 수행하는 지 검증하는 것
- 단위 테스트라고도 불림
- 시스템 수준의 오류는 잡아낼 수 없음
- 테스트 케이스
- 소프트웨어가 사용자의 요구사항을 정확하게 준수 했는지를 확인하기 위한 테스트 항목에 대한 명세서
- 테스트 케이스를 이용하지 않은 테스트는 검증이 누락되거나 불필요한 검증의 반복으로 인력과 시간을 낭비 할 수 있음
- ISO/IEC/IEEE 29119-3 표준에 따른 테스트 케이스의 구성 요소
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/5cea3691-6e43-4415-93fb-4f2df80b465d/스크린샷_2024-10-17_오전_4.16.03.png
공통 모듈
- 공통 모듈
- 여러 프로그램에서 공통으로 사용할 수 있는 모듈
- 해당 기능을 명확히 이해할 수 있도록 명세 기법을 준수해야 함
- 공통 모듈 명세 기법의 종류명세 기법 내용
정확성 해당 기능이 필요하다는 것을 알 수 있도록 명확성 이해할 때 중의적으로 해석되지 않도록 작성 완전성 필요한 모든 것을 기술 일관성 상호 충돌이 발생하지 않도록 작성 추적성 요구사항의 출처, 관련 시스템 등의 관계를 파악 - 재사용
- 이미 개발된 기능들을 새로운 시스템이나 기능 개발에 사용하기 적합하도록 최적화하는 작업
- 필요한 비용과 시간을 절약 가능
- 사용법을 공개해야함
- 재사용 규모에 따른 분류함수와 객체 클래스나 메소드 단위
컴포넌트 컴포넌트 자체에 대한 수정 없이 인터페이스를 통해 통신 애플리케이션 공통된 기능들을 제공하는 애플리케이션을 공유
- 효과적인 모듈 설계 방안
- 결합도를 줄이고 응집도를 높여서 모듈의 독립성과 재사용성을 높임
- 복잡도와 중복성을 줄이고 일관성을 유지시킴
- 모듈의 기능이 예측이 가능해야 하며 지나치게 제한적이어서는 안 됨
- 모듈 크기는 시스템의 전반적인 기능과 구조를 이해하기 쉬운 크기로 분해함
- 효과적인 제어를 위해 모듈 간의 계층적 관계를 정의하는 자료가 제시
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/64a6d882-a2c2-40c4-ac20-68fcf342a85b/스크린샷_2024-10-17_오전_6.09.51.png
코드
- 코드
- 자료의 분류, 조합, 집계, 추출을 용이하게 하기 위해 사용하는 기호
- 코드의 주요 기능식별기능 데이터 간의 성격에 따라 구분
분류기능 특정 기준이나 동일한 유형에 해당하는 데이터를 그룹화 배열기능 의미를 부여하여 나열할 수 있음 표준화기능 기준에 맞추어 표현 간소화 기능 복잡한 데이터를 간소화 - 코드의 종류종류 내용
순차코드 발생 순서, 크기 순서 등 일정 기준에 따라 일련번호 부여 예) 1, 2, 3, 4 … 블록 코드 공통성이 있는 것끼리 블록으로 구분하고 일련번호 부여 예) 1001~1100: 총무부, 1101~1200: 영업부 10진 코드 0~9까지 10진 분할하고 다시 그 각각에 대하여 10진 분할하는 방법을 필요한 만큼 반복하는 방법 예) 1000: 공학, 1100: 소프트웨어 공학 1110: 소프트웨어 설계 그룹 분류 코드 일정 기준에 따라 대분류, 중분류, 소분류 등으로 구분하여 일련번호 부여 예) 1-01-001: 본사-총무부-인사계, 2-01-001: 지사-총무부-인사계 연상 코드 명칭이나 약호와 관계있는 숫자와 문자, 기호 이용 예) TV-40: 40인치 TV, L-15-220: 15W 220V의 램프 표의 숫자 코드 성질 즉, 길이, 넓이, 부피, 지름 높이 등의 물리적 수치를 그대로 코드에 적용 예) 120-720-1500: 두께표길이가 1207201500인 강판 합성 코드 하나의 코드로 수행하기 어려운 경우 2개 이상의 코드를 조합하여 만드는 방법 예) 연상 코드 + 순차 코드 KE-711: 대한항공 711기, AC-253: 에어캐나다 253기
디자인 패턴
- 디자인 패턴
- 모듈 간의 관계 및 인터페이스를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 개발 과정 중에 문제가 발생하면 새로 해결책을 구상하는 것보다 문제에 해당하는 디자인 패턴을 참고하여 적용하는 것이 더 효율적임
- GOF의 디자인 패턴은 생성 패턴, 구조 패턴, 행위 패턴으로 구분
- 생성 패턴
- 클래스나 객체의 생성과 참조 과정을 정의하는 패턴
- 추상팩토리
- 구체적인 클래스에 의존하지 않고, 인터페이스를 통해 서로 연관,의존하는 객체들의 그룹으로 생성하여 추상적으로 표현함
- 연관된 서브 클래스를 묶어 한 번에 교체하는 것이 가능함
- ex) 요리 내부의 값을 김치찌개에서 된장찌개로 바꿔도 구체적인 클래스에 의존하지 않았기에 문제가 없는 상황
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/25bb3e1e-5930-42f6-bd97-2910690712ae/스크린샷_2024-10-17_오전_6.19.58.png
- 팩토리 메소드
- 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화한 패턴
- 상위 클래스에서 인터페이스만 정의하고 실제 생성은 서브 클래스가 담당
- ex) 구체적인 선언은 하위 요리 클래스 내부에서 하는 방식
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/462fd286-7cb8-4e76-a338-7d6ebe9a1312/스크린샷_2024-10-17_오전_6.23.13.png
- 빌더
- 작게 분리된 인스턴스를 건축 하듯이 조합하여 객체를 생성함
- 객체의 생성과정과 표현방법을 분리하고 있어, 동일한 객체 생성에서도 서로 다른 결과를 만들어 낼 수 있음
- 프로토타입
- 원본 객체를 복제하는 방법으로 객체를 생성하는 방법
- 싱글톤
- 클래스 내에서 인스턴스가 하나뿐임을 보장
- 하나의 객체를 생성하면 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수 없음.
- 구조 패턴
- 복잡한 시스템을 개발하기 쉽도록 클래스나 객체들을 조합하여 더 큰 구조로 만드는 패턴
- 어댑터
- 다른 클래스가 이용할 수 있도록 변환해주는 패턴
- 인터페이스가 일치하지 않을 때 이용함
- 브릿지
- 구현부에서 추상층을 분리하여, 서로가 독립적으로 확장할 수 있도록 구성
- 기능과 구현을 두 개의 별도 클래스로 구현함
- 컴포지트
- 복합 객체와 단일 객체를 구분 없이 다루고자 할 때 사용하는 패턴
- 객체들을 트리 구조로 구성하여, 복합 객체 안에 복합 객체가 포함되는 구조
- 데코레이터
- 객체 간의 결합을 통해 능동적으로 기능들을 확장
- 임의의 객체에 부가적인 기능을 추가하기 위해 다른 객체들을 덧붙이는 방식으로 구현
- 파싸드
- 서브 클래스들을 피해 인터페이스를 구성함으로써 서브 클래스들의 기능을 간편하게 사용할 수 있는 패턴
- 서브 클래스들 사이의 통합 인터페이스를 제공하는 Wrapper 객체가 필요함
- 플라이웨이트
- 매번 생성하는 것이 아니고 가능한 한 공유해서 사용
- 다수의 유사 객체를 생성하거나 조작할 때 유용
- 프록시
- 네트워크 연결, 메모리의 대용량 객체로의 접근
- 접근이 어려운 객체와 객체 사이에서 인터페이스 역할 수행
- 행위 패턴
- 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴
- 책임 연쇄
- 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴
- 각 객체들이 고리로 묶여 있어 요청이 해결될 때 까지 고리를 따라 책임이 넘어감
- 커맨드
- 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 저장하거나 로그에 남기는 패턴
- 각종 명령어들을 추상클래스와 구체 클래스로 분리
- 인터프리터
- 언어의 문법 표현을 정의하는 패턴
- SQL이나 통신 프로토콜 같은 것을 개발할 때 사용
- 반복자(Iterator)
- 접근이 잦은 객체에 대해 동일한 인터페이스 사용
- 내부 표현 방법의 노출 없이 순차적인 접근 간으
- 중재자
- 수많은 객체들 간의 복잡한 상호작용을 캡슐화 하여 객체로 정의
- 의존성을 줄여 결합도를 감소
- 메멘토
- 특정 시점에서의 객체 내부 상태를 객체화함으로 써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공
- [Ctrl] + [Z]와 같은 되돌리기 기능을 개발할 때 주로 이용함
- 옵저버
- 한 객체의 상태가 변화하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태를 전달하는 패턴
- 상태
- 객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용
- 객체 상태를 캡슐화하고 참조하는 방식으로 처리
- 전략
- 동일한 계열의 알고리즘들을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의하는 패턴
- 독립적으로 원하는 알고리즘을 선택하여 사용할 수 있으며, 클라이언트에 영향 없이 알고리즘의 변경이 가능함
- 템플릿 메소드
- 상위 클래스에서 골격을 정의하고, 세부 처리를 구체화하는 구조의 패턴
- 유사한 서브 클래스를 묶어 상위 클래스에서 정의함으로써 코드의 양을 줄이고 유지보수를 용이하게 해줌
- 팩토리 메소드랑 유사한 개념
- 방문자
- 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성
- 처리 기능은 각 클래스를 방문하여 수행함
개발 지원 도구
- 통합 개발 환경(IDE)
- 개발에 필요한 환경, 편집기, 컴파일러, 디버거 등의 다양한 툴을 하나의 인터페이스로 통합하여 제공하는 환경
- 통합 개발 환경 도구의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/75d3e0ec-ebbb-4cf8-a15d-87081f469a8c/스크린샷_2024-10-17_오전_6.36.36.png
- 빌드 도구
- 소스 코드 파일들을 컴퓨터에서 실행할 수 있는 제품 소프트웨어로 변환하는 과정 또는 결과물
- 빌드 도구는 전처리, 컴파일 등의 작업을 수행함
- 대표적인 빌드 도구
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/9ead9c7d-9b55-4491-99e5-45eab4bb2dfc/스크린샷_2024-10-17_오전_6.38.07.png
- 기타 협업 도구
- 개발에 참여하는 사람들이 서로 다른 작업 환경에서 원활하게 프로젝트를 수행할 수 있도록 도와주는 도구
서버 개발
- 서버 개발
- 웹 애플리케이션의 로직을 구현할 서버 프로그램을 제작하여 웹 어플리케이션 서버(WAS)에 탑재하는 것
- 프로그래밍 언어는 Java, Js, Python 등
- 서버 개발 프레임워크
- 서버 프로그램 개발 시 다양한 네트워크 설정, 요청 및 응답 처리, 아키텍처 모델 구현 등을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어
- 대부분 MVC 패턴 기반
- 서버 개발 프레임워크의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ab47a184-5820-48a6-a1dc-825762eb055b/스크린샷_2024-10-17_오전_6.40.49.png
- 서버 개발 과정
- DTO/VO, SQL, DAO, Service, Controller를 각각 구현하는 과정
- 순서는 임의로 변경 가능
- MVC 접근법!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/88a56a82-f952-457f-8a0b-33efc75524ba/스크린샷_2024-10-17_오전_6.42.08.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/f856da4b-e749-42d1-a66b-525b79357309/스크린샷_2024-10-17_오전_6.41.51.png
- 구현 과정과정 내용
DTO/VO 구현 - 데이터 교환을 위해 사용할 객체를 만드는 과정 - 송, 수신할 데이터의 자료형에 맞는 변수 및 객체를 생성함 | | SQL 구현 | - 데이터의 삽입, 변경, 삭제등의 작업을 수행할 SQL문 생성
- 소스 코드 내에 직접 입력, 또는 별도의 XML 파일로 관리 | | DAO 구현 | 데이터베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드를 구현 | | Service 구현 | 요청에 응답하기 위한 로직을 구현 | | Controller 구현 | 적절한 서비스를 호출하여 결과를 반환하는 코드 구현 |
배치 프로그램
- 배치 프로그램
- 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하도록 만든 프로그램을 의미함
- 배치 프로그램의 필수 요소
- 대용량 데이터
- 자동화
- 견고성
- 안정성/신뢰성
- 성능
- 배치 스케줄러
- 일괄 처리 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구
- 특정 업무를 원하는 시간에 처리할 수 있도록 지원
- 잡 스케줄러라고도 불림
- 배치 스케줄러의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/94ee26a1-6696-4351-9301-aff965427e50/스크린샷_2024-10-17_오전_6.54.41.png
- crontab 명령어 작성 방법!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/fbe11882-5246-4e94-9184-ddb656d62b67/스크린샷_2024-10-17_오전_6.56.06.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/590757e4-e084-4755-8a2b-b4e21db29389/스크린샷_2024-10-17_오전_6.55.04.png
시스템 인터페이스 요구사항 분석
- 시스템 인터페이스 요구사항
- 개발할 시스템과 외부 시스템을 연동하는데 필요한 시스템
- 시스템 인터페이스 요구사항 명세서의 구성 요소
- 인터페이스 이름
- 연계 대상 시스템
- 연계 범위 및 내용
- 연계 방식
- 송신 데이터
- 인터페이스 주기
- 기타 고려사항
- 시스템 인터페이스 요구사항 분석
- 요구사항 분류하고 구체적으로 명세한 후 이를 이해관계자에게 전달
- 요구사항 분석 기법을 적절히 이용함
- 요구사항 분해가 필요한 경우 적절한 수준으로 세분화함
- 요구사항 분석 시 누락된 요구사항이나 제한 조건을 추가함
- 상대적 중요도를 평가하여 우선순위를 부여함
- 시스템 인터페이스 요구사항 분석 절차
- 관련 요구사항을 선별하여 별도로 요구사항 목록을 만듦
- 관련된 자료를 준비
- 기능, 비기능 요구사항으로 분리
- 요구사항 명세서에 내용을 추가하거나 수정
- 요구사항 명세서와 요구사항 목록을 이해관계자에게 전달
인터페이스 요구사항 검증
- 인터페이스 요구사항 검증
- 사용자들의 요구사항이 요구사항 명세서에 기술되었는지 검토하고 베이스라인 설정
- 검증 수행 순서
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/715b61d2-dc78-43a7-8169-eaadaf75908f/스크린샷_2024-10-17_오전_7.12.45.png
- 요구사항 검증 방법
- 요구사항 검토
- 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석동료 검토 명세서 작성자가 내용을 직접 설명하고 동려들이 결함을 발견
워크스루 요구사항 명세서를 미리 배포하여 사전 검토 후 검토회를 통해 결함 발견 인스펙션 다른 검토 전문가들이 결함을 발견하는 형태의 검토 방법
- 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석동료 검토 명세서 작성자가 내용을 직접 설명하고 동려들이 결함을 발견
- 프로토 타이핑
- 견본품을 만들어 최종 결과물을 예측
- 테스트 설계
- 요구사항이 현실적으로 테스트 가능한지를 검토
- CASE 도구 활용
- 일관성 분석
- 요구사항 검토
- 요구사항 검증의 주요 항목
- 완전성
- 일관성
- 명확성
- 기능성
- 검증 가능성
- 추적 가능성
- 변경 용이성
송,수신 데이터 식별
- 식별 대상 데이터
- 송 수신 시스템 사이에서 교환되는 데이터로, 규격화된 표준 형식에 따라 전송
- 교환되는 데이터의 종류
- 인터페이스 표준 항목
- 송,수신 데이터 항목
- 공통 코드
- 인터페이스 표준 항목
- 송 수신 시스템을 연계하는데 표준적으로 필요한 데이터
- 시스템 공통부와 거래 공통부시스템 공통부 시스템 간 연동 시 공통 정보
거래 공통부 송 수신되는 데이터를 처리할 때 필요한 정보
- 송, 수신 데이터 항목
- 송 수신 시스템이 업무를 수행하는데 사용하는 데이터
- 데이터 항목과 순서는 인터페이스별로 다름
- 공통 코드
- 시스템들에서 공통적으로 사용하는 코드
- 정보 흐름 식별
- 개발할 시스템과 내 외부 시스템 사이 방향성을 식별
- 송, 수신 데이터 식별
- 개발할 시스템과 연계할 내, 외부 시스템 사이의 정보 흐름과 데이터베이스 산출물을 기반으로 식별
- 인터페이스 표준 항목과 송, 수신 데이터 항목 식별
- 교환 범위를 확인하고 송, 수신 데이터 항목을 식별
- 코드성 데이터 항목 식별
- 코드성 데이터 항목에 대해 코드, 코드명, 코드 설명 등의 코드 정보를 식별
인터페이스 방법 명세화
- 인터페이스 방법 명세화
- 내, 외부 시스템에 연계하여 작동할 때 인터페이스별 송, 수신 방법, 송, 수신 데이터, 오류 식별 및 처리 방안 내용을 문서로 정리
- 송, 수신 방법 명세화
- 각각의 인터페이스에 대해 연계 방식, 통신 및 처리 유형, 발생 주기 등의 송, 수신 방법을 정의하고 명세를 정의
- 송, 수신 데이터 명세화
- 송, 수신 데이터에 대한 명세를 작성
- 오류 식별 및 처리 방안 명세화
- 오류를 식별하고 오류 처리 방안에 대한 명세를 작성
- 인터페이스별로 송, 수신 방법을 명세화하기 위해 필요한 정보
- 시스템 연계 기술
- 인터페이스 통신 유형
- 처리 유형
- 발생 주기
- 시스템 연계 기술
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ea517563-223a-405f-b09e-7ad04e74137d/스크린샷_2024-10-17_오전_7.21.49.png
- 인터페이스 통신 유형유형 내용
단방향 요청만 하고 응답이 없는 형식 동기 요청 후 응답이 올 때 까지 대기 비동기 요청 후 다른 작업을 수행하다 응답이 오면 처리 - 인터페이스 처리 유형유형 내용
실시간 방식 요청 내용을 바로 처리 지연 처리 방식 데이터를 매 건 단위로 처리할 경우 비용이 많이 발생할 때 배치 방식 대량의 데이터를 처리할 때 사용 - 인터페이스 발생 주기
- 개발할 시스템과 내,외부 시스템 간 송, 수신 데이터가 전송되어 인터페이스가 사용되는 주기를 의미
미들웨어 솔루션
- 미들웨어
- 운영체제와 응용 프로그램, 서버와 클라이언트 사이에서 다양한 서비스를 제공하는 소프트웨어
- 표준화된 인터페이스를 제공함으로써 시스템 간의 데이터 교환에 일관성을 보장함
- 미들웨어의 종류
- DB
- RPC
- MOM
- TP-Monitor
- ORB
- WAS
- DB
- 클라이언트에서 원격의 데이터베이스와 연결하는 미들웨어
- RPC(원격 프로시저 호출)
- 원격 프로시저를 마치 로컬 프로시저처럼 호출하는 미들웨어
- MOM(메시지 지향 미들웨어)
- 비동기형 메시지를 전달하는 미들웨어
- 이기종 분산 데이터 시스템의 데이터 동기를 위해 많이 사용됨
- TP-Monitor(트랜잭션 처리 모니터)
- 트랜잭션을 처리 및 감시하는 미들웨어
- 사용자 수가 증가해도 빠른 응답 속도를 유지해야 하는 업무로 사용함
- ORB(객체 요청 브로커)
- 객체 지향 미들웨어
- TP-Monitor의 장점인 트랜잭션 처리와 모니터링 등을 추가로 구현한 제품도 존재
- WAS(웹 애플리케이션 서버)
- 동적인 콘텐츠를 처리하기 위한 미들웨어
- 웹 환경을 구현하기 위한 미들웨어
모듈 연계를 위한 인터페이스 기능 식별
- 모듈 연계
- 내부 모듈과 외부 모듈 또는 내부 모듈 간 데이터의 교환을 위해 관계를 설정
- 대표적인 모듈 연계 방법
- EAI(Enterprise Application Integration)
- ESB(Enterprise Service Bus)
- 웹 서비스
- EAI
- 기업 내 각종 애플리케이션 및 플랫폼 간의 정보 전달, 연계, 통합 등 상호 연동이 가능하게 해주는 솔루션
- EAI의 구축 유형!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/a0aa8dfd-9951-4aea-af16-c87a22f594df/스크린샷_2024-10-17_오전_7.30.46.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/2b0b459f-2766-47a5-90ad-6da23f43bb0a/스크린샷_2024-10-17_오전_7.30.26.png
- ESB
- 애플리케이션 간 연계, 표준 기반의 인터페이스를 제공하는 솔루션
- 애플리케이션 통합측면에서 EAI와 유사하지만 서비스 중심의 통합을 지향
- 범용적으로 사용하기 위해 결합도 약하게 유지
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/e66c3ffa-ac3d-4d18-adf6-cdd66bd2cf14/스크린샷_2024-10-17_오전_7.31.40.png
- 웹 서비스
- 네트워크의 정보를 표준화된 서비스 형태로 만들어 공유하는 기술
- 서비스 지향 아키텍처(SOA) 개념
- 웹 서비스의 구성
- SOAP
- HTTP, HTTPS, SMTP 등을 활용하여 XML기반의 메시지 교환
- UDDI
- WSDL을 등록하여 서비스와 서비스 제공자를 검색하고 접근하는데 사용
- WSDL
- 웹 서비스명, 서비스 제공 위치, 프로토콜 XML 형식으로 구현
- SOAP
- 모듈 간 인터페이스 기능 식별
- 식별된 모듈 간 관련 기능을 검토하여 인터페이스 동작에 필요한 기능을 식별
- 모듈 간 동작하는 기능을 통해 인터페이스 기능을 식별
- 시나리를 통해 내부 모듈과 관련된 인터페이스 기능을 식별
- 실제적으로 필요한 인터페이스 기능을 최종적으로 선별
- 인터페이스 기능 구현을 정의하는데 사용
모듈 간 인터페이스 데이터 표준 확인
- 인터페이스 데이터 표준
- 모듈 간 인터페이스에 사용되는 데이터의 형식을 표준화하는 것
- 기존의 데이터 중에서 공통 영역을 추출하거나 어느 한쪽의 데이터를 변환하여 정의함
- 인터페이스 데이터 표준 확인
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/63553d08-9c94-475c-8a0e-7b4d8d7403ad/스크린샷_2024-10-17_오전_7.35.24.png
인터페이스 기능 구현의 정의
- 인터페이스 기능 구현의 정의
- 인터페이스를 실제로 구현하기 위해 인터페이스 기능에 대한 구현 방법을 기능별로 기술하는 것
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/8f142ab7-d2a2-40d8-aa12-e077b965e368/스크린샷_2024-10-17_오전_7.36.10.png
- 모듈 세부 설계서
- 모듈의 구성 요소와 세부적인 동작 등을 정의한 설계서
- 모듈 세부 설계서 종류컴포넌트 명세서 컴포넌트 개요, 내부 클래스의 동작, 외부와의 통신하는 명세 등을 정의
인터페이스 명세서 인터페이스 클래스의 세부 조건 및 기능 등을 정의
인터페이스 구현
- 인터페이스 구현
- 송, 수신 시스템 간의 데이터 교환 및 처리를 실현해 주는 작업
- 대표적인 인터페이스 구현 방법
- 데이터 통신을 이용한 인터페이스 구현
- 인터페이스 엔티티를 이용한 인터페이스 구현
- AJAX
- JS를 이용하여 클라이언트와 서버 간에 XML 데이터를 주고 받는 비동기 통신 기술
- 웹 페이지 일부 영역만을 업데이트 할 수 있음
- JSON
- 용량이 적은 데이터를 교환하기 위해 데이터 객체를 속성, 값의 쌍 형태로 표현하는 개방형 표준 포맷
- 데이터 통신을 이용한 인터페이스 구현
- ex) JSON을 이용한 인터페이스 구현 순서
- 인터페이스 객체를 생성, 각 시스템 환경에 맞게 선택함
- JSON 이용해 인터페이스 객체를 만듦
- 인터페이스 객체를 AJAX 기술 등을 이용하여 수신 측으로 보냄
- 인터페이스 객체를 수신해 파싱한 후 처리함
- 수신 측에서 송신 측으로 처리 결과를 보냄
- ex) JSON을 이용한 인터페이스 구현 순서
- 인터페이스 엔티티를 이용한 인터페이스 구현
- 인터페이스가 필요한 시스템 사이에 별도의 인터페이스 엔티티를 두어 상호 연계하는 것
- 테이블을 엔티티로 활용함
- ex) 인터페이스 테이블을 이용한 인터페이스 구현 순서
- 인터페이스 이벤트가 발생하면 인터페이스 데이터를 기록
- 송신 측 인터페이스 테이블에 인터페이스 데이터를 전송
- 수신 측 인터페이스 테이블에 입력되면 인터페이스 데이터를 읽음
- 수신 측 인터페이스 테이블에서 읽은 후 사전에 정의된 데이터 트랜잭션 수행
인터페이스 보안
- 인터페이스 보안
- 인터페이스의 보안 취약점 분석 후 적절한 보안 기능을 적용
- 인터페이스 보안 기능 적용
- 인터페이스 아키텍처에 따라 IPSec, SSL, S-HTTP를 사용 | | --- | --- | | 애플리케이션 영역 | 보안 가이드를 참조하여 코드 상의 보안 취약점을 보완 | | 데이터베이스 영역 | - 데이터베이스, 스키마, 엔티티의 접근 권한과 프로시저, 트리거 등 동작 객체의 보안 취약점에 보안 기능 적용
- 개인 정보나 업무상 민감한 데이터의 경우 암호화나 익명화 등 데이터 자체의 보안 방안도 고려 |
- | 네트워크 영역 | - 스니핑 등을 이용한 데이터 탈취 및 변조 위협을 방지하기 위해 네트워크 트래픽에 대한 암호화를 설정
- 데이터 무결성 검사 도구
- 인터페이스 보안 취약점을 분석하는데 사용되는 도구
- 시스템 파일의 변경 유무를 확인하고, 파일이 변경되었을 경우 이를 관리자에게 알려줌
- 종류
- TripWire
- AIDE
- Samhain
- Claymore
- Slipwire
- Fcheck
인터페이스 구현 검증
- 인터페이스 구현 검증
- 인터페이스가 정상적으로 문제없이 작동하는지 확인
- 인터페이스 구현 검증 도구, 감시 도구를 이용
- 인터페이스 구현 검증 도구
- 인터페이스 단위 기능과 시나리오 등을 기반으로 하는 통합 테스트가 필요함
- 테스트 자동화 도구
- 인터페이스 구현 감시 도구
- 동작 상태는 APM(애플리케이션 성능 관리)을 사용하여 감시(Monitoring)할 수 있음
- APM을 통해 종합적인 정보를 조회하고 분석할 수 있음
- 대표적인 APM
- 스카우터
- 제니퍼
- APM(Application Performance Management/Monitoring)
- 애플리케이션의 성능 관리를 위해 다양한 모니터링 기능을 제공하는 도구
- APM은 리소스 방식과 엔드투엔드의 두 가지 유형이 있음
- 리소스 방식
- Nagios, Zabbix, Carti
- 엔드투엔드 방식
- VisualVM, 제니퍼, 스카우터
- 리소스 방식
사용자 인터페이스
- 사용자 인터페이스(UI, User Interface)
- 사용자와 시스템 간의 상호작용이 이뤄지도록 도와주는 장치나 소프트웨어
- 사용자 인터페이스의 세 가지 분야
- 물리적 제어
- 상세적인 표현과 전체적인 구성
- 편리하고 간편하게 사용하도록 하는 기능
- 사용자 인터페이스의 구분구분 내용
CLI 명령과 출력이 텍스트 형태로 이루어지는 인터페이스 GUI 아이콘이나 메뉴를 마우스로 선택하여 작업을 수행하는 그래픽 환경의 인터페이스 NUI 말이나 행동으로 기기를 조작하는 인터페이스 - 사용자 인터페이스의 기본 원칙
- 직관성
- 유효성
- 학습성
- 유연성
UI 설계 도구
- 와이어프레임
- 페이지에 대한 개략적인 레이아웃이나 뼈대를 설계하는 도구
- 페이지의 영역 구분, 콘텐츠, 텍스트 배치 등을 화면 단위로 설계함
- 목업
- 실제 화면과 유사하게 만든 정적인 형태의 모형
- 스토리보드
- 와이어프레임에 콘텐츠에 대한 설명, 페이지 간 이동 흐름 등을 추가한 문서
- 디자이너와 개발자가 최종적으로 참고하는 작업 지침서
- 서비스 구축을 위한 모든 정보가 들어 있음
- 프로토타입
- 와이어프레임이나 스토리보드 등에 인터랙션을 적용함으로써 실제 구현된 것처럼 테스트가 가능한 동적인 형태의 모형
- 종류
- 제작 기간이 짧은 경우, 제작 비용이 적을 경우, 업무 협의가 빠를 경우 | | --- | --- | | 디지털 프로토타입 | - 파워포인트, 아크로뱃, 비지오, 옴니그래플 등과 같은 프로그램을 사용
- 재사용이 필요한 경우, 산출물과 비슷한 효과가 필요한 경우, 숙력된 전문가가 있는 경우 |
- | 페이퍼 프로토타입 | - 아날로그적인 방법
- 유스케이스
- 사용자의 요구사항을 기능 단위로 표현
- 사용자가 원하는 목표를 달성하기 위해 수행할 내용을 기술함
- 사용자의 요구사항을 빠르게 파악함으로써 초기에 시스템의 기능적인 요구를 결정
- 다이어그램 형식으로 묘사됨
품질 요구사항
- 품질 요구사항
- 사용자의 입장에서 얼마나 충족하는가
- 사용자의 요구사항을 충족시킴으로써 확립
- 소프트웨어 품질 관련 표준
- ISO/IEC 9126의 소프트웨어 품질 특성
UI 설계서
- UI 설계서
- 요구사항을 바탕으로 UI 설계를 구체화하여 작성하는 문서
- 기획자, 개발자, 디자이너 등과의 원할한 의사소통을 위함
- UI 흐름 설계
- UI 상세 설계
- 실제 설계 구현을 위해 자세하게 설계
- 반드시 시나리오를 작성해야함
- UI 시나리오 문서
- 사용자 인터페이스의 기능 구조, 대표 화면, 화면 간 인터랙션의 흐름, 다양한 상황에서의 예외 처리 등을 정리한 문서
- 사용자가 최종 목표를 달성하기 위한 방법이 순차적으로 묘사되어 있음
- UI 시나리오 문서의 요건
- 완전성
- 일관성
- 이해성
- 가독성
- 수정 용이성
- 추적 용이성
- UI 상세 설계 순서
HCI / UX / 감성공학
- HCI(Human Computer Interaction or Inteface)
- 사람이 시스템을 보다 편리하고 안전하게 사용할 수 있도록 연구하고 개발하는 학문
- 최종목표는 최적의 UX 만드는 것
- 어떤 제품이 좋은 제품인지, 어떻게 하면 좋은 제품을 만들 수 있는지 연구
- UX(User Experience)
- 사용자가 시스템이나 서비스를 이용하면서 느끼고 생각하게 되는 총체적인 경험
- UI가 사용성, 접근성, 편의성을 중시한다면, UX는 UI를 통해 사용자가 느끼는 만족이나 감정 중시
- 기술을 효용성 측면만 아니라 삶의 질을 향상시키는 하나의 방향으로 봄
- UX의 특징
- 주관성
- 정황성
- 총체성
- 감성공학
- 제품이나 작업환경을 사용자의 감성에 알맞도록 설계 및 제작하는 기술
- 여러 분야의 학문이 공존하는 종합과학임
- 목적은 인간의 삶을 편리하고 안전하며 쾌적하게 만드는 것
- 인간의 감성을 제품 설계에 적용하기 위해 공학적인 접근 방법 사용
애플리케이션 테스트
- 애플리케이션 테스트
- 애플리케이션에 잠재되어 있는 결함을 찾아내는 일련의 행위 또는 절차
- 고객의 요구사항을 만족시키는지 확인하고 소프트웨어가 기능을 정확히 수행하는지 검증함
- 애플리케이션의 기본 원리기본 원리 설명
완벽한 테스트 불가능 잠재적인 결함을 줄일 수 있지만 결함이 없다고 증명할 수 없음 파레토 법칙 20%에 해당하는 코드에서 전체 결함의 80%가 발견된다는 법칙 살충제 패러독스 동일한 테스트 케이스로 동일한 테스트를 반복하면 더 이상 결함이 발견되지 않는 현상 테스팅은 정황 의존 소프트웨어의 특징, 테스트 환경, 테스터의 역량 등 정황에 따라 테스트 결과가 달라질 수 있으므로, 정황에 따라 다르게 테스트를 수행해야함 오류-부재의 궤변 결함을 모두 제거해도, 사용자의 요구사항을 만족시키지 못하면 품질이 높다고 할 수 없다. 테스트와 위험은 반비례 테스트를 할 수록 미래에 발생할 위험을 줄일 수 있음 테스트의 점진적 확대 작은 부분에서 시작하여 점점 확대하며 진행 테스트의 별도 팀 수행 개발자와 관계없는 별도의 팀에서 수행
애플리케이션 테스트의 분류
- 프로그램 실행 여부에 따른 테스트
- 소스 코드에 대한 코딩 표준, 코딩 스타일, 코드 복잡도, 남은 결합 등을 발견하기 위함
- 종류: 워크스루, 인스펙션, 코드 검사 | | --- | --- | | 동적 테스트 | - 프로그램을 실행하여 오류를 찾는 테스트
- 개발의 모든 단계에서 테스트를 수행
- 종류: 블랙박스 테스트, 화이트박스 테스트 |
- | 정적 테스트 | - 프로그램을 실행하지 않고 명세사나 소스 코드를 대상으로 분석
- 테스트 기반에 따른 테스트
- 종류: 동등 분할, 경계 값 분석 등 | | --- | --- | | 구조 기반 테스트 | - 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인
- 종류: 구문 기반, 결정 기반, 조건 기반 등 | | 경험 기반 테스트 | - 유사 소프트웨어나 기술 등에 대한 테스터의 경험을 기반으로 수행
- 명세가 불충분하거나 테스트 시간에 제약이 있는 경우
- 종류: 에러 추정, 체크 리스트, 탐색적 테스팅 |
- | 명세 기반 테스트 | - 사용자의 요구사항에 대한 명세를 빠짐없이 테스트 케이스로 만들어 구현하고 있는지 확인하는 테스트
- 시각에 따른 테스트
- 명세서대로 완성됐는지 테스트 | | --- | --- | | 확인 테스트 | - 사용자의 시각에서 생산된 제품의 결과를 테스트
- 요구한대로 제품이 완성됐는지, 정상적으로 동작하는지 테스트 |
- | 검증 테스트 | - 개발자의 시각에서 제품의 생산 과정을 테스트
- 목적에 따른 테스트회복 테스트 실패하도록 한 후 올바르게 복구되는지 확인
안전 테스트 불법적인 침입으로부터 시스템을 보호할 수 있는지 강도 테스트 과도한 정보량이나 빈도 등을 부과하여 과부하 시에도 정상적으로 실행되는지 성능 테스트 실시간 성능이나 전체적인 효율성을 진단, 응답 시간, 처리량 등을 테스트 구조 테스트 논리적인 경로, 소스 코드의 복잡도 등을 평가 회귀 테스트 변경 또는 수정된 코드에 새로운 결함이 없음을 확인하는 테스트 병행 테스트 변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력하여 결과를 비교하는 테스트
개발 단계에 따른 애플리케이션 테스트
- 개발 단계에 따른 애플리케이션 테스트
- 개발 단계에 따라 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트로 분류됨
- 애플리케이션 테스트와 소프트웨어 개발 단계를 연결하여 표현한 것을 V-모델이라고 함
- 단위 테스트
- 코딩 직후 모듈이나 컴포넌트에 초점을 맞춰 테스트함
- 기능성 테스트를 최우선으로 수행
- 구조 기반 테스트와 명세 기반 테스트로 나뉘지만 주로 구조 기반 테스트를 시행함
- 통합 테스트
- 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트를 의미
- 모듈 간 또는 통합된 컴포넌트 간의 상호 작용 오류를 검사함
- 시스템 테스트
- 완벽하게 수행되는가를 점검
- 기능정 요구사항과 비기능적 요구사항으로 구분하여 각각을 만족하는지 테스트
- 인수 테스트
- 사용자의 요구사항을 충족하는지에 중점을 둠
- 사용자가 직접 테스트함
사용자 인수 테스트 시스템 사용의 적절성 여부를 확인함 운영상의 인수 테스트 - 시스템 관리자가 시스템 인수 시 수행하는 테스트 기법 - 백업/복원 시스템, 재난 복구, 사용자 관리, 정기 점검 | | 계약 인수 테스트 | 계약상의 인수/검수 조건을 준수하는지 여부 | | 규정 인수 테스트 | 정부 지침, 법규, 규정에 맞게 개발 되었는지 여부 | | 알파 테스트 | 사용자가 개발자 앞에서 행하는 테스트 기법 | | 베타 테스트 | 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법 |
통합 테스트
- 통합 테스트
- 단위 테스트가 끝난 모듈을 통합하는 과정에서 발생하는 오류 및 결함을 찾는 테스트 기법
- 종류
- 종류: 빅뱅 통합 테스트 방식 | | --- | --- | | 점진적 통합 방식 | - 모듈 단위로 단계적으로 통합하면서 테스트 하는 방법
- 종류: 하향식 통합 테스트, 상향식 통합 테스트, 혼합식 통합 테스트 |
- | 비점진적 통합 방식 | - 통합하는 절차 없이 모든 모듈이 미리 결합되어 있는 프로그램 전체를 테스트 하는 방법
- 하향식 통합 테스트
- 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트
- 깊이 우선 통합법이나 넓이 우선 통합법을 사용함
- 하향식 통합 테스트 절차
- 제어 모듈은 작성된 프로그램을 사용, 주요 제어 모듈의 종속 모듈들은 스텁으로 대체
- 깊이 우선 또는 넓이 우선 등의 통합 방식에 따라 하위 모듈인 스텁들이 한 번에 하나씩 실제 모듈로 교체
- 모듈이 통합할 때 마다 테스트를 실시함
- 새로운 오류가 발생하지 않음을 보증하기 위해 회귀 테스트를 실시
- 상향식 통합 테스트
- 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트
- 상향식 통합 테스트 절차
- 하위 모듈들을 클러스터로 결합
- 상위 모듈에서 데이터 입,출력을 확인하기 위해 더미 모듈인 드라이버를 작성함
- 통합된 클러스터 단위로 테스트
- 테스트 완료 시, 프로그램 구조의 상위로 이동하여 결합하고 드라이버는 실제 모듈로 대체됨
- 혼합식 통합 테스트
- 하위 수준에는 상향식 통합, 상위 수준에서는 하향식 통합을 사용하여 최적의 테스트를 지원
- 샌드위치 식 통합 테스트 방법이라고도 함
- 회귀 테스팅
- 통합 테스트로 인해 변경된 모듈이나 컴포넌트에 새로운 오류가 있는지 확인
- 이미 테스트된 프로그램의 테스팅을 반복
- 수정한 모듈이나 컴포넌트가 다른 부분에 영향을 미치는지, 오류가 생기지 않았는지 새로운 오류가 발생하지 않음을 보증하기 위해 반복 테스트함.
테스트 케이스/ 테스트 시나리오 / 테스트 오라클
- 테스트 케이스
- 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력 값, 실행 조건, 기대 결과 등으로 구성 된 테스트 항목에 대한 명세서
- 오류 방지, 인력 시간, 자원 낭비를 지울 수 있음
- 테스트 시나리오
- 테스트 케이스를 적용하는 순서에 따라 여러 개의 테스트 케이스를 묶은 집합
- 적용하는 구체적인 절차를 명세함
- 구체적인 절차, 사전 조건, 입력 데이터 등이 설정되어 있음
- 테스트 오라클
- 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입하여 비교
- 테스트 케이스에 대한 예상 결과를 계산하거나 확인함
- 테스트 오라클의 특징
- 제한된 검증
- 모든 테스트 케이스에 적용할 수 없음
- 수학적 기법
- 값을 수학적 기법을 이용하여 구할 수 있음
- 자동화 기법
- 대상 프로그램의 실행, 결과 비교, 커버리지 측정 등을 자동화 할 수 있음
- 제한된 검증
- 테스트 오라클의 종류
- 모든 오류를 검출할 수 있음 | | --- | --- | | 샘플링 오라클 | - 특정한 몇몇 테스트 케이스의 입력 값들에 대해서만 기대하는 결과를 제공
- 전수 테스트가 불가능한 경우 사용 | | 추정 오라클 | - 특정 테스트 케이스의 입력값에 대해 기대하는 결과 제공
- 나머지 입력 값들에 대해서는 추정으로 처리하는 오라클 | | 일관성 검사 오라클 | 애플리케이션에 변경이 있을 때, 테스트 케이스의 수행 전과 후의 결과 값이 동일한지를 확인 |
- | 참 오라클 | - 입력 값에 대해 기대하는 결고라르 제공하는 오라클
테스트 자동화 도구
- 테스트 자동화
- 사람이 반복적으로 수행하던 테스트 절차를 스크립트 형태로 구현하는 자동화 도구를 적용함으로써 쉽고 효율적으로 테스트를 수행할 수 있도록 한 것
- 테스트 유형에 따른 테스트 자동화 도구의 종류
- 정적 분석 도구
- 테스트 실행 도구
- 성능 테스트 도구
- 테스트 통제 도구
- 정적 분석 도구
- 프로그램을 실행하지 않고 분석하는 도구
- 테스트 실행 도구
- 스크립트 언어를 사용하여 테스트를 실행하는 도구
- 데이터 주도 접근 방식
- 데이터를 저장하고 이를 읽어 실행하는 방식
- 키워드 주도 접근 방식
- 수행할 동작을 나타내는 키워드와 테스트 데이터를 저장하여 실행하는 방식
- 성능 테스트 도구
- 가상의 사용자를 만들어 성능의 목표 달성 여부를 확인하는 도구
- 테스트 통제 도구
- 테스트 계획 및 관리, 테스트 수행, 결함 관리 등을 수행하는 도구
- 종류
- 형상 관리 도구
- 결함 추적 / 관리 도구
- 테스트 하네스 도구
- 테스트가 실행될 환경을 시뮬레이션하여 컴포넌트 및 모듈이 정상적으로 테스트되도록 하는 도구
- 테스트 하네스
- 컴포넌트 및 모듈을 테스트하는 환경의 일부분으로, 테스트를 지원하기 위해 생성된 코드와 데이터
- 테스트 하네스의 구성 요소테스트 드라이버
테스트 스텁 테스트 슈트 컴포넌트나 모듈, 시스템에 사용되는 테스트 케이스의 집합 테스트 케이스 테스트 스크립트 테스트 실행절차에 대한 명세서 목 오브젝트 조건부로 입력해 두면, 그 상황에 맞는 예정된 행위를 수행 - 테스트 수행 단계별 테스트 자동화 도구테스트 단계 자동화도구 설명
테스트 계획 요구사항 관리 요구사항 정의 및 변경 사항 등을 관리하는 도구 테스트 분석 / 설계 테스트 케이스 생성 테스트 데이터 및 테스트 케이스 작성을 지원 테스트 수행 테스트 자동화 자동화를 도와주는 도구 정적 분석 코딩 표준, 런타임 오류 검증 동적 분석 시뮬레이션을 통해 오류를 검출 성능 테스트 가상의 사용자를 생성하여 처리 능력을 측정 모니터링 CPU, Memory 등과 같은 시스템 자원의 상태 확인 및 분석을 지원 테스트 관리 커버리지 분석 충분성 여부 검증 형상 관리 도구 및 데이터 관리 결함 추적/ 관리 발생한 결함 추적 및 관리 활동을 지원
결함 관리
- 결함
- 소프트웨어가 개발자가 설계한 것과 다르게 동작하거나 다른 결과가 발생되는 것
- 결함 관리 프로세스
- 결함 상태 추적
- 발견된 결함은 지속적ㄱ으로 상태 변화를 추적하고 관리해야ㅏㅎㅁ
정보시스템 구축관리
개별 환경 구축
- 개발 환경 구축
- 개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축
- 응용 소프트웨어가 운영될 환경과 유사한 구조로 구축
- 하드웨어와 소프트웨어를 선정함
- 성능, 편의성, 라이선스 등의 비즈니스 환경에 적합한 제품들을 최종적으로 결정하여 구축함
- 하드웨어 환경
- 사용자와의 인터페이스 역할을 하는 클라이언트, 서비스를 제공하는 서버로 구성
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/fdcae290-8799-49e3-8f8e-d909a5ecd7c2/스크린샷_2024-10-12_오후_10.31.17.png
- 클라이언트의 종류
- 개인용 컴퓨터(PC), 스마트폰 등
- 서버의 종류종류 특징
웹 서버 - 직접 요청을 받아 처리함 - 정적 파일들을 제공함 | | 웹 애플리케이션 서버(WAS) | 동적 서비스를 제공하거나 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행함 | | 데이터베이스 서버 | 데이터베이스와 이를 관리하는 DBMS를 운영함 | | 파일 서버 | 데이터베이스에 저장하기에는 비효율적이거나, 서비스 제공을 목적으로 유지하는 파일들을 저장함 |
- 소프트웨어 환경
- 클라이언트와 서버 운영을 위한 시스템 소프트웨어와 개발에 사용되는 개발 소프트웨어로 구성됨
- 시스템 소프트웨어의 종류
- 운영체제, 웹 서버 및 WAS 운용을 위한 서버 프로그램, DBMS
- 개발 소프트웨어의 종류종류 특징
요구사항 관리 도구 요구사항의 수집과 분석, 추적 등을 편리하게 도와주는 소프트웨어 설계/모델링 도구 UML을 지원하며, 전 과정에서 설계 및 모델링을 도와주는 소프트웨어 구현 도구 개발 언어를 통해 실제 구현을 지원하는 소프트웨어 빌드 도구 소스의 빌드 및 배포, 라이브러리 관리를 지원하는 소프트웨어 테스트 도구 모듈들이 요구사항에 적합하게 구현되었는지 테스트하는 소프트웨어 형상 관리 도구 버전별로 관리하여 품질 형상을 지원하는 소프트웨어 - 웹 서버의 기능기능 내용
HTTP/HTTPS 지원 브라우저로부터 요청을 받아 응답할 때 사용되는 프로토콜 통신 기록 처리한 요청들을 로그 파일로 기록하는 기능 정적 파일 관리 HTML, CSS, 이미지 등의 정적 파일들을 저장하고 관리 대역폭 제한 트래픽의 포화를 방지하기 위해 응답 속도 제한 가상 호스팅 여러 개의 도메인 이름을 연결하는 기능 인증 합법적인 사용자인지를 확인 - 개발 언어의 선정 기준기준 내용
적정성 개발하려는 소프트웨어의 목적에 적합해야 함 효율성 코드의 작성 및 구현이 효율적이어야 함 이식성 다양한 시스템 및 환경에 적용이 가능해야 함 친밀성 개발 언어에 대한 개발자들의 이해도와 활용도가 높아야 함 범용성 다른 개발 사례가 존재하고 여러 분야에서 활용되고 있어야 함
소프트웨어 아키텍처
- 소프트웨어 아키텍처
- 소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체
- 분할 방법과 분할된 모듈에 할당될 기능, 모듈 간의 인터페이스 등을 결정함
- 소프트웨어 아키텍처 설계의 기본 원리, 모듈화, 추상화, 단계적 분, 정보은닉이 있음
- 모듈화
- 소프트웨어의 성능 향상, 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 시스템의 기능들을 모듈 단위로 나누는 것을 의미함
- 모듈의 크기를 너무 작게 나누면 개수가 많아져 모듈 간의 통합 비용이 많이 듬
- 모듈의 크기를 너무 크게 나누면 개수가 적어 통합 비용은 적게 들지만 모듈 하나의 개발 비용이 많이 듬
- 추상화
- 전체적이고 포괄적인 개념을 설계한 후 구체화시켜 나가는 것
- 완전한 시스템을 구축하기 전에, 유사한 모델을 만들어서 여러 가지 요인들을 테스트 할 수 있음
- 추상화의 유형과정 추상화 전반적인 흐름만 파악
데이터 추상화 데이터 구조를 대표할 수 있는 표현으로 대체하는 방법 제어 추상화 이벤트 발생의 대표할 수 있는 표현
- 단계적 분해
- 상위의 중요 개념으로부터 하위의 개념으로 구체화 시키는 분할 기법
- 하향식 설계 전략
- 포괄적인 기능에서부터 점차적으로 구체화
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/50d04f5a-7fcf-4c1e-b9e5-493ff044b48d/스크린샷_2024-10-12_오후_11.25.52.png
- 정보 은닉
- 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법
- 모듈을 독립적으로 수행할 수 있음
- 하나의 모듈이 변경되더라도 다른 모듈에 영향을 주지 않으므로 수정, 시험, 유지보수가 용이함
- 상위 설계와 하위 설계
- 소프트웨어 개발의 설계 단계는 크게 상위 설계와 하위 설계로 구분할 수 있음
별칭 아키텍쳐 설계, 예비 설계 모듈 설계, 상세 설계 설계 대상 전체적인 구조 내부 구조 및 행위 세부 목록 구조, DB, 인터페이스 컴포넌트, 자료구조, 알고리즘 - 소프트웨어 아키텍처의 품질 속성
- 이해관계자들이 요구하는 수준의 품질을 유지 및 보장할 수 있게 설계되었는지 확인하기 위해 품질 평가 요소들을 구체화 시켜 놓은 것
- 품질 평가 요소의 종류시스템 측면 성증, 보안, 가용성, 기능성, 사용성, 변경 용이성, 확장성 등
비즈니스 측면 시장 적시성, 비용과 혜택, 예상 시스템 수명, 목표 시장, 공개 일정 등 아키텍처 측면 개념적 무결성, 정확성, 완결성, 구축 가능성, 변경성, 시험성 등
- 소프트웨어 아키텍쳐의 설계 과정
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/f58f2955-b009-4fbf-b275-e8b26a59fe93/스크린샷_2024-10-12_오후_11.30.37.png
- 협약(Contract)에 의한 설계
- 컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것
- 정확한 인터페이스를 명세함
- 명세에 포함될 조건조건 내용
선행 조건 오퍼레이션이 호출되기 전에 참이 되어야 할 조건 결과 조건 오퍼레이션이 수행된 후 만족되어야 할 조건 불변 조건 오퍼레이션이 실행되는 동안 항상 만족되어야 할 조건
아키텍처 패턴
- 아키택처 패턴
- 아키택처를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 주요 아키텍처 패턴의 종류
- 레이어 패턴
- 클라이언트-서버 패턴
- 파이프-필터 패턴
- 모델-뷰-컨트롤러 패턴
- 레이어 패턴
- 시스템을 계층으로 구분하여 구성하는 패턴
- 서로 마주보는 두 개의 계층 사이에서만 사용작용이 이루어짐
- 대표적으로 OSI참조 모델이 있음
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ab3f22c4-63c5-40e2-893d-cb7558a31719/스크린샷_2024-10-12_오후_11.50.54.png
- 클라이언트-서버 패턴
- 파이프-필터 패턴
- 데이터 스트림 절차를 필터로 캡슐화하여 파이프를 통해 전송하는 패턴
- 앞 시스템의 처리 결과물을 처리한 후 다시 파이프를 통해 다음 시스템으로 넘겨주는 패턴을 반복함
- 데이터 변환, 버퍼링, 동기화 등에 주로 사용됨
- 대표적으로 UNIX의 쉘이 있음
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/c0f0c61e-109f-43dd-aa8f-917de3ad3a2f/스크린샷_2024-10-12_오후_11.53.22.png
- 모델-뷰-컨트롤러 패턴
- 서브시스템을 모델, 뷰, 컨트롤러로 구조화하는 패턴
- 사용자의 요청을 받으면 핵심 기능과 데이터를 보관하는 모델을 이용하여 뷰에 정보를 출력하는 구조임
- 여러 개의 뷰를 만들 수 있음
- 한 개의 모델에 대해 여러 개의 뷰를 필요로 하는 대화형 애플리케이션에 적합함
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/797097ff-90b3-430f-8eed-7737a9a4de38/스크린샷_2024-10-12_오후_11.55.48.png
- 기타 패턴종류 내용
마스터-슬레이브 패턴 슬레이브 컴포넌트에서 처리된 결과물을 다시 돌려받는 방식으로 작업 예) 장애 허용 시스템, 병렬 컴퓨팅 시스템 브로커 패턴 사용자가 원하는 서비스와 특성을 브로커 컴포넌트에 요청하면 요청에 맞는 컴포넌트와 사용자를 연결해주는 패턴 예) 분산 환경 시스템 피어-투-피어 패턴 피어라 불리는 하나의 컴포넌트가 클라이언트가 될 수도, 서버가 될 수도 있는 패턴 예) 파일 공유 네트워크 이벤트-버스 패턴 이벤트 메시지를 발행(Publish)하면, 해당 채널을 구독(Subscribe)한 리스너들이 메시지를 받아 이벤트를 처리 예) 알림 서비스 블랙보드 패턴 모든 컴포넌트들이 공유 데이터 저장소와 블랙보드 컴포넌트에 접근이 가능한 패턴 예) 음성 인식, 차량 식별, 신호 해석 인터프리터 패턴 프로그램 코드의 각 라인을 수행하는 방법을 지정하고, 기호마다 클래스를 갖도록 구성된 패턴 예) 번역기, 컴파일러, 인터프리터
객체지향
- 객체지향
- 각 요소들을 객체로 만든 후, 객체들을 조립해서 소프트웨어를 개발하는 기법
- 재사용 및 확장이 용이
- 객체지향의 구성 요소
- 객체
- 클래스
- 메시지
- 객체지향의 특징
- 캡슐화
- 상속
- 다형성
- 연관성
- 객체
- 데이터와 함수를 묶어 놓은 소프트웨어 모듈
- 데이터
- 객체가 가지고 있는 정보로, 속성이나 상태, 분류 등
- 함수
- 객체가 수행하는 기능으로 객체가 갖는 데이터를 처리하는 알고리즘
- 객체의 상태를 참조하거나 변경하는 수단
- 데이터
- 데이터와 함수를 묶어 놓은 소프트웨어 모듈
- 클래스
- 공통된 속성과 연산을 갖는 객체의 집합
- 속성과 연산을 정의하고 있는 틀
- 클래스에 속한 각각의 객체를 인스턴스 라고 함
- 메시지
- 객체들 간의 상호작용에 사용되는 수단으로, 객체의 동작이나 연산을 일으키는 외부의 요구사항
- 메시지를 받은 객체는 예상된 결과를 반환함
- 캡슐화
- 외부에서의 접근을 제한하기 위해 인터페이스를 제외한 세부 내용을 은닉하는 것
- 외부 모듈의 변경으로 인한 파급효과가 적다
- 상대 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 단순해지고, 객체 간의 결합도가 낮아짐
- 상속
- 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
- 하위 클래스는 물려받은 속성과 연산을 다시 정의하지 않아도 즉시 자신의 속성으로 사용할 수 있음
- 하위 클래스는 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용할 수 있음
- 다형성
- 하나의 메시지에 대해 각각의 객체가 고유한 방법으로 응답할 수 있는 능력
- 예) ‘+’ 연산자의 경우 숫자 클래스에서는 덧셈, 문자 클래스에서는 문자열의 연결 기능으로 사용됨
- 연관성
객체지향 분석 및 설계
- 객체지향 분석의 방법론
- 사용자의 요구사항과 객체, 속성, 연산, 관계 등을 정의하여 모델링하는 작업
- 업무를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석함
- 클래스를 식별하는 것이 주요 목적임
- 객체지향 분석의 방법론종류 내용
Rumbaugh(럼바우) 방법 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어서 수행함 Booch(부치) 방법 - 미시적 개발 프로세스와 거시적 개발 프로세스를 모두 사용함 - 클래스와 객체들을 분석 및 식별하고 속성과 연산을 정의 | | Jacobson 방법 | 유스케이스(Use Case)를 강조하여 사용함 | | Coad와 Yourdon 방법 | - E-R 다이어그램을 사용하여 객체의 행위를 모델링함
- 객체 식별, 구조 식별, 주제 정의, 속성과 인스턴스 연결 정의, 연산과 메시지 연결 정의 등의 과정으로 구성함 | | Wirfs-Brock 방법 | 분석과 설계 간의 구분이 없고 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행함 |
- 럼바우 분석 기법
- 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법
- 객체 모델링 기법
- 분석 활동은 객체 모델링 → 동적 모델링 → 기능 모델링 순
동적 모델링 상태 다이어그램을 이용하여 시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현하는 모델링 기능 모델링 자료 흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링 - 객체지향 설계 원칙
- 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜져야 할 원칙
- SRP, OCP, LSP, ISP, DIP의 다섯 가지 원칙의 앞 글자를 따 SOLID 원칙이라고 부름
- 객체지향 설계 원칙의 종류종류 내용
단일 책임 원칙(SRP) 객체는 단 하나의 책임만 가져야 한다는 원칙 개방-폐쇄 원칙(OCP) 기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계 리스코프 치환 원칙(LSP) 자식 클래스는 부모 클래스의 기능을 수행할 수 있어야 한다. 인터페이스 분리 원칙(ISP) 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다는 원칙 의존 역전 원칙(DIP) 의존 관계 성립 시 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 원칙
모듈
- 모듈
- 모듈화를 통해 분리된 시스템의 각 기능으로, 서브루틴, 서브시스템, 소프트웨어 내의 프로그램, 작업 단위 등을 의미함
- 소프트웨어를 구성하는 각 모듈의 기능이 서로 독립됨을 의미함
- 모듈의 독립성은 결합도와 응집도에 의해 측정됨
- 결합도
- 모듈간의 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계
- 결합도가 약할수록 품질이 높고, 강할수록 품질이 낮음
- 결합도의 종류와 강도
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/8407a7b0-ece0-40c5-b0c9-7f346e809eb7/스크린샷_2024-10-17_오전_12.00.49.png
- 결합도의 종류종류 내용
내용 결합도 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때의 결합도 공통(공유) 결합도 공유되는 공통 데이터 영역을 여러 모듈이 사용할 떄의 결합도 외부 결합도 어떤 모듈에서 선언한 데이터를 외부의 다른 모듈에서 참조할 때의 결합도 제어 결합도 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어 신호나 제어 요소를 전달하는 결합도 - 결합도의 종류종류 내용
스탬프(검인) 결합도 배열이나 레코드 등의 자료 구조로 전달될 때의 결합도 자료 결합도 모듈 간의 인터페이스가 조료 요소로만 구성될 떄의 결합도 - 응집도
- 모듈의 내부 요소들이 서로 관련되어 있는 정도
- 응집도가 강할수록 품질이 높고, 약할수록 품질이 낮음
- 응집도의 종류와 강도
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/74b04a60-4dbc-409d-954b-f398e896efd6/스크린샷_2024-10-17_오전_4.04.12.png
- 응집도의 종류종류 내용
기능적 응집도 모듈 내부의 모든 기능 요소들이 단일 문제와 연관 순차적 응집도 하나의 활동으로부터 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우 교환적 응집도 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 절차적 응집도 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 순차적으로 수행할 경우 시간적 응집도 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성 논리적 응집도 유사한 성격을 갖거나 특정 형태로 분류 우연적 응집도 각 구성 요소들이 서로 관련 없는 요소로만 구성 - 팬인 / 팬아웃
- 팬인은 제어하는 모듈의 수
- 팬아웃은 제어되는 모듈의 수
- 팬인이 높다는 것은 재사용 측면에서 설계가 잘 되어있다고 볼 수 있음
- 팬인이 높은 경우 단일 장애점이 발생할 수 있으므로 중점적인 관리 및 테스트가 필요
- ex) 다음의 시스템 구조도에서 각 모듈의 팬인과 팬아웃을 구하시오.
- 팬인은 빨간색, 팬아웃은 파란색
- N-S차트(Nassi-Schneiderman Chart)
- 논리의 기술에 중점을 두고 도형을 이용해 표현하는 방법
- GOTO나 화살표 이용X
- 연속, 선택 및 다중 선택, 반복의 3가지 제어 논리 구조로 표현
- 시각적으로 명확히 식별하는 데 적합함
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/2e6572e7-1281-4a2c-9941-aed494c5facb/스크린샷_2024-10-17_오전_4.09.53.png
단위 모듈
- 단위 모듈
- 소프트웨어 구현에 필요한 여러 동작 중 한 가지 동작을 수행하는 기능을 모듈로 구현한 것
- 단위 모듈로 구현되는 하나의 기능을 단위 기능
- 독립적인 컴파일이 가능하며, 다른 모듈에 호출되거나 삽입되기도 함
- 단위 모듈의 구현 과정
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/aff3c21d-4b1c-40b9-b055-66c4e27e9528/스크린샷_2024-10-17_오전_4.11.37.png
- IPC(Inter-Process Communication)
- 모듈 간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합
- 복수의 프로세스를 수행, 프로세스 간 통신까지 구현
- IPC의 대표 메소드 5가지
Shared Memory 공유 가능한 메모를 구성 Socket 네트워크 소켓을 이용 Semaphores 공유 자원에 대한 접근 제어를 통해 통신 Pipes&named Pipes - Pipe라고 불리는 선입선출 형태 - Pipe는 하나의 프로세스가 이용 중이라면 다른 프로세스는 접근할 수 없음 | | Message Queueing | 메시지가 발생하면 이를 전달하는 방식으로 통신하는 방식 |
- 단위 모듈 테스트
- 모듈이 정해진 기능을 정확히 수행하는 지 검증하는 것
- 단위 테스트라고도 불림
- 시스템 수준의 오류는 잡아낼 수 없음
- 테스트 케이스
- 소프트웨어가 사용자의 요구사항을 정확하게 준수 했는지를 확인하기 위한 테스트 항목에 대한 명세서
- 테스트 케이스를 이용하지 않은 테스트는 검증이 누락되거나 불필요한 검증의 반복으로 인력과 시간을 낭비 할 수 있음
- ISO/IEC/IEEE 29119-3 표준에 따른 테스트 케이스의 구성 요소
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/5cea3691-6e43-4415-93fb-4f2df80b465d/스크린샷_2024-10-17_오전_4.16.03.png
공통 모듈
- 공통 모듈
- 여러 프로그램에서 공통으로 사용할 수 있는 모듈
- 해당 기능을 명확히 이해할 수 있도록 명세 기법을 준수해야 함
- 공통 모듈 명세 기법의 종류명세 기법 내용
정확성 해당 기능이 필요하다는 것을 알 수 있도록 명확성 이해할 때 중의적으로 해석되지 않도록 작성 완전성 필요한 모든 것을 기술 일관성 상호 충돌이 발생하지 않도록 작성 추적성 요구사항의 출처, 관련 시스템 등의 관계를 파악 - 재사용
- 이미 개발된 기능들을 새로운 시스템이나 기능 개발에 사용하기 적합하도록 최적화하는 작업
- 필요한 비용과 시간을 절약 가능
- 사용법을 공개해야함
- 재사용 규모에 따른 분류함수와 객체 클래스나 메소드 단위
컴포넌트 컴포넌트 자체에 대한 수정 없이 인터페이스를 통해 통신 애플리케이션 공통된 기능들을 제공하는 애플리케이션을 공유
- 효과적인 모듈 설계 방안
- 결합도를 줄이고 응집도를 높여서 모듈의 독립성과 재사용성을 높임
- 복잡도와 중복성을 줄이고 일관성을 유지시킴
- 모듈의 기능이 예측이 가능해야 하며 지나치게 제한적이어서는 안 됨
- 모듈 크기는 시스템의 전반적인 기능과 구조를 이해하기 쉬운 크기로 분해함
- 효과적인 제어를 위해 모듈 간의 계층적 관계를 정의하는 자료가 제시
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/64a6d882-a2c2-40c4-ac20-68fcf342a85b/스크린샷_2024-10-17_오전_6.09.51.png
코드
- 코드
- 자료의 분류, 조합, 집계, 추출을 용이하게 하기 위해 사용하는 기호
- 코드의 주요 기능식별기능 데이터 간의 성격에 따라 구분
분류기능 특정 기준이나 동일한 유형에 해당하는 데이터를 그룹화 배열기능 의미를 부여하여 나열할 수 있음 표준화기능 기준에 맞추어 표현 간소화 기능 복잡한 데이터를 간소화 - 코드의 종류종류 내용
순차코드 발생 순서, 크기 순서 등 일정 기준에 따라 일련번호 부여 예) 1, 2, 3, 4 … 블록 코드 공통성이 있는 것끼리 블록으로 구분하고 일련번호 부여 예) 1001~1100: 총무부, 1101~1200: 영업부 10진 코드 0~9까지 10진 분할하고 다시 그 각각에 대하여 10진 분할하는 방법을 필요한 만큼 반복하는 방법 예) 1000: 공학, 1100: 소프트웨어 공학 1110: 소프트웨어 설계 그룹 분류 코드 일정 기준에 따라 대분류, 중분류, 소분류 등으로 구분하여 일련번호 부여 예) 1-01-001: 본사-총무부-인사계, 2-01-001: 지사-총무부-인사계 연상 코드 명칭이나 약호와 관계있는 숫자와 문자, 기호 이용 예) TV-40: 40인치 TV, L-15-220: 15W 220V의 램프 표의 숫자 코드 성질 즉, 길이, 넓이, 부피, 지름 높이 등의 물리적 수치를 그대로 코드에 적용 예) 120-720-1500: 두께표길이가 1207201500인 강판 합성 코드 하나의 코드로 수행하기 어려운 경우 2개 이상의 코드를 조합하여 만드는 방법 예) 연상 코드 + 순차 코드 KE-711: 대한항공 711기, AC-253: 에어캐나다 253기
디자인 패턴
- 디자인 패턴
- 모듈 간의 관계 및 인터페이스를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 개발 과정 중에 문제가 발생하면 새로 해결책을 구상하는 것보다 문제에 해당하는 디자인 패턴을 참고하여 적용하는 것이 더 효율적임
- GOF의 디자인 패턴은 생성 패턴, 구조 패턴, 행위 패턴으로 구분
- 생성 패턴
- 클래스나 객체의 생성과 참조 과정을 정의하는 패턴
- 추상팩토리
- 구체적인 클래스에 의존하지 않고, 인터페이스를 통해 서로 연관,의존하는 객체들의 그룹으로 생성하여 추상적으로 표현함
- 연관된 서브 클래스를 묶어 한 번에 교체하는 것이 가능함
- ex) 요리 내부의 값을 김치찌개에서 된장찌개로 바꿔도 구체적인 클래스에 의존하지 않았기에 문제가 없는 상황
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/25bb3e1e-5930-42f6-bd97-2910690712ae/스크린샷_2024-10-17_오전_6.19.58.png
- 팩토리 메소드
- 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화한 패턴
- 상위 클래스에서 인터페이스만 정의하고 실제 생성은 서브 클래스가 담당
- ex) 구체적인 선언은 하위 요리 클래스 내부에서 하는 방식
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/462fd286-7cb8-4e76-a338-7d6ebe9a1312/스크린샷_2024-10-17_오전_6.23.13.png
- 빌더
- 작게 분리된 인스턴스를 건축 하듯이 조합하여 객체를 생성함
- 객체의 생성과정과 표현방법을 분리하고 있어, 동일한 객체 생성에서도 서로 다른 결과를 만들어 낼 수 있음
- 프로토타입
- 원본 객체를 복제하는 방법으로 객체를 생성하는 방법
- 싱글톤
- 클래스 내에서 인스턴스가 하나뿐임을 보장
- 하나의 객체를 생성하면 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수 없음.
- 구조 패턴
- 복잡한 시스템을 개발하기 쉽도록 클래스나 객체들을 조합하여 더 큰 구조로 만드는 패턴
- 어댑터
- 다른 클래스가 이용할 수 있도록 변환해주는 패턴
- 인터페이스가 일치하지 않을 때 이용함
- 브릿지
- 구현부에서 추상층을 분리하여, 서로가 독립적으로 확장할 수 있도록 구성
- 기능과 구현을 두 개의 별도 클래스로 구현함
- 컴포지트
- 복합 객체와 단일 객체를 구분 없이 다루고자 할 때 사용하는 패턴
- 객체들을 트리 구조로 구성하여, 복합 객체 안에 복합 객체가 포함되는 구조
- 데코레이터
- 객체 간의 결합을 통해 능동적으로 기능들을 확장
- 임의의 객체에 부가적인 기능을 추가하기 위해 다른 객체들을 덧붙이는 방식으로 구현
- 파싸드
- 서브 클래스들을 피해 인터페이스를 구성함으로써 서브 클래스들의 기능을 간편하게 사용할 수 있는 패턴
- 서브 클래스들 사이의 통합 인터페이스를 제공하는 Wrapper 객체가 필요함
- 플라이웨이트
- 매번 생성하는 것이 아니고 가능한 한 공유해서 사용
- 다수의 유사 객체를 생성하거나 조작할 때 유용
- 프록시
- 네트워크 연결, 메모리의 대용량 객체로의 접근
- 접근이 어려운 객체와 객체 사이에서 인터페이스 역할 수행
- 행위 패턴
- 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴
- 책임 연쇄
- 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴
- 각 객체들이 고리로 묶여 있어 요청이 해결될 때 까지 고리를 따라 책임이 넘어감
- 커맨드
- 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 저장하거나 로그에 남기는 패턴
- 각종 명령어들을 추상클래스와 구체 클래스로 분리
- 인터프리터
- 언어의 문법 표현을 정의하는 패턴
- SQL이나 통신 프로토콜 같은 것을 개발할 때 사용
- 반복자(Iterator)
- 접근이 잦은 객체에 대해 동일한 인터페이스 사용
- 내부 표현 방법의 노출 없이 순차적인 접근 간으
- 중재자
- 수많은 객체들 간의 복잡한 상호작용을 캡슐화 하여 객체로 정의
- 의존성을 줄여 결합도를 감소
- 메멘토
- 특정 시점에서의 객체 내부 상태를 객체화함으로 써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공
- [Ctrl] + [Z]와 같은 되돌리기 기능을 개발할 때 주로 이용함
- 옵저버
- 한 객체의 상태가 변화하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태를 전달하는 패턴
- 상태
- 객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용
- 객체 상태를 캡슐화하고 참조하는 방식으로 처리
- 전략
- 동일한 계열의 알고리즘들을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의하는 패턴
- 독립적으로 원하는 알고리즘을 선택하여 사용할 수 있으며, 클라이언트에 영향 없이 알고리즘의 변경이 가능함
- 템플릿 메소드
- 상위 클래스에서 골격을 정의하고, 세부 처리를 구체화하는 구조의 패턴
- 유사한 서브 클래스를 묶어 상위 클래스에서 정의함으로써 코드의 양을 줄이고 유지보수를 용이하게 해줌
- 팩토리 메소드랑 유사한 개념
- 방문자
- 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성
- 처리 기능은 각 클래스를 방문하여 수행함
개발 지원 도구
- 통합 개발 환경(IDE)
- 개발에 필요한 환경, 편집기, 컴파일러, 디버거 등의 다양한 툴을 하나의 인터페이스로 통합하여 제공하는 환경
- 통합 개발 환경 도구의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/75d3e0ec-ebbb-4cf8-a15d-87081f469a8c/스크린샷_2024-10-17_오전_6.36.36.png
- 빌드 도구
- 소스 코드 파일들을 컴퓨터에서 실행할 수 있는 제품 소프트웨어로 변환하는 과정 또는 결과물
- 빌드 도구는 전처리, 컴파일 등의 작업을 수행함
- 대표적인 빌드 도구
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/9ead9c7d-9b55-4491-99e5-45eab4bb2dfc/스크린샷_2024-10-17_오전_6.38.07.png
- 기타 협업 도구
- 개발에 참여하는 사람들이 서로 다른 작업 환경에서 원활하게 프로젝트를 수행할 수 있도록 도와주는 도구
서버 개발
- 서버 개발
- 웹 애플리케이션의 로직을 구현할 서버 프로그램을 제작하여 웹 어플리케이션 서버(WAS)에 탑재하는 것
- 프로그래밍 언어는 Java, Js, Python 등
- 서버 개발 프레임워크
- 서버 프로그램 개발 시 다양한 네트워크 설정, 요청 및 응답 처리, 아키텍처 모델 구현 등을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어
- 대부분 MVC 패턴 기반
- 서버 개발 프레임워크의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ab47a184-5820-48a6-a1dc-825762eb055b/스크린샷_2024-10-17_오전_6.40.49.png
- 서버 개발 과정
- DTO/VO, SQL, DAO, Service, Controller를 각각 구현하는 과정
- 순서는 임의로 변경 가능
- MVC 접근법!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/88a56a82-f952-457f-8a0b-33efc75524ba/스크린샷_2024-10-17_오전_6.42.08.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/f856da4b-e749-42d1-a66b-525b79357309/스크린샷_2024-10-17_오전_6.41.51.png
- 구현 과정과정 내용
DTO/VO 구현 - 데이터 교환을 위해 사용할 객체를 만드는 과정 - 송, 수신할 데이터의 자료형에 맞는 변수 및 객체를 생성함 | | SQL 구현 | - 데이터의 삽입, 변경, 삭제등의 작업을 수행할 SQL문 생성
- 소스 코드 내에 직접 입력, 또는 별도의 XML 파일로 관리 | | DAO 구현 | 데이터베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드를 구현 | | Service 구현 | 요청에 응답하기 위한 로직을 구현 | | Controller 구현 | 적절한 서비스를 호출하여 결과를 반환하는 코드 구현 |
배치 프로그램
- 배치 프로그램
- 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하도록 만든 프로그램을 의미함
- 배치 프로그램의 필수 요소
- 대용량 데이터
- 자동화
- 견고성
- 안정성/신뢰성
- 성능
- 배치 스케줄러
- 일괄 처리 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구
- 특정 업무를 원하는 시간에 처리할 수 있도록 지원
- 잡 스케줄러라고도 불림
- 배치 스케줄러의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/94ee26a1-6696-4351-9301-aff965427e50/스크린샷_2024-10-17_오전_6.54.41.png
- crontab 명령어 작성 방법!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/fbe11882-5246-4e94-9184-ddb656d62b67/스크린샷_2024-10-17_오전_6.56.06.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/590757e4-e084-4755-8a2b-b4e21db29389/스크린샷_2024-10-17_오전_6.55.04.png
시스템 인터페이스 요구사항 분석
- 시스템 인터페이스 요구사항
- 개발할 시스템과 외부 시스템을 연동하는데 필요한 시스템
- 시스템 인터페이스 요구사항 명세서의 구성 요소
- 인터페이스 이름
- 연계 대상 시스템
- 연계 범위 및 내용
- 연계 방식
- 송신 데이터
- 인터페이스 주기
- 기타 고려사항
- 시스템 인터페이스 요구사항 분석
- 요구사항 분류하고 구체적으로 명세한 후 이를 이해관계자에게 전달
- 요구사항 분석 기법을 적절히 이용함
- 요구사항 분해가 필요한 경우 적절한 수준으로 세분화함
- 요구사항 분석 시 누락된 요구사항이나 제한 조건을 추가함
- 상대적 중요도를 평가하여 우선순위를 부여함
- 시스템 인터페이스 요구사항 분석 절차
- 관련 요구사항을 선별하여 별도로 요구사항 목록을 만듦
- 관련된 자료를 준비
- 기능, 비기능 요구사항으로 분리
- 요구사항 명세서에 내용을 추가하거나 수정
- 요구사항 명세서와 요구사항 목록을 이해관계자에게 전달
인터페이스 요구사항 검증
- 인터페이스 요구사항 검증
- 사용자들의 요구사항이 요구사항 명세서에 기술되었는지 검토하고 베이스라인 설정
- 검증 수행 순서
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/715b61d2-dc78-43a7-8169-eaadaf75908f/스크린샷_2024-10-17_오전_7.12.45.png
- 요구사항 검증 방법
- 요구사항 검토
- 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석동료 검토 명세서 작성자가 내용을 직접 설명하고 동려들이 결함을 발견
워크스루 요구사항 명세서를 미리 배포하여 사전 검토 후 검토회를 통해 결함 발견 인스펙션 다른 검토 전문가들이 결함을 발견하는 형태의 검토 방법
- 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석동료 검토 명세서 작성자가 내용을 직접 설명하고 동려들이 결함을 발견
- 프로토 타이핑
- 견본품을 만들어 최종 결과물을 예측
- 테스트 설계
- 요구사항이 현실적으로 테스트 가능한지를 검토
- CASE 도구 활용
- 일관성 분석
- 요구사항 검토
- 요구사항 검증의 주요 항목
- 완전성
- 일관성
- 명확성
- 기능성
- 검증 가능성
- 추적 가능성
- 변경 용이성
송,수신 데이터 식별
- 식별 대상 데이터
- 송 수신 시스템 사이에서 교환되는 데이터로, 규격화된 표준 형식에 따라 전송
- 교환되는 데이터의 종류
- 인터페이스 표준 항목
- 송,수신 데이터 항목
- 공통 코드
- 인터페이스 표준 항목
- 송 수신 시스템을 연계하는데 표준적으로 필요한 데이터
- 시스템 공통부와 거래 공통부시스템 공통부 시스템 간 연동 시 공통 정보
거래 공통부 송 수신되는 데이터를 처리할 때 필요한 정보
- 송, 수신 데이터 항목
- 송 수신 시스템이 업무를 수행하는데 사용하는 데이터
- 데이터 항목과 순서는 인터페이스별로 다름
- 공통 코드
- 시스템들에서 공통적으로 사용하는 코드
- 정보 흐름 식별
- 개발할 시스템과 내 외부 시스템 사이 방향성을 식별
- 송, 수신 데이터 식별
- 개발할 시스템과 연계할 내, 외부 시스템 사이의 정보 흐름과 데이터베이스 산출물을 기반으로 식별
- 인터페이스 표준 항목과 송, 수신 데이터 항목 식별
- 교환 범위를 확인하고 송, 수신 데이터 항목을 식별
- 코드성 데이터 항목 식별
- 코드성 데이터 항목에 대해 코드, 코드명, 코드 설명 등의 코드 정보를 식별
인터페이스 방법 명세화
- 인터페이스 방법 명세화
- 내, 외부 시스템에 연계하여 작동할 때 인터페이스별 송, 수신 방법, 송, 수신 데이터, 오류 식별 및 처리 방안 내용을 문서로 정리
- 송, 수신 방법 명세화
- 각각의 인터페이스에 대해 연계 방식, 통신 및 처리 유형, 발생 주기 등의 송, 수신 방법을 정의하고 명세를 정의
- 송, 수신 데이터 명세화
- 송, 수신 데이터에 대한 명세를 작성
- 오류 식별 및 처리 방안 명세화
- 오류를 식별하고 오류 처리 방안에 대한 명세를 작성
- 인터페이스별로 송, 수신 방법을 명세화하기 위해 필요한 정보
- 시스템 연계 기술
- 인터페이스 통신 유형
- 처리 유형
- 발생 주기
- 시스템 연계 기술
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ea517563-223a-405f-b09e-7ad04e74137d/스크린샷_2024-10-17_오전_7.21.49.png
- 인터페이스 통신 유형유형 내용
단방향 요청만 하고 응답이 없는 형식 동기 요청 후 응답이 올 때 까지 대기 비동기 요청 후 다른 작업을 수행하다 응답이 오면 처리 - 인터페이스 처리 유형유형 내용
실시간 방식 요청 내용을 바로 처리 지연 처리 방식 데이터를 매 건 단위로 처리할 경우 비용이 많이 발생할 때 배치 방식 대량의 데이터를 처리할 때 사용 - 인터페이스 발생 주기
- 개발할 시스템과 내,외부 시스템 간 송, 수신 데이터가 전송되어 인터페이스가 사용되는 주기를 의미
미들웨어 솔루션
- 미들웨어
- 운영체제와 응용 프로그램, 서버와 클라이언트 사이에서 다양한 서비스를 제공하는 소프트웨어
- 표준화된 인터페이스를 제공함으로써 시스템 간의 데이터 교환에 일관성을 보장함
- 미들웨어의 종류
- DB
- RPC
- MOM
- TP-Monitor
- ORB
- WAS
- DB
- 클라이언트에서 원격의 데이터베이스와 연결하는 미들웨어
- RPC(원격 프로시저 호출)
- 원격 프로시저를 마치 로컬 프로시저처럼 호출하는 미들웨어
- MOM(메시지 지향 미들웨어)
- 비동기형 메시지를 전달하는 미들웨어
- 이기종 분산 데이터 시스템의 데이터 동기를 위해 많이 사용됨
- TP-Monitor(트랜잭션 처리 모니터)
- 트랜잭션을 처리 및 감시하는 미들웨어
- 사용자 수가 증가해도 빠른 응답 속도를 유지해야 하는 업무로 사용함
- ORB(객체 요청 브로커)
- 객체 지향 미들웨어
- TP-Monitor의 장점인 트랜잭션 처리와 모니터링 등을 추가로 구현한 제품도 존재
- WAS(웹 애플리케이션 서버)
- 동적인 콘텐츠를 처리하기 위한 미들웨어
- 웹 환경을 구현하기 위한 미들웨어
모듈 연계를 위한 인터페이스 기능 식별
- 모듈 연계
- 내부 모듈과 외부 모듈 또는 내부 모듈 간 데이터의 교환을 위해 관계를 설정
- 대표적인 모듈 연계 방법
- EAI(Enterprise Application Integration)
- ESB(Enterprise Service Bus)
- 웹 서비스
- EAI
- 기업 내 각종 애플리케이션 및 플랫폼 간의 정보 전달, 연계, 통합 등 상호 연동이 가능하게 해주는 솔루션
- EAI의 구축 유형!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/a0aa8dfd-9951-4aea-af16-c87a22f594df/스크린샷_2024-10-17_오전_7.30.46.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/2b0b459f-2766-47a5-90ad-6da23f43bb0a/스크린샷_2024-10-17_오전_7.30.26.png
- ESB
- 애플리케이션 간 연계, 표준 기반의 인터페이스를 제공하는 솔루션
- 애플리케이션 통합측면에서 EAI와 유사하지만 서비스 중심의 통합을 지향
- 범용적으로 사용하기 위해 결합도 약하게 유지
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/e66c3ffa-ac3d-4d18-adf6-cdd66bd2cf14/스크린샷_2024-10-17_오전_7.31.40.png
- 웹 서비스
- 네트워크의 정보를 표준화된 서비스 형태로 만들어 공유하는 기술
- 서비스 지향 아키텍처(SOA) 개념
- 웹 서비스의 구성
- SOAP
- HTTP, HTTPS, SMTP 등을 활용하여 XML기반의 메시지 교환
- UDDI
- WSDL을 등록하여 서비스와 서비스 제공자를 검색하고 접근하는데 사용
- WSDL
- 웹 서비스명, 서비스 제공 위치, 프로토콜 XML 형식으로 구현
- SOAP
- 모듈 간 인터페이스 기능 식별
- 식별된 모듈 간 관련 기능을 검토하여 인터페이스 동작에 필요한 기능을 식별
- 모듈 간 동작하는 기능을 통해 인터페이스 기능을 식별
- 시나리를 통해 내부 모듈과 관련된 인터페이스 기능을 식별
- 실제적으로 필요한 인터페이스 기능을 최종적으로 선별
- 인터페이스 기능 구현을 정의하는데 사용
모듈 간 인터페이스 데이터 표준 확인
- 인터페이스 데이터 표준
- 모듈 간 인터페이스에 사용되는 데이터의 형식을 표준화하는 것
- 기존의 데이터 중에서 공통 영역을 추출하거나 어느 한쪽의 데이터를 변환하여 정의함
- 인터페이스 데이터 표준 확인
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/63553d08-9c94-475c-8a0e-7b4d8d7403ad/스크린샷_2024-10-17_오전_7.35.24.png
인터페이스 기능 구현의 정의
- 인터페이스 기능 구현의 정의
- 인터페이스를 실제로 구현하기 위해 인터페이스 기능에 대한 구현 방법을 기능별로 기술하는 것
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/8f142ab7-d2a2-40d8-aa12-e077b965e368/스크린샷_2024-10-17_오전_7.36.10.png
- 모듈 세부 설계서
- 모듈의 구성 요소와 세부적인 동작 등을 정의한 설계서
- 모듈 세부 설계서 종류컴포넌트 명세서 컴포넌트 개요, 내부 클래스의 동작, 외부와의 통신하는 명세 등을 정의
인터페이스 명세서 인터페이스 클래스의 세부 조건 및 기능 등을 정의
인터페이스 구현
- 인터페이스 구현
- 송, 수신 시스템 간의 데이터 교환 및 처리를 실현해 주는 작업
- 대표적인 인터페이스 구현 방법
- 데이터 통신을 이용한 인터페이스 구현
- 인터페이스 엔티티를 이용한 인터페이스 구현
- AJAX
- JS를 이용하여 클라이언트와 서버 간에 XML 데이터를 주고 받는 비동기 통신 기술
- 웹 페이지 일부 영역만을 업데이트 할 수 있음
- JSON
- 용량이 적은 데이터를 교환하기 위해 데이터 객체를 속성, 값의 쌍 형태로 표현하는 개방형 표준 포맷
- 데이터 통신을 이용한 인터페이스 구현
- ex) JSON을 이용한 인터페이스 구현 순서
- 인터페이스 객체를 생성, 각 시스템 환경에 맞게 선택함
- JSON 이용해 인터페이스 객체를 만듦
- 인터페이스 객체를 AJAX 기술 등을 이용하여 수신 측으로 보냄
- 인터페이스 객체를 수신해 파싱한 후 처리함
- 수신 측에서 송신 측으로 처리 결과를 보냄
- ex) JSON을 이용한 인터페이스 구현 순서
- 인터페이스 엔티티를 이용한 인터페이스 구현
- 인터페이스가 필요한 시스템 사이에 별도의 인터페이스 엔티티를 두어 상호 연계하는 것
- 테이블을 엔티티로 활용함
- ex) 인터페이스 테이블을 이용한 인터페이스 구현 순서
- 인터페이스 이벤트가 발생하면 인터페이스 데이터를 기록
- 송신 측 인터페이스 테이블에 인터페이스 데이터를 전송
- 수신 측 인터페이스 테이블에 입력되면 인터페이스 데이터를 읽음
- 수신 측 인터페이스 테이블에서 읽은 후 사전에 정의된 데이터 트랜잭션 수행
인터페이스 보안
- 인터페이스 보안
- 인터페이스의 보안 취약점 분석 후 적절한 보안 기능을 적용
- 인터페이스 보안 기능 적용
- 인터페이스 아키텍처에 따라 IPSec, SSL, S-HTTP를 사용 | | --- | --- | | 애플리케이션 영역 | 보안 가이드를 참조하여 코드 상의 보안 취약점을 보완 | | 데이터베이스 영역 | - 데이터베이스, 스키마, 엔티티의 접근 권한과 프로시저, 트리거 등 동작 객체의 보안 취약점에 보안 기능 적용
- 개인 정보나 업무상 민감한 데이터의 경우 암호화나 익명화 등 데이터 자체의 보안 방안도 고려 |
- | 네트워크 영역 | - 스니핑 등을 이용한 데이터 탈취 및 변조 위협을 방지하기 위해 네트워크 트래픽에 대한 암호화를 설정
- 데이터 무결성 검사 도구
- 인터페이스 보안 취약점을 분석하는데 사용되는 도구
- 시스템 파일의 변경 유무를 확인하고, 파일이 변경되었을 경우 이를 관리자에게 알려줌
- 종류
- TripWire
- AIDE
- Samhain
- Claymore
- Slipwire
- Fcheck
인터페이스 구현 검증
- 인터페이스 구현 검증
- 인터페이스가 정상적으로 문제없이 작동하는지 확인
- 인터페이스 구현 검증 도구, 감시 도구를 이용
- 인터페이스 구현 검증 도구
- 인터페이스 단위 기능과 시나리오 등을 기반으로 하는 통합 테스트가 필요함
- 테스트 자동화 도구
- 인터페이스 구현 감시 도구
- 동작 상태는 APM(애플리케이션 성능 관리)을 사용하여 감시(Monitoring)할 수 있음
- APM을 통해 종합적인 정보를 조회하고 분석할 수 있음
- 대표적인 APM
- 스카우터
- 제니퍼
- APM(Application Performance Management/Monitoring)
- 애플리케이션의 성능 관리를 위해 다양한 모니터링 기능을 제공하는 도구
- APM은 리소스 방식과 엔드투엔드의 두 가지 유형이 있음
- 리소스 방식
- Nagios, Zabbix, Carti
- 엔드투엔드 방식
- VisualVM, 제니퍼, 스카우터
- 리소스 방식
사용자 인터페이스
- 사용자 인터페이스(UI, User Interface)
- 사용자와 시스템 간의 상호작용이 이뤄지도록 도와주는 장치나 소프트웨어
- 사용자 인터페이스의 세 가지 분야
- 물리적 제어
- 상세적인 표현과 전체적인 구성
- 편리하고 간편하게 사용하도록 하는 기능
- 사용자 인터페이스의 구분구분 내용
CLI 명령과 출력이 텍스트 형태로 이루어지는 인터페이스 GUI 아이콘이나 메뉴를 마우스로 선택하여 작업을 수행하는 그래픽 환경의 인터페이스 NUI 말이나 행동으로 기기를 조작하는 인터페이스 - 사용자 인터페이스의 기본 원칙
- 직관성
- 유효성
- 학습성
- 유연성
UI 설계 도구
- 와이어프레임
- 페이지에 대한 개략적인 레이아웃이나 뼈대를 설계하는 도구
- 페이지의 영역 구분, 콘텐츠, 텍스트 배치 등을 화면 단위로 설계함
- 목업
- 실제 화면과 유사하게 만든 정적인 형태의 모형
- 스토리보드
- 와이어프레임에 콘텐츠에 대한 설명, 페이지 간 이동 흐름 등을 추가한 문서
- 디자이너와 개발자가 최종적으로 참고하는 작업 지침서
- 서비스 구축을 위한 모든 정보가 들어 있음
- 프로토타입
- 와이어프레임이나 스토리보드 등에 인터랙션을 적용함으로써 실제 구현된 것처럼 테스트가 가능한 동적인 형태의 모형
- 종류
- 제작 기간이 짧은 경우, 제작 비용이 적을 경우, 업무 협의가 빠를 경우 | | --- | --- | | 디지털 프로토타입 | - 파워포인트, 아크로뱃, 비지오, 옴니그래플 등과 같은 프로그램을 사용
- 재사용이 필요한 경우, 산출물과 비슷한 효과가 필요한 경우, 숙력된 전문가가 있는 경우 |
- | 페이퍼 프로토타입 | - 아날로그적인 방법
- 유스케이스
- 사용자의 요구사항을 기능 단위로 표현
- 사용자가 원하는 목표를 달성하기 위해 수행할 내용을 기술함
- 사용자의 요구사항을 빠르게 파악함으로써 초기에 시스템의 기능적인 요구를 결정
- 다이어그램 형식으로 묘사됨
품질 요구사항
- 품질 요구사항
- 사용자의 입장에서 얼마나 충족하는가
- 사용자의 요구사항을 충족시킴으로써 확립
- 소프트웨어 품질 관련 표준
- ISO/IEC 9126의 소프트웨어 품질 특성
UI 설계서
- UI 설계서
- 요구사항을 바탕으로 UI 설계를 구체화하여 작성하는 문서
- 기획자, 개발자, 디자이너 등과의 원할한 의사소통을 위함
- UI 흐름 설계
- UI 상세 설계
- 실제 설계 구현을 위해 자세하게 설계
- 반드시 시나리오를 작성해야함
- UI 시나리오 문서
- 사용자 인터페이스의 기능 구조, 대표 화면, 화면 간 인터랙션의 흐름, 다양한 상황에서의 예외 처리 등을 정리한 문서
- 사용자가 최종 목표를 달성하기 위한 방법이 순차적으로 묘사되어 있음
- UI 시나리오 문서의 요건
- 완전성
- 일관성
- 이해성
- 가독성
- 수정 용이성
- 추적 용이성
- UI 상세 설계 순서
HCI / UX / 감성공학
- HCI(Human Computer Interaction or Inteface)
- 사람이 시스템을 보다 편리하고 안전하게 사용할 수 있도록 연구하고 개발하는 학문
- 최종목표는 최적의 UX 만드는 것
- 어떤 제품이 좋은 제품인지, 어떻게 하면 좋은 제품을 만들 수 있는지 연구
- UX(User Experience)
- 사용자가 시스템이나 서비스를 이용하면서 느끼고 생각하게 되는 총체적인 경험
- UI가 사용성, 접근성, 편의성을 중시한다면, UX는 UI를 통해 사용자가 느끼는 만족이나 감정 중시
- 기술을 효용성 측면만 아니라 삶의 질을 향상시키는 하나의 방향으로 봄
- UX의 특징
- 주관성
- 정황성
- 총체성
- 감성공학
- 제품이나 작업환경을 사용자의 감성에 알맞도록 설계 및 제작하는 기술
- 여러 분야의 학문이 공존하는 종합과학임
- 목적은 인간의 삶을 편리하고 안전하며 쾌적하게 만드는 것
- 인간의 감성을 제품 설계에 적용하기 위해 공학적인 접근 방법 사용
애플리케이션 테스트
- 애플리케이션 테스트
- 애플리케이션에 잠재되어 있는 결함을 찾아내는 일련의 행위 또는 절차
- 고객의 요구사항을 만족시키는지 확인하고 소프트웨어가 기능을 정확히 수행하는지 검증함
- 애플리케이션의 기본 원리기본 원리 설명
완벽한 테스트 불가능 잠재적인 결함을 줄일 수 있지만 결함이 없다고 증명할 수 없음 파레토 법칙 20%에 해당하는 코드에서 전체 결함의 80%가 발견된다는 법칙 살충제 패러독스 동일한 테스트 케이스로 동일한 테스트를 반복하면 더 이상 결함이 발견되지 않는 현상 테스팅은 정황 의존 소프트웨어의 특징, 테스트 환경, 테스터의 역량 등 정황에 따라 테스트 결과가 달라질 수 있으므로, 정황에 따라 다르게 테스트를 수행해야함 오류-부재의 궤변 결함을 모두 제거해도, 사용자의 요구사항을 만족시키지 못하면 품질이 높다고 할 수 없다. 테스트와 위험은 반비례 테스트를 할 수록 미래에 발생할 위험을 줄일 수 있음 테스트의 점진적 확대 작은 부분에서 시작하여 점점 확대하며 진행 테스트의 별도 팀 수행 개발자와 관계없는 별도의 팀에서 수행
애플리케이션 테스트의 분류
- 프로그램 실행 여부에 따른 테스트
- 소스 코드에 대한 코딩 표준, 코딩 스타일, 코드 복잡도, 남은 결합 등을 발견하기 위함
- 종류: 워크스루, 인스펙션, 코드 검사 | | --- | --- | | 동적 테스트 | - 프로그램을 실행하여 오류를 찾는 테스트
- 개발의 모든 단계에서 테스트를 수행
- 종류: 블랙박스 테스트, 화이트박스 테스트 |
- | 정적 테스트 | - 프로그램을 실행하지 않고 명세사나 소스 코드를 대상으로 분석
- 테스트 기반에 따른 테스트
- 종류: 동등 분할, 경계 값 분석 등 | | --- | --- | | 구조 기반 테스트 | - 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인
- 종류: 구문 기반, 결정 기반, 조건 기반 등 | | 경험 기반 테스트 | - 유사 소프트웨어나 기술 등에 대한 테스터의 경험을 기반으로 수행
- 명세가 불충분하거나 테스트 시간에 제약이 있는 경우
- 종류: 에러 추정, 체크 리스트, 탐색적 테스팅 |
- | 명세 기반 테스트 | - 사용자의 요구사항에 대한 명세를 빠짐없이 테스트 케이스로 만들어 구현하고 있는지 확인하는 테스트
- 시각에 따른 테스트
- 명세서대로 완성됐는지 테스트 | | --- | --- | | 확인 테스트 | - 사용자의 시각에서 생산된 제품의 결과를 테스트
- 요구한대로 제품이 완성됐는지, 정상적으로 동작하는지 테스트 |
- | 검증 테스트 | - 개발자의 시각에서 제품의 생산 과정을 테스트
- 목적에 따른 테스트회복 테스트 실패하도록 한 후 올바르게 복구되는지 확인
안전 테스트 불법적인 침입으로부터 시스템을 보호할 수 있는지 강도 테스트 과도한 정보량이나 빈도 등을 부과하여 과부하 시에도 정상적으로 실행되는지 성능 테스트 실시간 성능이나 전체적인 효율성을 진단, 응답 시간, 처리량 등을 테스트 구조 테스트 논리적인 경로, 소스 코드의 복잡도 등을 평가 회귀 테스트 변경 또는 수정된 코드에 새로운 결함이 없음을 확인하는 테스트 병행 테스트 변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력하여 결과를 비교하는 테스트
개발 단계에 따른 애플리케이션 테스트
- 개발 단계에 따른 애플리케이션 테스트
- 개발 단계에 따라 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트로 분류됨
- 애플리케이션 테스트와 소프트웨어 개발 단계를 연결하여 표현한 것을 V-모델이라고 함
- 단위 테스트
- 코딩 직후 모듈이나 컴포넌트에 초점을 맞춰 테스트함
- 기능성 테스트를 최우선으로 수행
- 구조 기반 테스트와 명세 기반 테스트로 나뉘지만 주로 구조 기반 테스트를 시행함
- 통합 테스트
- 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트를 의미
- 모듈 간 또는 통합된 컴포넌트 간의 상호 작용 오류를 검사함
- 시스템 테스트
- 완벽하게 수행되는가를 점검
- 기능정 요구사항과 비기능적 요구사항으로 구분하여 각각을 만족하는지 테스트
- 인수 테스트
- 사용자의 요구사항을 충족하는지에 중점을 둠
- 사용자가 직접 테스트함
사용자 인수 테스트 시스템 사용의 적절성 여부를 확인함 운영상의 인수 테스트 - 시스템 관리자가 시스템 인수 시 수행하는 테스트 기법 - 백업/복원 시스템, 재난 복구, 사용자 관리, 정기 점검 | | 계약 인수 테스트 | 계약상의 인수/검수 조건을 준수하는지 여부 | | 규정 인수 테스트 | 정부 지침, 법규, 규정에 맞게 개발 되었는지 여부 | | 알파 테스트 | 사용자가 개발자 앞에서 행하는 테스트 기법 | | 베타 테스트 | 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법 |
통합 테스트
- 통합 테스트
- 단위 테스트가 끝난 모듈을 통합하는 과정에서 발생하는 오류 및 결함을 찾는 테스트 기법
- 종류
- 종류: 빅뱅 통합 테스트 방식 | | --- | --- | | 점진적 통합 방식 | - 모듈 단위로 단계적으로 통합하면서 테스트 하는 방법
- 종류: 하향식 통합 테스트, 상향식 통합 테스트, 혼합식 통합 테스트 |
- | 비점진적 통합 방식 | - 통합하는 절차 없이 모든 모듈이 미리 결합되어 있는 프로그램 전체를 테스트 하는 방법
- 하향식 통합 테스트
- 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트
- 깊이 우선 통합법이나 넓이 우선 통합법을 사용함
- 하향식 통합 테스트 절차
- 제어 모듈은 작성된 프로그램을 사용, 주요 제어 모듈의 종속 모듈들은 스텁으로 대체
- 깊이 우선 또는 넓이 우선 등의 통합 방식에 따라 하위 모듈인 스텁들이 한 번에 하나씩 실제 모듈로 교체
- 모듈이 통합할 때 마다 테스트를 실시함
- 새로운 오류가 발생하지 않음을 보증하기 위해 회귀 테스트를 실시
- 상향식 통합 테스트
- 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트
- 상향식 통합 테스트 절차
- 하위 모듈들을 클러스터로 결합
- 상위 모듈에서 데이터 입,출력을 확인하기 위해 더미 모듈인 드라이버를 작성함
- 통합된 클러스터 단위로 테스트
- 테스트 완료 시, 프로그램 구조의 상위로 이동하여 결합하고 드라이버는 실제 모듈로 대체됨
- 혼합식 통합 테스트
- 하위 수준에는 상향식 통합, 상위 수준에서는 하향식 통합을 사용하여 최적의 테스트를 지원
- 샌드위치 식 통합 테스트 방법이라고도 함
- 회귀 테스팅
- 통합 테스트로 인해 변경된 모듈이나 컴포넌트에 새로운 오류가 있는지 확인
- 이미 테스트된 프로그램의 테스팅을 반복
- 수정한 모듈이나 컴포넌트가 다른 부분에 영향을 미치는지, 오류가 생기지 않았는지 새로운 오류가 발생하지 않음을 보증하기 위해 반복 테스트함.
테스트 케이스/ 테스트 시나리오 / 테스트 오라클
- 테스트 케이스
- 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력 값, 실행 조건, 기대 결과 등으로 구성 된 테스트 항목에 대한 명세서
- 오류 방지, 인력 시간, 자원 낭비를 지울 수 있음
- 테스트 시나리오
- 테스트 케이스를 적용하는 순서에 따라 여러 개의 테스트 케이스를 묶은 집합
- 적용하는 구체적인 절차를 명세함
- 구체적인 절차, 사전 조건, 입력 데이터 등이 설정되어 있음
- 테스트 오라클
- 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입하여 비교
- 테스트 케이스에 대한 예상 결과를 계산하거나 확인함
- 테스트 오라클의 특징
- 제한된 검증
- 모든 테스트 케이스에 적용할 수 없음
- 수학적 기법
- 값을 수학적 기법을 이용하여 구할 수 있음
- 자동화 기법
- 대상 프로그램의 실행, 결과 비교, 커버리지 측정 등을 자동화 할 수 있음
- 제한된 검증
- 테스트 오라클의 종류
- 모든 오류를 검출할 수 있음 | | --- | --- | | 샘플링 오라클 | - 특정한 몇몇 테스트 케이스의 입력 값들에 대해서만 기대하는 결과를 제공
- 전수 테스트가 불가능한 경우 사용 | | 추정 오라클 | - 특정 테스트 케이스의 입력값에 대해 기대하는 결과 제공
- 나머지 입력 값들에 대해서는 추정으로 처리하는 오라클 | | 일관성 검사 오라클 | 애플리케이션에 변경이 있을 때, 테스트 케이스의 수행 전과 후의 결과 값이 동일한지를 확인 |
- | 참 오라클 | - 입력 값에 대해 기대하는 결고라르 제공하는 오라클
테스트 자동화 도구
- 테스트 자동화
- 사람이 반복적으로 수행하던 테스트 절차를 스크립트 형태로 구현하는 자동화 도구를 적용함으로써 쉽고 효율적으로 테스트를 수행할 수 있도록 한 것
- 테스트 유형에 따른 테스트 자동화 도구의 종류
- 정적 분석 도구
- 테스트 실행 도구
- 성능 테스트 도구
- 테스트 통제 도구
- 정적 분석 도구
- 프로그램을 실행하지 않고 분석하는 도구
- 테스트 실행 도구
- 스크립트 언어를 사용하여 테스트를 실행하는 도구
- 데이터 주도 접근 방식
- 데이터를 저장하고 이를 읽어 실행하는 방식
- 키워드 주도 접근 방식
- 수행할 동작을 나타내는 키워드와 테스트 데이터를 저장하여 실행하는 방식
- 성능 테스트 도구
- 가상의 사용자를 만들어 성능의 목표 달성 여부를 확인하는 도구
- 테스트 통제 도구
- 테스트 계획 및 관리, 테스트 수행, 결함 관리 등을 수행하는 도구
- 종류
- 형상 관리 도구
- 결함 추적 / 관리 도구
- 테스트 하네스 도구
- 테스트가 실행될 환경을 시뮬레이션하여 컴포넌트 및 모듈이 정상적으로 테스트되도록 하는 도구
- 테스트 하네스
- 컴포넌트 및 모듈을 테스트하는 환경의 일부분으로, 테스트를 지원하기 위해 생성된 코드와 데이터
- 테스트 하네스의 구성 요소테스트 드라이버
테스트 스텁 테스트 슈트 컴포넌트나 모듈, 시스템에 사용되는 테스트 케이스의 집합 테스트 케이스 테스트 스크립트 테스트 실행절차에 대한 명세서 목 오브젝트 조건부로 입력해 두면, 그 상황에 맞는 예정된 행위를 수행 - 테스트 수행 단계별 테스트 자동화 도구테스트 단계 자동화도구 설명
테스트 계획 요구사항 관리 요구사항 정의 및 변경 사항 등을 관리하는 도구 테스트 분석 / 설계 테스트 케이스 생성 테스트 데이터 및 테스트 케이스 작성을 지원 테스트 수행 테스트 자동화 자동화를 도와주는 도구 정적 분석 코딩 표준, 런타임 오류 검증 동적 분석 시뮬레이션을 통해 오류를 검출 성능 테스트 가상의 사용자를 생성하여 처리 능력을 측정 모니터링 CPU, Memory 등과 같은 시스템 자원의 상태 확인 및 분석을 지원 테스트 관리 커버리지 분석 충분성 여부 검증 형상 관리 도구 및 데이터 관리 결함 추적/ 관리 발생한 결함 추적 및 관리 활동을 지원
결함 관리
- 결함
- 소프트웨어가 개발자가 설계한 것과 다르게 동작하거나 다른 결과가 발생되는 것
- 결함 관리 프로세스
- 결함 상태 추적
- 발견된 결함은 지속적ㄱ으로 상태 변화를 추적하고 관리해야ㅏㅎㅁ
정보시스템 구축관리
개별 환경 구축
- 개발 환경 구축
- 개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축
- 응용 소프트웨어가 운영될 환경과 유사한 구조로 구축
- 하드웨어와 소프트웨어를 선정함
- 성능, 편의성, 라이선스 등의 비즈니스 환경에 적합한 제품들을 최종적으로 결정하여 구축함
- 하드웨어 환경
- 사용자와의 인터페이스 역할을 하는 클라이언트, 서비스를 제공하는 서버로 구성
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/fdcae290-8799-49e3-8f8e-d909a5ecd7c2/스크린샷_2024-10-12_오후_10.31.17.png
- 클라이언트의 종류
- 개인용 컴퓨터(PC), 스마트폰 등
- 서버의 종류종류 특징
웹 서버 - 직접 요청을 받아 처리함 - 정적 파일들을 제공함 | | 웹 애플리케이션 서버(WAS) | 동적 서비스를 제공하거나 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행함 | | 데이터베이스 서버 | 데이터베이스와 이를 관리하는 DBMS를 운영함 | | 파일 서버 | 데이터베이스에 저장하기에는 비효율적이거나, 서비스 제공을 목적으로 유지하는 파일들을 저장함 |
- 소프트웨어 환경
- 클라이언트와 서버 운영을 위한 시스템 소프트웨어와 개발에 사용되는 개발 소프트웨어로 구성됨
- 시스템 소프트웨어의 종류
- 운영체제, 웹 서버 및 WAS 운용을 위한 서버 프로그램, DBMS
- 개발 소프트웨어의 종류종류 특징
요구사항 관리 도구 요구사항의 수집과 분석, 추적 등을 편리하게 도와주는 소프트웨어 설계/모델링 도구 UML을 지원하며, 전 과정에서 설계 및 모델링을 도와주는 소프트웨어 구현 도구 개발 언어를 통해 실제 구현을 지원하는 소프트웨어 빌드 도구 소스의 빌드 및 배포, 라이브러리 관리를 지원하는 소프트웨어 테스트 도구 모듈들이 요구사항에 적합하게 구현되었는지 테스트하는 소프트웨어 형상 관리 도구 버전별로 관리하여 품질 형상을 지원하는 소프트웨어 - 웹 서버의 기능기능 내용
HTTP/HTTPS 지원 브라우저로부터 요청을 받아 응답할 때 사용되는 프로토콜 통신 기록 처리한 요청들을 로그 파일로 기록하는 기능 정적 파일 관리 HTML, CSS, 이미지 등의 정적 파일들을 저장하고 관리 대역폭 제한 트래픽의 포화를 방지하기 위해 응답 속도 제한 가상 호스팅 여러 개의 도메인 이름을 연결하는 기능 인증 합법적인 사용자인지를 확인 - 개발 언어의 선정 기준기준 내용
적정성 개발하려는 소프트웨어의 목적에 적합해야 함 효율성 코드의 작성 및 구현이 효율적이어야 함 이식성 다양한 시스템 및 환경에 적용이 가능해야 함 친밀성 개발 언어에 대한 개발자들의 이해도와 활용도가 높아야 함 범용성 다른 개발 사례가 존재하고 여러 분야에서 활용되고 있어야 함
소프트웨어 아키텍처
- 소프트웨어 아키텍처
- 소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체
- 분할 방법과 분할된 모듈에 할당될 기능, 모듈 간의 인터페이스 등을 결정함
- 소프트웨어 아키텍처 설계의 기본 원리, 모듈화, 추상화, 단계적 분, 정보은닉이 있음
- 모듈화
- 소프트웨어의 성능 향상, 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 시스템의 기능들을 모듈 단위로 나누는 것을 의미함
- 모듈의 크기를 너무 작게 나누면 개수가 많아져 모듈 간의 통합 비용이 많이 듬
- 모듈의 크기를 너무 크게 나누면 개수가 적어 통합 비용은 적게 들지만 모듈 하나의 개발 비용이 많이 듬
- 추상화
- 전체적이고 포괄적인 개념을 설계한 후 구체화시켜 나가는 것
- 완전한 시스템을 구축하기 전에, 유사한 모델을 만들어서 여러 가지 요인들을 테스트 할 수 있음
- 추상화의 유형과정 추상화 전반적인 흐름만 파악
데이터 추상화 데이터 구조를 대표할 수 있는 표현으로 대체하는 방법 제어 추상화 이벤트 발생의 대표할 수 있는 표현
- 단계적 분해
- 상위의 중요 개념으로부터 하위의 개념으로 구체화 시키는 분할 기법
- 하향식 설계 전략
- 포괄적인 기능에서부터 점차적으로 구체화
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/50d04f5a-7fcf-4c1e-b9e5-493ff044b48d/스크린샷_2024-10-12_오후_11.25.52.png
- 정보 은닉
- 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법
- 모듈을 독립적으로 수행할 수 있음
- 하나의 모듈이 변경되더라도 다른 모듈에 영향을 주지 않으므로 수정, 시험, 유지보수가 용이함
- 상위 설계와 하위 설계
- 소프트웨어 개발의 설계 단계는 크게 상위 설계와 하위 설계로 구분할 수 있음
별칭 아키텍쳐 설계, 예비 설계 모듈 설계, 상세 설계 설계 대상 전체적인 구조 내부 구조 및 행위 세부 목록 구조, DB, 인터페이스 컴포넌트, 자료구조, 알고리즘 - 소프트웨어 아키텍처의 품질 속성
- 이해관계자들이 요구하는 수준의 품질을 유지 및 보장할 수 있게 설계되었는지 확인하기 위해 품질 평가 요소들을 구체화 시켜 놓은 것
- 품질 평가 요소의 종류시스템 측면 성증, 보안, 가용성, 기능성, 사용성, 변경 용이성, 확장성 등
비즈니스 측면 시장 적시성, 비용과 혜택, 예상 시스템 수명, 목표 시장, 공개 일정 등 아키텍처 측면 개념적 무결성, 정확성, 완결성, 구축 가능성, 변경성, 시험성 등
- 소프트웨어 아키텍쳐의 설계 과정
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/f58f2955-b009-4fbf-b275-e8b26a59fe93/스크린샷_2024-10-12_오후_11.30.37.png
- 협약(Contract)에 의한 설계
- 컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것
- 정확한 인터페이스를 명세함
- 명세에 포함될 조건조건 내용
선행 조건 오퍼레이션이 호출되기 전에 참이 되어야 할 조건 결과 조건 오퍼레이션이 수행된 후 만족되어야 할 조건 불변 조건 오퍼레이션이 실행되는 동안 항상 만족되어야 할 조건
아키텍처 패턴
- 아키택처 패턴
- 아키택처를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 주요 아키텍처 패턴의 종류
- 레이어 패턴
- 클라이언트-서버 패턴
- 파이프-필터 패턴
- 모델-뷰-컨트롤러 패턴
- 레이어 패턴
- 시스템을 계층으로 구분하여 구성하는 패턴
- 서로 마주보는 두 개의 계층 사이에서만 사용작용이 이루어짐
- 대표적으로 OSI참조 모델이 있음
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ab3f22c4-63c5-40e2-893d-cb7558a31719/스크린샷_2024-10-12_오후_11.50.54.png
- 클라이언트-서버 패턴
- 파이프-필터 패턴
- 데이터 스트림 절차를 필터로 캡슐화하여 파이프를 통해 전송하는 패턴
- 앞 시스템의 처리 결과물을 처리한 후 다시 파이프를 통해 다음 시스템으로 넘겨주는 패턴을 반복함
- 데이터 변환, 버퍼링, 동기화 등에 주로 사용됨
- 대표적으로 UNIX의 쉘이 있음
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/c0f0c61e-109f-43dd-aa8f-917de3ad3a2f/스크린샷_2024-10-12_오후_11.53.22.png
- 모델-뷰-컨트롤러 패턴
- 서브시스템을 모델, 뷰, 컨트롤러로 구조화하는 패턴
- 사용자의 요청을 받으면 핵심 기능과 데이터를 보관하는 모델을 이용하여 뷰에 정보를 출력하는 구조임
- 여러 개의 뷰를 만들 수 있음
- 한 개의 모델에 대해 여러 개의 뷰를 필요로 하는 대화형 애플리케이션에 적합함
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/797097ff-90b3-430f-8eed-7737a9a4de38/스크린샷_2024-10-12_오후_11.55.48.png
- 기타 패턴종류 내용
마스터-슬레이브 패턴 슬레이브 컴포넌트에서 처리된 결과물을 다시 돌려받는 방식으로 작업 예) 장애 허용 시스템, 병렬 컴퓨팅 시스템 브로커 패턴 사용자가 원하는 서비스와 특성을 브로커 컴포넌트에 요청하면 요청에 맞는 컴포넌트와 사용자를 연결해주는 패턴 예) 분산 환경 시스템 피어-투-피어 패턴 피어라 불리는 하나의 컴포넌트가 클라이언트가 될 수도, 서버가 될 수도 있는 패턴 예) 파일 공유 네트워크 이벤트-버스 패턴 이벤트 메시지를 발행(Publish)하면, 해당 채널을 구독(Subscribe)한 리스너들이 메시지를 받아 이벤트를 처리 예) 알림 서비스 블랙보드 패턴 모든 컴포넌트들이 공유 데이터 저장소와 블랙보드 컴포넌트에 접근이 가능한 패턴 예) 음성 인식, 차량 식별, 신호 해석 인터프리터 패턴 프로그램 코드의 각 라인을 수행하는 방법을 지정하고, 기호마다 클래스를 갖도록 구성된 패턴 예) 번역기, 컴파일러, 인터프리터
객체지향
- 객체지향
- 각 요소들을 객체로 만든 후, 객체들을 조립해서 소프트웨어를 개발하는 기법
- 재사용 및 확장이 용이
- 객체지향의 구성 요소
- 객체
- 클래스
- 메시지
- 객체지향의 특징
- 캡슐화
- 상속
- 다형성
- 연관성
- 객체
- 데이터와 함수를 묶어 놓은 소프트웨어 모듈
- 데이터
- 객체가 가지고 있는 정보로, 속성이나 상태, 분류 등
- 함수
- 객체가 수행하는 기능으로 객체가 갖는 데이터를 처리하는 알고리즘
- 객체의 상태를 참조하거나 변경하는 수단
- 데이터
- 데이터와 함수를 묶어 놓은 소프트웨어 모듈
- 클래스
- 공통된 속성과 연산을 갖는 객체의 집합
- 속성과 연산을 정의하고 있는 틀
- 클래스에 속한 각각의 객체를 인스턴스 라고 함
- 메시지
- 객체들 간의 상호작용에 사용되는 수단으로, 객체의 동작이나 연산을 일으키는 외부의 요구사항
- 메시지를 받은 객체는 예상된 결과를 반환함
- 캡슐화
- 외부에서의 접근을 제한하기 위해 인터페이스를 제외한 세부 내용을 은닉하는 것
- 외부 모듈의 변경으로 인한 파급효과가 적다
- 상대 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 단순해지고, 객체 간의 결합도가 낮아짐
- 상속
- 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
- 하위 클래스는 물려받은 속성과 연산을 다시 정의하지 않아도 즉시 자신의 속성으로 사용할 수 있음
- 하위 클래스는 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용할 수 있음
- 다형성
- 하나의 메시지에 대해 각각의 객체가 고유한 방법으로 응답할 수 있는 능력
- 예) ‘+’ 연산자의 경우 숫자 클래스에서는 덧셈, 문자 클래스에서는 문자열의 연결 기능으로 사용됨
- 연관성
객체지향 분석 및 설계
- 객체지향 분석의 방법론
- 사용자의 요구사항과 객체, 속성, 연산, 관계 등을 정의하여 모델링하는 작업
- 업무를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석함
- 클래스를 식별하는 것이 주요 목적임
- 객체지향 분석의 방법론종류 내용
Rumbaugh(럼바우) 방법 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어서 수행함 Booch(부치) 방법 - 미시적 개발 프로세스와 거시적 개발 프로세스를 모두 사용함 - 클래스와 객체들을 분석 및 식별하고 속성과 연산을 정의 | | Jacobson 방법 | 유스케이스(Use Case)를 강조하여 사용함 | | Coad와 Yourdon 방법 | - E-R 다이어그램을 사용하여 객체의 행위를 모델링함
- 객체 식별, 구조 식별, 주제 정의, 속성과 인스턴스 연결 정의, 연산과 메시지 연결 정의 등의 과정으로 구성함 | | Wirfs-Brock 방법 | 분석과 설계 간의 구분이 없고 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행함 |
- 럼바우 분석 기법
- 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법
- 객체 모델링 기법
- 분석 활동은 객체 모델링 → 동적 모델링 → 기능 모델링 순
동적 모델링 상태 다이어그램을 이용하여 시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현하는 모델링 기능 모델링 자료 흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링 - 객체지향 설계 원칙
- 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜져야 할 원칙
- SRP, OCP, LSP, ISP, DIP의 다섯 가지 원칙의 앞 글자를 따 SOLID 원칙이라고 부름
- 객체지향 설계 원칙의 종류종류 내용
단일 책임 원칙(SRP) 객체는 단 하나의 책임만 가져야 한다는 원칙 개방-폐쇄 원칙(OCP) 기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계 리스코프 치환 원칙(LSP) 자식 클래스는 부모 클래스의 기능을 수행할 수 있어야 한다. 인터페이스 분리 원칙(ISP) 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다는 원칙 의존 역전 원칙(DIP) 의존 관계 성립 시 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 원칙
모듈
- 모듈
- 모듈화를 통해 분리된 시스템의 각 기능으로, 서브루틴, 서브시스템, 소프트웨어 내의 프로그램, 작업 단위 등을 의미함
- 소프트웨어를 구성하는 각 모듈의 기능이 서로 독립됨을 의미함
- 모듈의 독립성은 결합도와 응집도에 의해 측정됨
- 결합도
- 모듈간의 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계
- 결합도가 약할수록 품질이 높고, 강할수록 품질이 낮음
- 결합도의 종류와 강도
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/8407a7b0-ece0-40c5-b0c9-7f346e809eb7/스크린샷_2024-10-17_오전_12.00.49.png
- 결합도의 종류종류 내용
내용 결합도 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때의 결합도 공통(공유) 결합도 공유되는 공통 데이터 영역을 여러 모듈이 사용할 떄의 결합도 외부 결합도 어떤 모듈에서 선언한 데이터를 외부의 다른 모듈에서 참조할 때의 결합도 제어 결합도 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어 신호나 제어 요소를 전달하는 결합도 - 결합도의 종류종류 내용
스탬프(검인) 결합도 배열이나 레코드 등의 자료 구조로 전달될 때의 결합도 자료 결합도 모듈 간의 인터페이스가 조료 요소로만 구성될 떄의 결합도 - 응집도
- 모듈의 내부 요소들이 서로 관련되어 있는 정도
- 응집도가 강할수록 품질이 높고, 약할수록 품질이 낮음
- 응집도의 종류와 강도
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/74b04a60-4dbc-409d-954b-f398e896efd6/스크린샷_2024-10-17_오전_4.04.12.png
- 응집도의 종류종류 내용
기능적 응집도 모듈 내부의 모든 기능 요소들이 단일 문제와 연관 순차적 응집도 하나의 활동으로부터 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우 교환적 응집도 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 절차적 응집도 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 순차적으로 수행할 경우 시간적 응집도 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성 논리적 응집도 유사한 성격을 갖거나 특정 형태로 분류 우연적 응집도 각 구성 요소들이 서로 관련 없는 요소로만 구성 - 팬인 / 팬아웃
- 팬인은 제어하는 모듈의 수
- 팬아웃은 제어되는 모듈의 수
- 팬인이 높다는 것은 재사용 측면에서 설계가 잘 되어있다고 볼 수 있음
- 팬인이 높은 경우 단일 장애점이 발생할 수 있으므로 중점적인 관리 및 테스트가 필요
- ex) 다음의 시스템 구조도에서 각 모듈의 팬인과 팬아웃을 구하시오.
- 팬인은 빨간색, 팬아웃은 파란색
- N-S차트(Nassi-Schneiderman Chart)
- 논리의 기술에 중점을 두고 도형을 이용해 표현하는 방법
- GOTO나 화살표 이용X
- 연속, 선택 및 다중 선택, 반복의 3가지 제어 논리 구조로 표현
- 시각적으로 명확히 식별하는 데 적합함
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/2e6572e7-1281-4a2c-9941-aed494c5facb/스크린샷_2024-10-17_오전_4.09.53.png
단위 모듈
- 단위 모듈
- 소프트웨어 구현에 필요한 여러 동작 중 한 가지 동작을 수행하는 기능을 모듈로 구현한 것
- 단위 모듈로 구현되는 하나의 기능을 단위 기능
- 독립적인 컴파일이 가능하며, 다른 모듈에 호출되거나 삽입되기도 함
- 단위 모듈의 구현 과정
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/aff3c21d-4b1c-40b9-b055-66c4e27e9528/스크린샷_2024-10-17_오전_4.11.37.png
- IPC(Inter-Process Communication)
- 모듈 간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합
- 복수의 프로세스를 수행, 프로세스 간 통신까지 구현
- IPC의 대표 메소드 5가지
Shared Memory 공유 가능한 메모를 구성 Socket 네트워크 소켓을 이용 Semaphores 공유 자원에 대한 접근 제어를 통해 통신 Pipes&named Pipes - Pipe라고 불리는 선입선출 형태 - Pipe는 하나의 프로세스가 이용 중이라면 다른 프로세스는 접근할 수 없음 | | Message Queueing | 메시지가 발생하면 이를 전달하는 방식으로 통신하는 방식 |
- 단위 모듈 테스트
- 모듈이 정해진 기능을 정확히 수행하는 지 검증하는 것
- 단위 테스트라고도 불림
- 시스템 수준의 오류는 잡아낼 수 없음
- 테스트 케이스
- 소프트웨어가 사용자의 요구사항을 정확하게 준수 했는지를 확인하기 위한 테스트 항목에 대한 명세서
- 테스트 케이스를 이용하지 않은 테스트는 검증이 누락되거나 불필요한 검증의 반복으로 인력과 시간을 낭비 할 수 있음
- ISO/IEC/IEEE 29119-3 표준에 따른 테스트 케이스의 구성 요소
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/5cea3691-6e43-4415-93fb-4f2df80b465d/스크린샷_2024-10-17_오전_4.16.03.png
공통 모듈
- 공통 모듈
- 여러 프로그램에서 공통으로 사용할 수 있는 모듈
- 해당 기능을 명확히 이해할 수 있도록 명세 기법을 준수해야 함
- 공통 모듈 명세 기법의 종류명세 기법 내용
정확성 해당 기능이 필요하다는 것을 알 수 있도록 명확성 이해할 때 중의적으로 해석되지 않도록 작성 완전성 필요한 모든 것을 기술 일관성 상호 충돌이 발생하지 않도록 작성 추적성 요구사항의 출처, 관련 시스템 등의 관계를 파악 - 재사용
- 이미 개발된 기능들을 새로운 시스템이나 기능 개발에 사용하기 적합하도록 최적화하는 작업
- 필요한 비용과 시간을 절약 가능
- 사용법을 공개해야함
- 재사용 규모에 따른 분류함수와 객체 클래스나 메소드 단위
컴포넌트 컴포넌트 자체에 대한 수정 없이 인터페이스를 통해 통신 애플리케이션 공통된 기능들을 제공하는 애플리케이션을 공유
- 효과적인 모듈 설계 방안
- 결합도를 줄이고 응집도를 높여서 모듈의 독립성과 재사용성을 높임
- 복잡도와 중복성을 줄이고 일관성을 유지시킴
- 모듈의 기능이 예측이 가능해야 하며 지나치게 제한적이어서는 안 됨
- 모듈 크기는 시스템의 전반적인 기능과 구조를 이해하기 쉬운 크기로 분해함
- 효과적인 제어를 위해 모듈 간의 계층적 관계를 정의하는 자료가 제시
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/64a6d882-a2c2-40c4-ac20-68fcf342a85b/스크린샷_2024-10-17_오전_6.09.51.png
코드
- 코드
- 자료의 분류, 조합, 집계, 추출을 용이하게 하기 위해 사용하는 기호
- 코드의 주요 기능식별기능 데이터 간의 성격에 따라 구분
분류기능 특정 기준이나 동일한 유형에 해당하는 데이터를 그룹화 배열기능 의미를 부여하여 나열할 수 있음 표준화기능 기준에 맞추어 표현 간소화 기능 복잡한 데이터를 간소화 - 코드의 종류종류 내용
순차코드 발생 순서, 크기 순서 등 일정 기준에 따라 일련번호 부여 예) 1, 2, 3, 4 … 블록 코드 공통성이 있는 것끼리 블록으로 구분하고 일련번호 부여 예) 1001~1100: 총무부, 1101~1200: 영업부 10진 코드 0~9까지 10진 분할하고 다시 그 각각에 대하여 10진 분할하는 방법을 필요한 만큼 반복하는 방법 예) 1000: 공학, 1100: 소프트웨어 공학 1110: 소프트웨어 설계 그룹 분류 코드 일정 기준에 따라 대분류, 중분류, 소분류 등으로 구분하여 일련번호 부여 예) 1-01-001: 본사-총무부-인사계, 2-01-001: 지사-총무부-인사계 연상 코드 명칭이나 약호와 관계있는 숫자와 문자, 기호 이용 예) TV-40: 40인치 TV, L-15-220: 15W 220V의 램프 표의 숫자 코드 성질 즉, 길이, 넓이, 부피, 지름 높이 등의 물리적 수치를 그대로 코드에 적용 예) 120-720-1500: 두께표길이가 1207201500인 강판 합성 코드 하나의 코드로 수행하기 어려운 경우 2개 이상의 코드를 조합하여 만드는 방법 예) 연상 코드 + 순차 코드 KE-711: 대한항공 711기, AC-253: 에어캐나다 253기
디자인 패턴
- 디자인 패턴
- 모듈 간의 관계 및 인터페이스를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 개발 과정 중에 문제가 발생하면 새로 해결책을 구상하는 것보다 문제에 해당하는 디자인 패턴을 참고하여 적용하는 것이 더 효율적임
- GOF의 디자인 패턴은 생성 패턴, 구조 패턴, 행위 패턴으로 구분
- 생성 패턴
- 클래스나 객체의 생성과 참조 과정을 정의하는 패턴
- 추상팩토리
- 구체적인 클래스에 의존하지 않고, 인터페이스를 통해 서로 연관,의존하는 객체들의 그룹으로 생성하여 추상적으로 표현함
- 연관된 서브 클래스를 묶어 한 번에 교체하는 것이 가능함
- ex) 요리 내부의 값을 김치찌개에서 된장찌개로 바꿔도 구체적인 클래스에 의존하지 않았기에 문제가 없는 상황
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/25bb3e1e-5930-42f6-bd97-2910690712ae/스크린샷_2024-10-17_오전_6.19.58.png
- 팩토리 메소드
- 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화한 패턴
- 상위 클래스에서 인터페이스만 정의하고 실제 생성은 서브 클래스가 담당
- ex) 구체적인 선언은 하위 요리 클래스 내부에서 하는 방식
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/462fd286-7cb8-4e76-a338-7d6ebe9a1312/스크린샷_2024-10-17_오전_6.23.13.png
- 빌더
- 작게 분리된 인스턴스를 건축 하듯이 조합하여 객체를 생성함
- 객체의 생성과정과 표현방법을 분리하고 있어, 동일한 객체 생성에서도 서로 다른 결과를 만들어 낼 수 있음
- 프로토타입
- 원본 객체를 복제하는 방법으로 객체를 생성하는 방법
- 싱글톤
- 클래스 내에서 인스턴스가 하나뿐임을 보장
- 하나의 객체를 생성하면 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수 없음.
- 구조 패턴
- 복잡한 시스템을 개발하기 쉽도록 클래스나 객체들을 조합하여 더 큰 구조로 만드는 패턴
- 어댑터
- 다른 클래스가 이용할 수 있도록 변환해주는 패턴
- 인터페이스가 일치하지 않을 때 이용함
- 브릿지
- 구현부에서 추상층을 분리하여, 서로가 독립적으로 확장할 수 있도록 구성
- 기능과 구현을 두 개의 별도 클래스로 구현함
- 컴포지트
- 복합 객체와 단일 객체를 구분 없이 다루고자 할 때 사용하는 패턴
- 객체들을 트리 구조로 구성하여, 복합 객체 안에 복합 객체가 포함되는 구조
- 데코레이터
- 객체 간의 결합을 통해 능동적으로 기능들을 확장
- 임의의 객체에 부가적인 기능을 추가하기 위해 다른 객체들을 덧붙이는 방식으로 구현
- 파싸드
- 서브 클래스들을 피해 인터페이스를 구성함으로써 서브 클래스들의 기능을 간편하게 사용할 수 있는 패턴
- 서브 클래스들 사이의 통합 인터페이스를 제공하는 Wrapper 객체가 필요함
- 플라이웨이트
- 매번 생성하는 것이 아니고 가능한 한 공유해서 사용
- 다수의 유사 객체를 생성하거나 조작할 때 유용
- 프록시
- 네트워크 연결, 메모리의 대용량 객체로의 접근
- 접근이 어려운 객체와 객체 사이에서 인터페이스 역할 수행
- 행위 패턴
- 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴
- 책임 연쇄
- 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴
- 각 객체들이 고리로 묶여 있어 요청이 해결될 때 까지 고리를 따라 책임이 넘어감
- 커맨드
- 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 저장하거나 로그에 남기는 패턴
- 각종 명령어들을 추상클래스와 구체 클래스로 분리
- 인터프리터
- 언어의 문법 표현을 정의하는 패턴
- SQL이나 통신 프로토콜 같은 것을 개발할 때 사용
- 반복자(Iterator)
- 접근이 잦은 객체에 대해 동일한 인터페이스 사용
- 내부 표현 방법의 노출 없이 순차적인 접근 간으
- 중재자
- 수많은 객체들 간의 복잡한 상호작용을 캡슐화 하여 객체로 정의
- 의존성을 줄여 결합도를 감소
- 메멘토
- 특정 시점에서의 객체 내부 상태를 객체화함으로 써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공
- [Ctrl] + [Z]와 같은 되돌리기 기능을 개발할 때 주로 이용함
- 옵저버
- 한 객체의 상태가 변화하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태를 전달하는 패턴
- 상태
- 객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용
- 객체 상태를 캡슐화하고 참조하는 방식으로 처리
- 전략
- 동일한 계열의 알고리즘들을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의하는 패턴
- 독립적으로 원하는 알고리즘을 선택하여 사용할 수 있으며, 클라이언트에 영향 없이 알고리즘의 변경이 가능함
- 템플릿 메소드
- 상위 클래스에서 골격을 정의하고, 세부 처리를 구체화하는 구조의 패턴
- 유사한 서브 클래스를 묶어 상위 클래스에서 정의함으로써 코드의 양을 줄이고 유지보수를 용이하게 해줌
- 팩토리 메소드랑 유사한 개념
- 방문자
- 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성
- 처리 기능은 각 클래스를 방문하여 수행함
개발 지원 도구
- 통합 개발 환경(IDE)
- 개발에 필요한 환경, 편집기, 컴파일러, 디버거 등의 다양한 툴을 하나의 인터페이스로 통합하여 제공하는 환경
- 통합 개발 환경 도구의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/75d3e0ec-ebbb-4cf8-a15d-87081f469a8c/스크린샷_2024-10-17_오전_6.36.36.png
- 빌드 도구
- 소스 코드 파일들을 컴퓨터에서 실행할 수 있는 제품 소프트웨어로 변환하는 과정 또는 결과물
- 빌드 도구는 전처리, 컴파일 등의 작업을 수행함
- 대표적인 빌드 도구
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/9ead9c7d-9b55-4491-99e5-45eab4bb2dfc/스크린샷_2024-10-17_오전_6.38.07.png
- 기타 협업 도구
- 개발에 참여하는 사람들이 서로 다른 작업 환경에서 원활하게 프로젝트를 수행할 수 있도록 도와주는 도구
서버 개발
- 서버 개발
- 웹 애플리케이션의 로직을 구현할 서버 프로그램을 제작하여 웹 어플리케이션 서버(WAS)에 탑재하는 것
- 프로그래밍 언어는 Java, Js, Python 등
- 서버 개발 프레임워크
- 서버 프로그램 개발 시 다양한 네트워크 설정, 요청 및 응답 처리, 아키텍처 모델 구현 등을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어
- 대부분 MVC 패턴 기반
- 서버 개발 프레임워크의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ab47a184-5820-48a6-a1dc-825762eb055b/스크린샷_2024-10-17_오전_6.40.49.png
- 서버 개발 과정
- DTO/VO, SQL, DAO, Service, Controller를 각각 구현하는 과정
- 순서는 임의로 변경 가능
- MVC 접근법!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/88a56a82-f952-457f-8a0b-33efc75524ba/스크린샷_2024-10-17_오전_6.42.08.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/f856da4b-e749-42d1-a66b-525b79357309/스크린샷_2024-10-17_오전_6.41.51.png
- 구현 과정과정 내용
DTO/VO 구현 - 데이터 교환을 위해 사용할 객체를 만드는 과정 - 송, 수신할 데이터의 자료형에 맞는 변수 및 객체를 생성함 | | SQL 구현 | - 데이터의 삽입, 변경, 삭제등의 작업을 수행할 SQL문 생성
- 소스 코드 내에 직접 입력, 또는 별도의 XML 파일로 관리 | | DAO 구현 | 데이터베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드를 구현 | | Service 구현 | 요청에 응답하기 위한 로직을 구현 | | Controller 구현 | 적절한 서비스를 호출하여 결과를 반환하는 코드 구현 |
배치 프로그램
- 배치 프로그램
- 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하도록 만든 프로그램을 의미함
- 배치 프로그램의 필수 요소
- 대용량 데이터
- 자동화
- 견고성
- 안정성/신뢰성
- 성능
- 배치 스케줄러
- 일괄 처리 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구
- 특정 업무를 원하는 시간에 처리할 수 있도록 지원
- 잡 스케줄러라고도 불림
- 배치 스케줄러의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/94ee26a1-6696-4351-9301-aff965427e50/스크린샷_2024-10-17_오전_6.54.41.png
- crontab 명령어 작성 방법!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/fbe11882-5246-4e94-9184-ddb656d62b67/스크린샷_2024-10-17_오전_6.56.06.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/590757e4-e084-4755-8a2b-b4e21db29389/스크린샷_2024-10-17_오전_6.55.04.png
시스템 인터페이스 요구사항 분석
- 시스템 인터페이스 요구사항
- 개발할 시스템과 외부 시스템을 연동하는데 필요한 시스템
- 시스템 인터페이스 요구사항 명세서의 구성 요소
- 인터페이스 이름
- 연계 대상 시스템
- 연계 범위 및 내용
- 연계 방식
- 송신 데이터
- 인터페이스 주기
- 기타 고려사항
- 시스템 인터페이스 요구사항 분석
- 요구사항 분류하고 구체적으로 명세한 후 이를 이해관계자에게 전달
- 요구사항 분석 기법을 적절히 이용함
- 요구사항 분해가 필요한 경우 적절한 수준으로 세분화함
- 요구사항 분석 시 누락된 요구사항이나 제한 조건을 추가함
- 상대적 중요도를 평가하여 우선순위를 부여함
- 시스템 인터페이스 요구사항 분석 절차
- 관련 요구사항을 선별하여 별도로 요구사항 목록을 만듦
- 관련된 자료를 준비
- 기능, 비기능 요구사항으로 분리
- 요구사항 명세서에 내용을 추가하거나 수정
- 요구사항 명세서와 요구사항 목록을 이해관계자에게 전달
인터페이스 요구사항 검증
- 인터페이스 요구사항 검증
- 사용자들의 요구사항이 요구사항 명세서에 기술되었는지 검토하고 베이스라인 설정
- 검증 수행 순서
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/715b61d2-dc78-43a7-8169-eaadaf75908f/스크린샷_2024-10-17_오전_7.12.45.png
- 요구사항 검증 방법
- 요구사항 검토
- 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석동료 검토 명세서 작성자가 내용을 직접 설명하고 동려들이 결함을 발견
워크스루 요구사항 명세서를 미리 배포하여 사전 검토 후 검토회를 통해 결함 발견 인스펙션 다른 검토 전문가들이 결함을 발견하는 형태의 검토 방법
- 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석동료 검토 명세서 작성자가 내용을 직접 설명하고 동려들이 결함을 발견
- 프로토 타이핑
- 견본품을 만들어 최종 결과물을 예측
- 테스트 설계
- 요구사항이 현실적으로 테스트 가능한지를 검토
- CASE 도구 활용
- 일관성 분석
- 요구사항 검토
- 요구사항 검증의 주요 항목
- 완전성
- 일관성
- 명확성
- 기능성
- 검증 가능성
- 추적 가능성
- 변경 용이성
송,수신 데이터 식별
- 식별 대상 데이터
- 송 수신 시스템 사이에서 교환되는 데이터로, 규격화된 표준 형식에 따라 전송
- 교환되는 데이터의 종류
- 인터페이스 표준 항목
- 송,수신 데이터 항목
- 공통 코드
- 인터페이스 표준 항목
- 송 수신 시스템을 연계하는데 표준적으로 필요한 데이터
- 시스템 공통부와 거래 공통부시스템 공통부 시스템 간 연동 시 공통 정보
거래 공통부 송 수신되는 데이터를 처리할 때 필요한 정보
- 송, 수신 데이터 항목
- 송 수신 시스템이 업무를 수행하는데 사용하는 데이터
- 데이터 항목과 순서는 인터페이스별로 다름
- 공통 코드
- 시스템들에서 공통적으로 사용하는 코드
- 정보 흐름 식별
- 개발할 시스템과 내 외부 시스템 사이 방향성을 식별
- 송, 수신 데이터 식별
- 개발할 시스템과 연계할 내, 외부 시스템 사이의 정보 흐름과 데이터베이스 산출물을 기반으로 식별
- 인터페이스 표준 항목과 송, 수신 데이터 항목 식별
- 교환 범위를 확인하고 송, 수신 데이터 항목을 식별
- 코드성 데이터 항목 식별
- 코드성 데이터 항목에 대해 코드, 코드명, 코드 설명 등의 코드 정보를 식별
인터페이스 방법 명세화
- 인터페이스 방법 명세화
- 내, 외부 시스템에 연계하여 작동할 때 인터페이스별 송, 수신 방법, 송, 수신 데이터, 오류 식별 및 처리 방안 내용을 문서로 정리
- 송, 수신 방법 명세화
- 각각의 인터페이스에 대해 연계 방식, 통신 및 처리 유형, 발생 주기 등의 송, 수신 방법을 정의하고 명세를 정의
- 송, 수신 데이터 명세화
- 송, 수신 데이터에 대한 명세를 작성
- 오류 식별 및 처리 방안 명세화
- 오류를 식별하고 오류 처리 방안에 대한 명세를 작성
- 인터페이스별로 송, 수신 방법을 명세화하기 위해 필요한 정보
- 시스템 연계 기술
- 인터페이스 통신 유형
- 처리 유형
- 발생 주기
- 시스템 연계 기술
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ea517563-223a-405f-b09e-7ad04e74137d/스크린샷_2024-10-17_오전_7.21.49.png
- 인터페이스 통신 유형유형 내용
단방향 요청만 하고 응답이 없는 형식 동기 요청 후 응답이 올 때 까지 대기 비동기 요청 후 다른 작업을 수행하다 응답이 오면 처리 - 인터페이스 처리 유형유형 내용
실시간 방식 요청 내용을 바로 처리 지연 처리 방식 데이터를 매 건 단위로 처리할 경우 비용이 많이 발생할 때 배치 방식 대량의 데이터를 처리할 때 사용 - 인터페이스 발생 주기
- 개발할 시스템과 내,외부 시스템 간 송, 수신 데이터가 전송되어 인터페이스가 사용되는 주기를 의미
미들웨어 솔루션
- 미들웨어
- 운영체제와 응용 프로그램, 서버와 클라이언트 사이에서 다양한 서비스를 제공하는 소프트웨어
- 표준화된 인터페이스를 제공함으로써 시스템 간의 데이터 교환에 일관성을 보장함
- 미들웨어의 종류
- DB
- RPC
- MOM
- TP-Monitor
- ORB
- WAS
- DB
- 클라이언트에서 원격의 데이터베이스와 연결하는 미들웨어
- RPC(원격 프로시저 호출)
- 원격 프로시저를 마치 로컬 프로시저처럼 호출하는 미들웨어
- MOM(메시지 지향 미들웨어)
- 비동기형 메시지를 전달하는 미들웨어
- 이기종 분산 데이터 시스템의 데이터 동기를 위해 많이 사용됨
- TP-Monitor(트랜잭션 처리 모니터)
- 트랜잭션을 처리 및 감시하는 미들웨어
- 사용자 수가 증가해도 빠른 응답 속도를 유지해야 하는 업무로 사용함
- ORB(객체 요청 브로커)
- 객체 지향 미들웨어
- TP-Monitor의 장점인 트랜잭션 처리와 모니터링 등을 추가로 구현한 제품도 존재
- WAS(웹 애플리케이션 서버)
- 동적인 콘텐츠를 처리하기 위한 미들웨어
- 웹 환경을 구현하기 위한 미들웨어
모듈 연계를 위한 인터페이스 기능 식별
- 모듈 연계
- 내부 모듈과 외부 모듈 또는 내부 모듈 간 데이터의 교환을 위해 관계를 설정
- 대표적인 모듈 연계 방법
- EAI(Enterprise Application Integration)
- ESB(Enterprise Service Bus)
- 웹 서비스
- EAI
- 기업 내 각종 애플리케이션 및 플랫폼 간의 정보 전달, 연계, 통합 등 상호 연동이 가능하게 해주는 솔루션
- EAI의 구축 유형!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/a0aa8dfd-9951-4aea-af16-c87a22f594df/스크린샷_2024-10-17_오전_7.30.46.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/2b0b459f-2766-47a5-90ad-6da23f43bb0a/스크린샷_2024-10-17_오전_7.30.26.png
- ESB
- 애플리케이션 간 연계, 표준 기반의 인터페이스를 제공하는 솔루션
- 애플리케이션 통합측면에서 EAI와 유사하지만 서비스 중심의 통합을 지향
- 범용적으로 사용하기 위해 결합도 약하게 유지
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/e66c3ffa-ac3d-4d18-adf6-cdd66bd2cf14/스크린샷_2024-10-17_오전_7.31.40.png
- 웹 서비스
- 네트워크의 정보를 표준화된 서비스 형태로 만들어 공유하는 기술
- 서비스 지향 아키텍처(SOA) 개념
- 웹 서비스의 구성
- SOAP
- HTTP, HTTPS, SMTP 등을 활용하여 XML기반의 메시지 교환
- UDDI
- WSDL을 등록하여 서비스와 서비스 제공자를 검색하고 접근하는데 사용
- WSDL
- 웹 서비스명, 서비스 제공 위치, 프로토콜 XML 형식으로 구현
- SOAP
- 모듈 간 인터페이스 기능 식별
- 식별된 모듈 간 관련 기능을 검토하여 인터페이스 동작에 필요한 기능을 식별
- 모듈 간 동작하는 기능을 통해 인터페이스 기능을 식별
- 시나리를 통해 내부 모듈과 관련된 인터페이스 기능을 식별
- 실제적으로 필요한 인터페이스 기능을 최종적으로 선별
- 인터페이스 기능 구현을 정의하는데 사용
모듈 간 인터페이스 데이터 표준 확인
- 인터페이스 데이터 표준
- 모듈 간 인터페이스에 사용되는 데이터의 형식을 표준화하는 것
- 기존의 데이터 중에서 공통 영역을 추출하거나 어느 한쪽의 데이터를 변환하여 정의함
- 인터페이스 데이터 표준 확인
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/63553d08-9c94-475c-8a0e-7b4d8d7403ad/스크린샷_2024-10-17_오전_7.35.24.png
인터페이스 기능 구현의 정의
- 인터페이스 기능 구현의 정의
- 인터페이스를 실제로 구현하기 위해 인터페이스 기능에 대한 구현 방법을 기능별로 기술하는 것
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/8f142ab7-d2a2-40d8-aa12-e077b965e368/스크린샷_2024-10-17_오전_7.36.10.png
- 모듈 세부 설계서
- 모듈의 구성 요소와 세부적인 동작 등을 정의한 설계서
- 모듈 세부 설계서 종류컴포넌트 명세서 컴포넌트 개요, 내부 클래스의 동작, 외부와의 통신하는 명세 등을 정의
인터페이스 명세서 인터페이스 클래스의 세부 조건 및 기능 등을 정의
인터페이스 구현
- 인터페이스 구현
- 송, 수신 시스템 간의 데이터 교환 및 처리를 실현해 주는 작업
- 대표적인 인터페이스 구현 방법
- 데이터 통신을 이용한 인터페이스 구현
- 인터페이스 엔티티를 이용한 인터페이스 구현
- AJAX
- JS를 이용하여 클라이언트와 서버 간에 XML 데이터를 주고 받는 비동기 통신 기술
- 웹 페이지 일부 영역만을 업데이트 할 수 있음
- JSON
- 용량이 적은 데이터를 교환하기 위해 데이터 객체를 속성, 값의 쌍 형태로 표현하는 개방형 표준 포맷
- 데이터 통신을 이용한 인터페이스 구현
- ex) JSON을 이용한 인터페이스 구현 순서
- 인터페이스 객체를 생성, 각 시스템 환경에 맞게 선택함
- JSON 이용해 인터페이스 객체를 만듦
- 인터페이스 객체를 AJAX 기술 등을 이용하여 수신 측으로 보냄
- 인터페이스 객체를 수신해 파싱한 후 처리함
- 수신 측에서 송신 측으로 처리 결과를 보냄
- ex) JSON을 이용한 인터페이스 구현 순서
- 인터페이스 엔티티를 이용한 인터페이스 구현
- 인터페이스가 필요한 시스템 사이에 별도의 인터페이스 엔티티를 두어 상호 연계하는 것
- 테이블을 엔티티로 활용함
- ex) 인터페이스 테이블을 이용한 인터페이스 구현 순서
- 인터페이스 이벤트가 발생하면 인터페이스 데이터를 기록
- 송신 측 인터페이스 테이블에 인터페이스 데이터를 전송
- 수신 측 인터페이스 테이블에 입력되면 인터페이스 데이터를 읽음
- 수신 측 인터페이스 테이블에서 읽은 후 사전에 정의된 데이터 트랜잭션 수행
인터페이스 보안
- 인터페이스 보안
- 인터페이스의 보안 취약점 분석 후 적절한 보안 기능을 적용
- 인터페이스 보안 기능 적용
- 인터페이스 아키텍처에 따라 IPSec, SSL, S-HTTP를 사용 | | --- | --- | | 애플리케이션 영역 | 보안 가이드를 참조하여 코드 상의 보안 취약점을 보완 | | 데이터베이스 영역 | - 데이터베이스, 스키마, 엔티티의 접근 권한과 프로시저, 트리거 등 동작 객체의 보안 취약점에 보안 기능 적용
- 개인 정보나 업무상 민감한 데이터의 경우 암호화나 익명화 등 데이터 자체의 보안 방안도 고려 |
- | 네트워크 영역 | - 스니핑 등을 이용한 데이터 탈취 및 변조 위협을 방지하기 위해 네트워크 트래픽에 대한 암호화를 설정
- 데이터 무결성 검사 도구
- 인터페이스 보안 취약점을 분석하는데 사용되는 도구
- 시스템 파일의 변경 유무를 확인하고, 파일이 변경되었을 경우 이를 관리자에게 알려줌
- 종류
- TripWire
- AIDE
- Samhain
- Claymore
- Slipwire
- Fcheck
인터페이스 구현 검증
- 인터페이스 구현 검증
- 인터페이스가 정상적으로 문제없이 작동하는지 확인
- 인터페이스 구현 검증 도구, 감시 도구를 이용
- 인터페이스 구현 검증 도구
- 인터페이스 단위 기능과 시나리오 등을 기반으로 하는 통합 테스트가 필요함
- 테스트 자동화 도구
- 인터페이스 구현 감시 도구
- 동작 상태는 APM(애플리케이션 성능 관리)을 사용하여 감시(Monitoring)할 수 있음
- APM을 통해 종합적인 정보를 조회하고 분석할 수 있음
- 대표적인 APM
- 스카우터
- 제니퍼
- APM(Application Performance Management/Monitoring)
- 애플리케이션의 성능 관리를 위해 다양한 모니터링 기능을 제공하는 도구
- APM은 리소스 방식과 엔드투엔드의 두 가지 유형이 있음
- 리소스 방식
- Nagios, Zabbix, Carti
- 엔드투엔드 방식
- VisualVM, 제니퍼, 스카우터
- 리소스 방식
사용자 인터페이스
- 사용자 인터페이스(UI, User Interface)
- 사용자와 시스템 간의 상호작용이 이뤄지도록 도와주는 장치나 소프트웨어
- 사용자 인터페이스의 세 가지 분야
- 물리적 제어
- 상세적인 표현과 전체적인 구성
- 편리하고 간편하게 사용하도록 하는 기능
- 사용자 인터페이스의 구분구분 내용
CLI 명령과 출력이 텍스트 형태로 이루어지는 인터페이스 GUI 아이콘이나 메뉴를 마우스로 선택하여 작업을 수행하는 그래픽 환경의 인터페이스 NUI 말이나 행동으로 기기를 조작하는 인터페이스 - 사용자 인터페이스의 기본 원칙
- 직관성
- 유효성
- 학습성
- 유연성
UI 설계 도구
- 와이어프레임
- 페이지에 대한 개략적인 레이아웃이나 뼈대를 설계하는 도구
- 페이지의 영역 구분, 콘텐츠, 텍스트 배치 등을 화면 단위로 설계함
- 목업
- 실제 화면과 유사하게 만든 정적인 형태의 모형
- 스토리보드
- 와이어프레임에 콘텐츠에 대한 설명, 페이지 간 이동 흐름 등을 추가한 문서
- 디자이너와 개발자가 최종적으로 참고하는 작업 지침서
- 서비스 구축을 위한 모든 정보가 들어 있음
- 프로토타입
- 와이어프레임이나 스토리보드 등에 인터랙션을 적용함으로써 실제 구현된 것처럼 테스트가 가능한 동적인 형태의 모형
- 종류
- 제작 기간이 짧은 경우, 제작 비용이 적을 경우, 업무 협의가 빠를 경우 | | --- | --- | | 디지털 프로토타입 | - 파워포인트, 아크로뱃, 비지오, 옴니그래플 등과 같은 프로그램을 사용
- 재사용이 필요한 경우, 산출물과 비슷한 효과가 필요한 경우, 숙력된 전문가가 있는 경우 |
- | 페이퍼 프로토타입 | - 아날로그적인 방법
- 유스케이스
- 사용자의 요구사항을 기능 단위로 표현
- 사용자가 원하는 목표를 달성하기 위해 수행할 내용을 기술함
- 사용자의 요구사항을 빠르게 파악함으로써 초기에 시스템의 기능적인 요구를 결정
- 다이어그램 형식으로 묘사됨
품질 요구사항
- 품질 요구사항
- 사용자의 입장에서 얼마나 충족하는가
- 사용자의 요구사항을 충족시킴으로써 확립
- 소프트웨어 품질 관련 표준
- ISO/IEC 9126의 소프트웨어 품질 특성
UI 설계서
- UI 설계서
- 요구사항을 바탕으로 UI 설계를 구체화하여 작성하는 문서
- 기획자, 개발자, 디자이너 등과의 원할한 의사소통을 위함
- UI 흐름 설계
- UI 상세 설계
- 실제 설계 구현을 위해 자세하게 설계
- 반드시 시나리오를 작성해야함
- UI 시나리오 문서
- 사용자 인터페이스의 기능 구조, 대표 화면, 화면 간 인터랙션의 흐름, 다양한 상황에서의 예외 처리 등을 정리한 문서
- 사용자가 최종 목표를 달성하기 위한 방법이 순차적으로 묘사되어 있음
- UI 시나리오 문서의 요건
- 완전성
- 일관성
- 이해성
- 가독성
- 수정 용이성
- 추적 용이성
- UI 상세 설계 순서
HCI / UX / 감성공학
- HCI(Human Computer Interaction or Inteface)
- 사람이 시스템을 보다 편리하고 안전하게 사용할 수 있도록 연구하고 개발하는 학문
- 최종목표는 최적의 UX 만드는 것
- 어떤 제품이 좋은 제품인지, 어떻게 하면 좋은 제품을 만들 수 있는지 연구
- UX(User Experience)
- 사용자가 시스템이나 서비스를 이용하면서 느끼고 생각하게 되는 총체적인 경험
- UI가 사용성, 접근성, 편의성을 중시한다면, UX는 UI를 통해 사용자가 느끼는 만족이나 감정 중시
- 기술을 효용성 측면만 아니라 삶의 질을 향상시키는 하나의 방향으로 봄
- UX의 특징
- 주관성
- 정황성
- 총체성
- 감성공학
- 제품이나 작업환경을 사용자의 감성에 알맞도록 설계 및 제작하는 기술
- 여러 분야의 학문이 공존하는 종합과학임
- 목적은 인간의 삶을 편리하고 안전하며 쾌적하게 만드는 것
- 인간의 감성을 제품 설계에 적용하기 위해 공학적인 접근 방법 사용
애플리케이션 테스트
- 애플리케이션 테스트
- 애플리케이션에 잠재되어 있는 결함을 찾아내는 일련의 행위 또는 절차
- 고객의 요구사항을 만족시키는지 확인하고 소프트웨어가 기능을 정확히 수행하는지 검증함
- 애플리케이션의 기본 원리기본 원리 설명
완벽한 테스트 불가능 잠재적인 결함을 줄일 수 있지만 결함이 없다고 증명할 수 없음 파레토 법칙 20%에 해당하는 코드에서 전체 결함의 80%가 발견된다는 법칙 살충제 패러독스 동일한 테스트 케이스로 동일한 테스트를 반복하면 더 이상 결함이 발견되지 않는 현상 테스팅은 정황 의존 소프트웨어의 특징, 테스트 환경, 테스터의 역량 등 정황에 따라 테스트 결과가 달라질 수 있으므로, 정황에 따라 다르게 테스트를 수행해야함 오류-부재의 궤변 결함을 모두 제거해도, 사용자의 요구사항을 만족시키지 못하면 품질이 높다고 할 수 없다. 테스트와 위험은 반비례 테스트를 할 수록 미래에 발생할 위험을 줄일 수 있음 테스트의 점진적 확대 작은 부분에서 시작하여 점점 확대하며 진행 테스트의 별도 팀 수행 개발자와 관계없는 별도의 팀에서 수행
애플리케이션 테스트의 분류
- 프로그램 실행 여부에 따른 테스트
- 소스 코드에 대한 코딩 표준, 코딩 스타일, 코드 복잡도, 남은 결합 등을 발견하기 위함
- 종류: 워크스루, 인스펙션, 코드 검사 | | --- | --- | | 동적 테스트 | - 프로그램을 실행하여 오류를 찾는 테스트
- 개발의 모든 단계에서 테스트를 수행
- 종류: 블랙박스 테스트, 화이트박스 테스트 |
- | 정적 테스트 | - 프로그램을 실행하지 않고 명세사나 소스 코드를 대상으로 분석
- 테스트 기반에 따른 테스트
- 종류: 동등 분할, 경계 값 분석 등 | | --- | --- | | 구조 기반 테스트 | - 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인
- 종류: 구문 기반, 결정 기반, 조건 기반 등 | | 경험 기반 테스트 | - 유사 소프트웨어나 기술 등에 대한 테스터의 경험을 기반으로 수행
- 명세가 불충분하거나 테스트 시간에 제약이 있는 경우
- 종류: 에러 추정, 체크 리스트, 탐색적 테스팅 |
- | 명세 기반 테스트 | - 사용자의 요구사항에 대한 명세를 빠짐없이 테스트 케이스로 만들어 구현하고 있는지 확인하는 테스트
- 시각에 따른 테스트
- 명세서대로 완성됐는지 테스트 | | --- | --- | | 확인 테스트 | - 사용자의 시각에서 생산된 제품의 결과를 테스트
- 요구한대로 제품이 완성됐는지, 정상적으로 동작하는지 테스트 |
- | 검증 테스트 | - 개발자의 시각에서 제품의 생산 과정을 테스트
- 목적에 따른 테스트회복 테스트 실패하도록 한 후 올바르게 복구되는지 확인
안전 테스트 불법적인 침입으로부터 시스템을 보호할 수 있는지 강도 테스트 과도한 정보량이나 빈도 등을 부과하여 과부하 시에도 정상적으로 실행되는지 성능 테스트 실시간 성능이나 전체적인 효율성을 진단, 응답 시간, 처리량 등을 테스트 구조 테스트 논리적인 경로, 소스 코드의 복잡도 등을 평가 회귀 테스트 변경 또는 수정된 코드에 새로운 결함이 없음을 확인하는 테스트 병행 테스트 변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력하여 결과를 비교하는 테스트
개발 단계에 따른 애플리케이션 테스트
- 개발 단계에 따른 애플리케이션 테스트
- 개발 단계에 따라 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트로 분류됨
- 애플리케이션 테스트와 소프트웨어 개발 단계를 연결하여 표현한 것을 V-모델이라고 함
- 단위 테스트
- 코딩 직후 모듈이나 컴포넌트에 초점을 맞춰 테스트함
- 기능성 테스트를 최우선으로 수행
- 구조 기반 테스트와 명세 기반 테스트로 나뉘지만 주로 구조 기반 테스트를 시행함
- 통합 테스트
- 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트를 의미
- 모듈 간 또는 통합된 컴포넌트 간의 상호 작용 오류를 검사함
- 시스템 테스트
- 완벽하게 수행되는가를 점검
- 기능정 요구사항과 비기능적 요구사항으로 구분하여 각각을 만족하는지 테스트
- 인수 테스트
- 사용자의 요구사항을 충족하는지에 중점을 둠
- 사용자가 직접 테스트함
사용자 인수 테스트 시스템 사용의 적절성 여부를 확인함 운영상의 인수 테스트 - 시스템 관리자가 시스템 인수 시 수행하는 테스트 기법 - 백업/복원 시스템, 재난 복구, 사용자 관리, 정기 점검 | | 계약 인수 테스트 | 계약상의 인수/검수 조건을 준수하는지 여부 | | 규정 인수 테스트 | 정부 지침, 법규, 규정에 맞게 개발 되었는지 여부 | | 알파 테스트 | 사용자가 개발자 앞에서 행하는 테스트 기법 | | 베타 테스트 | 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법 |
통합 테스트
- 통합 테스트
- 단위 테스트가 끝난 모듈을 통합하는 과정에서 발생하는 오류 및 결함을 찾는 테스트 기법
- 종류
- 종류: 빅뱅 통합 테스트 방식 | | --- | --- | | 점진적 통합 방식 | - 모듈 단위로 단계적으로 통합하면서 테스트 하는 방법
- 종류: 하향식 통합 테스트, 상향식 통합 테스트, 혼합식 통합 테스트 |
- | 비점진적 통합 방식 | - 통합하는 절차 없이 모든 모듈이 미리 결합되어 있는 프로그램 전체를 테스트 하는 방법
- 하향식 통합 테스트
- 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트
- 깊이 우선 통합법이나 넓이 우선 통합법을 사용함
- 하향식 통합 테스트 절차
- 제어 모듈은 작성된 프로그램을 사용, 주요 제어 모듈의 종속 모듈들은 스텁으로 대체
- 깊이 우선 또는 넓이 우선 등의 통합 방식에 따라 하위 모듈인 스텁들이 한 번에 하나씩 실제 모듈로 교체
- 모듈이 통합할 때 마다 테스트를 실시함
- 새로운 오류가 발생하지 않음을 보증하기 위해 회귀 테스트를 실시
- 상향식 통합 테스트
- 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트
- 상향식 통합 테스트 절차
- 하위 모듈들을 클러스터로 결합
- 상위 모듈에서 데이터 입,출력을 확인하기 위해 더미 모듈인 드라이버를 작성함
- 통합된 클러스터 단위로 테스트
- 테스트 완료 시, 프로그램 구조의 상위로 이동하여 결합하고 드라이버는 실제 모듈로 대체됨
- 혼합식 통합 테스트
- 하위 수준에는 상향식 통합, 상위 수준에서는 하향식 통합을 사용하여 최적의 테스트를 지원
- 샌드위치 식 통합 테스트 방법이라고도 함
- 회귀 테스팅
- 통합 테스트로 인해 변경된 모듈이나 컴포넌트에 새로운 오류가 있는지 확인
- 이미 테스트된 프로그램의 테스팅을 반복
- 수정한 모듈이나 컴포넌트가 다른 부분에 영향을 미치는지, 오류가 생기지 않았는지 새로운 오류가 발생하지 않음을 보증하기 위해 반복 테스트함.
테스트 케이스/ 테스트 시나리오 / 테스트 오라클
- 테스트 케이스
- 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력 값, 실행 조건, 기대 결과 등으로 구성 된 테스트 항목에 대한 명세서
- 오류 방지, 인력 시간, 자원 낭비를 지울 수 있음
- 테스트 시나리오
- 테스트 케이스를 적용하는 순서에 따라 여러 개의 테스트 케이스를 묶은 집합
- 적용하는 구체적인 절차를 명세함
- 구체적인 절차, 사전 조건, 입력 데이터 등이 설정되어 있음
- 테스트 오라클
- 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입하여 비교
- 테스트 케이스에 대한 예상 결과를 계산하거나 확인함
- 테스트 오라클의 특징
- 제한된 검증
- 모든 테스트 케이스에 적용할 수 없음
- 수학적 기법
- 값을 수학적 기법을 이용하여 구할 수 있음
- 자동화 기법
- 대상 프로그램의 실행, 결과 비교, 커버리지 측정 등을 자동화 할 수 있음
- 제한된 검증
- 테스트 오라클의 종류
- 모든 오류를 검출할 수 있음 | | --- | --- | | 샘플링 오라클 | - 특정한 몇몇 테스트 케이스의 입력 값들에 대해서만 기대하는 결과를 제공
- 전수 테스트가 불가능한 경우 사용 | | 추정 오라클 | - 특정 테스트 케이스의 입력값에 대해 기대하는 결과 제공
- 나머지 입력 값들에 대해서는 추정으로 처리하는 오라클 | | 일관성 검사 오라클 | 애플리케이션에 변경이 있을 때, 테스트 케이스의 수행 전과 후의 결과 값이 동일한지를 확인 |
- | 참 오라클 | - 입력 값에 대해 기대하는 결고라르 제공하는 오라클
테스트 자동화 도구
- 테스트 자동화
- 사람이 반복적으로 수행하던 테스트 절차를 스크립트 형태로 구현하는 자동화 도구를 적용함으로써 쉽고 효율적으로 테스트를 수행할 수 있도록 한 것
- 테스트 유형에 따른 테스트 자동화 도구의 종류
- 정적 분석 도구
- 테스트 실행 도구
- 성능 테스트 도구
- 테스트 통제 도구
- 정적 분석 도구
- 프로그램을 실행하지 않고 분석하는 도구
- 테스트 실행 도구
- 스크립트 언어를 사용하여 테스트를 실행하는 도구
- 데이터 주도 접근 방식
- 데이터를 저장하고 이를 읽어 실행하는 방식
- 키워드 주도 접근 방식
- 수행할 동작을 나타내는 키워드와 테스트 데이터를 저장하여 실행하는 방식
- 성능 테스트 도구
- 가상의 사용자를 만들어 성능의 목표 달성 여부를 확인하는 도구
- 테스트 통제 도구
- 테스트 계획 및 관리, 테스트 수행, 결함 관리 등을 수행하는 도구
- 종류
- 형상 관리 도구
- 결함 추적 / 관리 도구
- 테스트 하네스 도구
- 테스트가 실행될 환경을 시뮬레이션하여 컴포넌트 및 모듈이 정상적으로 테스트되도록 하는 도구
- 테스트 하네스
- 컴포넌트 및 모듈을 테스트하는 환경의 일부분으로, 테스트를 지원하기 위해 생성된 코드와 데이터
- 테스트 하네스의 구성 요소테스트 드라이버
테스트 스텁 테스트 슈트 컴포넌트나 모듈, 시스템에 사용되는 테스트 케이스의 집합 테스트 케이스 테스트 스크립트 테스트 실행절차에 대한 명세서 목 오브젝트 조건부로 입력해 두면, 그 상황에 맞는 예정된 행위를 수행 - 테스트 수행 단계별 테스트 자동화 도구테스트 단계 자동화도구 설명
테스트 계획 요구사항 관리 요구사항 정의 및 변경 사항 등을 관리하는 도구 테스트 분석 / 설계 테스트 케이스 생성 테스트 데이터 및 테스트 케이스 작성을 지원 테스트 수행 테스트 자동화 자동화를 도와주는 도구 정적 분석 코딩 표준, 런타임 오류 검증 동적 분석 시뮬레이션을 통해 오류를 검출 성능 테스트 가상의 사용자를 생성하여 처리 능력을 측정 모니터링 CPU, Memory 등과 같은 시스템 자원의 상태 확인 및 분석을 지원 테스트 관리 커버리지 분석 충분성 여부 검증 형상 관리 도구 및 데이터 관리 결함 추적/ 관리 발생한 결함 추적 및 관리 활동을 지원
결함 관리
- 결함
- 소프트웨어가 개발자가 설계한 것과 다르게 동작하거나 다른 결과가 발생되는 것
- 결함 관리 프로세스
- 결함 상태 추적
- 발견된 결함은 지속적ㄱ으로 상태 변화를 추적하고 관리해야ㅏㅎㅁ
정보시스템 구축관리
개별 환경 구축
- 개발 환경 구축
- 개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축
- 응용 소프트웨어가 운영될 환경과 유사한 구조로 구축
- 하드웨어와 소프트웨어를 선정함
- 성능, 편의성, 라이선스 등의 비즈니스 환경에 적합한 제품들을 최종적으로 결정하여 구축함
- 하드웨어 환경
- 사용자와의 인터페이스 역할을 하는 클라이언트, 서비스를 제공하는 서버로 구성
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/fdcae290-8799-49e3-8f8e-d909a5ecd7c2/스크린샷_2024-10-12_오후_10.31.17.png
- 클라이언트의 종류
- 개인용 컴퓨터(PC), 스마트폰 등
- 서버의 종류종류 특징
웹 서버 - 직접 요청을 받아 처리함 - 정적 파일들을 제공함 | | 웹 애플리케이션 서버(WAS) | 동적 서비스를 제공하거나 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행함 | | 데이터베이스 서버 | 데이터베이스와 이를 관리하는 DBMS를 운영함 | | 파일 서버 | 데이터베이스에 저장하기에는 비효율적이거나, 서비스 제공을 목적으로 유지하는 파일들을 저장함 |
- 소프트웨어 환경
- 클라이언트와 서버 운영을 위한 시스템 소프트웨어와 개발에 사용되는 개발 소프트웨어로 구성됨
- 시스템 소프트웨어의 종류
- 운영체제, 웹 서버 및 WAS 운용을 위한 서버 프로그램, DBMS
- 개발 소프트웨어의 종류종류 특징
요구사항 관리 도구 요구사항의 수집과 분석, 추적 등을 편리하게 도와주는 소프트웨어 설계/모델링 도구 UML을 지원하며, 전 과정에서 설계 및 모델링을 도와주는 소프트웨어 구현 도구 개발 언어를 통해 실제 구현을 지원하는 소프트웨어 빌드 도구 소스의 빌드 및 배포, 라이브러리 관리를 지원하는 소프트웨어 테스트 도구 모듈들이 요구사항에 적합하게 구현되었는지 테스트하는 소프트웨어 형상 관리 도구 버전별로 관리하여 품질 형상을 지원하는 소프트웨어 - 웹 서버의 기능기능 내용
HTTP/HTTPS 지원 브라우저로부터 요청을 받아 응답할 때 사용되는 프로토콜 통신 기록 처리한 요청들을 로그 파일로 기록하는 기능 정적 파일 관리 HTML, CSS, 이미지 등의 정적 파일들을 저장하고 관리 대역폭 제한 트래픽의 포화를 방지하기 위해 응답 속도 제한 가상 호스팅 여러 개의 도메인 이름을 연결하는 기능 인증 합법적인 사용자인지를 확인 - 개발 언어의 선정 기준기준 내용
적정성 개발하려는 소프트웨어의 목적에 적합해야 함 효율성 코드의 작성 및 구현이 효율적이어야 함 이식성 다양한 시스템 및 환경에 적용이 가능해야 함 친밀성 개발 언어에 대한 개발자들의 이해도와 활용도가 높아야 함 범용성 다른 개발 사례가 존재하고 여러 분야에서 활용되고 있어야 함
소프트웨어 아키텍처
- 소프트웨어 아키텍처
- 소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체
- 분할 방법과 분할된 모듈에 할당될 기능, 모듈 간의 인터페이스 등을 결정함
- 소프트웨어 아키텍처 설계의 기본 원리, 모듈화, 추상화, 단계적 분, 정보은닉이 있음
- 모듈화
- 소프트웨어의 성능 향상, 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 시스템의 기능들을 모듈 단위로 나누는 것을 의미함
- 모듈의 크기를 너무 작게 나누면 개수가 많아져 모듈 간의 통합 비용이 많이 듬
- 모듈의 크기를 너무 크게 나누면 개수가 적어 통합 비용은 적게 들지만 모듈 하나의 개발 비용이 많이 듬
- 추상화
- 전체적이고 포괄적인 개념을 설계한 후 구체화시켜 나가는 것
- 완전한 시스템을 구축하기 전에, 유사한 모델을 만들어서 여러 가지 요인들을 테스트 할 수 있음
- 추상화의 유형과정 추상화 전반적인 흐름만 파악
데이터 추상화 데이터 구조를 대표할 수 있는 표현으로 대체하는 방법 제어 추상화 이벤트 발생의 대표할 수 있는 표현
- 단계적 분해
- 상위의 중요 개념으로부터 하위의 개념으로 구체화 시키는 분할 기법
- 하향식 설계 전략
- 포괄적인 기능에서부터 점차적으로 구체화
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/50d04f5a-7fcf-4c1e-b9e5-493ff044b48d/스크린샷_2024-10-12_오후_11.25.52.png
- 정보 은닉
- 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법
- 모듈을 독립적으로 수행할 수 있음
- 하나의 모듈이 변경되더라도 다른 모듈에 영향을 주지 않으므로 수정, 시험, 유지보수가 용이함
- 상위 설계와 하위 설계
- 소프트웨어 개발의 설계 단계는 크게 상위 설계와 하위 설계로 구분할 수 있음
별칭 아키텍쳐 설계, 예비 설계 모듈 설계, 상세 설계 설계 대상 전체적인 구조 내부 구조 및 행위 세부 목록 구조, DB, 인터페이스 컴포넌트, 자료구조, 알고리즘 - 소프트웨어 아키텍처의 품질 속성
- 이해관계자들이 요구하는 수준의 품질을 유지 및 보장할 수 있게 설계되었는지 확인하기 위해 품질 평가 요소들을 구체화 시켜 놓은 것
- 품질 평가 요소의 종류시스템 측면 성증, 보안, 가용성, 기능성, 사용성, 변경 용이성, 확장성 등
비즈니스 측면 시장 적시성, 비용과 혜택, 예상 시스템 수명, 목표 시장, 공개 일정 등 아키텍처 측면 개념적 무결성, 정확성, 완결성, 구축 가능성, 변경성, 시험성 등
- 소프트웨어 아키텍쳐의 설계 과정
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/f58f2955-b009-4fbf-b275-e8b26a59fe93/스크린샷_2024-10-12_오후_11.30.37.png
- 협약(Contract)에 의한 설계
- 컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것
- 정확한 인터페이스를 명세함
- 명세에 포함될 조건조건 내용
선행 조건 오퍼레이션이 호출되기 전에 참이 되어야 할 조건 결과 조건 오퍼레이션이 수행된 후 만족되어야 할 조건 불변 조건 오퍼레이션이 실행되는 동안 항상 만족되어야 할 조건
아키텍처 패턴
- 아키택처 패턴
- 아키택처를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 주요 아키텍처 패턴의 종류
- 레이어 패턴
- 클라이언트-서버 패턴
- 파이프-필터 패턴
- 모델-뷰-컨트롤러 패턴
- 레이어 패턴
- 시스템을 계층으로 구분하여 구성하는 패턴
- 서로 마주보는 두 개의 계층 사이에서만 사용작용이 이루어짐
- 대표적으로 OSI참조 모델이 있음
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ab3f22c4-63c5-40e2-893d-cb7558a31719/스크린샷_2024-10-12_오후_11.50.54.png
- 클라이언트-서버 패턴
- 파이프-필터 패턴
- 데이터 스트림 절차를 필터로 캡슐화하여 파이프를 통해 전송하는 패턴
- 앞 시스템의 처리 결과물을 처리한 후 다시 파이프를 통해 다음 시스템으로 넘겨주는 패턴을 반복함
- 데이터 변환, 버퍼링, 동기화 등에 주로 사용됨
- 대표적으로 UNIX의 쉘이 있음
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/c0f0c61e-109f-43dd-aa8f-917de3ad3a2f/스크린샷_2024-10-12_오후_11.53.22.png
- 모델-뷰-컨트롤러 패턴
- 서브시스템을 모델, 뷰, 컨트롤러로 구조화하는 패턴
- 사용자의 요청을 받으면 핵심 기능과 데이터를 보관하는 모델을 이용하여 뷰에 정보를 출력하는 구조임
- 여러 개의 뷰를 만들 수 있음
- 한 개의 모델에 대해 여러 개의 뷰를 필요로 하는 대화형 애플리케이션에 적합함
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/797097ff-90b3-430f-8eed-7737a9a4de38/스크린샷_2024-10-12_오후_11.55.48.png
- 기타 패턴종류 내용
마스터-슬레이브 패턴 슬레이브 컴포넌트에서 처리된 결과물을 다시 돌려받는 방식으로 작업 예) 장애 허용 시스템, 병렬 컴퓨팅 시스템 브로커 패턴 사용자가 원하는 서비스와 특성을 브로커 컴포넌트에 요청하면 요청에 맞는 컴포넌트와 사용자를 연결해주는 패턴 예) 분산 환경 시스템 피어-투-피어 패턴 피어라 불리는 하나의 컴포넌트가 클라이언트가 될 수도, 서버가 될 수도 있는 패턴 예) 파일 공유 네트워크 이벤트-버스 패턴 이벤트 메시지를 발행(Publish)하면, 해당 채널을 구독(Subscribe)한 리스너들이 메시지를 받아 이벤트를 처리 예) 알림 서비스 블랙보드 패턴 모든 컴포넌트들이 공유 데이터 저장소와 블랙보드 컴포넌트에 접근이 가능한 패턴 예) 음성 인식, 차량 식별, 신호 해석 인터프리터 패턴 프로그램 코드의 각 라인을 수행하는 방법을 지정하고, 기호마다 클래스를 갖도록 구성된 패턴 예) 번역기, 컴파일러, 인터프리터
객체지향
- 객체지향
- 각 요소들을 객체로 만든 후, 객체들을 조립해서 소프트웨어를 개발하는 기법
- 재사용 및 확장이 용이
- 객체지향의 구성 요소
- 객체
- 클래스
- 메시지
- 객체지향의 특징
- 캡슐화
- 상속
- 다형성
- 연관성
- 객체
- 데이터와 함수를 묶어 놓은 소프트웨어 모듈
- 데이터
- 객체가 가지고 있는 정보로, 속성이나 상태, 분류 등
- 함수
- 객체가 수행하는 기능으로 객체가 갖는 데이터를 처리하는 알고리즘
- 객체의 상태를 참조하거나 변경하는 수단
- 데이터
- 데이터와 함수를 묶어 놓은 소프트웨어 모듈
- 클래스
- 공통된 속성과 연산을 갖는 객체의 집합
- 속성과 연산을 정의하고 있는 틀
- 클래스에 속한 각각의 객체를 인스턴스 라고 함
- 메시지
- 객체들 간의 상호작용에 사용되는 수단으로, 객체의 동작이나 연산을 일으키는 외부의 요구사항
- 메시지를 받은 객체는 예상된 결과를 반환함
- 캡슐화
- 외부에서의 접근을 제한하기 위해 인터페이스를 제외한 세부 내용을 은닉하는 것
- 외부 모듈의 변경으로 인한 파급효과가 적다
- 상대 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 단순해지고, 객체 간의 결합도가 낮아짐
- 상속
- 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
- 하위 클래스는 물려받은 속성과 연산을 다시 정의하지 않아도 즉시 자신의 속성으로 사용할 수 있음
- 하위 클래스는 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용할 수 있음
- 다형성
- 하나의 메시지에 대해 각각의 객체가 고유한 방법으로 응답할 수 있는 능력
- 예) ‘+’ 연산자의 경우 숫자 클래스에서는 덧셈, 문자 클래스에서는 문자열의 연결 기능으로 사용됨
- 연관성
객체지향 분석 및 설계
- 객체지향 분석의 방법론
- 사용자의 요구사항과 객체, 속성, 연산, 관계 등을 정의하여 모델링하는 작업
- 업무를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석함
- 클래스를 식별하는 것이 주요 목적임
- 객체지향 분석의 방법론종류 내용
Rumbaugh(럼바우) 방법 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어서 수행함 Booch(부치) 방법 - 미시적 개발 프로세스와 거시적 개발 프로세스를 모두 사용함 - 클래스와 객체들을 분석 및 식별하고 속성과 연산을 정의 | | Jacobson 방법 | 유스케이스(Use Case)를 강조하여 사용함 | | Coad와 Yourdon 방법 | - E-R 다이어그램을 사용하여 객체의 행위를 모델링함
- 객체 식별, 구조 식별, 주제 정의, 속성과 인스턴스 연결 정의, 연산과 메시지 연결 정의 등의 과정으로 구성함 | | Wirfs-Brock 방법 | 분석과 설계 간의 구분이 없고 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행함 |
- 럼바우 분석 기법
- 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법
- 객체 모델링 기법
- 분석 활동은 객체 모델링 → 동적 모델링 → 기능 모델링 순
동적 모델링 상태 다이어그램을 이용하여 시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현하는 모델링 기능 모델링 자료 흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링 - 객체지향 설계 원칙
- 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜져야 할 원칙
- SRP, OCP, LSP, ISP, DIP의 다섯 가지 원칙의 앞 글자를 따 SOLID 원칙이라고 부름
- 객체지향 설계 원칙의 종류종류 내용
단일 책임 원칙(SRP) 객체는 단 하나의 책임만 가져야 한다는 원칙 개방-폐쇄 원칙(OCP) 기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계 리스코프 치환 원칙(LSP) 자식 클래스는 부모 클래스의 기능을 수행할 수 있어야 한다. 인터페이스 분리 원칙(ISP) 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다는 원칙 의존 역전 원칙(DIP) 의존 관계 성립 시 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 원칙
모듈
- 모듈
- 모듈화를 통해 분리된 시스템의 각 기능으로, 서브루틴, 서브시스템, 소프트웨어 내의 프로그램, 작업 단위 등을 의미함
- 소프트웨어를 구성하는 각 모듈의 기능이 서로 독립됨을 의미함
- 모듈의 독립성은 결합도와 응집도에 의해 측정됨
- 결합도
- 모듈간의 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계
- 결합도가 약할수록 품질이 높고, 강할수록 품질이 낮음
- 결합도의 종류와 강도
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/8407a7b0-ece0-40c5-b0c9-7f346e809eb7/스크린샷_2024-10-17_오전_12.00.49.png
- 결합도의 종류종류 내용
내용 결합도 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때의 결합도 공통(공유) 결합도 공유되는 공통 데이터 영역을 여러 모듈이 사용할 떄의 결합도 외부 결합도 어떤 모듈에서 선언한 데이터를 외부의 다른 모듈에서 참조할 때의 결합도 제어 결합도 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어 신호나 제어 요소를 전달하는 결합도 - 결합도의 종류종류 내용
스탬프(검인) 결합도 배열이나 레코드 등의 자료 구조로 전달될 때의 결합도 자료 결합도 모듈 간의 인터페이스가 조료 요소로만 구성될 떄의 결합도 - 응집도
- 모듈의 내부 요소들이 서로 관련되어 있는 정도
- 응집도가 강할수록 품질이 높고, 약할수록 품질이 낮음
- 응집도의 종류와 강도
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/74b04a60-4dbc-409d-954b-f398e896efd6/스크린샷_2024-10-17_오전_4.04.12.png
- 응집도의 종류종류 내용
기능적 응집도 모듈 내부의 모든 기능 요소들이 단일 문제와 연관 순차적 응집도 하나의 활동으로부터 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우 교환적 응집도 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 절차적 응집도 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 순차적으로 수행할 경우 시간적 응집도 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성 논리적 응집도 유사한 성격을 갖거나 특정 형태로 분류 우연적 응집도 각 구성 요소들이 서로 관련 없는 요소로만 구성 - 팬인 / 팬아웃
- 팬인은 제어하는 모듈의 수
- 팬아웃은 제어되는 모듈의 수
- 팬인이 높다는 것은 재사용 측면에서 설계가 잘 되어있다고 볼 수 있음
- 팬인이 높은 경우 단일 장애점이 발생할 수 있으므로 중점적인 관리 및 테스트가 필요
- ex) 다음의 시스템 구조도에서 각 모듈의 팬인과 팬아웃을 구하시오.
- 팬인은 빨간색, 팬아웃은 파란색
- N-S차트(Nassi-Schneiderman Chart)
- 논리의 기술에 중점을 두고 도형을 이용해 표현하는 방법
- GOTO나 화살표 이용X
- 연속, 선택 및 다중 선택, 반복의 3가지 제어 논리 구조로 표현
- 시각적으로 명확히 식별하는 데 적합함
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/2e6572e7-1281-4a2c-9941-aed494c5facb/스크린샷_2024-10-17_오전_4.09.53.png
단위 모듈
- 단위 모듈
- 소프트웨어 구현에 필요한 여러 동작 중 한 가지 동작을 수행하는 기능을 모듈로 구현한 것
- 단위 모듈로 구현되는 하나의 기능을 단위 기능
- 독립적인 컴파일이 가능하며, 다른 모듈에 호출되거나 삽입되기도 함
- 단위 모듈의 구현 과정
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/aff3c21d-4b1c-40b9-b055-66c4e27e9528/스크린샷_2024-10-17_오전_4.11.37.png
- IPC(Inter-Process Communication)
- 모듈 간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합
- 복수의 프로세스를 수행, 프로세스 간 통신까지 구현
- IPC의 대표 메소드 5가지
Shared Memory 공유 가능한 메모를 구성 Socket 네트워크 소켓을 이용 Semaphores 공유 자원에 대한 접근 제어를 통해 통신 Pipes&named Pipes - Pipe라고 불리는 선입선출 형태 - Pipe는 하나의 프로세스가 이용 중이라면 다른 프로세스는 접근할 수 없음 | | Message Queueing | 메시지가 발생하면 이를 전달하는 방식으로 통신하는 방식 |
- 단위 모듈 테스트
- 모듈이 정해진 기능을 정확히 수행하는 지 검증하는 것
- 단위 테스트라고도 불림
- 시스템 수준의 오류는 잡아낼 수 없음
- 테스트 케이스
- 소프트웨어가 사용자의 요구사항을 정확하게 준수 했는지를 확인하기 위한 테스트 항목에 대한 명세서
- 테스트 케이스를 이용하지 않은 테스트는 검증이 누락되거나 불필요한 검증의 반복으로 인력과 시간을 낭비 할 수 있음
- ISO/IEC/IEEE 29119-3 표준에 따른 테스트 케이스의 구성 요소
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/5cea3691-6e43-4415-93fb-4f2df80b465d/스크린샷_2024-10-17_오전_4.16.03.png
공통 모듈
- 공통 모듈
- 여러 프로그램에서 공통으로 사용할 수 있는 모듈
- 해당 기능을 명확히 이해할 수 있도록 명세 기법을 준수해야 함
- 공통 모듈 명세 기법의 종류명세 기법 내용
정확성 해당 기능이 필요하다는 것을 알 수 있도록 명확성 이해할 때 중의적으로 해석되지 않도록 작성 완전성 필요한 모든 것을 기술 일관성 상호 충돌이 발생하지 않도록 작성 추적성 요구사항의 출처, 관련 시스템 등의 관계를 파악 - 재사용
- 이미 개발된 기능들을 새로운 시스템이나 기능 개발에 사용하기 적합하도록 최적화하는 작업
- 필요한 비용과 시간을 절약 가능
- 사용법을 공개해야함
- 재사용 규모에 따른 분류함수와 객체 클래스나 메소드 단위
컴포넌트 컴포넌트 자체에 대한 수정 없이 인터페이스를 통해 통신 애플리케이션 공통된 기능들을 제공하는 애플리케이션을 공유
- 효과적인 모듈 설계 방안
- 결합도를 줄이고 응집도를 높여서 모듈의 독립성과 재사용성을 높임
- 복잡도와 중복성을 줄이고 일관성을 유지시킴
- 모듈의 기능이 예측이 가능해야 하며 지나치게 제한적이어서는 안 됨
- 모듈 크기는 시스템의 전반적인 기능과 구조를 이해하기 쉬운 크기로 분해함
- 효과적인 제어를 위해 모듈 간의 계층적 관계를 정의하는 자료가 제시
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/64a6d882-a2c2-40c4-ac20-68fcf342a85b/스크린샷_2024-10-17_오전_6.09.51.png
코드
- 코드
- 자료의 분류, 조합, 집계, 추출을 용이하게 하기 위해 사용하는 기호
- 코드의 주요 기능식별기능 데이터 간의 성격에 따라 구분
분류기능 특정 기준이나 동일한 유형에 해당하는 데이터를 그룹화 배열기능 의미를 부여하여 나열할 수 있음 표준화기능 기준에 맞추어 표현 간소화 기능 복잡한 데이터를 간소화 - 코드의 종류종류 내용
순차코드 발생 순서, 크기 순서 등 일정 기준에 따라 일련번호 부여 예) 1, 2, 3, 4 … 블록 코드 공통성이 있는 것끼리 블록으로 구분하고 일련번호 부여 예) 1001~1100: 총무부, 1101~1200: 영업부 10진 코드 0~9까지 10진 분할하고 다시 그 각각에 대하여 10진 분할하는 방법을 필요한 만큼 반복하는 방법 예) 1000: 공학, 1100: 소프트웨어 공학 1110: 소프트웨어 설계 그룹 분류 코드 일정 기준에 따라 대분류, 중분류, 소분류 등으로 구분하여 일련번호 부여 예) 1-01-001: 본사-총무부-인사계, 2-01-001: 지사-총무부-인사계 연상 코드 명칭이나 약호와 관계있는 숫자와 문자, 기호 이용 예) TV-40: 40인치 TV, L-15-220: 15W 220V의 램프 표의 숫자 코드 성질 즉, 길이, 넓이, 부피, 지름 높이 등의 물리적 수치를 그대로 코드에 적용 예) 120-720-1500: 두께표길이가 1207201500인 강판 합성 코드 하나의 코드로 수행하기 어려운 경우 2개 이상의 코드를 조합하여 만드는 방법 예) 연상 코드 + 순차 코드 KE-711: 대한항공 711기, AC-253: 에어캐나다 253기
디자인 패턴
- 디자인 패턴
- 모듈 간의 관계 및 인터페이스를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 개발 과정 중에 문제가 발생하면 새로 해결책을 구상하는 것보다 문제에 해당하는 디자인 패턴을 참고하여 적용하는 것이 더 효율적임
- GOF의 디자인 패턴은 생성 패턴, 구조 패턴, 행위 패턴으로 구분
- 생성 패턴
- 클래스나 객체의 생성과 참조 과정을 정의하는 패턴
- 추상팩토리
- 구체적인 클래스에 의존하지 않고, 인터페이스를 통해 서로 연관,의존하는 객체들의 그룹으로 생성하여 추상적으로 표현함
- 연관된 서브 클래스를 묶어 한 번에 교체하는 것이 가능함
- ex) 요리 내부의 값을 김치찌개에서 된장찌개로 바꿔도 구체적인 클래스에 의존하지 않았기에 문제가 없는 상황
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/25bb3e1e-5930-42f6-bd97-2910690712ae/스크린샷_2024-10-17_오전_6.19.58.png
- 팩토리 메소드
- 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화한 패턴
- 상위 클래스에서 인터페이스만 정의하고 실제 생성은 서브 클래스가 담당
- ex) 구체적인 선언은 하위 요리 클래스 내부에서 하는 방식
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/462fd286-7cb8-4e76-a338-7d6ebe9a1312/스크린샷_2024-10-17_오전_6.23.13.png
- 빌더
- 작게 분리된 인스턴스를 건축 하듯이 조합하여 객체를 생성함
- 객체의 생성과정과 표현방법을 분리하고 있어, 동일한 객체 생성에서도 서로 다른 결과를 만들어 낼 수 있음
- 프로토타입
- 원본 객체를 복제하는 방법으로 객체를 생성하는 방법
- 싱글톤
- 클래스 내에서 인스턴스가 하나뿐임을 보장
- 하나의 객체를 생성하면 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수 없음.
- 구조 패턴
- 복잡한 시스템을 개발하기 쉽도록 클래스나 객체들을 조합하여 더 큰 구조로 만드는 패턴
- 어댑터
- 다른 클래스가 이용할 수 있도록 변환해주는 패턴
- 인터페이스가 일치하지 않을 때 이용함
- 브릿지
- 구현부에서 추상층을 분리하여, 서로가 독립적으로 확장할 수 있도록 구성
- 기능과 구현을 두 개의 별도 클래스로 구현함
- 컴포지트
- 복합 객체와 단일 객체를 구분 없이 다루고자 할 때 사용하는 패턴
- 객체들을 트리 구조로 구성하여, 복합 객체 안에 복합 객체가 포함되는 구조
- 데코레이터
- 객체 간의 결합을 통해 능동적으로 기능들을 확장
- 임의의 객체에 부가적인 기능을 추가하기 위해 다른 객체들을 덧붙이는 방식으로 구현
- 파싸드
- 서브 클래스들을 피해 인터페이스를 구성함으로써 서브 클래스들의 기능을 간편하게 사용할 수 있는 패턴
- 서브 클래스들 사이의 통합 인터페이스를 제공하는 Wrapper 객체가 필요함
- 플라이웨이트
- 매번 생성하는 것이 아니고 가능한 한 공유해서 사용
- 다수의 유사 객체를 생성하거나 조작할 때 유용
- 프록시
- 네트워크 연결, 메모리의 대용량 객체로의 접근
- 접근이 어려운 객체와 객체 사이에서 인터페이스 역할 수행
- 행위 패턴
- 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴
- 책임 연쇄
- 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴
- 각 객체들이 고리로 묶여 있어 요청이 해결될 때 까지 고리를 따라 책임이 넘어감
- 커맨드
- 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 저장하거나 로그에 남기는 패턴
- 각종 명령어들을 추상클래스와 구체 클래스로 분리
- 인터프리터
- 언어의 문법 표현을 정의하는 패턴
- SQL이나 통신 프로토콜 같은 것을 개발할 때 사용
- 반복자(Iterator)
- 접근이 잦은 객체에 대해 동일한 인터페이스 사용
- 내부 표현 방법의 노출 없이 순차적인 접근 간으
- 중재자
- 수많은 객체들 간의 복잡한 상호작용을 캡슐화 하여 객체로 정의
- 의존성을 줄여 결합도를 감소
- 메멘토
- 특정 시점에서의 객체 내부 상태를 객체화함으로 써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공
- [Ctrl] + [Z]와 같은 되돌리기 기능을 개발할 때 주로 이용함
- 옵저버
- 한 객체의 상태가 변화하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태를 전달하는 패턴
- 상태
- 객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용
- 객체 상태를 캡슐화하고 참조하는 방식으로 처리
- 전략
- 동일한 계열의 알고리즘들을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의하는 패턴
- 독립적으로 원하는 알고리즘을 선택하여 사용할 수 있으며, 클라이언트에 영향 없이 알고리즘의 변경이 가능함
- 템플릿 메소드
- 상위 클래스에서 골격을 정의하고, 세부 처리를 구체화하는 구조의 패턴
- 유사한 서브 클래스를 묶어 상위 클래스에서 정의함으로써 코드의 양을 줄이고 유지보수를 용이하게 해줌
- 팩토리 메소드랑 유사한 개념
- 방문자
- 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성
- 처리 기능은 각 클래스를 방문하여 수행함
개발 지원 도구
- 통합 개발 환경(IDE)
- 개발에 필요한 환경, 편집기, 컴파일러, 디버거 등의 다양한 툴을 하나의 인터페이스로 통합하여 제공하는 환경
- 통합 개발 환경 도구의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/75d3e0ec-ebbb-4cf8-a15d-87081f469a8c/스크린샷_2024-10-17_오전_6.36.36.png
- 빌드 도구
- 소스 코드 파일들을 컴퓨터에서 실행할 수 있는 제품 소프트웨어로 변환하는 과정 또는 결과물
- 빌드 도구는 전처리, 컴파일 등의 작업을 수행함
- 대표적인 빌드 도구
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/9ead9c7d-9b55-4491-99e5-45eab4bb2dfc/스크린샷_2024-10-17_오전_6.38.07.png
- 기타 협업 도구
- 개발에 참여하는 사람들이 서로 다른 작업 환경에서 원활하게 프로젝트를 수행할 수 있도록 도와주는 도구
서버 개발
- 서버 개발
- 웹 애플리케이션의 로직을 구현할 서버 프로그램을 제작하여 웹 어플리케이션 서버(WAS)에 탑재하는 것
- 프로그래밍 언어는 Java, Js, Python 등
- 서버 개발 프레임워크
- 서버 프로그램 개발 시 다양한 네트워크 설정, 요청 및 응답 처리, 아키텍처 모델 구현 등을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어
- 대부분 MVC 패턴 기반
- 서버 개발 프레임워크의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ab47a184-5820-48a6-a1dc-825762eb055b/스크린샷_2024-10-17_오전_6.40.49.png
- 서버 개발 과정
- DTO/VO, SQL, DAO, Service, Controller를 각각 구현하는 과정
- 순서는 임의로 변경 가능
- MVC 접근법!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/88a56a82-f952-457f-8a0b-33efc75524ba/스크린샷_2024-10-17_오전_6.42.08.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/f856da4b-e749-42d1-a66b-525b79357309/스크린샷_2024-10-17_오전_6.41.51.png
- 구현 과정과정 내용
DTO/VO 구현 - 데이터 교환을 위해 사용할 객체를 만드는 과정 - 송, 수신할 데이터의 자료형에 맞는 변수 및 객체를 생성함 | | SQL 구현 | - 데이터의 삽입, 변경, 삭제등의 작업을 수행할 SQL문 생성
- 소스 코드 내에 직접 입력, 또는 별도의 XML 파일로 관리 | | DAO 구현 | 데이터베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드를 구현 | | Service 구현 | 요청에 응답하기 위한 로직을 구현 | | Controller 구현 | 적절한 서비스를 호출하여 결과를 반환하는 코드 구현 |
배치 프로그램
- 배치 프로그램
- 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하도록 만든 프로그램을 의미함
- 배치 프로그램의 필수 요소
- 대용량 데이터
- 자동화
- 견고성
- 안정성/신뢰성
- 성능
- 배치 스케줄러
- 일괄 처리 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구
- 특정 업무를 원하는 시간에 처리할 수 있도록 지원
- 잡 스케줄러라고도 불림
- 배치 스케줄러의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/94ee26a1-6696-4351-9301-aff965427e50/스크린샷_2024-10-17_오전_6.54.41.png
- crontab 명령어 작성 방법!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/fbe11882-5246-4e94-9184-ddb656d62b67/스크린샷_2024-10-17_오전_6.56.06.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/590757e4-e084-4755-8a2b-b4e21db29389/스크린샷_2024-10-17_오전_6.55.04.png
시스템 인터페이스 요구사항 분석
- 시스템 인터페이스 요구사항
- 개발할 시스템과 외부 시스템을 연동하는데 필요한 시스템
- 시스템 인터페이스 요구사항 명세서의 구성 요소
- 인터페이스 이름
- 연계 대상 시스템
- 연계 범위 및 내용
- 연계 방식
- 송신 데이터
- 인터페이스 주기
- 기타 고려사항
- 시스템 인터페이스 요구사항 분석
- 요구사항 분류하고 구체적으로 명세한 후 이를 이해관계자에게 전달
- 요구사항 분석 기법을 적절히 이용함
- 요구사항 분해가 필요한 경우 적절한 수준으로 세분화함
- 요구사항 분석 시 누락된 요구사항이나 제한 조건을 추가함
- 상대적 중요도를 평가하여 우선순위를 부여함
- 시스템 인터페이스 요구사항 분석 절차
- 관련 요구사항을 선별하여 별도로 요구사항 목록을 만듦
- 관련된 자료를 준비
- 기능, 비기능 요구사항으로 분리
- 요구사항 명세서에 내용을 추가하거나 수정
- 요구사항 명세서와 요구사항 목록을 이해관계자에게 전달
인터페이스 요구사항 검증
- 인터페이스 요구사항 검증
- 사용자들의 요구사항이 요구사항 명세서에 기술되었는지 검토하고 베이스라인 설정
- 검증 수행 순서
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/715b61d2-dc78-43a7-8169-eaadaf75908f/스크린샷_2024-10-17_오전_7.12.45.png
- 요구사항 검증 방법
- 요구사항 검토
- 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석동료 검토 명세서 작성자가 내용을 직접 설명하고 동려들이 결함을 발견
워크스루 요구사항 명세서를 미리 배포하여 사전 검토 후 검토회를 통해 결함 발견 인스펙션 다른 검토 전문가들이 결함을 발견하는 형태의 검토 방법
- 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석동료 검토 명세서 작성자가 내용을 직접 설명하고 동려들이 결함을 발견
- 프로토 타이핑
- 견본품을 만들어 최종 결과물을 예측
- 테스트 설계
- 요구사항이 현실적으로 테스트 가능한지를 검토
- CASE 도구 활용
- 일관성 분석
- 요구사항 검토
- 요구사항 검증의 주요 항목
- 완전성
- 일관성
- 명확성
- 기능성
- 검증 가능성
- 추적 가능성
- 변경 용이성
송,수신 데이터 식별
- 식별 대상 데이터
- 송 수신 시스템 사이에서 교환되는 데이터로, 규격화된 표준 형식에 따라 전송
- 교환되는 데이터의 종류
- 인터페이스 표준 항목
- 송,수신 데이터 항목
- 공통 코드
- 인터페이스 표준 항목
- 송 수신 시스템을 연계하는데 표준적으로 필요한 데이터
- 시스템 공통부와 거래 공통부시스템 공통부 시스템 간 연동 시 공통 정보
거래 공통부 송 수신되는 데이터를 처리할 때 필요한 정보
- 송, 수신 데이터 항목
- 송 수신 시스템이 업무를 수행하는데 사용하는 데이터
- 데이터 항목과 순서는 인터페이스별로 다름
- 공통 코드
- 시스템들에서 공통적으로 사용하는 코드
- 정보 흐름 식별
- 개발할 시스템과 내 외부 시스템 사이 방향성을 식별
- 송, 수신 데이터 식별
- 개발할 시스템과 연계할 내, 외부 시스템 사이의 정보 흐름과 데이터베이스 산출물을 기반으로 식별
- 인터페이스 표준 항목과 송, 수신 데이터 항목 식별
- 교환 범위를 확인하고 송, 수신 데이터 항목을 식별
- 코드성 데이터 항목 식별
- 코드성 데이터 항목에 대해 코드, 코드명, 코드 설명 등의 코드 정보를 식별
인터페이스 방법 명세화
- 인터페이스 방법 명세화
- 내, 외부 시스템에 연계하여 작동할 때 인터페이스별 송, 수신 방법, 송, 수신 데이터, 오류 식별 및 처리 방안 내용을 문서로 정리
- 송, 수신 방법 명세화
- 각각의 인터페이스에 대해 연계 방식, 통신 및 처리 유형, 발생 주기 등의 송, 수신 방법을 정의하고 명세를 정의
- 송, 수신 데이터 명세화
- 송, 수신 데이터에 대한 명세를 작성
- 오류 식별 및 처리 방안 명세화
- 오류를 식별하고 오류 처리 방안에 대한 명세를 작성
- 인터페이스별로 송, 수신 방법을 명세화하기 위해 필요한 정보
- 시스템 연계 기술
- 인터페이스 통신 유형
- 처리 유형
- 발생 주기
- 시스템 연계 기술
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ea517563-223a-405f-b09e-7ad04e74137d/스크린샷_2024-10-17_오전_7.21.49.png
- 인터페이스 통신 유형유형 내용
단방향 요청만 하고 응답이 없는 형식 동기 요청 후 응답이 올 때 까지 대기 비동기 요청 후 다른 작업을 수행하다 응답이 오면 처리 - 인터페이스 처리 유형유형 내용
실시간 방식 요청 내용을 바로 처리 지연 처리 방식 데이터를 매 건 단위로 처리할 경우 비용이 많이 발생할 때 배치 방식 대량의 데이터를 처리할 때 사용 - 인터페이스 발생 주기
- 개발할 시스템과 내,외부 시스템 간 송, 수신 데이터가 전송되어 인터페이스가 사용되는 주기를 의미
미들웨어 솔루션
- 미들웨어
- 운영체제와 응용 프로그램, 서버와 클라이언트 사이에서 다양한 서비스를 제공하는 소프트웨어
- 표준화된 인터페이스를 제공함으로써 시스템 간의 데이터 교환에 일관성을 보장함
- 미들웨어의 종류
- DB
- RPC
- MOM
- TP-Monitor
- ORB
- WAS
- DB
- 클라이언트에서 원격의 데이터베이스와 연결하는 미들웨어
- RPC(원격 프로시저 호출)
- 원격 프로시저를 마치 로컬 프로시저처럼 호출하는 미들웨어
- MOM(메시지 지향 미들웨어)
- 비동기형 메시지를 전달하는 미들웨어
- 이기종 분산 데이터 시스템의 데이터 동기를 위해 많이 사용됨
- TP-Monitor(트랜잭션 처리 모니터)
- 트랜잭션을 처리 및 감시하는 미들웨어
- 사용자 수가 증가해도 빠른 응답 속도를 유지해야 하는 업무로 사용함
- ORB(객체 요청 브로커)
- 객체 지향 미들웨어
- TP-Monitor의 장점인 트랜잭션 처리와 모니터링 등을 추가로 구현한 제품도 존재
- WAS(웹 애플리케이션 서버)
- 동적인 콘텐츠를 처리하기 위한 미들웨어
- 웹 환경을 구현하기 위한 미들웨어
모듈 연계를 위한 인터페이스 기능 식별
- 모듈 연계
- 내부 모듈과 외부 모듈 또는 내부 모듈 간 데이터의 교환을 위해 관계를 설정
- 대표적인 모듈 연계 방법
- EAI(Enterprise Application Integration)
- ESB(Enterprise Service Bus)
- 웹 서비스
- EAI
- 기업 내 각종 애플리케이션 및 플랫폼 간의 정보 전달, 연계, 통합 등 상호 연동이 가능하게 해주는 솔루션
- EAI의 구축 유형!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/a0aa8dfd-9951-4aea-af16-c87a22f594df/스크린샷_2024-10-17_오전_7.30.46.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/2b0b459f-2766-47a5-90ad-6da23f43bb0a/스크린샷_2024-10-17_오전_7.30.26.png
- ESB
- 애플리케이션 간 연계, 표준 기반의 인터페이스를 제공하는 솔루션
- 애플리케이션 통합측면에서 EAI와 유사하지만 서비스 중심의 통합을 지향
- 범용적으로 사용하기 위해 결합도 약하게 유지
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/e66c3ffa-ac3d-4d18-adf6-cdd66bd2cf14/스크린샷_2024-10-17_오전_7.31.40.png
- 웹 서비스
- 네트워크의 정보를 표준화된 서비스 형태로 만들어 공유하는 기술
- 서비스 지향 아키텍처(SOA) 개념
- 웹 서비스의 구성
- SOAP
- HTTP, HTTPS, SMTP 등을 활용하여 XML기반의 메시지 교환
- UDDI
- WSDL을 등록하여 서비스와 서비스 제공자를 검색하고 접근하는데 사용
- WSDL
- 웹 서비스명, 서비스 제공 위치, 프로토콜 XML 형식으로 구현
- SOAP
- 모듈 간 인터페이스 기능 식별
- 식별된 모듈 간 관련 기능을 검토하여 인터페이스 동작에 필요한 기능을 식별
- 모듈 간 동작하는 기능을 통해 인터페이스 기능을 식별
- 시나리를 통해 내부 모듈과 관련된 인터페이스 기능을 식별
- 실제적으로 필요한 인터페이스 기능을 최종적으로 선별
- 인터페이스 기능 구현을 정의하는데 사용
모듈 간 인터페이스 데이터 표준 확인
- 인터페이스 데이터 표준
- 모듈 간 인터페이스에 사용되는 데이터의 형식을 표준화하는 것
- 기존의 데이터 중에서 공통 영역을 추출하거나 어느 한쪽의 데이터를 변환하여 정의함
- 인터페이스 데이터 표준 확인
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/63553d08-9c94-475c-8a0e-7b4d8d7403ad/스크린샷_2024-10-17_오전_7.35.24.png
인터페이스 기능 구현의 정의
- 인터페이스 기능 구현의 정의
- 인터페이스를 실제로 구현하기 위해 인터페이스 기능에 대한 구현 방법을 기능별로 기술하는 것
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/8f142ab7-d2a2-40d8-aa12-e077b965e368/스크린샷_2024-10-17_오전_7.36.10.png
- 모듈 세부 설계서
- 모듈의 구성 요소와 세부적인 동작 등을 정의한 설계서
- 모듈 세부 설계서 종류컴포넌트 명세서 컴포넌트 개요, 내부 클래스의 동작, 외부와의 통신하는 명세 등을 정의
인터페이스 명세서 인터페이스 클래스의 세부 조건 및 기능 등을 정의
인터페이스 구현
- 인터페이스 구현
- 송, 수신 시스템 간의 데이터 교환 및 처리를 실현해 주는 작업
- 대표적인 인터페이스 구현 방법
- 데이터 통신을 이용한 인터페이스 구현
- 인터페이스 엔티티를 이용한 인터페이스 구현
- AJAX
- JS를 이용하여 클라이언트와 서버 간에 XML 데이터를 주고 받는 비동기 통신 기술
- 웹 페이지 일부 영역만을 업데이트 할 수 있음
- JSON
- 용량이 적은 데이터를 교환하기 위해 데이터 객체를 속성, 값의 쌍 형태로 표현하는 개방형 표준 포맷
- 데이터 통신을 이용한 인터페이스 구현
- ex) JSON을 이용한 인터페이스 구현 순서
- 인터페이스 객체를 생성, 각 시스템 환경에 맞게 선택함
- JSON 이용해 인터페이스 객체를 만듦
- 인터페이스 객체를 AJAX 기술 등을 이용하여 수신 측으로 보냄
- 인터페이스 객체를 수신해 파싱한 후 처리함
- 수신 측에서 송신 측으로 처리 결과를 보냄
- ex) JSON을 이용한 인터페이스 구현 순서
- 인터페이스 엔티티를 이용한 인터페이스 구현
- 인터페이스가 필요한 시스템 사이에 별도의 인터페이스 엔티티를 두어 상호 연계하는 것
- 테이블을 엔티티로 활용함
- ex) 인터페이스 테이블을 이용한 인터페이스 구현 순서
- 인터페이스 이벤트가 발생하면 인터페이스 데이터를 기록
- 송신 측 인터페이스 테이블에 인터페이스 데이터를 전송
- 수신 측 인터페이스 테이블에 입력되면 인터페이스 데이터를 읽음
- 수신 측 인터페이스 테이블에서 읽은 후 사전에 정의된 데이터 트랜잭션 수행
인터페이스 보안
- 인터페이스 보안
- 인터페이스의 보안 취약점 분석 후 적절한 보안 기능을 적용
- 인터페이스 보안 기능 적용
- 인터페이스 아키텍처에 따라 IPSec, SSL, S-HTTP를 사용 | | --- | --- | | 애플리케이션 영역 | 보안 가이드를 참조하여 코드 상의 보안 취약점을 보완 | | 데이터베이스 영역 | - 데이터베이스, 스키마, 엔티티의 접근 권한과 프로시저, 트리거 등 동작 객체의 보안 취약점에 보안 기능 적용
- 개인 정보나 업무상 민감한 데이터의 경우 암호화나 익명화 등 데이터 자체의 보안 방안도 고려 |
- | 네트워크 영역 | - 스니핑 등을 이용한 데이터 탈취 및 변조 위협을 방지하기 위해 네트워크 트래픽에 대한 암호화를 설정
- 데이터 무결성 검사 도구
- 인터페이스 보안 취약점을 분석하는데 사용되는 도구
- 시스템 파일의 변경 유무를 확인하고, 파일이 변경되었을 경우 이를 관리자에게 알려줌
- 종류
- TripWire
- AIDE
- Samhain
- Claymore
- Slipwire
- Fcheck
인터페이스 구현 검증
- 인터페이스 구현 검증
- 인터페이스가 정상적으로 문제없이 작동하는지 확인
- 인터페이스 구현 검증 도구, 감시 도구를 이용
- 인터페이스 구현 검증 도구
- 인터페이스 단위 기능과 시나리오 등을 기반으로 하는 통합 테스트가 필요함
- 테스트 자동화 도구
- 인터페이스 구현 감시 도구
- 동작 상태는 APM(애플리케이션 성능 관리)을 사용하여 감시(Monitoring)할 수 있음
- APM을 통해 종합적인 정보를 조회하고 분석할 수 있음
- 대표적인 APM
- 스카우터
- 제니퍼
- APM(Application Performance Management/Monitoring)
- 애플리케이션의 성능 관리를 위해 다양한 모니터링 기능을 제공하는 도구
- APM은 리소스 방식과 엔드투엔드의 두 가지 유형이 있음
- 리소스 방식
- Nagios, Zabbix, Carti
- 엔드투엔드 방식
- VisualVM, 제니퍼, 스카우터
- 리소스 방식
사용자 인터페이스
- 사용자 인터페이스(UI, User Interface)
- 사용자와 시스템 간의 상호작용이 이뤄지도록 도와주는 장치나 소프트웨어
- 사용자 인터페이스의 세 가지 분야
- 물리적 제어
- 상세적인 표현과 전체적인 구성
- 편리하고 간편하게 사용하도록 하는 기능
- 사용자 인터페이스의 구분구분 내용
CLI 명령과 출력이 텍스트 형태로 이루어지는 인터페이스 GUI 아이콘이나 메뉴를 마우스로 선택하여 작업을 수행하는 그래픽 환경의 인터페이스 NUI 말이나 행동으로 기기를 조작하는 인터페이스 - 사용자 인터페이스의 기본 원칙
- 직관성
- 유효성
- 학습성
- 유연성
UI 설계 도구
- 와이어프레임
- 페이지에 대한 개략적인 레이아웃이나 뼈대를 설계하는 도구
- 페이지의 영역 구분, 콘텐츠, 텍스트 배치 등을 화면 단위로 설계함
- 목업
- 실제 화면과 유사하게 만든 정적인 형태의 모형
- 스토리보드
- 와이어프레임에 콘텐츠에 대한 설명, 페이지 간 이동 흐름 등을 추가한 문서
- 디자이너와 개발자가 최종적으로 참고하는 작업 지침서
- 서비스 구축을 위한 모든 정보가 들어 있음
- 프로토타입
- 와이어프레임이나 스토리보드 등에 인터랙션을 적용함으로써 실제 구현된 것처럼 테스트가 가능한 동적인 형태의 모형
- 종류
- 제작 기간이 짧은 경우, 제작 비용이 적을 경우, 업무 협의가 빠를 경우 | | --- | --- | | 디지털 프로토타입 | - 파워포인트, 아크로뱃, 비지오, 옴니그래플 등과 같은 프로그램을 사용
- 재사용이 필요한 경우, 산출물과 비슷한 효과가 필요한 경우, 숙력된 전문가가 있는 경우 |
- | 페이퍼 프로토타입 | - 아날로그적인 방법
- 유스케이스
- 사용자의 요구사항을 기능 단위로 표현
- 사용자가 원하는 목표를 달성하기 위해 수행할 내용을 기술함
- 사용자의 요구사항을 빠르게 파악함으로써 초기에 시스템의 기능적인 요구를 결정
- 다이어그램 형식으로 묘사됨
품질 요구사항
- 품질 요구사항
- 사용자의 입장에서 얼마나 충족하는가
- 사용자의 요구사항을 충족시킴으로써 확립
- 소프트웨어 품질 관련 표준
- ISO/IEC 9126의 소프트웨어 품질 특성
UI 설계서
- UI 설계서
- 요구사항을 바탕으로 UI 설계를 구체화하여 작성하는 문서
- 기획자, 개발자, 디자이너 등과의 원할한 의사소통을 위함
- UI 흐름 설계
- UI 상세 설계
- 실제 설계 구현을 위해 자세하게 설계
- 반드시 시나리오를 작성해야함
- UI 시나리오 문서
- 사용자 인터페이스의 기능 구조, 대표 화면, 화면 간 인터랙션의 흐름, 다양한 상황에서의 예외 처리 등을 정리한 문서
- 사용자가 최종 목표를 달성하기 위한 방법이 순차적으로 묘사되어 있음
- UI 시나리오 문서의 요건
- 완전성
- 일관성
- 이해성
- 가독성
- 수정 용이성
- 추적 용이성
- UI 상세 설계 순서
HCI / UX / 감성공학
- HCI(Human Computer Interaction or Inteface)
- 사람이 시스템을 보다 편리하고 안전하게 사용할 수 있도록 연구하고 개발하는 학문
- 최종목표는 최적의 UX 만드는 것
- 어떤 제품이 좋은 제품인지, 어떻게 하면 좋은 제품을 만들 수 있는지 연구
- UX(User Experience)
- 사용자가 시스템이나 서비스를 이용하면서 느끼고 생각하게 되는 총체적인 경험
- UI가 사용성, 접근성, 편의성을 중시한다면, UX는 UI를 통해 사용자가 느끼는 만족이나 감정 중시
- 기술을 효용성 측면만 아니라 삶의 질을 향상시키는 하나의 방향으로 봄
- UX의 특징
- 주관성
- 정황성
- 총체성
- 감성공학
- 제품이나 작업환경을 사용자의 감성에 알맞도록 설계 및 제작하는 기술
- 여러 분야의 학문이 공존하는 종합과학임
- 목적은 인간의 삶을 편리하고 안전하며 쾌적하게 만드는 것
- 인간의 감성을 제품 설계에 적용하기 위해 공학적인 접근 방법 사용
애플리케이션 테스트
- 애플리케이션 테스트
- 애플리케이션에 잠재되어 있는 결함을 찾아내는 일련의 행위 또는 절차
- 고객의 요구사항을 만족시키는지 확인하고 소프트웨어가 기능을 정확히 수행하는지 검증함
- 애플리케이션의 기본 원리기본 원리 설명
완벽한 테스트 불가능 잠재적인 결함을 줄일 수 있지만 결함이 없다고 증명할 수 없음 파레토 법칙 20%에 해당하는 코드에서 전체 결함의 80%가 발견된다는 법칙 살충제 패러독스 동일한 테스트 케이스로 동일한 테스트를 반복하면 더 이상 결함이 발견되지 않는 현상 테스팅은 정황 의존 소프트웨어의 특징, 테스트 환경, 테스터의 역량 등 정황에 따라 테스트 결과가 달라질 수 있으므로, 정황에 따라 다르게 테스트를 수행해야함 오류-부재의 궤변 결함을 모두 제거해도, 사용자의 요구사항을 만족시키지 못하면 품질이 높다고 할 수 없다. 테스트와 위험은 반비례 테스트를 할 수록 미래에 발생할 위험을 줄일 수 있음 테스트의 점진적 확대 작은 부분에서 시작하여 점점 확대하며 진행 테스트의 별도 팀 수행 개발자와 관계없는 별도의 팀에서 수행
애플리케이션 테스트의 분류
- 프로그램 실행 여부에 따른 테스트
- 소스 코드에 대한 코딩 표준, 코딩 스타일, 코드 복잡도, 남은 결합 등을 발견하기 위함
- 종류: 워크스루, 인스펙션, 코드 검사 | | --- | --- | | 동적 테스트 | - 프로그램을 실행하여 오류를 찾는 테스트
- 개발의 모든 단계에서 테스트를 수행
- 종류: 블랙박스 테스트, 화이트박스 테스트 |
- | 정적 테스트 | - 프로그램을 실행하지 않고 명세사나 소스 코드를 대상으로 분석
- 테스트 기반에 따른 테스트
- 종류: 동등 분할, 경계 값 분석 등 | | --- | --- | | 구조 기반 테스트 | - 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인
- 종류: 구문 기반, 결정 기반, 조건 기반 등 | | 경험 기반 테스트 | - 유사 소프트웨어나 기술 등에 대한 테스터의 경험을 기반으로 수행
- 명세가 불충분하거나 테스트 시간에 제약이 있는 경우
- 종류: 에러 추정, 체크 리스트, 탐색적 테스팅 |
- | 명세 기반 테스트 | - 사용자의 요구사항에 대한 명세를 빠짐없이 테스트 케이스로 만들어 구현하고 있는지 확인하는 테스트
- 시각에 따른 테스트
- 명세서대로 완성됐는지 테스트 | | --- | --- | | 확인 테스트 | - 사용자의 시각에서 생산된 제품의 결과를 테스트
- 요구한대로 제품이 완성됐는지, 정상적으로 동작하는지 테스트 |
- | 검증 테스트 | - 개발자의 시각에서 제품의 생산 과정을 테스트
- 목적에 따른 테스트회복 테스트 실패하도록 한 후 올바르게 복구되는지 확인
안전 테스트 불법적인 침입으로부터 시스템을 보호할 수 있는지 강도 테스트 과도한 정보량이나 빈도 등을 부과하여 과부하 시에도 정상적으로 실행되는지 성능 테스트 실시간 성능이나 전체적인 효율성을 진단, 응답 시간, 처리량 등을 테스트 구조 테스트 논리적인 경로, 소스 코드의 복잡도 등을 평가 회귀 테스트 변경 또는 수정된 코드에 새로운 결함이 없음을 확인하는 테스트 병행 테스트 변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력하여 결과를 비교하는 테스트
개발 단계에 따른 애플리케이션 테스트
- 개발 단계에 따른 애플리케이션 테스트
- 개발 단계에 따라 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트로 분류됨
- 애플리케이션 테스트와 소프트웨어 개발 단계를 연결하여 표현한 것을 V-모델이라고 함
- 단위 테스트
- 코딩 직후 모듈이나 컴포넌트에 초점을 맞춰 테스트함
- 기능성 테스트를 최우선으로 수행
- 구조 기반 테스트와 명세 기반 테스트로 나뉘지만 주로 구조 기반 테스트를 시행함
- 통합 테스트
- 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트를 의미
- 모듈 간 또는 통합된 컴포넌트 간의 상호 작용 오류를 검사함
- 시스템 테스트
- 완벽하게 수행되는가를 점검
- 기능정 요구사항과 비기능적 요구사항으로 구분하여 각각을 만족하는지 테스트
- 인수 테스트
- 사용자의 요구사항을 충족하는지에 중점을 둠
- 사용자가 직접 테스트함
사용자 인수 테스트 시스템 사용의 적절성 여부를 확인함 운영상의 인수 테스트 - 시스템 관리자가 시스템 인수 시 수행하는 테스트 기법 - 백업/복원 시스템, 재난 복구, 사용자 관리, 정기 점검 | | 계약 인수 테스트 | 계약상의 인수/검수 조건을 준수하는지 여부 | | 규정 인수 테스트 | 정부 지침, 법규, 규정에 맞게 개발 되었는지 여부 | | 알파 테스트 | 사용자가 개발자 앞에서 행하는 테스트 기법 | | 베타 테스트 | 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법 |
통합 테스트
- 통합 테스트
- 단위 테스트가 끝난 모듈을 통합하는 과정에서 발생하는 오류 및 결함을 찾는 테스트 기법
- 종류
- 종류: 빅뱅 통합 테스트 방식 | | --- | --- | | 점진적 통합 방식 | - 모듈 단위로 단계적으로 통합하면서 테스트 하는 방법
- 종류: 하향식 통합 테스트, 상향식 통합 테스트, 혼합식 통합 테스트 |
- | 비점진적 통합 방식 | - 통합하는 절차 없이 모든 모듈이 미리 결합되어 있는 프로그램 전체를 테스트 하는 방법
- 하향식 통합 테스트
- 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트
- 깊이 우선 통합법이나 넓이 우선 통합법을 사용함
- 하향식 통합 테스트 절차
- 제어 모듈은 작성된 프로그램을 사용, 주요 제어 모듈의 종속 모듈들은 스텁으로 대체
- 깊이 우선 또는 넓이 우선 등의 통합 방식에 따라 하위 모듈인 스텁들이 한 번에 하나씩 실제 모듈로 교체
- 모듈이 통합할 때 마다 테스트를 실시함
- 새로운 오류가 발생하지 않음을 보증하기 위해 회귀 테스트를 실시
- 상향식 통합 테스트
- 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트
- 상향식 통합 테스트 절차
- 하위 모듈들을 클러스터로 결합
- 상위 모듈에서 데이터 입,출력을 확인하기 위해 더미 모듈인 드라이버를 작성함
- 통합된 클러스터 단위로 테스트
- 테스트 완료 시, 프로그램 구조의 상위로 이동하여 결합하고 드라이버는 실제 모듈로 대체됨
- 혼합식 통합 테스트
- 하위 수준에는 상향식 통합, 상위 수준에서는 하향식 통합을 사용하여 최적의 테스트를 지원
- 샌드위치 식 통합 테스트 방법이라고도 함
- 회귀 테스팅
- 통합 테스트로 인해 변경된 모듈이나 컴포넌트에 새로운 오류가 있는지 확인
- 이미 테스트된 프로그램의 테스팅을 반복
- 수정한 모듈이나 컴포넌트가 다른 부분에 영향을 미치는지, 오류가 생기지 않았는지 새로운 오류가 발생하지 않음을 보증하기 위해 반복 테스트함.
테스트 케이스/ 테스트 시나리오 / 테스트 오라클
- 테스트 케이스
- 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력 값, 실행 조건, 기대 결과 등으로 구성 된 테스트 항목에 대한 명세서
- 오류 방지, 인력 시간, 자원 낭비를 지울 수 있음
- 테스트 시나리오
- 테스트 케이스를 적용하는 순서에 따라 여러 개의 테스트 케이스를 묶은 집합
- 적용하는 구체적인 절차를 명세함
- 구체적인 절차, 사전 조건, 입력 데이터 등이 설정되어 있음
- 테스트 오라클
- 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입하여 비교
- 테스트 케이스에 대한 예상 결과를 계산하거나 확인함
- 테스트 오라클의 특징
- 제한된 검증
- 모든 테스트 케이스에 적용할 수 없음
- 수학적 기법
- 값을 수학적 기법을 이용하여 구할 수 있음
- 자동화 기법
- 대상 프로그램의 실행, 결과 비교, 커버리지 측정 등을 자동화 할 수 있음
- 제한된 검증
- 테스트 오라클의 종류
- 모든 오류를 검출할 수 있음 | | --- | --- | | 샘플링 오라클 | - 특정한 몇몇 테스트 케이스의 입력 값들에 대해서만 기대하는 결과를 제공
- 전수 테스트가 불가능한 경우 사용 | | 추정 오라클 | - 특정 테스트 케이스의 입력값에 대해 기대하는 결과 제공
- 나머지 입력 값들에 대해서는 추정으로 처리하는 오라클 | | 일관성 검사 오라클 | 애플리케이션에 변경이 있을 때, 테스트 케이스의 수행 전과 후의 결과 값이 동일한지를 확인 |
- | 참 오라클 | - 입력 값에 대해 기대하는 결고라르 제공하는 오라클
테스트 자동화 도구
- 테스트 자동화
- 사람이 반복적으로 수행하던 테스트 절차를 스크립트 형태로 구현하는 자동화 도구를 적용함으로써 쉽고 효율적으로 테스트를 수행할 수 있도록 한 것
- 테스트 유형에 따른 테스트 자동화 도구의 종류
- 정적 분석 도구
- 테스트 실행 도구
- 성능 테스트 도구
- 테스트 통제 도구
- 정적 분석 도구
- 프로그램을 실행하지 않고 분석하는 도구
- 테스트 실행 도구
- 스크립트 언어를 사용하여 테스트를 실행하는 도구
- 데이터 주도 접근 방식
- 데이터를 저장하고 이를 읽어 실행하는 방식
- 키워드 주도 접근 방식
- 수행할 동작을 나타내는 키워드와 테스트 데이터를 저장하여 실행하는 방식
- 성능 테스트 도구
- 가상의 사용자를 만들어 성능의 목표 달성 여부를 확인하는 도구
- 테스트 통제 도구
- 테스트 계획 및 관리, 테스트 수행, 결함 관리 등을 수행하는 도구
- 종류
- 형상 관리 도구
- 결함 추적 / 관리 도구
- 테스트 하네스 도구
- 테스트가 실행될 환경을 시뮬레이션하여 컴포넌트 및 모듈이 정상적으로 테스트되도록 하는 도구
- 테스트 하네스
- 컴포넌트 및 모듈을 테스트하는 환경의 일부분으로, 테스트를 지원하기 위해 생성된 코드와 데이터
- 테스트 하네스의 구성 요소테스트 드라이버
테스트 스텁 테스트 슈트 컴포넌트나 모듈, 시스템에 사용되는 테스트 케이스의 집합 테스트 케이스 테스트 스크립트 테스트 실행절차에 대한 명세서 목 오브젝트 조건부로 입력해 두면, 그 상황에 맞는 예정된 행위를 수행 - 테스트 수행 단계별 테스트 자동화 도구테스트 단계 자동화도구 설명
테스트 계획 요구사항 관리 요구사항 정의 및 변경 사항 등을 관리하는 도구 테스트 분석 / 설계 테스트 케이스 생성 테스트 데이터 및 테스트 케이스 작성을 지원 테스트 수행 테스트 자동화 자동화를 도와주는 도구 정적 분석 코딩 표준, 런타임 오류 검증 동적 분석 시뮬레이션을 통해 오류를 검출 성능 테스트 가상의 사용자를 생성하여 처리 능력을 측정 모니터링 CPU, Memory 등과 같은 시스템 자원의 상태 확인 및 분석을 지원 테스트 관리 커버리지 분석 충분성 여부 검증 형상 관리 도구 및 데이터 관리 결함 추적/ 관리 발생한 결함 추적 및 관리 활동을 지원
결함 관리
- 결함
- 소프트웨어가 개발자가 설계한 것과 다르게 동작하거나 다른 결과가 발생되는 것
- 결함 관리 프로세스
- 결함 상태 추적
- 발견된 결함은 지속적ㄱ으로 상태 변화를 추적하고 관리해야ㅏㅎㅁ
정보시스템 구축관리
개별 환경 구축
- 개발 환경 구축
- 개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축
- 응용 소프트웨어가 운영될 환경과 유사한 구조로 구축
- 하드웨어와 소프트웨어를 선정함
- 성능, 편의성, 라이선스 등의 비즈니스 환경에 적합한 제품들을 최종적으로 결정하여 구축함
- 하드웨어 환경
- 사용자와의 인터페이스 역할을 하는 클라이언트, 서비스를 제공하는 서버로 구성
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/fdcae290-8799-49e3-8f8e-d909a5ecd7c2/스크린샷_2024-10-12_오후_10.31.17.png
- 클라이언트의 종류
- 개인용 컴퓨터(PC), 스마트폰 등
- 서버의 종류종류 특징
웹 서버 - 직접 요청을 받아 처리함 - 정적 파일들을 제공함 | | 웹 애플리케이션 서버(WAS) | 동적 서비스를 제공하거나 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행함 | | 데이터베이스 서버 | 데이터베이스와 이를 관리하는 DBMS를 운영함 | | 파일 서버 | 데이터베이스에 저장하기에는 비효율적이거나, 서비스 제공을 목적으로 유지하는 파일들을 저장함 |
- 소프트웨어 환경
- 클라이언트와 서버 운영을 위한 시스템 소프트웨어와 개발에 사용되는 개발 소프트웨어로 구성됨
- 시스템 소프트웨어의 종류
- 운영체제, 웹 서버 및 WAS 운용을 위한 서버 프로그램, DBMS
- 개발 소프트웨어의 종류종류 특징
요구사항 관리 도구 요구사항의 수집과 분석, 추적 등을 편리하게 도와주는 소프트웨어 설계/모델링 도구 UML을 지원하며, 전 과정에서 설계 및 모델링을 도와주는 소프트웨어 구현 도구 개발 언어를 통해 실제 구현을 지원하는 소프트웨어 빌드 도구 소스의 빌드 및 배포, 라이브러리 관리를 지원하는 소프트웨어 테스트 도구 모듈들이 요구사항에 적합하게 구현되었는지 테스트하는 소프트웨어 형상 관리 도구 버전별로 관리하여 품질 형상을 지원하는 소프트웨어 - 웹 서버의 기능기능 내용
HTTP/HTTPS 지원 브라우저로부터 요청을 받아 응답할 때 사용되는 프로토콜 통신 기록 처리한 요청들을 로그 파일로 기록하는 기능 정적 파일 관리 HTML, CSS, 이미지 등의 정적 파일들을 저장하고 관리 대역폭 제한 트래픽의 포화를 방지하기 위해 응답 속도 제한 가상 호스팅 여러 개의 도메인 이름을 연결하는 기능 인증 합법적인 사용자인지를 확인 - 개발 언어의 선정 기준기준 내용
적정성 개발하려는 소프트웨어의 목적에 적합해야 함 효율성 코드의 작성 및 구현이 효율적이어야 함 이식성 다양한 시스템 및 환경에 적용이 가능해야 함 친밀성 개발 언어에 대한 개발자들의 이해도와 활용도가 높아야 함 범용성 다른 개발 사례가 존재하고 여러 분야에서 활용되고 있어야 함
소프트웨어 아키텍처
- 소프트웨어 아키텍처
- 소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체
- 분할 방법과 분할된 모듈에 할당될 기능, 모듈 간의 인터페이스 등을 결정함
- 소프트웨어 아키텍처 설계의 기본 원리, 모듈화, 추상화, 단계적 분, 정보은닉이 있음
- 모듈화
- 소프트웨어의 성능 향상, 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 시스템의 기능들을 모듈 단위로 나누는 것을 의미함
- 모듈의 크기를 너무 작게 나누면 개수가 많아져 모듈 간의 통합 비용이 많이 듬
- 모듈의 크기를 너무 크게 나누면 개수가 적어 통합 비용은 적게 들지만 모듈 하나의 개발 비용이 많이 듬
- 추상화
- 전체적이고 포괄적인 개념을 설계한 후 구체화시켜 나가는 것
- 완전한 시스템을 구축하기 전에, 유사한 모델을 만들어서 여러 가지 요인들을 테스트 할 수 있음
- 추상화의 유형과정 추상화 전반적인 흐름만 파악
데이터 추상화 데이터 구조를 대표할 수 있는 표현으로 대체하는 방법 제어 추상화 이벤트 발생의 대표할 수 있는 표현
- 단계적 분해
- 상위의 중요 개념으로부터 하위의 개념으로 구체화 시키는 분할 기법
- 하향식 설계 전략
- 포괄적인 기능에서부터 점차적으로 구체화
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/50d04f5a-7fcf-4c1e-b9e5-493ff044b48d/스크린샷_2024-10-12_오후_11.25.52.png
- 정보 은닉
- 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법
- 모듈을 독립적으로 수행할 수 있음
- 하나의 모듈이 변경되더라도 다른 모듈에 영향을 주지 않으므로 수정, 시험, 유지보수가 용이함
- 상위 설계와 하위 설계
- 소프트웨어 개발의 설계 단계는 크게 상위 설계와 하위 설계로 구분할 수 있음
별칭 아키텍쳐 설계, 예비 설계 모듈 설계, 상세 설계 설계 대상 전체적인 구조 내부 구조 및 행위 세부 목록 구조, DB, 인터페이스 컴포넌트, 자료구조, 알고리즘 - 소프트웨어 아키텍처의 품질 속성
- 이해관계자들이 요구하는 수준의 품질을 유지 및 보장할 수 있게 설계되었는지 확인하기 위해 품질 평가 요소들을 구체화 시켜 놓은 것
- 품질 평가 요소의 종류시스템 측면 성증, 보안, 가용성, 기능성, 사용성, 변경 용이성, 확장성 등
비즈니스 측면 시장 적시성, 비용과 혜택, 예상 시스템 수명, 목표 시장, 공개 일정 등 아키텍처 측면 개념적 무결성, 정확성, 완결성, 구축 가능성, 변경성, 시험성 등
- 소프트웨어 아키텍쳐의 설계 과정
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/f58f2955-b009-4fbf-b275-e8b26a59fe93/스크린샷_2024-10-12_오후_11.30.37.png
- 협약(Contract)에 의한 설계
- 컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것
- 정확한 인터페이스를 명세함
- 명세에 포함될 조건조건 내용
선행 조건 오퍼레이션이 호출되기 전에 참이 되어야 할 조건 결과 조건 오퍼레이션이 수행된 후 만족되어야 할 조건 불변 조건 오퍼레이션이 실행되는 동안 항상 만족되어야 할 조건
아키텍처 패턴
- 아키택처 패턴
- 아키택처를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 주요 아키텍처 패턴의 종류
- 레이어 패턴
- 클라이언트-서버 패턴
- 파이프-필터 패턴
- 모델-뷰-컨트롤러 패턴
- 레이어 패턴
- 시스템을 계층으로 구분하여 구성하는 패턴
- 서로 마주보는 두 개의 계층 사이에서만 사용작용이 이루어짐
- 대표적으로 OSI참조 모델이 있음
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ab3f22c4-63c5-40e2-893d-cb7558a31719/스크린샷_2024-10-12_오후_11.50.54.png
- 클라이언트-서버 패턴
- 파이프-필터 패턴
- 데이터 스트림 절차를 필터로 캡슐화하여 파이프를 통해 전송하는 패턴
- 앞 시스템의 처리 결과물을 처리한 후 다시 파이프를 통해 다음 시스템으로 넘겨주는 패턴을 반복함
- 데이터 변환, 버퍼링, 동기화 등에 주로 사용됨
- 대표적으로 UNIX의 쉘이 있음
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/c0f0c61e-109f-43dd-aa8f-917de3ad3a2f/스크린샷_2024-10-12_오후_11.53.22.png
- 모델-뷰-컨트롤러 패턴
- 서브시스템을 모델, 뷰, 컨트롤러로 구조화하는 패턴
- 사용자의 요청을 받으면 핵심 기능과 데이터를 보관하는 모델을 이용하여 뷰에 정보를 출력하는 구조임
- 여러 개의 뷰를 만들 수 있음
- 한 개의 모델에 대해 여러 개의 뷰를 필요로 하는 대화형 애플리케이션에 적합함
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/797097ff-90b3-430f-8eed-7737a9a4de38/스크린샷_2024-10-12_오후_11.55.48.png
- 기타 패턴종류 내용
마스터-슬레이브 패턴 슬레이브 컴포넌트에서 처리된 결과물을 다시 돌려받는 방식으로 작업 예) 장애 허용 시스템, 병렬 컴퓨팅 시스템 브로커 패턴 사용자가 원하는 서비스와 특성을 브로커 컴포넌트에 요청하면 요청에 맞는 컴포넌트와 사용자를 연결해주는 패턴 예) 분산 환경 시스템 피어-투-피어 패턴 피어라 불리는 하나의 컴포넌트가 클라이언트가 될 수도, 서버가 될 수도 있는 패턴 예) 파일 공유 네트워크 이벤트-버스 패턴 이벤트 메시지를 발행(Publish)하면, 해당 채널을 구독(Subscribe)한 리스너들이 메시지를 받아 이벤트를 처리 예) 알림 서비스 블랙보드 패턴 모든 컴포넌트들이 공유 데이터 저장소와 블랙보드 컴포넌트에 접근이 가능한 패턴 예) 음성 인식, 차량 식별, 신호 해석 인터프리터 패턴 프로그램 코드의 각 라인을 수행하는 방법을 지정하고, 기호마다 클래스를 갖도록 구성된 패턴 예) 번역기, 컴파일러, 인터프리터
객체지향
- 객체지향
- 각 요소들을 객체로 만든 후, 객체들을 조립해서 소프트웨어를 개발하는 기법
- 재사용 및 확장이 용이
- 객체지향의 구성 요소
- 객체
- 클래스
- 메시지
- 객체지향의 특징
- 캡슐화
- 상속
- 다형성
- 연관성
- 객체
- 데이터와 함수를 묶어 놓은 소프트웨어 모듈
- 데이터
- 객체가 가지고 있는 정보로, 속성이나 상태, 분류 등
- 함수
- 객체가 수행하는 기능으로 객체가 갖는 데이터를 처리하는 알고리즘
- 객체의 상태를 참조하거나 변경하는 수단
- 데이터
- 데이터와 함수를 묶어 놓은 소프트웨어 모듈
- 클래스
- 공통된 속성과 연산을 갖는 객체의 집합
- 속성과 연산을 정의하고 있는 틀
- 클래스에 속한 각각의 객체를 인스턴스 라고 함
- 메시지
- 객체들 간의 상호작용에 사용되는 수단으로, 객체의 동작이나 연산을 일으키는 외부의 요구사항
- 메시지를 받은 객체는 예상된 결과를 반환함
- 캡슐화
- 외부에서의 접근을 제한하기 위해 인터페이스를 제외한 세부 내용을 은닉하는 것
- 외부 모듈의 변경으로 인한 파급효과가 적다
- 상대 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 단순해지고, 객체 간의 결합도가 낮아짐
- 상속
- 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
- 하위 클래스는 물려받은 속성과 연산을 다시 정의하지 않아도 즉시 자신의 속성으로 사용할 수 있음
- 하위 클래스는 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용할 수 있음
- 다형성
- 하나의 메시지에 대해 각각의 객체가 고유한 방법으로 응답할 수 있는 능력
- 예) ‘+’ 연산자의 경우 숫자 클래스에서는 덧셈, 문자 클래스에서는 문자열의 연결 기능으로 사용됨
- 연관성
객체지향 분석 및 설계
- 객체지향 분석의 방법론
- 사용자의 요구사항과 객체, 속성, 연산, 관계 등을 정의하여 모델링하는 작업
- 업무를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석함
- 클래스를 식별하는 것이 주요 목적임
- 객체지향 분석의 방법론종류 내용
Rumbaugh(럼바우) 방법 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어서 수행함 Booch(부치) 방법 - 미시적 개발 프로세스와 거시적 개발 프로세스를 모두 사용함 - 클래스와 객체들을 분석 및 식별하고 속성과 연산을 정의 | | Jacobson 방법 | 유스케이스(Use Case)를 강조하여 사용함 | | Coad와 Yourdon 방법 | - E-R 다이어그램을 사용하여 객체의 행위를 모델링함
- 객체 식별, 구조 식별, 주제 정의, 속성과 인스턴스 연결 정의, 연산과 메시지 연결 정의 등의 과정으로 구성함 | | Wirfs-Brock 방법 | 분석과 설계 간의 구분이 없고 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행함 |
- 럼바우 분석 기법
- 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법
- 객체 모델링 기법
- 분석 활동은 객체 모델링 → 동적 모델링 → 기능 모델링 순
동적 모델링 상태 다이어그램을 이용하여 시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현하는 모델링 기능 모델링 자료 흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링 - 객체지향 설계 원칙
- 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜져야 할 원칙
- SRP, OCP, LSP, ISP, DIP의 다섯 가지 원칙의 앞 글자를 따 SOLID 원칙이라고 부름
- 객체지향 설계 원칙의 종류종류 내용
단일 책임 원칙(SRP) 객체는 단 하나의 책임만 가져야 한다는 원칙 개방-폐쇄 원칙(OCP) 기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계 리스코프 치환 원칙(LSP) 자식 클래스는 부모 클래스의 기능을 수행할 수 있어야 한다. 인터페이스 분리 원칙(ISP) 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다는 원칙 의존 역전 원칙(DIP) 의존 관계 성립 시 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 원칙
모듈
- 모듈
- 모듈화를 통해 분리된 시스템의 각 기능으로, 서브루틴, 서브시스템, 소프트웨어 내의 프로그램, 작업 단위 등을 의미함
- 소프트웨어를 구성하는 각 모듈의 기능이 서로 독립됨을 의미함
- 모듈의 독립성은 결합도와 응집도에 의해 측정됨
- 결합도
- 모듈간의 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계
- 결합도가 약할수록 품질이 높고, 강할수록 품질이 낮음
- 결합도의 종류와 강도
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/8407a7b0-ece0-40c5-b0c9-7f346e809eb7/스크린샷_2024-10-17_오전_12.00.49.png
- 결합도의 종류종류 내용
내용 결합도 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때의 결합도 공통(공유) 결합도 공유되는 공통 데이터 영역을 여러 모듈이 사용할 떄의 결합도 외부 결합도 어떤 모듈에서 선언한 데이터를 외부의 다른 모듈에서 참조할 때의 결합도 제어 결합도 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어 신호나 제어 요소를 전달하는 결합도 - 결합도의 종류종류 내용
스탬프(검인) 결합도 배열이나 레코드 등의 자료 구조로 전달될 때의 결합도 자료 결합도 모듈 간의 인터페이스가 조료 요소로만 구성될 떄의 결합도 - 응집도
- 모듈의 내부 요소들이 서로 관련되어 있는 정도
- 응집도가 강할수록 품질이 높고, 약할수록 품질이 낮음
- 응집도의 종류와 강도
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/74b04a60-4dbc-409d-954b-f398e896efd6/스크린샷_2024-10-17_오전_4.04.12.png
- 응집도의 종류종류 내용
기능적 응집도 모듈 내부의 모든 기능 요소들이 단일 문제와 연관 순차적 응집도 하나의 활동으로부터 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우 교환적 응집도 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 절차적 응집도 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 순차적으로 수행할 경우 시간적 응집도 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성 논리적 응집도 유사한 성격을 갖거나 특정 형태로 분류 우연적 응집도 각 구성 요소들이 서로 관련 없는 요소로만 구성 - 팬인 / 팬아웃
- 팬인은 제어하는 모듈의 수
- 팬아웃은 제어되는 모듈의 수
- 팬인이 높다는 것은 재사용 측면에서 설계가 잘 되어있다고 볼 수 있음
- 팬인이 높은 경우 단일 장애점이 발생할 수 있으므로 중점적인 관리 및 테스트가 필요
- ex) 다음의 시스템 구조도에서 각 모듈의 팬인과 팬아웃을 구하시오.
- 팬인은 빨간색, 팬아웃은 파란색
- N-S차트(Nassi-Schneiderman Chart)
- 논리의 기술에 중점을 두고 도형을 이용해 표현하는 방법
- GOTO나 화살표 이용X
- 연속, 선택 및 다중 선택, 반복의 3가지 제어 논리 구조로 표현
- 시각적으로 명확히 식별하는 데 적합함
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/2e6572e7-1281-4a2c-9941-aed494c5facb/스크린샷_2024-10-17_오전_4.09.53.png
단위 모듈
- 단위 모듈
- 소프트웨어 구현에 필요한 여러 동작 중 한 가지 동작을 수행하는 기능을 모듈로 구현한 것
- 단위 모듈로 구현되는 하나의 기능을 단위 기능
- 독립적인 컴파일이 가능하며, 다른 모듈에 호출되거나 삽입되기도 함
- 단위 모듈의 구현 과정
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/aff3c21d-4b1c-40b9-b055-66c4e27e9528/스크린샷_2024-10-17_오전_4.11.37.png
- IPC(Inter-Process Communication)
- 모듈 간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합
- 복수의 프로세스를 수행, 프로세스 간 통신까지 구현
- IPC의 대표 메소드 5가지
Shared Memory 공유 가능한 메모를 구성 Socket 네트워크 소켓을 이용 Semaphores 공유 자원에 대한 접근 제어를 통해 통신 Pipes&named Pipes - Pipe라고 불리는 선입선출 형태 - Pipe는 하나의 프로세스가 이용 중이라면 다른 프로세스는 접근할 수 없음 | | Message Queueing | 메시지가 발생하면 이를 전달하는 방식으로 통신하는 방식 |
- 단위 모듈 테스트
- 모듈이 정해진 기능을 정확히 수행하는 지 검증하는 것
- 단위 테스트라고도 불림
- 시스템 수준의 오류는 잡아낼 수 없음
- 테스트 케이스
- 소프트웨어가 사용자의 요구사항을 정확하게 준수 했는지를 확인하기 위한 테스트 항목에 대한 명세서
- 테스트 케이스를 이용하지 않은 테스트는 검증이 누락되거나 불필요한 검증의 반복으로 인력과 시간을 낭비 할 수 있음
- ISO/IEC/IEEE 29119-3 표준에 따른 테스트 케이스의 구성 요소
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/5cea3691-6e43-4415-93fb-4f2df80b465d/스크린샷_2024-10-17_오전_4.16.03.png
공통 모듈
- 공통 모듈
- 여러 프로그램에서 공통으로 사용할 수 있는 모듈
- 해당 기능을 명확히 이해할 수 있도록 명세 기법을 준수해야 함
- 공통 모듈 명세 기법의 종류명세 기법 내용
정확성 해당 기능이 필요하다는 것을 알 수 있도록 명확성 이해할 때 중의적으로 해석되지 않도록 작성 완전성 필요한 모든 것을 기술 일관성 상호 충돌이 발생하지 않도록 작성 추적성 요구사항의 출처, 관련 시스템 등의 관계를 파악 - 재사용
- 이미 개발된 기능들을 새로운 시스템이나 기능 개발에 사용하기 적합하도록 최적화하는 작업
- 필요한 비용과 시간을 절약 가능
- 사용법을 공개해야함
- 재사용 규모에 따른 분류함수와 객체 클래스나 메소드 단위
컴포넌트 컴포넌트 자체에 대한 수정 없이 인터페이스를 통해 통신 애플리케이션 공통된 기능들을 제공하는 애플리케이션을 공유
- 효과적인 모듈 설계 방안
- 결합도를 줄이고 응집도를 높여서 모듈의 독립성과 재사용성을 높임
- 복잡도와 중복성을 줄이고 일관성을 유지시킴
- 모듈의 기능이 예측이 가능해야 하며 지나치게 제한적이어서는 안 됨
- 모듈 크기는 시스템의 전반적인 기능과 구조를 이해하기 쉬운 크기로 분해함
- 효과적인 제어를 위해 모듈 간의 계층적 관계를 정의하는 자료가 제시
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/64a6d882-a2c2-40c4-ac20-68fcf342a85b/스크린샷_2024-10-17_오전_6.09.51.png
코드
- 코드
- 자료의 분류, 조합, 집계, 추출을 용이하게 하기 위해 사용하는 기호
- 코드의 주요 기능식별기능 데이터 간의 성격에 따라 구분
분류기능 특정 기준이나 동일한 유형에 해당하는 데이터를 그룹화 배열기능 의미를 부여하여 나열할 수 있음 표준화기능 기준에 맞추어 표현 간소화 기능 복잡한 데이터를 간소화 - 코드의 종류종류 내용
순차코드 발생 순서, 크기 순서 등 일정 기준에 따라 일련번호 부여 예) 1, 2, 3, 4 … 블록 코드 공통성이 있는 것끼리 블록으로 구분하고 일련번호 부여 예) 1001~1100: 총무부, 1101~1200: 영업부 10진 코드 0~9까지 10진 분할하고 다시 그 각각에 대하여 10진 분할하는 방법을 필요한 만큼 반복하는 방법 예) 1000: 공학, 1100: 소프트웨어 공학 1110: 소프트웨어 설계 그룹 분류 코드 일정 기준에 따라 대분류, 중분류, 소분류 등으로 구분하여 일련번호 부여 예) 1-01-001: 본사-총무부-인사계, 2-01-001: 지사-총무부-인사계 연상 코드 명칭이나 약호와 관계있는 숫자와 문자, 기호 이용 예) TV-40: 40인치 TV, L-15-220: 15W 220V의 램프 표의 숫자 코드 성질 즉, 길이, 넓이, 부피, 지름 높이 등의 물리적 수치를 그대로 코드에 적용 예) 120-720-1500: 두께표길이가 1207201500인 강판 합성 코드 하나의 코드로 수행하기 어려운 경우 2개 이상의 코드를 조합하여 만드는 방법 예) 연상 코드 + 순차 코드 KE-711: 대한항공 711기, AC-253: 에어캐나다 253기
디자인 패턴
- 디자인 패턴
- 모듈 간의 관계 및 인터페이스를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 개발 과정 중에 문제가 발생하면 새로 해결책을 구상하는 것보다 문제에 해당하는 디자인 패턴을 참고하여 적용하는 것이 더 효율적임
- GOF의 디자인 패턴은 생성 패턴, 구조 패턴, 행위 패턴으로 구분
- 생성 패턴
- 클래스나 객체의 생성과 참조 과정을 정의하는 패턴
- 추상팩토리
- 구체적인 클래스에 의존하지 않고, 인터페이스를 통해 서로 연관,의존하는 객체들의 그룹으로 생성하여 추상적으로 표현함
- 연관된 서브 클래스를 묶어 한 번에 교체하는 것이 가능함
- ex) 요리 내부의 값을 김치찌개에서 된장찌개로 바꿔도 구체적인 클래스에 의존하지 않았기에 문제가 없는 상황
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/25bb3e1e-5930-42f6-bd97-2910690712ae/스크린샷_2024-10-17_오전_6.19.58.png
- 팩토리 메소드
- 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화한 패턴
- 상위 클래스에서 인터페이스만 정의하고 실제 생성은 서브 클래스가 담당
- ex) 구체적인 선언은 하위 요리 클래스 내부에서 하는 방식
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/462fd286-7cb8-4e76-a338-7d6ebe9a1312/스크린샷_2024-10-17_오전_6.23.13.png
- 빌더
- 작게 분리된 인스턴스를 건축 하듯이 조합하여 객체를 생성함
- 객체의 생성과정과 표현방법을 분리하고 있어, 동일한 객체 생성에서도 서로 다른 결과를 만들어 낼 수 있음
- 프로토타입
- 원본 객체를 복제하는 방법으로 객체를 생성하는 방법
- 싱글톤
- 클래스 내에서 인스턴스가 하나뿐임을 보장
- 하나의 객체를 생성하면 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수 없음.
- 구조 패턴
- 복잡한 시스템을 개발하기 쉽도록 클래스나 객체들을 조합하여 더 큰 구조로 만드는 패턴
- 어댑터
- 다른 클래스가 이용할 수 있도록 변환해주는 패턴
- 인터페이스가 일치하지 않을 때 이용함
- 브릿지
- 구현부에서 추상층을 분리하여, 서로가 독립적으로 확장할 수 있도록 구성
- 기능과 구현을 두 개의 별도 클래스로 구현함
- 컴포지트
- 복합 객체와 단일 객체를 구분 없이 다루고자 할 때 사용하는 패턴
- 객체들을 트리 구조로 구성하여, 복합 객체 안에 복합 객체가 포함되는 구조
- 데코레이터
- 객체 간의 결합을 통해 능동적으로 기능들을 확장
- 임의의 객체에 부가적인 기능을 추가하기 위해 다른 객체들을 덧붙이는 방식으로 구현
- 파싸드
- 서브 클래스들을 피해 인터페이스를 구성함으로써 서브 클래스들의 기능을 간편하게 사용할 수 있는 패턴
- 서브 클래스들 사이의 통합 인터페이스를 제공하는 Wrapper 객체가 필요함
- 플라이웨이트
- 매번 생성하는 것이 아니고 가능한 한 공유해서 사용
- 다수의 유사 객체를 생성하거나 조작할 때 유용
- 프록시
- 네트워크 연결, 메모리의 대용량 객체로의 접근
- 접근이 어려운 객체와 객체 사이에서 인터페이스 역할 수행
- 행위 패턴
- 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴
- 책임 연쇄
- 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴
- 각 객체들이 고리로 묶여 있어 요청이 해결될 때 까지 고리를 따라 책임이 넘어감
- 커맨드
- 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 저장하거나 로그에 남기는 패턴
- 각종 명령어들을 추상클래스와 구체 클래스로 분리
- 인터프리터
- 언어의 문법 표현을 정의하는 패턴
- SQL이나 통신 프로토콜 같은 것을 개발할 때 사용
- 반복자(Iterator)
- 접근이 잦은 객체에 대해 동일한 인터페이스 사용
- 내부 표현 방법의 노출 없이 순차적인 접근 간으
- 중재자
- 수많은 객체들 간의 복잡한 상호작용을 캡슐화 하여 객체로 정의
- 의존성을 줄여 결합도를 감소
- 메멘토
- 특정 시점에서의 객체 내부 상태를 객체화함으로 써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공
- [Ctrl] + [Z]와 같은 되돌리기 기능을 개발할 때 주로 이용함
- 옵저버
- 한 객체의 상태가 변화하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태를 전달하는 패턴
- 상태
- 객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용
- 객체 상태를 캡슐화하고 참조하는 방식으로 처리
- 전략
- 동일한 계열의 알고리즘들을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의하는 패턴
- 독립적으로 원하는 알고리즘을 선택하여 사용할 수 있으며, 클라이언트에 영향 없이 알고리즘의 변경이 가능함
- 템플릿 메소드
- 상위 클래스에서 골격을 정의하고, 세부 처리를 구체화하는 구조의 패턴
- 유사한 서브 클래스를 묶어 상위 클래스에서 정의함으로써 코드의 양을 줄이고 유지보수를 용이하게 해줌
- 팩토리 메소드랑 유사한 개념
- 방문자
- 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성
- 처리 기능은 각 클래스를 방문하여 수행함
개발 지원 도구
- 통합 개발 환경(IDE)
- 개발에 필요한 환경, 편집기, 컴파일러, 디버거 등의 다양한 툴을 하나의 인터페이스로 통합하여 제공하는 환경
- 통합 개발 환경 도구의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/75d3e0ec-ebbb-4cf8-a15d-87081f469a8c/스크린샷_2024-10-17_오전_6.36.36.png
- 빌드 도구
- 소스 코드 파일들을 컴퓨터에서 실행할 수 있는 제품 소프트웨어로 변환하는 과정 또는 결과물
- 빌드 도구는 전처리, 컴파일 등의 작업을 수행함
- 대표적인 빌드 도구
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/9ead9c7d-9b55-4491-99e5-45eab4bb2dfc/스크린샷_2024-10-17_오전_6.38.07.png
- 기타 협업 도구
- 개발에 참여하는 사람들이 서로 다른 작업 환경에서 원활하게 프로젝트를 수행할 수 있도록 도와주는 도구
서버 개발
- 서버 개발
- 웹 애플리케이션의 로직을 구현할 서버 프로그램을 제작하여 웹 어플리케이션 서버(WAS)에 탑재하는 것
- 프로그래밍 언어는 Java, Js, Python 등
- 서버 개발 프레임워크
- 서버 프로그램 개발 시 다양한 네트워크 설정, 요청 및 응답 처리, 아키텍처 모델 구현 등을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어
- 대부분 MVC 패턴 기반
- 서버 개발 프레임워크의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ab47a184-5820-48a6-a1dc-825762eb055b/스크린샷_2024-10-17_오전_6.40.49.png
- 서버 개발 과정
- DTO/VO, SQL, DAO, Service, Controller를 각각 구현하는 과정
- 순서는 임의로 변경 가능
- MVC 접근법!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/88a56a82-f952-457f-8a0b-33efc75524ba/스크린샷_2024-10-17_오전_6.42.08.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/f856da4b-e749-42d1-a66b-525b79357309/스크린샷_2024-10-17_오전_6.41.51.png
- 구현 과정과정 내용
DTO/VO 구현 - 데이터 교환을 위해 사용할 객체를 만드는 과정 - 송, 수신할 데이터의 자료형에 맞는 변수 및 객체를 생성함 | | SQL 구현 | - 데이터의 삽입, 변경, 삭제등의 작업을 수행할 SQL문 생성
- 소스 코드 내에 직접 입력, 또는 별도의 XML 파일로 관리 | | DAO 구현 | 데이터베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드를 구현 | | Service 구현 | 요청에 응답하기 위한 로직을 구현 | | Controller 구현 | 적절한 서비스를 호출하여 결과를 반환하는 코드 구현 |
배치 프로그램
- 배치 프로그램
- 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하도록 만든 프로그램을 의미함
- 배치 프로그램의 필수 요소
- 대용량 데이터
- 자동화
- 견고성
- 안정성/신뢰성
- 성능
- 배치 스케줄러
- 일괄 처리 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구
- 특정 업무를 원하는 시간에 처리할 수 있도록 지원
- 잡 스케줄러라고도 불림
- 배치 스케줄러의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/94ee26a1-6696-4351-9301-aff965427e50/스크린샷_2024-10-17_오전_6.54.41.png
- crontab 명령어 작성 방법!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/fbe11882-5246-4e94-9184-ddb656d62b67/스크린샷_2024-10-17_오전_6.56.06.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/590757e4-e084-4755-8a2b-b4e21db29389/스크린샷_2024-10-17_오전_6.55.04.png
시스템 인터페이스 요구사항 분석
- 시스템 인터페이스 요구사항
- 개발할 시스템과 외부 시스템을 연동하는데 필요한 시스템
- 시스템 인터페이스 요구사항 명세서의 구성 요소
- 인터페이스 이름
- 연계 대상 시스템
- 연계 범위 및 내용
- 연계 방식
- 송신 데이터
- 인터페이스 주기
- 기타 고려사항
- 시스템 인터페이스 요구사항 분석
- 요구사항 분류하고 구체적으로 명세한 후 이를 이해관계자에게 전달
- 요구사항 분석 기법을 적절히 이용함
- 요구사항 분해가 필요한 경우 적절한 수준으로 세분화함
- 요구사항 분석 시 누락된 요구사항이나 제한 조건을 추가함
- 상대적 중요도를 평가하여 우선순위를 부여함
- 시스템 인터페이스 요구사항 분석 절차
- 관련 요구사항을 선별하여 별도로 요구사항 목록을 만듦
- 관련된 자료를 준비
- 기능, 비기능 요구사항으로 분리
- 요구사항 명세서에 내용을 추가하거나 수정
- 요구사항 명세서와 요구사항 목록을 이해관계자에게 전달
인터페이스 요구사항 검증
- 인터페이스 요구사항 검증
- 사용자들의 요구사항이 요구사항 명세서에 기술되었는지 검토하고 베이스라인 설정
- 검증 수행 순서
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/715b61d2-dc78-43a7-8169-eaadaf75908f/스크린샷_2024-10-17_오전_7.12.45.png
- 요구사항 검증 방법
- 요구사항 검토
- 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석동료 검토 명세서 작성자가 내용을 직접 설명하고 동려들이 결함을 발견
워크스루 요구사항 명세서를 미리 배포하여 사전 검토 후 검토회를 통해 결함 발견 인스펙션 다른 검토 전문가들이 결함을 발견하는 형태의 검토 방법
- 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석동료 검토 명세서 작성자가 내용을 직접 설명하고 동려들이 결함을 발견
- 프로토 타이핑
- 견본품을 만들어 최종 결과물을 예측
- 테스트 설계
- 요구사항이 현실적으로 테스트 가능한지를 검토
- CASE 도구 활용
- 일관성 분석
- 요구사항 검토
- 요구사항 검증의 주요 항목
- 완전성
- 일관성
- 명확성
- 기능성
- 검증 가능성
- 추적 가능성
- 변경 용이성
송,수신 데이터 식별
- 식별 대상 데이터
- 송 수신 시스템 사이에서 교환되는 데이터로, 규격화된 표준 형식에 따라 전송
- 교환되는 데이터의 종류
- 인터페이스 표준 항목
- 송,수신 데이터 항목
- 공통 코드
- 인터페이스 표준 항목
- 송 수신 시스템을 연계하는데 표준적으로 필요한 데이터
- 시스템 공통부와 거래 공통부시스템 공통부 시스템 간 연동 시 공통 정보
거래 공통부 송 수신되는 데이터를 처리할 때 필요한 정보
- 송, 수신 데이터 항목
- 송 수신 시스템이 업무를 수행하는데 사용하는 데이터
- 데이터 항목과 순서는 인터페이스별로 다름
- 공통 코드
- 시스템들에서 공통적으로 사용하는 코드
- 정보 흐름 식별
- 개발할 시스템과 내 외부 시스템 사이 방향성을 식별
- 송, 수신 데이터 식별
- 개발할 시스템과 연계할 내, 외부 시스템 사이의 정보 흐름과 데이터베이스 산출물을 기반으로 식별
- 인터페이스 표준 항목과 송, 수신 데이터 항목 식별
- 교환 범위를 확인하고 송, 수신 데이터 항목을 식별
- 코드성 데이터 항목 식별
- 코드성 데이터 항목에 대해 코드, 코드명, 코드 설명 등의 코드 정보를 식별
인터페이스 방법 명세화
- 인터페이스 방법 명세화
- 내, 외부 시스템에 연계하여 작동할 때 인터페이스별 송, 수신 방법, 송, 수신 데이터, 오류 식별 및 처리 방안 내용을 문서로 정리
- 송, 수신 방법 명세화
- 각각의 인터페이스에 대해 연계 방식, 통신 및 처리 유형, 발생 주기 등의 송, 수신 방법을 정의하고 명세를 정의
- 송, 수신 데이터 명세화
- 송, 수신 데이터에 대한 명세를 작성
- 오류 식별 및 처리 방안 명세화
- 오류를 식별하고 오류 처리 방안에 대한 명세를 작성
- 인터페이스별로 송, 수신 방법을 명세화하기 위해 필요한 정보
- 시스템 연계 기술
- 인터페이스 통신 유형
- 처리 유형
- 발생 주기
- 시스템 연계 기술
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ea517563-223a-405f-b09e-7ad04e74137d/스크린샷_2024-10-17_오전_7.21.49.png
- 인터페이스 통신 유형유형 내용
단방향 요청만 하고 응답이 없는 형식 동기 요청 후 응답이 올 때 까지 대기 비동기 요청 후 다른 작업을 수행하다 응답이 오면 처리 - 인터페이스 처리 유형유형 내용
실시간 방식 요청 내용을 바로 처리 지연 처리 방식 데이터를 매 건 단위로 처리할 경우 비용이 많이 발생할 때 배치 방식 대량의 데이터를 처리할 때 사용 - 인터페이스 발생 주기
- 개발할 시스템과 내,외부 시스템 간 송, 수신 데이터가 전송되어 인터페이스가 사용되는 주기를 의미
미들웨어 솔루션
- 미들웨어
- 운영체제와 응용 프로그램, 서버와 클라이언트 사이에서 다양한 서비스를 제공하는 소프트웨어
- 표준화된 인터페이스를 제공함으로써 시스템 간의 데이터 교환에 일관성을 보장함
- 미들웨어의 종류
- DB
- RPC
- MOM
- TP-Monitor
- ORB
- WAS
- DB
- 클라이언트에서 원격의 데이터베이스와 연결하는 미들웨어
- RPC(원격 프로시저 호출)
- 원격 프로시저를 마치 로컬 프로시저처럼 호출하는 미들웨어
- MOM(메시지 지향 미들웨어)
- 비동기형 메시지를 전달하는 미들웨어
- 이기종 분산 데이터 시스템의 데이터 동기를 위해 많이 사용됨
- TP-Monitor(트랜잭션 처리 모니터)
- 트랜잭션을 처리 및 감시하는 미들웨어
- 사용자 수가 증가해도 빠른 응답 속도를 유지해야 하는 업무로 사용함
- ORB(객체 요청 브로커)
- 객체 지향 미들웨어
- TP-Monitor의 장점인 트랜잭션 처리와 모니터링 등을 추가로 구현한 제품도 존재
- WAS(웹 애플리케이션 서버)
- 동적인 콘텐츠를 처리하기 위한 미들웨어
- 웹 환경을 구현하기 위한 미들웨어
모듈 연계를 위한 인터페이스 기능 식별
- 모듈 연계
- 내부 모듈과 외부 모듈 또는 내부 모듈 간 데이터의 교환을 위해 관계를 설정
- 대표적인 모듈 연계 방법
- EAI(Enterprise Application Integration)
- ESB(Enterprise Service Bus)
- 웹 서비스
- EAI
- 기업 내 각종 애플리케이션 및 플랫폼 간의 정보 전달, 연계, 통합 등 상호 연동이 가능하게 해주는 솔루션
- EAI의 구축 유형!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/a0aa8dfd-9951-4aea-af16-c87a22f594df/스크린샷_2024-10-17_오전_7.30.46.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/2b0b459f-2766-47a5-90ad-6da23f43bb0a/스크린샷_2024-10-17_오전_7.30.26.png
- ESB
- 애플리케이션 간 연계, 표준 기반의 인터페이스를 제공하는 솔루션
- 애플리케이션 통합측면에서 EAI와 유사하지만 서비스 중심의 통합을 지향
- 범용적으로 사용하기 위해 결합도 약하게 유지
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/e66c3ffa-ac3d-4d18-adf6-cdd66bd2cf14/스크린샷_2024-10-17_오전_7.31.40.png
- 웹 서비스
- 네트워크의 정보를 표준화된 서비스 형태로 만들어 공유하는 기술
- 서비스 지향 아키텍처(SOA) 개념
- 웹 서비스의 구성
- SOAP
- HTTP, HTTPS, SMTP 등을 활용하여 XML기반의 메시지 교환
- UDDI
- WSDL을 등록하여 서비스와 서비스 제공자를 검색하고 접근하는데 사용
- WSDL
- 웹 서비스명, 서비스 제공 위치, 프로토콜 XML 형식으로 구현
- SOAP
- 모듈 간 인터페이스 기능 식별
- 식별된 모듈 간 관련 기능을 검토하여 인터페이스 동작에 필요한 기능을 식별
- 모듈 간 동작하는 기능을 통해 인터페이스 기능을 식별
- 시나리를 통해 내부 모듈과 관련된 인터페이스 기능을 식별
- 실제적으로 필요한 인터페이스 기능을 최종적으로 선별
- 인터페이스 기능 구현을 정의하는데 사용
모듈 간 인터페이스 데이터 표준 확인
- 인터페이스 데이터 표준
- 모듈 간 인터페이스에 사용되는 데이터의 형식을 표준화하는 것
- 기존의 데이터 중에서 공통 영역을 추출하거나 어느 한쪽의 데이터를 변환하여 정의함
- 인터페이스 데이터 표준 확인
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/63553d08-9c94-475c-8a0e-7b4d8d7403ad/스크린샷_2024-10-17_오전_7.35.24.png
인터페이스 기능 구현의 정의
- 인터페이스 기능 구현의 정의
- 인터페이스를 실제로 구현하기 위해 인터페이스 기능에 대한 구현 방법을 기능별로 기술하는 것
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/8f142ab7-d2a2-40d8-aa12-e077b965e368/스크린샷_2024-10-17_오전_7.36.10.png
- 모듈 세부 설계서
- 모듈의 구성 요소와 세부적인 동작 등을 정의한 설계서
- 모듈 세부 설계서 종류컴포넌트 명세서 컴포넌트 개요, 내부 클래스의 동작, 외부와의 통신하는 명세 등을 정의
인터페이스 명세서 인터페이스 클래스의 세부 조건 및 기능 등을 정의
인터페이스 구현
- 인터페이스 구현
- 송, 수신 시스템 간의 데이터 교환 및 처리를 실현해 주는 작업
- 대표적인 인터페이스 구현 방법
- 데이터 통신을 이용한 인터페이스 구현
- 인터페이스 엔티티를 이용한 인터페이스 구현
- AJAX
- JS를 이용하여 클라이언트와 서버 간에 XML 데이터를 주고 받는 비동기 통신 기술
- 웹 페이지 일부 영역만을 업데이트 할 수 있음
- JSON
- 용량이 적은 데이터를 교환하기 위해 데이터 객체를 속성, 값의 쌍 형태로 표현하는 개방형 표준 포맷
- 데이터 통신을 이용한 인터페이스 구현
- ex) JSON을 이용한 인터페이스 구현 순서
- 인터페이스 객체를 생성, 각 시스템 환경에 맞게 선택함
- JSON 이용해 인터페이스 객체를 만듦
- 인터페이스 객체를 AJAX 기술 등을 이용하여 수신 측으로 보냄
- 인터페이스 객체를 수신해 파싱한 후 처리함
- 수신 측에서 송신 측으로 처리 결과를 보냄
- ex) JSON을 이용한 인터페이스 구현 순서
- 인터페이스 엔티티를 이용한 인터페이스 구현
- 인터페이스가 필요한 시스템 사이에 별도의 인터페이스 엔티티를 두어 상호 연계하는 것
- 테이블을 엔티티로 활용함
- ex) 인터페이스 테이블을 이용한 인터페이스 구현 순서
- 인터페이스 이벤트가 발생하면 인터페이스 데이터를 기록
- 송신 측 인터페이스 테이블에 인터페이스 데이터를 전송
- 수신 측 인터페이스 테이블에 입력되면 인터페이스 데이터를 읽음
- 수신 측 인터페이스 테이블에서 읽은 후 사전에 정의된 데이터 트랜잭션 수행
인터페이스 보안
- 인터페이스 보안
- 인터페이스의 보안 취약점 분석 후 적절한 보안 기능을 적용
- 인터페이스 보안 기능 적용
- 인터페이스 아키텍처에 따라 IPSec, SSL, S-HTTP를 사용 | | --- | --- | | 애플리케이션 영역 | 보안 가이드를 참조하여 코드 상의 보안 취약점을 보완 | | 데이터베이스 영역 | - 데이터베이스, 스키마, 엔티티의 접근 권한과 프로시저, 트리거 등 동작 객체의 보안 취약점에 보안 기능 적용
- 개인 정보나 업무상 민감한 데이터의 경우 암호화나 익명화 등 데이터 자체의 보안 방안도 고려 |
- | 네트워크 영역 | - 스니핑 등을 이용한 데이터 탈취 및 변조 위협을 방지하기 위해 네트워크 트래픽에 대한 암호화를 설정
- 데이터 무결성 검사 도구
- 인터페이스 보안 취약점을 분석하는데 사용되는 도구
- 시스템 파일의 변경 유무를 확인하고, 파일이 변경되었을 경우 이를 관리자에게 알려줌
- 종류
- TripWire
- AIDE
- Samhain
- Claymore
- Slipwire
- Fcheck
인터페이스 구현 검증
- 인터페이스 구현 검증
- 인터페이스가 정상적으로 문제없이 작동하는지 확인
- 인터페이스 구현 검증 도구, 감시 도구를 이용
- 인터페이스 구현 검증 도구
- 인터페이스 단위 기능과 시나리오 등을 기반으로 하는 통합 테스트가 필요함
- 테스트 자동화 도구
- 인터페이스 구현 감시 도구
- 동작 상태는 APM(애플리케이션 성능 관리)을 사용하여 감시(Monitoring)할 수 있음
- APM을 통해 종합적인 정보를 조회하고 분석할 수 있음
- 대표적인 APM
- 스카우터
- 제니퍼
- APM(Application Performance Management/Monitoring)
- 애플리케이션의 성능 관리를 위해 다양한 모니터링 기능을 제공하는 도구
- APM은 리소스 방식과 엔드투엔드의 두 가지 유형이 있음
- 리소스 방식
- Nagios, Zabbix, Carti
- 엔드투엔드 방식
- VisualVM, 제니퍼, 스카우터
- 리소스 방식
사용자 인터페이스
- 사용자 인터페이스(UI, User Interface)
- 사용자와 시스템 간의 상호작용이 이뤄지도록 도와주는 장치나 소프트웨어
- 사용자 인터페이스의 세 가지 분야
- 물리적 제어
- 상세적인 표현과 전체적인 구성
- 편리하고 간편하게 사용하도록 하는 기능
- 사용자 인터페이스의 구분구분 내용
CLI 명령과 출력이 텍스트 형태로 이루어지는 인터페이스 GUI 아이콘이나 메뉴를 마우스로 선택하여 작업을 수행하는 그래픽 환경의 인터페이스 NUI 말이나 행동으로 기기를 조작하는 인터페이스 - 사용자 인터페이스의 기본 원칙
- 직관성
- 유효성
- 학습성
- 유연성
UI 설계 도구
- 와이어프레임
- 페이지에 대한 개략적인 레이아웃이나 뼈대를 설계하는 도구
- 페이지의 영역 구분, 콘텐츠, 텍스트 배치 등을 화면 단위로 설계함
- 목업
- 실제 화면과 유사하게 만든 정적인 형태의 모형
- 스토리보드
- 와이어프레임에 콘텐츠에 대한 설명, 페이지 간 이동 흐름 등을 추가한 문서
- 디자이너와 개발자가 최종적으로 참고하는 작업 지침서
- 서비스 구축을 위한 모든 정보가 들어 있음
- 프로토타입
- 와이어프레임이나 스토리보드 등에 인터랙션을 적용함으로써 실제 구현된 것처럼 테스트가 가능한 동적인 형태의 모형
- 종류
- 제작 기간이 짧은 경우, 제작 비용이 적을 경우, 업무 협의가 빠를 경우 | | --- | --- | | 디지털 프로토타입 | - 파워포인트, 아크로뱃, 비지오, 옴니그래플 등과 같은 프로그램을 사용
- 재사용이 필요한 경우, 산출물과 비슷한 효과가 필요한 경우, 숙력된 전문가가 있는 경우 |
- | 페이퍼 프로토타입 | - 아날로그적인 방법
- 유스케이스
- 사용자의 요구사항을 기능 단위로 표현
- 사용자가 원하는 목표를 달성하기 위해 수행할 내용을 기술함
- 사용자의 요구사항을 빠르게 파악함으로써 초기에 시스템의 기능적인 요구를 결정
- 다이어그램 형식으로 묘사됨
품질 요구사항
- 품질 요구사항
- 사용자의 입장에서 얼마나 충족하는가
- 사용자의 요구사항을 충족시킴으로써 확립
- 소프트웨어 품질 관련 표준
- ISO/IEC 9126의 소프트웨어 품질 특성
UI 설계서
- UI 설계서
- 요구사항을 바탕으로 UI 설계를 구체화하여 작성하는 문서
- 기획자, 개발자, 디자이너 등과의 원할한 의사소통을 위함
- UI 흐름 설계
- UI 상세 설계
- 실제 설계 구현을 위해 자세하게 설계
- 반드시 시나리오를 작성해야함
- UI 시나리오 문서
- 사용자 인터페이스의 기능 구조, 대표 화면, 화면 간 인터랙션의 흐름, 다양한 상황에서의 예외 처리 등을 정리한 문서
- 사용자가 최종 목표를 달성하기 위한 방법이 순차적으로 묘사되어 있음
- UI 시나리오 문서의 요건
- 완전성
- 일관성
- 이해성
- 가독성
- 수정 용이성
- 추적 용이성
- UI 상세 설계 순서
HCI / UX / 감성공학
- HCI(Human Computer Interaction or Inteface)
- 사람이 시스템을 보다 편리하고 안전하게 사용할 수 있도록 연구하고 개발하는 학문
- 최종목표는 최적의 UX 만드는 것
- 어떤 제품이 좋은 제품인지, 어떻게 하면 좋은 제품을 만들 수 있는지 연구
- UX(User Experience)
- 사용자가 시스템이나 서비스를 이용하면서 느끼고 생각하게 되는 총체적인 경험
- UI가 사용성, 접근성, 편의성을 중시한다면, UX는 UI를 통해 사용자가 느끼는 만족이나 감정 중시
- 기술을 효용성 측면만 아니라 삶의 질을 향상시키는 하나의 방향으로 봄
- UX의 특징
- 주관성
- 정황성
- 총체성
- 감성공학
- 제품이나 작업환경을 사용자의 감성에 알맞도록 설계 및 제작하는 기술
- 여러 분야의 학문이 공존하는 종합과학임
- 목적은 인간의 삶을 편리하고 안전하며 쾌적하게 만드는 것
- 인간의 감성을 제품 설계에 적용하기 위해 공학적인 접근 방법 사용
애플리케이션 테스트
- 애플리케이션 테스트
- 애플리케이션에 잠재되어 있는 결함을 찾아내는 일련의 행위 또는 절차
- 고객의 요구사항을 만족시키는지 확인하고 소프트웨어가 기능을 정확히 수행하는지 검증함
- 애플리케이션의 기본 원리기본 원리 설명
완벽한 테스트 불가능 잠재적인 결함을 줄일 수 있지만 결함이 없다고 증명할 수 없음 파레토 법칙 20%에 해당하는 코드에서 전체 결함의 80%가 발견된다는 법칙 살충제 패러독스 동일한 테스트 케이스로 동일한 테스트를 반복하면 더 이상 결함이 발견되지 않는 현상 테스팅은 정황 의존 소프트웨어의 특징, 테스트 환경, 테스터의 역량 등 정황에 따라 테스트 결과가 달라질 수 있으므로, 정황에 따라 다르게 테스트를 수행해야함 오류-부재의 궤변 결함을 모두 제거해도, 사용자의 요구사항을 만족시키지 못하면 품질이 높다고 할 수 없다. 테스트와 위험은 반비례 테스트를 할 수록 미래에 발생할 위험을 줄일 수 있음 테스트의 점진적 확대 작은 부분에서 시작하여 점점 확대하며 진행 테스트의 별도 팀 수행 개발자와 관계없는 별도의 팀에서 수행
애플리케이션 테스트의 분류
- 프로그램 실행 여부에 따른 테스트
- 소스 코드에 대한 코딩 표준, 코딩 스타일, 코드 복잡도, 남은 결합 등을 발견하기 위함
- 종류: 워크스루, 인스펙션, 코드 검사 | | --- | --- | | 동적 테스트 | - 프로그램을 실행하여 오류를 찾는 테스트
- 개발의 모든 단계에서 테스트를 수행
- 종류: 블랙박스 테스트, 화이트박스 테스트 |
- | 정적 테스트 | - 프로그램을 실행하지 않고 명세사나 소스 코드를 대상으로 분석
- 테스트 기반에 따른 테스트
- 종류: 동등 분할, 경계 값 분석 등 | | --- | --- | | 구조 기반 테스트 | - 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인
- 종류: 구문 기반, 결정 기반, 조건 기반 등 | | 경험 기반 테스트 | - 유사 소프트웨어나 기술 등에 대한 테스터의 경험을 기반으로 수행
- 명세가 불충분하거나 테스트 시간에 제약이 있는 경우
- 종류: 에러 추정, 체크 리스트, 탐색적 테스팅 |
- | 명세 기반 테스트 | - 사용자의 요구사항에 대한 명세를 빠짐없이 테스트 케이스로 만들어 구현하고 있는지 확인하는 테스트
- 시각에 따른 테스트
- 명세서대로 완성됐는지 테스트 | | --- | --- | | 확인 테스트 | - 사용자의 시각에서 생산된 제품의 결과를 테스트
- 요구한대로 제품이 완성됐는지, 정상적으로 동작하는지 테스트 |
- | 검증 테스트 | - 개발자의 시각에서 제품의 생산 과정을 테스트
- 목적에 따른 테스트회복 테스트 실패하도록 한 후 올바르게 복구되는지 확인
안전 테스트 불법적인 침입으로부터 시스템을 보호할 수 있는지 강도 테스트 과도한 정보량이나 빈도 등을 부과하여 과부하 시에도 정상적으로 실행되는지 성능 테스트 실시간 성능이나 전체적인 효율성을 진단, 응답 시간, 처리량 등을 테스트 구조 테스트 논리적인 경로, 소스 코드의 복잡도 등을 평가 회귀 테스트 변경 또는 수정된 코드에 새로운 결함이 없음을 확인하는 테스트 병행 테스트 변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력하여 결과를 비교하는 테스트
개발 단계에 따른 애플리케이션 테스트
- 개발 단계에 따른 애플리케이션 테스트
- 개발 단계에 따라 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트로 분류됨
- 애플리케이션 테스트와 소프트웨어 개발 단계를 연결하여 표현한 것을 V-모델이라고 함
- 단위 테스트
- 코딩 직후 모듈이나 컴포넌트에 초점을 맞춰 테스트함
- 기능성 테스트를 최우선으로 수행
- 구조 기반 테스트와 명세 기반 테스트로 나뉘지만 주로 구조 기반 테스트를 시행함
- 통합 테스트
- 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트를 의미
- 모듈 간 또는 통합된 컴포넌트 간의 상호 작용 오류를 검사함
- 시스템 테스트
- 완벽하게 수행되는가를 점검
- 기능정 요구사항과 비기능적 요구사항으로 구분하여 각각을 만족하는지 테스트
- 인수 테스트
- 사용자의 요구사항을 충족하는지에 중점을 둠
- 사용자가 직접 테스트함
사용자 인수 테스트 시스템 사용의 적절성 여부를 확인함 운영상의 인수 테스트 - 시스템 관리자가 시스템 인수 시 수행하는 테스트 기법 - 백업/복원 시스템, 재난 복구, 사용자 관리, 정기 점검 | | 계약 인수 테스트 | 계약상의 인수/검수 조건을 준수하는지 여부 | | 규정 인수 테스트 | 정부 지침, 법규, 규정에 맞게 개발 되었는지 여부 | | 알파 테스트 | 사용자가 개발자 앞에서 행하는 테스트 기법 | | 베타 테스트 | 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법 |
통합 테스트
- 통합 테스트
- 단위 테스트가 끝난 모듈을 통합하는 과정에서 발생하는 오류 및 결함을 찾는 테스트 기법
- 종류
- 종류: 빅뱅 통합 테스트 방식 | | --- | --- | | 점진적 통합 방식 | - 모듈 단위로 단계적으로 통합하면서 테스트 하는 방법
- 종류: 하향식 통합 테스트, 상향식 통합 테스트, 혼합식 통합 테스트 |
- | 비점진적 통합 방식 | - 통합하는 절차 없이 모든 모듈이 미리 결합되어 있는 프로그램 전체를 테스트 하는 방법
- 하향식 통합 테스트
- 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트
- 깊이 우선 통합법이나 넓이 우선 통합법을 사용함
- 하향식 통합 테스트 절차
- 제어 모듈은 작성된 프로그램을 사용, 주요 제어 모듈의 종속 모듈들은 스텁으로 대체
- 깊이 우선 또는 넓이 우선 등의 통합 방식에 따라 하위 모듈인 스텁들이 한 번에 하나씩 실제 모듈로 교체
- 모듈이 통합할 때 마다 테스트를 실시함
- 새로운 오류가 발생하지 않음을 보증하기 위해 회귀 테스트를 실시
- 상향식 통합 테스트
- 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트
- 상향식 통합 테스트 절차
- 하위 모듈들을 클러스터로 결합
- 상위 모듈에서 데이터 입,출력을 확인하기 위해 더미 모듈인 드라이버를 작성함
- 통합된 클러스터 단위로 테스트
- 테스트 완료 시, 프로그램 구조의 상위로 이동하여 결합하고 드라이버는 실제 모듈로 대체됨
- 혼합식 통합 테스트
- 하위 수준에는 상향식 통합, 상위 수준에서는 하향식 통합을 사용하여 최적의 테스트를 지원
- 샌드위치 식 통합 테스트 방법이라고도 함
- 회귀 테스팅
- 통합 테스트로 인해 변경된 모듈이나 컴포넌트에 새로운 오류가 있는지 확인
- 이미 테스트된 프로그램의 테스팅을 반복
- 수정한 모듈이나 컴포넌트가 다른 부분에 영향을 미치는지, 오류가 생기지 않았는지 새로운 오류가 발생하지 않음을 보증하기 위해 반복 테스트함.
테스트 케이스/ 테스트 시나리오 / 테스트 오라클
- 테스트 케이스
- 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력 값, 실행 조건, 기대 결과 등으로 구성 된 테스트 항목에 대한 명세서
- 오류 방지, 인력 시간, 자원 낭비를 지울 수 있음
- 테스트 시나리오
- 테스트 케이스를 적용하는 순서에 따라 여러 개의 테스트 케이스를 묶은 집합
- 적용하는 구체적인 절차를 명세함
- 구체적인 절차, 사전 조건, 입력 데이터 등이 설정되어 있음
- 테스트 오라클
- 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입하여 비교
- 테스트 케이스에 대한 예상 결과를 계산하거나 확인함
- 테스트 오라클의 특징
- 제한된 검증
- 모든 테스트 케이스에 적용할 수 없음
- 수학적 기법
- 값을 수학적 기법을 이용하여 구할 수 있음
- 자동화 기법
- 대상 프로그램의 실행, 결과 비교, 커버리지 측정 등을 자동화 할 수 있음
- 제한된 검증
- 테스트 오라클의 종류
- 모든 오류를 검출할 수 있음 | | --- | --- | | 샘플링 오라클 | - 특정한 몇몇 테스트 케이스의 입력 값들에 대해서만 기대하는 결과를 제공
- 전수 테스트가 불가능한 경우 사용 | | 추정 오라클 | - 특정 테스트 케이스의 입력값에 대해 기대하는 결과 제공
- 나머지 입력 값들에 대해서는 추정으로 처리하는 오라클 | | 일관성 검사 오라클 | 애플리케이션에 변경이 있을 때, 테스트 케이스의 수행 전과 후의 결과 값이 동일한지를 확인 |
- | 참 오라클 | - 입력 값에 대해 기대하는 결고라르 제공하는 오라클
테스트 자동화 도구
- 테스트 자동화
- 사람이 반복적으로 수행하던 테스트 절차를 스크립트 형태로 구현하는 자동화 도구를 적용함으로써 쉽고 효율적으로 테스트를 수행할 수 있도록 한 것
- 테스트 유형에 따른 테스트 자동화 도구의 종류
- 정적 분석 도구
- 테스트 실행 도구
- 성능 테스트 도구
- 테스트 통제 도구
- 정적 분석 도구
- 프로그램을 실행하지 않고 분석하는 도구
- 테스트 실행 도구
- 스크립트 언어를 사용하여 테스트를 실행하는 도구
- 데이터 주도 접근 방식
- 데이터를 저장하고 이를 읽어 실행하는 방식
- 키워드 주도 접근 방식
- 수행할 동작을 나타내는 키워드와 테스트 데이터를 저장하여 실행하는 방식
- 성능 테스트 도구
- 가상의 사용자를 만들어 성능의 목표 달성 여부를 확인하는 도구
- 테스트 통제 도구
- 테스트 계획 및 관리, 테스트 수행, 결함 관리 등을 수행하는 도구
- 종류
- 형상 관리 도구
- 결함 추적 / 관리 도구
- 테스트 하네스 도구
- 테스트가 실행될 환경을 시뮬레이션하여 컴포넌트 및 모듈이 정상적으로 테스트되도록 하는 도구
- 테스트 하네스
- 컴포넌트 및 모듈을 테스트하는 환경의 일부분으로, 테스트를 지원하기 위해 생성된 코드와 데이터
- 테스트 하네스의 구성 요소테스트 드라이버
테스트 스텁 테스트 슈트 컴포넌트나 모듈, 시스템에 사용되는 테스트 케이스의 집합 테스트 케이스 테스트 스크립트 테스트 실행절차에 대한 명세서 목 오브젝트 조건부로 입력해 두면, 그 상황에 맞는 예정된 행위를 수행 - 테스트 수행 단계별 테스트 자동화 도구테스트 단계 자동화도구 설명
테스트 계획 요구사항 관리 요구사항 정의 및 변경 사항 등을 관리하는 도구 테스트 분석 / 설계 테스트 케이스 생성 테스트 데이터 및 테스트 케이스 작성을 지원 테스트 수행 테스트 자동화 자동화를 도와주는 도구 정적 분석 코딩 표준, 런타임 오류 검증 동적 분석 시뮬레이션을 통해 오류를 검출 성능 테스트 가상의 사용자를 생성하여 처리 능력을 측정 모니터링 CPU, Memory 등과 같은 시스템 자원의 상태 확인 및 분석을 지원 테스트 관리 커버리지 분석 충분성 여부 검증 형상 관리 도구 및 데이터 관리 결함 추적/ 관리 발생한 결함 추적 및 관리 활동을 지원
결함 관리
- 결함
- 소프트웨어가 개발자가 설계한 것과 다르게 동작하거나 다른 결과가 발생되는 것
- 결함 관리 프로세스
- 결함 상태 추적
- 발견된 결함은 지속적ㄱ으로 상태 변화를 추적하고 관리해야ㅏㅎㅁ
정보시스템 구축관리
개별 환경 구축
- 개발 환경 구축
- 개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축
- 응용 소프트웨어가 운영될 환경과 유사한 구조로 구축
- 하드웨어와 소프트웨어를 선정함
- 성능, 편의성, 라이선스 등의 비즈니스 환경에 적합한 제품들을 최종적으로 결정하여 구축함
- 하드웨어 환경
- 사용자와의 인터페이스 역할을 하는 클라이언트, 서비스를 제공하는 서버로 구성
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/fdcae290-8799-49e3-8f8e-d909a5ecd7c2/스크린샷_2024-10-12_오후_10.31.17.png
- 클라이언트의 종류
- 개인용 컴퓨터(PC), 스마트폰 등
- 서버의 종류종류 특징
웹 서버 - 직접 요청을 받아 처리함 - 정적 파일들을 제공함 | | 웹 애플리케이션 서버(WAS) | 동적 서비스를 제공하거나 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행함 | | 데이터베이스 서버 | 데이터베이스와 이를 관리하는 DBMS를 운영함 | | 파일 서버 | 데이터베이스에 저장하기에는 비효율적이거나, 서비스 제공을 목적으로 유지하는 파일들을 저장함 |
- 소프트웨어 환경
- 클라이언트와 서버 운영을 위한 시스템 소프트웨어와 개발에 사용되는 개발 소프트웨어로 구성됨
- 시스템 소프트웨어의 종류
- 운영체제, 웹 서버 및 WAS 운용을 위한 서버 프로그램, DBMS
- 개발 소프트웨어의 종류종류 특징
요구사항 관리 도구 요구사항의 수집과 분석, 추적 등을 편리하게 도와주는 소프트웨어 설계/모델링 도구 UML을 지원하며, 전 과정에서 설계 및 모델링을 도와주는 소프트웨어 구현 도구 개발 언어를 통해 실제 구현을 지원하는 소프트웨어 빌드 도구 소스의 빌드 및 배포, 라이브러리 관리를 지원하는 소프트웨어 테스트 도구 모듈들이 요구사항에 적합하게 구현되었는지 테스트하는 소프트웨어 형상 관리 도구 버전별로 관리하여 품질 형상을 지원하는 소프트웨어 - 웹 서버의 기능기능 내용
HTTP/HTTPS 지원 브라우저로부터 요청을 받아 응답할 때 사용되는 프로토콜 통신 기록 처리한 요청들을 로그 파일로 기록하는 기능 정적 파일 관리 HTML, CSS, 이미지 등의 정적 파일들을 저장하고 관리 대역폭 제한 트래픽의 포화를 방지하기 위해 응답 속도 제한 가상 호스팅 여러 개의 도메인 이름을 연결하는 기능 인증 합법적인 사용자인지를 확인 - 개발 언어의 선정 기준기준 내용
적정성 개발하려는 소프트웨어의 목적에 적합해야 함 효율성 코드의 작성 및 구현이 효율적이어야 함 이식성 다양한 시스템 및 환경에 적용이 가능해야 함 친밀성 개발 언어에 대한 개발자들의 이해도와 활용도가 높아야 함 범용성 다른 개발 사례가 존재하고 여러 분야에서 활용되고 있어야 함
소프트웨어 아키텍처
- 소프트웨어 아키텍처
- 소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체
- 분할 방법과 분할된 모듈에 할당될 기능, 모듈 간의 인터페이스 등을 결정함
- 소프트웨어 아키텍처 설계의 기본 원리, 모듈화, 추상화, 단계적 분, 정보은닉이 있음
- 모듈화
- 소프트웨어의 성능 향상, 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 시스템의 기능들을 모듈 단위로 나누는 것을 의미함
- 모듈의 크기를 너무 작게 나누면 개수가 많아져 모듈 간의 통합 비용이 많이 듬
- 모듈의 크기를 너무 크게 나누면 개수가 적어 통합 비용은 적게 들지만 모듈 하나의 개발 비용이 많이 듬
- 추상화
- 전체적이고 포괄적인 개념을 설계한 후 구체화시켜 나가는 것
- 완전한 시스템을 구축하기 전에, 유사한 모델을 만들어서 여러 가지 요인들을 테스트 할 수 있음
- 추상화의 유형과정 추상화 전반적인 흐름만 파악
데이터 추상화 데이터 구조를 대표할 수 있는 표현으로 대체하는 방법 제어 추상화 이벤트 발생의 대표할 수 있는 표현
- 단계적 분해
- 상위의 중요 개념으로부터 하위의 개념으로 구체화 시키는 분할 기법
- 하향식 설계 전략
- 포괄적인 기능에서부터 점차적으로 구체화
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/50d04f5a-7fcf-4c1e-b9e5-493ff044b48d/스크린샷_2024-10-12_오후_11.25.52.png
- 정보 은닉
- 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법
- 모듈을 독립적으로 수행할 수 있음
- 하나의 모듈이 변경되더라도 다른 모듈에 영향을 주지 않으므로 수정, 시험, 유지보수가 용이함
- 상위 설계와 하위 설계
- 소프트웨어 개발의 설계 단계는 크게 상위 설계와 하위 설계로 구분할 수 있음
별칭 아키텍쳐 설계, 예비 설계 모듈 설계, 상세 설계 설계 대상 전체적인 구조 내부 구조 및 행위 세부 목록 구조, DB, 인터페이스 컴포넌트, 자료구조, 알고리즘 - 소프트웨어 아키텍처의 품질 속성
- 이해관계자들이 요구하는 수준의 품질을 유지 및 보장할 수 있게 설계되었는지 확인하기 위해 품질 평가 요소들을 구체화 시켜 놓은 것
- 품질 평가 요소의 종류시스템 측면 성증, 보안, 가용성, 기능성, 사용성, 변경 용이성, 확장성 등
비즈니스 측면 시장 적시성, 비용과 혜택, 예상 시스템 수명, 목표 시장, 공개 일정 등 아키텍처 측면 개념적 무결성, 정확성, 완결성, 구축 가능성, 변경성, 시험성 등
- 소프트웨어 아키텍쳐의 설계 과정
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/f58f2955-b009-4fbf-b275-e8b26a59fe93/스크린샷_2024-10-12_오후_11.30.37.png
- 협약(Contract)에 의한 설계
- 컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것
- 정확한 인터페이스를 명세함
- 명세에 포함될 조건조건 내용
선행 조건 오퍼레이션이 호출되기 전에 참이 되어야 할 조건 결과 조건 오퍼레이션이 수행된 후 만족되어야 할 조건 불변 조건 오퍼레이션이 실행되는 동안 항상 만족되어야 할 조건
아키텍처 패턴
- 아키택처 패턴
- 아키택처를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 주요 아키텍처 패턴의 종류
- 레이어 패턴
- 클라이언트-서버 패턴
- 파이프-필터 패턴
- 모델-뷰-컨트롤러 패턴
- 레이어 패턴
- 시스템을 계층으로 구분하여 구성하는 패턴
- 서로 마주보는 두 개의 계층 사이에서만 사용작용이 이루어짐
- 대표적으로 OSI참조 모델이 있음
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ab3f22c4-63c5-40e2-893d-cb7558a31719/스크린샷_2024-10-12_오후_11.50.54.png
- 클라이언트-서버 패턴
- 파이프-필터 패턴
- 데이터 스트림 절차를 필터로 캡슐화하여 파이프를 통해 전송하는 패턴
- 앞 시스템의 처리 결과물을 처리한 후 다시 파이프를 통해 다음 시스템으로 넘겨주는 패턴을 반복함
- 데이터 변환, 버퍼링, 동기화 등에 주로 사용됨
- 대표적으로 UNIX의 쉘이 있음
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/c0f0c61e-109f-43dd-aa8f-917de3ad3a2f/스크린샷_2024-10-12_오후_11.53.22.png
- 모델-뷰-컨트롤러 패턴
- 서브시스템을 모델, 뷰, 컨트롤러로 구조화하는 패턴
- 사용자의 요청을 받으면 핵심 기능과 데이터를 보관하는 모델을 이용하여 뷰에 정보를 출력하는 구조임
- 여러 개의 뷰를 만들 수 있음
- 한 개의 모델에 대해 여러 개의 뷰를 필요로 하는 대화형 애플리케이션에 적합함
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/797097ff-90b3-430f-8eed-7737a9a4de38/스크린샷_2024-10-12_오후_11.55.48.png
- 기타 패턴종류 내용
마스터-슬레이브 패턴 슬레이브 컴포넌트에서 처리된 결과물을 다시 돌려받는 방식으로 작업 예) 장애 허용 시스템, 병렬 컴퓨팅 시스템 브로커 패턴 사용자가 원하는 서비스와 특성을 브로커 컴포넌트에 요청하면 요청에 맞는 컴포넌트와 사용자를 연결해주는 패턴 예) 분산 환경 시스템 피어-투-피어 패턴 피어라 불리는 하나의 컴포넌트가 클라이언트가 될 수도, 서버가 될 수도 있는 패턴 예) 파일 공유 네트워크 이벤트-버스 패턴 이벤트 메시지를 발행(Publish)하면, 해당 채널을 구독(Subscribe)한 리스너들이 메시지를 받아 이벤트를 처리 예) 알림 서비스 블랙보드 패턴 모든 컴포넌트들이 공유 데이터 저장소와 블랙보드 컴포넌트에 접근이 가능한 패턴 예) 음성 인식, 차량 식별, 신호 해석 인터프리터 패턴 프로그램 코드의 각 라인을 수행하는 방법을 지정하고, 기호마다 클래스를 갖도록 구성된 패턴 예) 번역기, 컴파일러, 인터프리터
객체지향
- 객체지향
- 각 요소들을 객체로 만든 후, 객체들을 조립해서 소프트웨어를 개발하는 기법
- 재사용 및 확장이 용이
- 객체지향의 구성 요소
- 객체
- 클래스
- 메시지
- 객체지향의 특징
- 캡슐화
- 상속
- 다형성
- 연관성
- 객체
- 데이터와 함수를 묶어 놓은 소프트웨어 모듈
- 데이터
- 객체가 가지고 있는 정보로, 속성이나 상태, 분류 등
- 함수
- 객체가 수행하는 기능으로 객체가 갖는 데이터를 처리하는 알고리즘
- 객체의 상태를 참조하거나 변경하는 수단
- 데이터
- 데이터와 함수를 묶어 놓은 소프트웨어 모듈
- 클래스
- 공통된 속성과 연산을 갖는 객체의 집합
- 속성과 연산을 정의하고 있는 틀
- 클래스에 속한 각각의 객체를 인스턴스 라고 함
- 메시지
- 객체들 간의 상호작용에 사용되는 수단으로, 객체의 동작이나 연산을 일으키는 외부의 요구사항
- 메시지를 받은 객체는 예상된 결과를 반환함
- 캡슐화
- 외부에서의 접근을 제한하기 위해 인터페이스를 제외한 세부 내용을 은닉하는 것
- 외부 모듈의 변경으로 인한 파급효과가 적다
- 상대 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 단순해지고, 객체 간의 결합도가 낮아짐
- 상속
- 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
- 하위 클래스는 물려받은 속성과 연산을 다시 정의하지 않아도 즉시 자신의 속성으로 사용할 수 있음
- 하위 클래스는 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용할 수 있음
- 다형성
- 하나의 메시지에 대해 각각의 객체가 고유한 방법으로 응답할 수 있는 능력
- 예) ‘+’ 연산자의 경우 숫자 클래스에서는 덧셈, 문자 클래스에서는 문자열의 연결 기능으로 사용됨
- 연관성
객체지향 분석 및 설계
- 객체지향 분석의 방법론
- 사용자의 요구사항과 객체, 속성, 연산, 관계 등을 정의하여 모델링하는 작업
- 업무를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석함
- 클래스를 식별하는 것이 주요 목적임
- 객체지향 분석의 방법론종류 내용
Rumbaugh(럼바우) 방법 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어서 수행함 Booch(부치) 방법 - 미시적 개발 프로세스와 거시적 개발 프로세스를 모두 사용함 - 클래스와 객체들을 분석 및 식별하고 속성과 연산을 정의 | | Jacobson 방법 | 유스케이스(Use Case)를 강조하여 사용함 | | Coad와 Yourdon 방법 | - E-R 다이어그램을 사용하여 객체의 행위를 모델링함
- 객체 식별, 구조 식별, 주제 정의, 속성과 인스턴스 연결 정의, 연산과 메시지 연결 정의 등의 과정으로 구성함 | | Wirfs-Brock 방법 | 분석과 설계 간의 구분이 없고 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행함 |
- 럼바우 분석 기법
- 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법
- 객체 모델링 기법
- 분석 활동은 객체 모델링 → 동적 모델링 → 기능 모델링 순
동적 모델링 상태 다이어그램을 이용하여 시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현하는 모델링 기능 모델링 자료 흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링 - 객체지향 설계 원칙
- 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜져야 할 원칙
- SRP, OCP, LSP, ISP, DIP의 다섯 가지 원칙의 앞 글자를 따 SOLID 원칙이라고 부름
- 객체지향 설계 원칙의 종류종류 내용
단일 책임 원칙(SRP) 객체는 단 하나의 책임만 가져야 한다는 원칙 개방-폐쇄 원칙(OCP) 기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계 리스코프 치환 원칙(LSP) 자식 클래스는 부모 클래스의 기능을 수행할 수 있어야 한다. 인터페이스 분리 원칙(ISP) 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다는 원칙 의존 역전 원칙(DIP) 의존 관계 성립 시 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 원칙
모듈
- 모듈
- 모듈화를 통해 분리된 시스템의 각 기능으로, 서브루틴, 서브시스템, 소프트웨어 내의 프로그램, 작업 단위 등을 의미함
- 소프트웨어를 구성하는 각 모듈의 기능이 서로 독립됨을 의미함
- 모듈의 독립성은 결합도와 응집도에 의해 측정됨
- 결합도
- 모듈간의 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계
- 결합도가 약할수록 품질이 높고, 강할수록 품질이 낮음
- 결합도의 종류와 강도
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/8407a7b0-ece0-40c5-b0c9-7f346e809eb7/스크린샷_2024-10-17_오전_12.00.49.png
- 결합도의 종류종류 내용
내용 결합도 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때의 결합도 공통(공유) 결합도 공유되는 공통 데이터 영역을 여러 모듈이 사용할 떄의 결합도 외부 결합도 어떤 모듈에서 선언한 데이터를 외부의 다른 모듈에서 참조할 때의 결합도 제어 결합도 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어 신호나 제어 요소를 전달하는 결합도 - 결합도의 종류종류 내용
스탬프(검인) 결합도 배열이나 레코드 등의 자료 구조로 전달될 때의 결합도 자료 결합도 모듈 간의 인터페이스가 조료 요소로만 구성될 떄의 결합도 - 응집도
- 모듈의 내부 요소들이 서로 관련되어 있는 정도
- 응집도가 강할수록 품질이 높고, 약할수록 품질이 낮음
- 응집도의 종류와 강도
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/74b04a60-4dbc-409d-954b-f398e896efd6/스크린샷_2024-10-17_오전_4.04.12.png
- 응집도의 종류종류 내용
기능적 응집도 모듈 내부의 모든 기능 요소들이 단일 문제와 연관 순차적 응집도 하나의 활동으로부터 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우 교환적 응집도 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 절차적 응집도 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 순차적으로 수행할 경우 시간적 응집도 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성 논리적 응집도 유사한 성격을 갖거나 특정 형태로 분류 우연적 응집도 각 구성 요소들이 서로 관련 없는 요소로만 구성 - 팬인 / 팬아웃
- 팬인은 제어하는 모듈의 수
- 팬아웃은 제어되는 모듈의 수
- 팬인이 높다는 것은 재사용 측면에서 설계가 잘 되어있다고 볼 수 있음
- 팬인이 높은 경우 단일 장애점이 발생할 수 있으므로 중점적인 관리 및 테스트가 필요
- ex) 다음의 시스템 구조도에서 각 모듈의 팬인과 팬아웃을 구하시오.
- 팬인은 빨간색, 팬아웃은 파란색
- N-S차트(Nassi-Schneiderman Chart)
- 논리의 기술에 중점을 두고 도형을 이용해 표현하는 방법
- GOTO나 화살표 이용X
- 연속, 선택 및 다중 선택, 반복의 3가지 제어 논리 구조로 표현
- 시각적으로 명확히 식별하는 데 적합함
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/2e6572e7-1281-4a2c-9941-aed494c5facb/스크린샷_2024-10-17_오전_4.09.53.png
단위 모듈
- 단위 모듈
- 소프트웨어 구현에 필요한 여러 동작 중 한 가지 동작을 수행하는 기능을 모듈로 구현한 것
- 단위 모듈로 구현되는 하나의 기능을 단위 기능
- 독립적인 컴파일이 가능하며, 다른 모듈에 호출되거나 삽입되기도 함
- 단위 모듈의 구현 과정
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/aff3c21d-4b1c-40b9-b055-66c4e27e9528/스크린샷_2024-10-17_오전_4.11.37.png
- IPC(Inter-Process Communication)
- 모듈 간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합
- 복수의 프로세스를 수행, 프로세스 간 통신까지 구현
- IPC의 대표 메소드 5가지
Shared Memory 공유 가능한 메모를 구성 Socket 네트워크 소켓을 이용 Semaphores 공유 자원에 대한 접근 제어를 통해 통신 Pipes&named Pipes - Pipe라고 불리는 선입선출 형태 - Pipe는 하나의 프로세스가 이용 중이라면 다른 프로세스는 접근할 수 없음 | | Message Queueing | 메시지가 발생하면 이를 전달하는 방식으로 통신하는 방식 |
- 단위 모듈 테스트
- 모듈이 정해진 기능을 정확히 수행하는 지 검증하는 것
- 단위 테스트라고도 불림
- 시스템 수준의 오류는 잡아낼 수 없음
- 테스트 케이스
- 소프트웨어가 사용자의 요구사항을 정확하게 준수 했는지를 확인하기 위한 테스트 항목에 대한 명세서
- 테스트 케이스를 이용하지 않은 테스트는 검증이 누락되거나 불필요한 검증의 반복으로 인력과 시간을 낭비 할 수 있음
- ISO/IEC/IEEE 29119-3 표준에 따른 테스트 케이스의 구성 요소
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/5cea3691-6e43-4415-93fb-4f2df80b465d/스크린샷_2024-10-17_오전_4.16.03.png
공통 모듈
- 공통 모듈
- 여러 프로그램에서 공통으로 사용할 수 있는 모듈
- 해당 기능을 명확히 이해할 수 있도록 명세 기법을 준수해야 함
- 공통 모듈 명세 기법의 종류명세 기법 내용
정확성 해당 기능이 필요하다는 것을 알 수 있도록 명확성 이해할 때 중의적으로 해석되지 않도록 작성 완전성 필요한 모든 것을 기술 일관성 상호 충돌이 발생하지 않도록 작성 추적성 요구사항의 출처, 관련 시스템 등의 관계를 파악 - 재사용
- 이미 개발된 기능들을 새로운 시스템이나 기능 개발에 사용하기 적합하도록 최적화하는 작업
- 필요한 비용과 시간을 절약 가능
- 사용법을 공개해야함
- 재사용 규모에 따른 분류함수와 객체 클래스나 메소드 단위
컴포넌트 컴포넌트 자체에 대한 수정 없이 인터페이스를 통해 통신 애플리케이션 공통된 기능들을 제공하는 애플리케이션을 공유
- 효과적인 모듈 설계 방안
- 결합도를 줄이고 응집도를 높여서 모듈의 독립성과 재사용성을 높임
- 복잡도와 중복성을 줄이고 일관성을 유지시킴
- 모듈의 기능이 예측이 가능해야 하며 지나치게 제한적이어서는 안 됨
- 모듈 크기는 시스템의 전반적인 기능과 구조를 이해하기 쉬운 크기로 분해함
- 효과적인 제어를 위해 모듈 간의 계층적 관계를 정의하는 자료가 제시
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/64a6d882-a2c2-40c4-ac20-68fcf342a85b/스크린샷_2024-10-17_오전_6.09.51.png
코드
- 코드
- 자료의 분류, 조합, 집계, 추출을 용이하게 하기 위해 사용하는 기호
- 코드의 주요 기능식별기능 데이터 간의 성격에 따라 구분
분류기능 특정 기준이나 동일한 유형에 해당하는 데이터를 그룹화 배열기능 의미를 부여하여 나열할 수 있음 표준화기능 기준에 맞추어 표현 간소화 기능 복잡한 데이터를 간소화 - 코드의 종류종류 내용
순차코드 발생 순서, 크기 순서 등 일정 기준에 따라 일련번호 부여 예) 1, 2, 3, 4 … 블록 코드 공통성이 있는 것끼리 블록으로 구분하고 일련번호 부여 예) 1001~1100: 총무부, 1101~1200: 영업부 10진 코드 0~9까지 10진 분할하고 다시 그 각각에 대하여 10진 분할하는 방법을 필요한 만큼 반복하는 방법 예) 1000: 공학, 1100: 소프트웨어 공학 1110: 소프트웨어 설계 그룹 분류 코드 일정 기준에 따라 대분류, 중분류, 소분류 등으로 구분하여 일련번호 부여 예) 1-01-001: 본사-총무부-인사계, 2-01-001: 지사-총무부-인사계 연상 코드 명칭이나 약호와 관계있는 숫자와 문자, 기호 이용 예) TV-40: 40인치 TV, L-15-220: 15W 220V의 램프 표의 숫자 코드 성질 즉, 길이, 넓이, 부피, 지름 높이 등의 물리적 수치를 그대로 코드에 적용 예) 120-720-1500: 두께표길이가 1207201500인 강판 합성 코드 하나의 코드로 수행하기 어려운 경우 2개 이상의 코드를 조합하여 만드는 방법 예) 연상 코드 + 순차 코드 KE-711: 대한항공 711기, AC-253: 에어캐나다 253기
디자인 패턴
- 디자인 패턴
- 모듈 간의 관계 및 인터페이스를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 개발 과정 중에 문제가 발생하면 새로 해결책을 구상하는 것보다 문제에 해당하는 디자인 패턴을 참고하여 적용하는 것이 더 효율적임
- GOF의 디자인 패턴은 생성 패턴, 구조 패턴, 행위 패턴으로 구분
- 생성 패턴
- 클래스나 객체의 생성과 참조 과정을 정의하는 패턴
- 추상팩토리
- 구체적인 클래스에 의존하지 않고, 인터페이스를 통해 서로 연관,의존하는 객체들의 그룹으로 생성하여 추상적으로 표현함
- 연관된 서브 클래스를 묶어 한 번에 교체하는 것이 가능함
- ex) 요리 내부의 값을 김치찌개에서 된장찌개로 바꿔도 구체적인 클래스에 의존하지 않았기에 문제가 없는 상황
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/25bb3e1e-5930-42f6-bd97-2910690712ae/스크린샷_2024-10-17_오전_6.19.58.png
- 팩토리 메소드
- 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화한 패턴
- 상위 클래스에서 인터페이스만 정의하고 실제 생성은 서브 클래스가 담당
- ex) 구체적인 선언은 하위 요리 클래스 내부에서 하는 방식
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/462fd286-7cb8-4e76-a338-7d6ebe9a1312/스크린샷_2024-10-17_오전_6.23.13.png
- 빌더
- 작게 분리된 인스턴스를 건축 하듯이 조합하여 객체를 생성함
- 객체의 생성과정과 표현방법을 분리하고 있어, 동일한 객체 생성에서도 서로 다른 결과를 만들어 낼 수 있음
- 프로토타입
- 원본 객체를 복제하는 방법으로 객체를 생성하는 방법
- 싱글톤
- 클래스 내에서 인스턴스가 하나뿐임을 보장
- 하나의 객체를 생성하면 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수 없음.
- 구조 패턴
- 복잡한 시스템을 개발하기 쉽도록 클래스나 객체들을 조합하여 더 큰 구조로 만드는 패턴
- 어댑터
- 다른 클래스가 이용할 수 있도록 변환해주는 패턴
- 인터페이스가 일치하지 않을 때 이용함
- 브릿지
- 구현부에서 추상층을 분리하여, 서로가 독립적으로 확장할 수 있도록 구성
- 기능과 구현을 두 개의 별도 클래스로 구현함
- 컴포지트
- 복합 객체와 단일 객체를 구분 없이 다루고자 할 때 사용하는 패턴
- 객체들을 트리 구조로 구성하여, 복합 객체 안에 복합 객체가 포함되는 구조
- 데코레이터
- 객체 간의 결합을 통해 능동적으로 기능들을 확장
- 임의의 객체에 부가적인 기능을 추가하기 위해 다른 객체들을 덧붙이는 방식으로 구현
- 파싸드
- 서브 클래스들을 피해 인터페이스를 구성함으로써 서브 클래스들의 기능을 간편하게 사용할 수 있는 패턴
- 서브 클래스들 사이의 통합 인터페이스를 제공하는 Wrapper 객체가 필요함
- 플라이웨이트
- 매번 생성하는 것이 아니고 가능한 한 공유해서 사용
- 다수의 유사 객체를 생성하거나 조작할 때 유용
- 프록시
- 네트워크 연결, 메모리의 대용량 객체로의 접근
- 접근이 어려운 객체와 객체 사이에서 인터페이스 역할 수행
- 행위 패턴
- 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴
- 책임 연쇄
- 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴
- 각 객체들이 고리로 묶여 있어 요청이 해결될 때 까지 고리를 따라 책임이 넘어감
- 커맨드
- 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 저장하거나 로그에 남기는 패턴
- 각종 명령어들을 추상클래스와 구체 클래스로 분리
- 인터프리터
- 언어의 문법 표현을 정의하는 패턴
- SQL이나 통신 프로토콜 같은 것을 개발할 때 사용
- 반복자(Iterator)
- 접근이 잦은 객체에 대해 동일한 인터페이스 사용
- 내부 표현 방법의 노출 없이 순차적인 접근 간으
- 중재자
- 수많은 객체들 간의 복잡한 상호작용을 캡슐화 하여 객체로 정의
- 의존성을 줄여 결합도를 감소
- 메멘토
- 특정 시점에서의 객체 내부 상태를 객체화함으로 써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공
- [Ctrl] + [Z]와 같은 되돌리기 기능을 개발할 때 주로 이용함
- 옵저버
- 한 객체의 상태가 변화하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태를 전달하는 패턴
- 상태
- 객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용
- 객체 상태를 캡슐화하고 참조하는 방식으로 처리
- 전략
- 동일한 계열의 알고리즘들을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의하는 패턴
- 독립적으로 원하는 알고리즘을 선택하여 사용할 수 있으며, 클라이언트에 영향 없이 알고리즘의 변경이 가능함
- 템플릿 메소드
- 상위 클래스에서 골격을 정의하고, 세부 처리를 구체화하는 구조의 패턴
- 유사한 서브 클래스를 묶어 상위 클래스에서 정의함으로써 코드의 양을 줄이고 유지보수를 용이하게 해줌
- 팩토리 메소드랑 유사한 개념
- 방문자
- 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성
- 처리 기능은 각 클래스를 방문하여 수행함
개발 지원 도구
- 통합 개발 환경(IDE)
- 개발에 필요한 환경, 편집기, 컴파일러, 디버거 등의 다양한 툴을 하나의 인터페이스로 통합하여 제공하는 환경
- 통합 개발 환경 도구의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/75d3e0ec-ebbb-4cf8-a15d-87081f469a8c/스크린샷_2024-10-17_오전_6.36.36.png
- 빌드 도구
- 소스 코드 파일들을 컴퓨터에서 실행할 수 있는 제품 소프트웨어로 변환하는 과정 또는 결과물
- 빌드 도구는 전처리, 컴파일 등의 작업을 수행함
- 대표적인 빌드 도구
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/9ead9c7d-9b55-4491-99e5-45eab4bb2dfc/스크린샷_2024-10-17_오전_6.38.07.png
- 기타 협업 도구
- 개발에 참여하는 사람들이 서로 다른 작업 환경에서 원활하게 프로젝트를 수행할 수 있도록 도와주는 도구
서버 개발
- 서버 개발
- 웹 애플리케이션의 로직을 구현할 서버 프로그램을 제작하여 웹 어플리케이션 서버(WAS)에 탑재하는 것
- 프로그래밍 언어는 Java, Js, Python 등
- 서버 개발 프레임워크
- 서버 프로그램 개발 시 다양한 네트워크 설정, 요청 및 응답 처리, 아키텍처 모델 구현 등을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어
- 대부분 MVC 패턴 기반
- 서버 개발 프레임워크의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ab47a184-5820-48a6-a1dc-825762eb055b/스크린샷_2024-10-17_오전_6.40.49.png
- 서버 개발 과정
- DTO/VO, SQL, DAO, Service, Controller를 각각 구현하는 과정
- 순서는 임의로 변경 가능
- MVC 접근법!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/88a56a82-f952-457f-8a0b-33efc75524ba/스크린샷_2024-10-17_오전_6.42.08.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/f856da4b-e749-42d1-a66b-525b79357309/스크린샷_2024-10-17_오전_6.41.51.png
- 구현 과정과정 내용
DTO/VO 구현 - 데이터 교환을 위해 사용할 객체를 만드는 과정 - 송, 수신할 데이터의 자료형에 맞는 변수 및 객체를 생성함 | | SQL 구현 | - 데이터의 삽입, 변경, 삭제등의 작업을 수행할 SQL문 생성
- 소스 코드 내에 직접 입력, 또는 별도의 XML 파일로 관리 | | DAO 구현 | 데이터베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드를 구현 | | Service 구현 | 요청에 응답하기 위한 로직을 구현 | | Controller 구현 | 적절한 서비스를 호출하여 결과를 반환하는 코드 구현 |
배치 프로그램
- 배치 프로그램
- 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하도록 만든 프로그램을 의미함
- 배치 프로그램의 필수 요소
- 대용량 데이터
- 자동화
- 견고성
- 안정성/신뢰성
- 성능
- 배치 스케줄러
- 일괄 처리 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구
- 특정 업무를 원하는 시간에 처리할 수 있도록 지원
- 잡 스케줄러라고도 불림
- 배치 스케줄러의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/94ee26a1-6696-4351-9301-aff965427e50/스크린샷_2024-10-17_오전_6.54.41.png
- crontab 명령어 작성 방법!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/fbe11882-5246-4e94-9184-ddb656d62b67/스크린샷_2024-10-17_오전_6.56.06.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/590757e4-e084-4755-8a2b-b4e21db29389/스크린샷_2024-10-17_오전_6.55.04.png
시스템 인터페이스 요구사항 분석
- 시스템 인터페이스 요구사항
- 개발할 시스템과 외부 시스템을 연동하는데 필요한 시스템
- 시스템 인터페이스 요구사항 명세서의 구성 요소
- 인터페이스 이름
- 연계 대상 시스템
- 연계 범위 및 내용
- 연계 방식
- 송신 데이터
- 인터페이스 주기
- 기타 고려사항
- 시스템 인터페이스 요구사항 분석
- 요구사항 분류하고 구체적으로 명세한 후 이를 이해관계자에게 전달
- 요구사항 분석 기법을 적절히 이용함
- 요구사항 분해가 필요한 경우 적절한 수준으로 세분화함
- 요구사항 분석 시 누락된 요구사항이나 제한 조건을 추가함
- 상대적 중요도를 평가하여 우선순위를 부여함
- 시스템 인터페이스 요구사항 분석 절차
- 관련 요구사항을 선별하여 별도로 요구사항 목록을 만듦
- 관련된 자료를 준비
- 기능, 비기능 요구사항으로 분리
- 요구사항 명세서에 내용을 추가하거나 수정
- 요구사항 명세서와 요구사항 목록을 이해관계자에게 전달
인터페이스 요구사항 검증
- 인터페이스 요구사항 검증
- 사용자들의 요구사항이 요구사항 명세서에 기술되었는지 검토하고 베이스라인 설정
- 검증 수행 순서
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/715b61d2-dc78-43a7-8169-eaadaf75908f/스크린샷_2024-10-17_오전_7.12.45.png
- 요구사항 검증 방법
- 요구사항 검토
- 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석동료 검토 명세서 작성자가 내용을 직접 설명하고 동려들이 결함을 발견
워크스루 요구사항 명세서를 미리 배포하여 사전 검토 후 검토회를 통해 결함 발견 인스펙션 다른 검토 전문가들이 결함을 발견하는 형태의 검토 방법
- 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석동료 검토 명세서 작성자가 내용을 직접 설명하고 동려들이 결함을 발견
- 프로토 타이핑
- 견본품을 만들어 최종 결과물을 예측
- 테스트 설계
- 요구사항이 현실적으로 테스트 가능한지를 검토
- CASE 도구 활용
- 일관성 분석
- 요구사항 검토
- 요구사항 검증의 주요 항목
- 완전성
- 일관성
- 명확성
- 기능성
- 검증 가능성
- 추적 가능성
- 변경 용이성
송,수신 데이터 식별
- 식별 대상 데이터
- 송 수신 시스템 사이에서 교환되는 데이터로, 규격화된 표준 형식에 따라 전송
- 교환되는 데이터의 종류
- 인터페이스 표준 항목
- 송,수신 데이터 항목
- 공통 코드
- 인터페이스 표준 항목
- 송 수신 시스템을 연계하는데 표준적으로 필요한 데이터
- 시스템 공통부와 거래 공통부시스템 공통부 시스템 간 연동 시 공통 정보
거래 공통부 송 수신되는 데이터를 처리할 때 필요한 정보
- 송, 수신 데이터 항목
- 송 수신 시스템이 업무를 수행하는데 사용하는 데이터
- 데이터 항목과 순서는 인터페이스별로 다름
- 공통 코드
- 시스템들에서 공통적으로 사용하는 코드
- 정보 흐름 식별
- 개발할 시스템과 내 외부 시스템 사이 방향성을 식별
- 송, 수신 데이터 식별
- 개발할 시스템과 연계할 내, 외부 시스템 사이의 정보 흐름과 데이터베이스 산출물을 기반으로 식별
- 인터페이스 표준 항목과 송, 수신 데이터 항목 식별
- 교환 범위를 확인하고 송, 수신 데이터 항목을 식별
- 코드성 데이터 항목 식별
- 코드성 데이터 항목에 대해 코드, 코드명, 코드 설명 등의 코드 정보를 식별
인터페이스 방법 명세화
- 인터페이스 방법 명세화
- 내, 외부 시스템에 연계하여 작동할 때 인터페이스별 송, 수신 방법, 송, 수신 데이터, 오류 식별 및 처리 방안 내용을 문서로 정리
- 송, 수신 방법 명세화
- 각각의 인터페이스에 대해 연계 방식, 통신 및 처리 유형, 발생 주기 등의 송, 수신 방법을 정의하고 명세를 정의
- 송, 수신 데이터 명세화
- 송, 수신 데이터에 대한 명세를 작성
- 오류 식별 및 처리 방안 명세화
- 오류를 식별하고 오류 처리 방안에 대한 명세를 작성
- 인터페이스별로 송, 수신 방법을 명세화하기 위해 필요한 정보
- 시스템 연계 기술
- 인터페이스 통신 유형
- 처리 유형
- 발생 주기
- 시스템 연계 기술
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ea517563-223a-405f-b09e-7ad04e74137d/스크린샷_2024-10-17_오전_7.21.49.png
- 인터페이스 통신 유형유형 내용
단방향 요청만 하고 응답이 없는 형식 동기 요청 후 응답이 올 때 까지 대기 비동기 요청 후 다른 작업을 수행하다 응답이 오면 처리 - 인터페이스 처리 유형유형 내용
실시간 방식 요청 내용을 바로 처리 지연 처리 방식 데이터를 매 건 단위로 처리할 경우 비용이 많이 발생할 때 배치 방식 대량의 데이터를 처리할 때 사용 - 인터페이스 발생 주기
- 개발할 시스템과 내,외부 시스템 간 송, 수신 데이터가 전송되어 인터페이스가 사용되는 주기를 의미
미들웨어 솔루션
- 미들웨어
- 운영체제와 응용 프로그램, 서버와 클라이언트 사이에서 다양한 서비스를 제공하는 소프트웨어
- 표준화된 인터페이스를 제공함으로써 시스템 간의 데이터 교환에 일관성을 보장함
- 미들웨어의 종류
- DB
- RPC
- MOM
- TP-Monitor
- ORB
- WAS
- DB
- 클라이언트에서 원격의 데이터베이스와 연결하는 미들웨어
- RPC(원격 프로시저 호출)
- 원격 프로시저를 마치 로컬 프로시저처럼 호출하는 미들웨어
- MOM(메시지 지향 미들웨어)
- 비동기형 메시지를 전달하는 미들웨어
- 이기종 분산 데이터 시스템의 데이터 동기를 위해 많이 사용됨
- TP-Monitor(트랜잭션 처리 모니터)
- 트랜잭션을 처리 및 감시하는 미들웨어
- 사용자 수가 증가해도 빠른 응답 속도를 유지해야 하는 업무로 사용함
- ORB(객체 요청 브로커)
- 객체 지향 미들웨어
- TP-Monitor의 장점인 트랜잭션 처리와 모니터링 등을 추가로 구현한 제품도 존재
- WAS(웹 애플리케이션 서버)
- 동적인 콘텐츠를 처리하기 위한 미들웨어
- 웹 환경을 구현하기 위한 미들웨어
모듈 연계를 위한 인터페이스 기능 식별
- 모듈 연계
- 내부 모듈과 외부 모듈 또는 내부 모듈 간 데이터의 교환을 위해 관계를 설정
- 대표적인 모듈 연계 방법
- EAI(Enterprise Application Integration)
- ESB(Enterprise Service Bus)
- 웹 서비스
- EAI
- 기업 내 각종 애플리케이션 및 플랫폼 간의 정보 전달, 연계, 통합 등 상호 연동이 가능하게 해주는 솔루션
- EAI의 구축 유형!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/a0aa8dfd-9951-4aea-af16-c87a22f594df/스크린샷_2024-10-17_오전_7.30.46.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/2b0b459f-2766-47a5-90ad-6da23f43bb0a/스크린샷_2024-10-17_오전_7.30.26.png
- ESB
- 애플리케이션 간 연계, 표준 기반의 인터페이스를 제공하는 솔루션
- 애플리케이션 통합측면에서 EAI와 유사하지만 서비스 중심의 통합을 지향
- 범용적으로 사용하기 위해 결합도 약하게 유지
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/e66c3ffa-ac3d-4d18-adf6-cdd66bd2cf14/스크린샷_2024-10-17_오전_7.31.40.png
- 웹 서비스
- 네트워크의 정보를 표준화된 서비스 형태로 만들어 공유하는 기술
- 서비스 지향 아키텍처(SOA) 개념
- 웹 서비스의 구성
- SOAP
- HTTP, HTTPS, SMTP 등을 활용하여 XML기반의 메시지 교환
- UDDI
- WSDL을 등록하여 서비스와 서비스 제공자를 검색하고 접근하는데 사용
- WSDL
- 웹 서비스명, 서비스 제공 위치, 프로토콜 XML 형식으로 구현
- SOAP
- 모듈 간 인터페이스 기능 식별
- 식별된 모듈 간 관련 기능을 검토하여 인터페이스 동작에 필요한 기능을 식별
- 모듈 간 동작하는 기능을 통해 인터페이스 기능을 식별
- 시나리를 통해 내부 모듈과 관련된 인터페이스 기능을 식별
- 실제적으로 필요한 인터페이스 기능을 최종적으로 선별
- 인터페이스 기능 구현을 정의하는데 사용
모듈 간 인터페이스 데이터 표준 확인
- 인터페이스 데이터 표준
- 모듈 간 인터페이스에 사용되는 데이터의 형식을 표준화하는 것
- 기존의 데이터 중에서 공통 영역을 추출하거나 어느 한쪽의 데이터를 변환하여 정의함
- 인터페이스 데이터 표준 확인
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/63553d08-9c94-475c-8a0e-7b4d8d7403ad/스크린샷_2024-10-17_오전_7.35.24.png
인터페이스 기능 구현의 정의
- 인터페이스 기능 구현의 정의
- 인터페이스를 실제로 구현하기 위해 인터페이스 기능에 대한 구현 방법을 기능별로 기술하는 것
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/8f142ab7-d2a2-40d8-aa12-e077b965e368/스크린샷_2024-10-17_오전_7.36.10.png
- 모듈 세부 설계서
- 모듈의 구성 요소와 세부적인 동작 등을 정의한 설계서
- 모듈 세부 설계서 종류컴포넌트 명세서 컴포넌트 개요, 내부 클래스의 동작, 외부와의 통신하는 명세 등을 정의
인터페이스 명세서 인터페이스 클래스의 세부 조건 및 기능 등을 정의
인터페이스 구현
- 인터페이스 구현
- 송, 수신 시스템 간의 데이터 교환 및 처리를 실현해 주는 작업
- 대표적인 인터페이스 구현 방법
- 데이터 통신을 이용한 인터페이스 구현
- 인터페이스 엔티티를 이용한 인터페이스 구현
- AJAX
- JS를 이용하여 클라이언트와 서버 간에 XML 데이터를 주고 받는 비동기 통신 기술
- 웹 페이지 일부 영역만을 업데이트 할 수 있음
- JSON
- 용량이 적은 데이터를 교환하기 위해 데이터 객체를 속성, 값의 쌍 형태로 표현하는 개방형 표준 포맷
- 데이터 통신을 이용한 인터페이스 구현
- ex) JSON을 이용한 인터페이스 구현 순서
- 인터페이스 객체를 생성, 각 시스템 환경에 맞게 선택함
- JSON 이용해 인터페이스 객체를 만듦
- 인터페이스 객체를 AJAX 기술 등을 이용하여 수신 측으로 보냄
- 인터페이스 객체를 수신해 파싱한 후 처리함
- 수신 측에서 송신 측으로 처리 결과를 보냄
- ex) JSON을 이용한 인터페이스 구현 순서
- 인터페이스 엔티티를 이용한 인터페이스 구현
- 인터페이스가 필요한 시스템 사이에 별도의 인터페이스 엔티티를 두어 상호 연계하는 것
- 테이블을 엔티티로 활용함
- ex) 인터페이스 테이블을 이용한 인터페이스 구현 순서
- 인터페이스 이벤트가 발생하면 인터페이스 데이터를 기록
- 송신 측 인터페이스 테이블에 인터페이스 데이터를 전송
- 수신 측 인터페이스 테이블에 입력되면 인터페이스 데이터를 읽음
- 수신 측 인터페이스 테이블에서 읽은 후 사전에 정의된 데이터 트랜잭션 수행
인터페이스 보안
- 인터페이스 보안
- 인터페이스의 보안 취약점 분석 후 적절한 보안 기능을 적용
- 인터페이스 보안 기능 적용
- 인터페이스 아키텍처에 따라 IPSec, SSL, S-HTTP를 사용 | | --- | --- | | 애플리케이션 영역 | 보안 가이드를 참조하여 코드 상의 보안 취약점을 보완 | | 데이터베이스 영역 | - 데이터베이스, 스키마, 엔티티의 접근 권한과 프로시저, 트리거 등 동작 객체의 보안 취약점에 보안 기능 적용
- 개인 정보나 업무상 민감한 데이터의 경우 암호화나 익명화 등 데이터 자체의 보안 방안도 고려 |
- | 네트워크 영역 | - 스니핑 등을 이용한 데이터 탈취 및 변조 위협을 방지하기 위해 네트워크 트래픽에 대한 암호화를 설정
- 데이터 무결성 검사 도구
- 인터페이스 보안 취약점을 분석하는데 사용되는 도구
- 시스템 파일의 변경 유무를 확인하고, 파일이 변경되었을 경우 이를 관리자에게 알려줌
- 종류
- TripWire
- AIDE
- Samhain
- Claymore
- Slipwire
- Fcheck
인터페이스 구현 검증
- 인터페이스 구현 검증
- 인터페이스가 정상적으로 문제없이 작동하는지 확인
- 인터페이스 구현 검증 도구, 감시 도구를 이용
- 인터페이스 구현 검증 도구
- 인터페이스 단위 기능과 시나리오 등을 기반으로 하는 통합 테스트가 필요함
- 테스트 자동화 도구
- 인터페이스 구현 감시 도구
- 동작 상태는 APM(애플리케이션 성능 관리)을 사용하여 감시(Monitoring)할 수 있음
- APM을 통해 종합적인 정보를 조회하고 분석할 수 있음
- 대표적인 APM
- 스카우터
- 제니퍼
- APM(Application Performance Management/Monitoring)
- 애플리케이션의 성능 관리를 위해 다양한 모니터링 기능을 제공하는 도구
- APM은 리소스 방식과 엔드투엔드의 두 가지 유형이 있음
- 리소스 방식
- Nagios, Zabbix, Carti
- 엔드투엔드 방식
- VisualVM, 제니퍼, 스카우터
- 리소스 방식
사용자 인터페이스
- 사용자 인터페이스(UI, User Interface)
- 사용자와 시스템 간의 상호작용이 이뤄지도록 도와주는 장치나 소프트웨어
- 사용자 인터페이스의 세 가지 분야
- 물리적 제어
- 상세적인 표현과 전체적인 구성
- 편리하고 간편하게 사용하도록 하는 기능
- 사용자 인터페이스의 구분구분 내용
CLI 명령과 출력이 텍스트 형태로 이루어지는 인터페이스 GUI 아이콘이나 메뉴를 마우스로 선택하여 작업을 수행하는 그래픽 환경의 인터페이스 NUI 말이나 행동으로 기기를 조작하는 인터페이스 - 사용자 인터페이스의 기본 원칙
- 직관성
- 유효성
- 학습성
- 유연성
UI 설계 도구
- 와이어프레임
- 페이지에 대한 개략적인 레이아웃이나 뼈대를 설계하는 도구
- 페이지의 영역 구분, 콘텐츠, 텍스트 배치 등을 화면 단위로 설계함
- 목업
- 실제 화면과 유사하게 만든 정적인 형태의 모형
- 스토리보드
- 와이어프레임에 콘텐츠에 대한 설명, 페이지 간 이동 흐름 등을 추가한 문서
- 디자이너와 개발자가 최종적으로 참고하는 작업 지침서
- 서비스 구축을 위한 모든 정보가 들어 있음
- 프로토타입
- 와이어프레임이나 스토리보드 등에 인터랙션을 적용함으로써 실제 구현된 것처럼 테스트가 가능한 동적인 형태의 모형
- 종류
- 제작 기간이 짧은 경우, 제작 비용이 적을 경우, 업무 협의가 빠를 경우 | | --- | --- | | 디지털 프로토타입 | - 파워포인트, 아크로뱃, 비지오, 옴니그래플 등과 같은 프로그램을 사용
- 재사용이 필요한 경우, 산출물과 비슷한 효과가 필요한 경우, 숙력된 전문가가 있는 경우 |
- | 페이퍼 프로토타입 | - 아날로그적인 방법
- 유스케이스
- 사용자의 요구사항을 기능 단위로 표현
- 사용자가 원하는 목표를 달성하기 위해 수행할 내용을 기술함
- 사용자의 요구사항을 빠르게 파악함으로써 초기에 시스템의 기능적인 요구를 결정
- 다이어그램 형식으로 묘사됨
품질 요구사항
- 품질 요구사항
- 사용자의 입장에서 얼마나 충족하는가
- 사용자의 요구사항을 충족시킴으로써 확립
- 소프트웨어 품질 관련 표준
- ISO/IEC 9126의 소프트웨어 품질 특성
UI 설계서
- UI 설계서
- 요구사항을 바탕으로 UI 설계를 구체화하여 작성하는 문서
- 기획자, 개발자, 디자이너 등과의 원할한 의사소통을 위함
- UI 흐름 설계
- UI 상세 설계
- 실제 설계 구현을 위해 자세하게 설계
- 반드시 시나리오를 작성해야함
- UI 시나리오 문서
- 사용자 인터페이스의 기능 구조, 대표 화면, 화면 간 인터랙션의 흐름, 다양한 상황에서의 예외 처리 등을 정리한 문서
- 사용자가 최종 목표를 달성하기 위한 방법이 순차적으로 묘사되어 있음
- UI 시나리오 문서의 요건
- 완전성
- 일관성
- 이해성
- 가독성
- 수정 용이성
- 추적 용이성
- UI 상세 설계 순서
HCI / UX / 감성공학
- HCI(Human Computer Interaction or Inteface)
- 사람이 시스템을 보다 편리하고 안전하게 사용할 수 있도록 연구하고 개발하는 학문
- 최종목표는 최적의 UX 만드는 것
- 어떤 제품이 좋은 제품인지, 어떻게 하면 좋은 제품을 만들 수 있는지 연구
- UX(User Experience)
- 사용자가 시스템이나 서비스를 이용하면서 느끼고 생각하게 되는 총체적인 경험
- UI가 사용성, 접근성, 편의성을 중시한다면, UX는 UI를 통해 사용자가 느끼는 만족이나 감정 중시
- 기술을 효용성 측면만 아니라 삶의 질을 향상시키는 하나의 방향으로 봄
- UX의 특징
- 주관성
- 정황성
- 총체성
- 감성공학
- 제품이나 작업환경을 사용자의 감성에 알맞도록 설계 및 제작하는 기술
- 여러 분야의 학문이 공존하는 종합과학임
- 목적은 인간의 삶을 편리하고 안전하며 쾌적하게 만드는 것
- 인간의 감성을 제품 설계에 적용하기 위해 공학적인 접근 방법 사용
애플리케이션 테스트
- 애플리케이션 테스트
- 애플리케이션에 잠재되어 있는 결함을 찾아내는 일련의 행위 또는 절차
- 고객의 요구사항을 만족시키는지 확인하고 소프트웨어가 기능을 정확히 수행하는지 검증함
- 애플리케이션의 기본 원리기본 원리 설명
완벽한 테스트 불가능 잠재적인 결함을 줄일 수 있지만 결함이 없다고 증명할 수 없음 파레토 법칙 20%에 해당하는 코드에서 전체 결함의 80%가 발견된다는 법칙 살충제 패러독스 동일한 테스트 케이스로 동일한 테스트를 반복하면 더 이상 결함이 발견되지 않는 현상 테스팅은 정황 의존 소프트웨어의 특징, 테스트 환경, 테스터의 역량 등 정황에 따라 테스트 결과가 달라질 수 있으므로, 정황에 따라 다르게 테스트를 수행해야함 오류-부재의 궤변 결함을 모두 제거해도, 사용자의 요구사항을 만족시키지 못하면 품질이 높다고 할 수 없다. 테스트와 위험은 반비례 테스트를 할 수록 미래에 발생할 위험을 줄일 수 있음 테스트의 점진적 확대 작은 부분에서 시작하여 점점 확대하며 진행 테스트의 별도 팀 수행 개발자와 관계없는 별도의 팀에서 수행
애플리케이션 테스트의 분류
- 프로그램 실행 여부에 따른 테스트
- 소스 코드에 대한 코딩 표준, 코딩 스타일, 코드 복잡도, 남은 결합 등을 발견하기 위함
- 종류: 워크스루, 인스펙션, 코드 검사 | | --- | --- | | 동적 테스트 | - 프로그램을 실행하여 오류를 찾는 테스트
- 개발의 모든 단계에서 테스트를 수행
- 종류: 블랙박스 테스트, 화이트박스 테스트 |
- | 정적 테스트 | - 프로그램을 실행하지 않고 명세사나 소스 코드를 대상으로 분석
- 테스트 기반에 따른 테스트
- 종류: 동등 분할, 경계 값 분석 등 | | --- | --- | | 구조 기반 테스트 | - 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인
- 종류: 구문 기반, 결정 기반, 조건 기반 등 | | 경험 기반 테스트 | - 유사 소프트웨어나 기술 등에 대한 테스터의 경험을 기반으로 수행
- 명세가 불충분하거나 테스트 시간에 제약이 있는 경우
- 종류: 에러 추정, 체크 리스트, 탐색적 테스팅 |
- | 명세 기반 테스트 | - 사용자의 요구사항에 대한 명세를 빠짐없이 테스트 케이스로 만들어 구현하고 있는지 확인하는 테스트
- 시각에 따른 테스트
- 명세서대로 완성됐는지 테스트 | | --- | --- | | 확인 테스트 | - 사용자의 시각에서 생산된 제품의 결과를 테스트
- 요구한대로 제품이 완성됐는지, 정상적으로 동작하는지 테스트 |
- | 검증 테스트 | - 개발자의 시각에서 제품의 생산 과정을 테스트
- 목적에 따른 테스트회복 테스트 실패하도록 한 후 올바르게 복구되는지 확인
안전 테스트 불법적인 침입으로부터 시스템을 보호할 수 있는지 강도 테스트 과도한 정보량이나 빈도 등을 부과하여 과부하 시에도 정상적으로 실행되는지 성능 테스트 실시간 성능이나 전체적인 효율성을 진단, 응답 시간, 처리량 등을 테스트 구조 테스트 논리적인 경로, 소스 코드의 복잡도 등을 평가 회귀 테스트 변경 또는 수정된 코드에 새로운 결함이 없음을 확인하는 테스트 병행 테스트 변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력하여 결과를 비교하는 테스트
개발 단계에 따른 애플리케이션 테스트
- 개발 단계에 따른 애플리케이션 테스트
- 개발 단계에 따라 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트로 분류됨
- 애플리케이션 테스트와 소프트웨어 개발 단계를 연결하여 표현한 것을 V-모델이라고 함
- 단위 테스트
- 코딩 직후 모듈이나 컴포넌트에 초점을 맞춰 테스트함
- 기능성 테스트를 최우선으로 수행
- 구조 기반 테스트와 명세 기반 테스트로 나뉘지만 주로 구조 기반 테스트를 시행함
- 통합 테스트
- 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트를 의미
- 모듈 간 또는 통합된 컴포넌트 간의 상호 작용 오류를 검사함
- 시스템 테스트
- 완벽하게 수행되는가를 점검
- 기능정 요구사항과 비기능적 요구사항으로 구분하여 각각을 만족하는지 테스트
- 인수 테스트
- 사용자의 요구사항을 충족하는지에 중점을 둠
- 사용자가 직접 테스트함
사용자 인수 테스트 시스템 사용의 적절성 여부를 확인함 운영상의 인수 테스트 - 시스템 관리자가 시스템 인수 시 수행하는 테스트 기법 - 백업/복원 시스템, 재난 복구, 사용자 관리, 정기 점검 | | 계약 인수 테스트 | 계약상의 인수/검수 조건을 준수하는지 여부 | | 규정 인수 테스트 | 정부 지침, 법규, 규정에 맞게 개발 되었는지 여부 | | 알파 테스트 | 사용자가 개발자 앞에서 행하는 테스트 기법 | | 베타 테스트 | 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법 |
통합 테스트
- 통합 테스트
- 단위 테스트가 끝난 모듈을 통합하는 과정에서 발생하는 오류 및 결함을 찾는 테스트 기법
- 종류
- 종류: 빅뱅 통합 테스트 방식 | | --- | --- | | 점진적 통합 방식 | - 모듈 단위로 단계적으로 통합하면서 테스트 하는 방법
- 종류: 하향식 통합 테스트, 상향식 통합 테스트, 혼합식 통합 테스트 |
- | 비점진적 통합 방식 | - 통합하는 절차 없이 모든 모듈이 미리 결합되어 있는 프로그램 전체를 테스트 하는 방법
- 하향식 통합 테스트
- 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트
- 깊이 우선 통합법이나 넓이 우선 통합법을 사용함
- 하향식 통합 테스트 절차
- 제어 모듈은 작성된 프로그램을 사용, 주요 제어 모듈의 종속 모듈들은 스텁으로 대체
- 깊이 우선 또는 넓이 우선 등의 통합 방식에 따라 하위 모듈인 스텁들이 한 번에 하나씩 실제 모듈로 교체
- 모듈이 통합할 때 마다 테스트를 실시함
- 새로운 오류가 발생하지 않음을 보증하기 위해 회귀 테스트를 실시
- 상향식 통합 테스트
- 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트
- 상향식 통합 테스트 절차
- 하위 모듈들을 클러스터로 결합
- 상위 모듈에서 데이터 입,출력을 확인하기 위해 더미 모듈인 드라이버를 작성함
- 통합된 클러스터 단위로 테스트
- 테스트 완료 시, 프로그램 구조의 상위로 이동하여 결합하고 드라이버는 실제 모듈로 대체됨
- 혼합식 통합 테스트
- 하위 수준에는 상향식 통합, 상위 수준에서는 하향식 통합을 사용하여 최적의 테스트를 지원
- 샌드위치 식 통합 테스트 방법이라고도 함
- 회귀 테스팅
- 통합 테스트로 인해 변경된 모듈이나 컴포넌트에 새로운 오류가 있는지 확인
- 이미 테스트된 프로그램의 테스팅을 반복
- 수정한 모듈이나 컴포넌트가 다른 부분에 영향을 미치는지, 오류가 생기지 않았는지 새로운 오류가 발생하지 않음을 보증하기 위해 반복 테스트함.
테스트 케이스/ 테스트 시나리오 / 테스트 오라클
- 테스트 케이스
- 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력 값, 실행 조건, 기대 결과 등으로 구성 된 테스트 항목에 대한 명세서
- 오류 방지, 인력 시간, 자원 낭비를 지울 수 있음
- 테스트 시나리오
- 테스트 케이스를 적용하는 순서에 따라 여러 개의 테스트 케이스를 묶은 집합
- 적용하는 구체적인 절차를 명세함
- 구체적인 절차, 사전 조건, 입력 데이터 등이 설정되어 있음
- 테스트 오라클
- 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입하여 비교
- 테스트 케이스에 대한 예상 결과를 계산하거나 확인함
- 테스트 오라클의 특징
- 제한된 검증
- 모든 테스트 케이스에 적용할 수 없음
- 수학적 기법
- 값을 수학적 기법을 이용하여 구할 수 있음
- 자동화 기법
- 대상 프로그램의 실행, 결과 비교, 커버리지 측정 등을 자동화 할 수 있음
- 제한된 검증
- 테스트 오라클의 종류
- 모든 오류를 검출할 수 있음 | | --- | --- | | 샘플링 오라클 | - 특정한 몇몇 테스트 케이스의 입력 값들에 대해서만 기대하는 결과를 제공
- 전수 테스트가 불가능한 경우 사용 | | 추정 오라클 | - 특정 테스트 케이스의 입력값에 대해 기대하는 결과 제공
- 나머지 입력 값들에 대해서는 추정으로 처리하는 오라클 | | 일관성 검사 오라클 | 애플리케이션에 변경이 있을 때, 테스트 케이스의 수행 전과 후의 결과 값이 동일한지를 확인 |
- | 참 오라클 | - 입력 값에 대해 기대하는 결고라르 제공하는 오라클
테스트 자동화 도구
- 테스트 자동화
- 사람이 반복적으로 수행하던 테스트 절차를 스크립트 형태로 구현하는 자동화 도구를 적용함으로써 쉽고 효율적으로 테스트를 수행할 수 있도록 한 것
- 테스트 유형에 따른 테스트 자동화 도구의 종류
- 정적 분석 도구
- 테스트 실행 도구
- 성능 테스트 도구
- 테스트 통제 도구
- 정적 분석 도구
- 프로그램을 실행하지 않고 분석하는 도구
- 테스트 실행 도구
- 스크립트 언어를 사용하여 테스트를 실행하는 도구
- 데이터 주도 접근 방식
- 데이터를 저장하고 이를 읽어 실행하는 방식
- 키워드 주도 접근 방식
- 수행할 동작을 나타내는 키워드와 테스트 데이터를 저장하여 실행하는 방식
- 성능 테스트 도구
- 가상의 사용자를 만들어 성능의 목표 달성 여부를 확인하는 도구
- 테스트 통제 도구
- 테스트 계획 및 관리, 테스트 수행, 결함 관리 등을 수행하는 도구
- 종류
- 형상 관리 도구
- 결함 추적 / 관리 도구
- 테스트 하네스 도구
- 테스트가 실행될 환경을 시뮬레이션하여 컴포넌트 및 모듈이 정상적으로 테스트되도록 하는 도구
- 테스트 하네스
- 컴포넌트 및 모듈을 테스트하는 환경의 일부분으로, 테스트를 지원하기 위해 생성된 코드와 데이터
- 테스트 하네스의 구성 요소테스트 드라이버
테스트 스텁 테스트 슈트 컴포넌트나 모듈, 시스템에 사용되는 테스트 케이스의 집합 테스트 케이스 테스트 스크립트 테스트 실행절차에 대한 명세서 목 오브젝트 조건부로 입력해 두면, 그 상황에 맞는 예정된 행위를 수행 - 테스트 수행 단계별 테스트 자동화 도구테스트 단계 자동화도구 설명
테스트 계획 요구사항 관리 요구사항 정의 및 변경 사항 등을 관리하는 도구 테스트 분석 / 설계 테스트 케이스 생성 테스트 데이터 및 테스트 케이스 작성을 지원 테스트 수행 테스트 자동화 자동화를 도와주는 도구 정적 분석 코딩 표준, 런타임 오류 검증 동적 분석 시뮬레이션을 통해 오류를 검출 성능 테스트 가상의 사용자를 생성하여 처리 능력을 측정 모니터링 CPU, Memory 등과 같은 시스템 자원의 상태 확인 및 분석을 지원 테스트 관리 커버리지 분석 충분성 여부 검증 형상 관리 도구 및 데이터 관리 결함 추적/ 관리 발생한 결함 추적 및 관리 활동을 지원
결함 관리
- 결함
- 소프트웨어가 개발자가 설계한 것과 다르게 동작하거나 다른 결과가 발생되는 것
- 결함 관리 프로세스
- 결함 상태 추적
- 발견된 결함은 지속적ㄱ으로 상태 변화를 추적하고 관리해야ㅏㅎㅁ
정보시스템 구축관리
개별 환경 구축
- 개발 환경 구축
- 개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축
- 응용 소프트웨어가 운영될 환경과 유사한 구조로 구축
- 하드웨어와 소프트웨어를 선정함
- 성능, 편의성, 라이선스 등의 비즈니스 환경에 적합한 제품들을 최종적으로 결정하여 구축함
- 하드웨어 환경
- 사용자와의 인터페이스 역할을 하는 클라이언트, 서비스를 제공하는 서버로 구성
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/fdcae290-8799-49e3-8f8e-d909a5ecd7c2/스크린샷_2024-10-12_오후_10.31.17.png
- 클라이언트의 종류
- 개인용 컴퓨터(PC), 스마트폰 등
- 서버의 종류종류 특징
웹 서버 - 직접 요청을 받아 처리함 - 정적 파일들을 제공함 | | 웹 애플리케이션 서버(WAS) | 동적 서비스를 제공하거나 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행함 | | 데이터베이스 서버 | 데이터베이스와 이를 관리하는 DBMS를 운영함 | | 파일 서버 | 데이터베이스에 저장하기에는 비효율적이거나, 서비스 제공을 목적으로 유지하는 파일들을 저장함 |
- 소프트웨어 환경
- 클라이언트와 서버 운영을 위한 시스템 소프트웨어와 개발에 사용되는 개발 소프트웨어로 구성됨
- 시스템 소프트웨어의 종류
- 운영체제, 웹 서버 및 WAS 운용을 위한 서버 프로그램, DBMS
- 개발 소프트웨어의 종류종류 특징
요구사항 관리 도구 요구사항의 수집과 분석, 추적 등을 편리하게 도와주는 소프트웨어 설계/모델링 도구 UML을 지원하며, 전 과정에서 설계 및 모델링을 도와주는 소프트웨어 구현 도구 개발 언어를 통해 실제 구현을 지원하는 소프트웨어 빌드 도구 소스의 빌드 및 배포, 라이브러리 관리를 지원하는 소프트웨어 테스트 도구 모듈들이 요구사항에 적합하게 구현되었는지 테스트하는 소프트웨어 형상 관리 도구 버전별로 관리하여 품질 형상을 지원하는 소프트웨어 - 웹 서버의 기능기능 내용
HTTP/HTTPS 지원 브라우저로부터 요청을 받아 응답할 때 사용되는 프로토콜 통신 기록 처리한 요청들을 로그 파일로 기록하는 기능 정적 파일 관리 HTML, CSS, 이미지 등의 정적 파일들을 저장하고 관리 대역폭 제한 트래픽의 포화를 방지하기 위해 응답 속도 제한 가상 호스팅 여러 개의 도메인 이름을 연결하는 기능 인증 합법적인 사용자인지를 확인 - 개발 언어의 선정 기준기준 내용
적정성 개발하려는 소프트웨어의 목적에 적합해야 함 효율성 코드의 작성 및 구현이 효율적이어야 함 이식성 다양한 시스템 및 환경에 적용이 가능해야 함 친밀성 개발 언어에 대한 개발자들의 이해도와 활용도가 높아야 함 범용성 다른 개발 사례가 존재하고 여러 분야에서 활용되고 있어야 함
소프트웨어 아키텍처
- 소프트웨어 아키텍처
- 소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체
- 분할 방법과 분할된 모듈에 할당될 기능, 모듈 간의 인터페이스 등을 결정함
- 소프트웨어 아키텍처 설계의 기본 원리, 모듈화, 추상화, 단계적 분, 정보은닉이 있음
- 모듈화
- 소프트웨어의 성능 향상, 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 시스템의 기능들을 모듈 단위로 나누는 것을 의미함
- 모듈의 크기를 너무 작게 나누면 개수가 많아져 모듈 간의 통합 비용이 많이 듬
- 모듈의 크기를 너무 크게 나누면 개수가 적어 통합 비용은 적게 들지만 모듈 하나의 개발 비용이 많이 듬
- 추상화
- 전체적이고 포괄적인 개념을 설계한 후 구체화시켜 나가는 것
- 완전한 시스템을 구축하기 전에, 유사한 모델을 만들어서 여러 가지 요인들을 테스트 할 수 있음
- 추상화의 유형과정 추상화 전반적인 흐름만 파악
데이터 추상화 데이터 구조를 대표할 수 있는 표현으로 대체하는 방법 제어 추상화 이벤트 발생의 대표할 수 있는 표현
- 단계적 분해
- 상위의 중요 개념으로부터 하위의 개념으로 구체화 시키는 분할 기법
- 하향식 설계 전략
- 포괄적인 기능에서부터 점차적으로 구체화
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/50d04f5a-7fcf-4c1e-b9e5-493ff044b48d/스크린샷_2024-10-12_오후_11.25.52.png
- 정보 은닉
- 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법
- 모듈을 독립적으로 수행할 수 있음
- 하나의 모듈이 변경되더라도 다른 모듈에 영향을 주지 않으므로 수정, 시험, 유지보수가 용이함
- 상위 설계와 하위 설계
- 소프트웨어 개발의 설계 단계는 크게 상위 설계와 하위 설계로 구분할 수 있음
별칭 아키텍쳐 설계, 예비 설계 모듈 설계, 상세 설계 설계 대상 전체적인 구조 내부 구조 및 행위 세부 목록 구조, DB, 인터페이스 컴포넌트, 자료구조, 알고리즘 - 소프트웨어 아키텍처의 품질 속성
- 이해관계자들이 요구하는 수준의 품질을 유지 및 보장할 수 있게 설계되었는지 확인하기 위해 품질 평가 요소들을 구체화 시켜 놓은 것
- 품질 평가 요소의 종류시스템 측면 성증, 보안, 가용성, 기능성, 사용성, 변경 용이성, 확장성 등
비즈니스 측면 시장 적시성, 비용과 혜택, 예상 시스템 수명, 목표 시장, 공개 일정 등 아키텍처 측면 개념적 무결성, 정확성, 완결성, 구축 가능성, 변경성, 시험성 등
- 소프트웨어 아키텍쳐의 설계 과정
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/f58f2955-b009-4fbf-b275-e8b26a59fe93/스크린샷_2024-10-12_오후_11.30.37.png
- 협약(Contract)에 의한 설계
- 컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것
- 정확한 인터페이스를 명세함
- 명세에 포함될 조건조건 내용
선행 조건 오퍼레이션이 호출되기 전에 참이 되어야 할 조건 결과 조건 오퍼레이션이 수행된 후 만족되어야 할 조건 불변 조건 오퍼레이션이 실행되는 동안 항상 만족되어야 할 조건
아키텍처 패턴
- 아키택처 패턴
- 아키택처를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 주요 아키텍처 패턴의 종류
- 레이어 패턴
- 클라이언트-서버 패턴
- 파이프-필터 패턴
- 모델-뷰-컨트롤러 패턴
- 레이어 패턴
- 시스템을 계층으로 구분하여 구성하는 패턴
- 서로 마주보는 두 개의 계층 사이에서만 사용작용이 이루어짐
- 대표적으로 OSI참조 모델이 있음
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ab3f22c4-63c5-40e2-893d-cb7558a31719/스크린샷_2024-10-12_오후_11.50.54.png
- 클라이언트-서버 패턴
- 파이프-필터 패턴
- 데이터 스트림 절차를 필터로 캡슐화하여 파이프를 통해 전송하는 패턴
- 앞 시스템의 처리 결과물을 처리한 후 다시 파이프를 통해 다음 시스템으로 넘겨주는 패턴을 반복함
- 데이터 변환, 버퍼링, 동기화 등에 주로 사용됨
- 대표적으로 UNIX의 쉘이 있음
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/c0f0c61e-109f-43dd-aa8f-917de3ad3a2f/스크린샷_2024-10-12_오후_11.53.22.png
- 모델-뷰-컨트롤러 패턴
- 서브시스템을 모델, 뷰, 컨트롤러로 구조화하는 패턴
- 사용자의 요청을 받으면 핵심 기능과 데이터를 보관하는 모델을 이용하여 뷰에 정보를 출력하는 구조임
- 여러 개의 뷰를 만들 수 있음
- 한 개의 모델에 대해 여러 개의 뷰를 필요로 하는 대화형 애플리케이션에 적합함
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/797097ff-90b3-430f-8eed-7737a9a4de38/스크린샷_2024-10-12_오후_11.55.48.png
- 기타 패턴종류 내용
마스터-슬레이브 패턴 슬레이브 컴포넌트에서 처리된 결과물을 다시 돌려받는 방식으로 작업 예) 장애 허용 시스템, 병렬 컴퓨팅 시스템 브로커 패턴 사용자가 원하는 서비스와 특성을 브로커 컴포넌트에 요청하면 요청에 맞는 컴포넌트와 사용자를 연결해주는 패턴 예) 분산 환경 시스템 피어-투-피어 패턴 피어라 불리는 하나의 컴포넌트가 클라이언트가 될 수도, 서버가 될 수도 있는 패턴 예) 파일 공유 네트워크 이벤트-버스 패턴 이벤트 메시지를 발행(Publish)하면, 해당 채널을 구독(Subscribe)한 리스너들이 메시지를 받아 이벤트를 처리 예) 알림 서비스 블랙보드 패턴 모든 컴포넌트들이 공유 데이터 저장소와 블랙보드 컴포넌트에 접근이 가능한 패턴 예) 음성 인식, 차량 식별, 신호 해석 인터프리터 패턴 프로그램 코드의 각 라인을 수행하는 방법을 지정하고, 기호마다 클래스를 갖도록 구성된 패턴 예) 번역기, 컴파일러, 인터프리터
객체지향
- 객체지향
- 각 요소들을 객체로 만든 후, 객체들을 조립해서 소프트웨어를 개발하는 기법
- 재사용 및 확장이 용이
- 객체지향의 구성 요소
- 객체
- 클래스
- 메시지
- 객체지향의 특징
- 캡슐화
- 상속
- 다형성
- 연관성
- 객체
- 데이터와 함수를 묶어 놓은 소프트웨어 모듈
- 데이터
- 객체가 가지고 있는 정보로, 속성이나 상태, 분류 등
- 함수
- 객체가 수행하는 기능으로 객체가 갖는 데이터를 처리하는 알고리즘
- 객체의 상태를 참조하거나 변경하는 수단
- 데이터
- 데이터와 함수를 묶어 놓은 소프트웨어 모듈
- 클래스
- 공통된 속성과 연산을 갖는 객체의 집합
- 속성과 연산을 정의하고 있는 틀
- 클래스에 속한 각각의 객체를 인스턴스 라고 함
- 메시지
- 객체들 간의 상호작용에 사용되는 수단으로, 객체의 동작이나 연산을 일으키는 외부의 요구사항
- 메시지를 받은 객체는 예상된 결과를 반환함
- 캡슐화
- 외부에서의 접근을 제한하기 위해 인터페이스를 제외한 세부 내용을 은닉하는 것
- 외부 모듈의 변경으로 인한 파급효과가 적다
- 상대 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 단순해지고, 객체 간의 결합도가 낮아짐
- 상속
- 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
- 하위 클래스는 물려받은 속성과 연산을 다시 정의하지 않아도 즉시 자신의 속성으로 사용할 수 있음
- 하위 클래스는 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용할 수 있음
- 다형성
- 하나의 메시지에 대해 각각의 객체가 고유한 방법으로 응답할 수 있는 능력
- 예) ‘+’ 연산자의 경우 숫자 클래스에서는 덧셈, 문자 클래스에서는 문자열의 연결 기능으로 사용됨
- 연관성
객체지향 분석 및 설계
- 객체지향 분석의 방법론
- 사용자의 요구사항과 객체, 속성, 연산, 관계 등을 정의하여 모델링하는 작업
- 업무를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석함
- 클래스를 식별하는 것이 주요 목적임
- 객체지향 분석의 방법론종류 내용
Rumbaugh(럼바우) 방법 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어서 수행함 Booch(부치) 방법 - 미시적 개발 프로세스와 거시적 개발 프로세스를 모두 사용함 - 클래스와 객체들을 분석 및 식별하고 속성과 연산을 정의 | | Jacobson 방법 | 유스케이스(Use Case)를 강조하여 사용함 | | Coad와 Yourdon 방법 | - E-R 다이어그램을 사용하여 객체의 행위를 모델링함
- 객체 식별, 구조 식별, 주제 정의, 속성과 인스턴스 연결 정의, 연산과 메시지 연결 정의 등의 과정으로 구성함 | | Wirfs-Brock 방법 | 분석과 설계 간의 구분이 없고 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행함 |
- 럼바우 분석 기법
- 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법
- 객체 모델링 기법
- 분석 활동은 객체 모델링 → 동적 모델링 → 기능 모델링 순
동적 모델링 상태 다이어그램을 이용하여 시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현하는 모델링 기능 모델링 자료 흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링 - 객체지향 설계 원칙
- 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜져야 할 원칙
- SRP, OCP, LSP, ISP, DIP의 다섯 가지 원칙의 앞 글자를 따 SOLID 원칙이라고 부름
- 객체지향 설계 원칙의 종류종류 내용
단일 책임 원칙(SRP) 객체는 단 하나의 책임만 가져야 한다는 원칙 개방-폐쇄 원칙(OCP) 기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계 리스코프 치환 원칙(LSP) 자식 클래스는 부모 클래스의 기능을 수행할 수 있어야 한다. 인터페이스 분리 원칙(ISP) 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다는 원칙 의존 역전 원칙(DIP) 의존 관계 성립 시 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 원칙
모듈
- 모듈
- 모듈화를 통해 분리된 시스템의 각 기능으로, 서브루틴, 서브시스템, 소프트웨어 내의 프로그램, 작업 단위 등을 의미함
- 소프트웨어를 구성하는 각 모듈의 기능이 서로 독립됨을 의미함
- 모듈의 독립성은 결합도와 응집도에 의해 측정됨
- 결합도
- 모듈간의 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계
- 결합도가 약할수록 품질이 높고, 강할수록 품질이 낮음
- 결합도의 종류와 강도
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/8407a7b0-ece0-40c5-b0c9-7f346e809eb7/스크린샷_2024-10-17_오전_12.00.49.png
- 결합도의 종류종류 내용
내용 결합도 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때의 결합도 공통(공유) 결합도 공유되는 공통 데이터 영역을 여러 모듈이 사용할 떄의 결합도 외부 결합도 어떤 모듈에서 선언한 데이터를 외부의 다른 모듈에서 참조할 때의 결합도 제어 결합도 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어 신호나 제어 요소를 전달하는 결합도 - 결합도의 종류종류 내용
스탬프(검인) 결합도 배열이나 레코드 등의 자료 구조로 전달될 때의 결합도 자료 결합도 모듈 간의 인터페이스가 조료 요소로만 구성될 떄의 결합도 - 응집도
- 모듈의 내부 요소들이 서로 관련되어 있는 정도
- 응집도가 강할수록 품질이 높고, 약할수록 품질이 낮음
- 응집도의 종류와 강도
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/74b04a60-4dbc-409d-954b-f398e896efd6/스크린샷_2024-10-17_오전_4.04.12.png
- 응집도의 종류종류 내용
기능적 응집도 모듈 내부의 모든 기능 요소들이 단일 문제와 연관 순차적 응집도 하나의 활동으로부터 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우 교환적 응집도 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 절차적 응집도 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 순차적으로 수행할 경우 시간적 응집도 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성 논리적 응집도 유사한 성격을 갖거나 특정 형태로 분류 우연적 응집도 각 구성 요소들이 서로 관련 없는 요소로만 구성 - 팬인 / 팬아웃
- 팬인은 제어하는 모듈의 수
- 팬아웃은 제어되는 모듈의 수
- 팬인이 높다는 것은 재사용 측면에서 설계가 잘 되어있다고 볼 수 있음
- 팬인이 높은 경우 단일 장애점이 발생할 수 있으므로 중점적인 관리 및 테스트가 필요
- ex) 다음의 시스템 구조도에서 각 모듈의 팬인과 팬아웃을 구하시오.
- 팬인은 빨간색, 팬아웃은 파란색
- N-S차트(Nassi-Schneiderman Chart)
- 논리의 기술에 중점을 두고 도형을 이용해 표현하는 방법
- GOTO나 화살표 이용X
- 연속, 선택 및 다중 선택, 반복의 3가지 제어 논리 구조로 표현
- 시각적으로 명확히 식별하는 데 적합함
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/2e6572e7-1281-4a2c-9941-aed494c5facb/스크린샷_2024-10-17_오전_4.09.53.png
단위 모듈
- 단위 모듈
- 소프트웨어 구현에 필요한 여러 동작 중 한 가지 동작을 수행하는 기능을 모듈로 구현한 것
- 단위 모듈로 구현되는 하나의 기능을 단위 기능
- 독립적인 컴파일이 가능하며, 다른 모듈에 호출되거나 삽입되기도 함
- 단위 모듈의 구현 과정
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/aff3c21d-4b1c-40b9-b055-66c4e27e9528/스크린샷_2024-10-17_오전_4.11.37.png
- IPC(Inter-Process Communication)
- 모듈 간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합
- 복수의 프로세스를 수행, 프로세스 간 통신까지 구현
- IPC의 대표 메소드 5가지
Shared Memory 공유 가능한 메모를 구성 Socket 네트워크 소켓을 이용 Semaphores 공유 자원에 대한 접근 제어를 통해 통신 Pipes&named Pipes - Pipe라고 불리는 선입선출 형태 - Pipe는 하나의 프로세스가 이용 중이라면 다른 프로세스는 접근할 수 없음 | | Message Queueing | 메시지가 발생하면 이를 전달하는 방식으로 통신하는 방식 |
- 단위 모듈 테스트
- 모듈이 정해진 기능을 정확히 수행하는 지 검증하는 것
- 단위 테스트라고도 불림
- 시스템 수준의 오류는 잡아낼 수 없음
- 테스트 케이스
- 소프트웨어가 사용자의 요구사항을 정확하게 준수 했는지를 확인하기 위한 테스트 항목에 대한 명세서
- 테스트 케이스를 이용하지 않은 테스트는 검증이 누락되거나 불필요한 검증의 반복으로 인력과 시간을 낭비 할 수 있음
- ISO/IEC/IEEE 29119-3 표준에 따른 테스트 케이스의 구성 요소
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/5cea3691-6e43-4415-93fb-4f2df80b465d/스크린샷_2024-10-17_오전_4.16.03.png
공통 모듈
- 공통 모듈
- 여러 프로그램에서 공통으로 사용할 수 있는 모듈
- 해당 기능을 명확히 이해할 수 있도록 명세 기법을 준수해야 함
- 공통 모듈 명세 기법의 종류명세 기법 내용
정확성 해당 기능이 필요하다는 것을 알 수 있도록 명확성 이해할 때 중의적으로 해석되지 않도록 작성 완전성 필요한 모든 것을 기술 일관성 상호 충돌이 발생하지 않도록 작성 추적성 요구사항의 출처, 관련 시스템 등의 관계를 파악 - 재사용
- 이미 개발된 기능들을 새로운 시스템이나 기능 개발에 사용하기 적합하도록 최적화하는 작업
- 필요한 비용과 시간을 절약 가능
- 사용법을 공개해야함
- 재사용 규모에 따른 분류함수와 객체 클래스나 메소드 단위
컴포넌트 컴포넌트 자체에 대한 수정 없이 인터페이스를 통해 통신 애플리케이션 공통된 기능들을 제공하는 애플리케이션을 공유
- 효과적인 모듈 설계 방안
- 결합도를 줄이고 응집도를 높여서 모듈의 독립성과 재사용성을 높임
- 복잡도와 중복성을 줄이고 일관성을 유지시킴
- 모듈의 기능이 예측이 가능해야 하며 지나치게 제한적이어서는 안 됨
- 모듈 크기는 시스템의 전반적인 기능과 구조를 이해하기 쉬운 크기로 분해함
- 효과적인 제어를 위해 모듈 간의 계층적 관계를 정의하는 자료가 제시
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/64a6d882-a2c2-40c4-ac20-68fcf342a85b/스크린샷_2024-10-17_오전_6.09.51.png
코드
- 코드
- 자료의 분류, 조합, 집계, 추출을 용이하게 하기 위해 사용하는 기호
- 코드의 주요 기능식별기능 데이터 간의 성격에 따라 구분
분류기능 특정 기준이나 동일한 유형에 해당하는 데이터를 그룹화 배열기능 의미를 부여하여 나열할 수 있음 표준화기능 기준에 맞추어 표현 간소화 기능 복잡한 데이터를 간소화 - 코드의 종류종류 내용
순차코드 발생 순서, 크기 순서 등 일정 기준에 따라 일련번호 부여 예) 1, 2, 3, 4 … 블록 코드 공통성이 있는 것끼리 블록으로 구분하고 일련번호 부여 예) 1001~1100: 총무부, 1101~1200: 영업부 10진 코드 0~9까지 10진 분할하고 다시 그 각각에 대하여 10진 분할하는 방법을 필요한 만큼 반복하는 방법 예) 1000: 공학, 1100: 소프트웨어 공학 1110: 소프트웨어 설계 그룹 분류 코드 일정 기준에 따라 대분류, 중분류, 소분류 등으로 구분하여 일련번호 부여 예) 1-01-001: 본사-총무부-인사계, 2-01-001: 지사-총무부-인사계 연상 코드 명칭이나 약호와 관계있는 숫자와 문자, 기호 이용 예) TV-40: 40인치 TV, L-15-220: 15W 220V의 램프 표의 숫자 코드 성질 즉, 길이, 넓이, 부피, 지름 높이 등의 물리적 수치를 그대로 코드에 적용 예) 120-720-1500: 두께표길이가 1207201500인 강판 합성 코드 하나의 코드로 수행하기 어려운 경우 2개 이상의 코드를 조합하여 만드는 방법 예) 연상 코드 + 순차 코드 KE-711: 대한항공 711기, AC-253: 에어캐나다 253기
디자인 패턴
- 디자인 패턴
- 모듈 간의 관계 및 인터페이스를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 개발 과정 중에 문제가 발생하면 새로 해결책을 구상하는 것보다 문제에 해당하는 디자인 패턴을 참고하여 적용하는 것이 더 효율적임
- GOF의 디자인 패턴은 생성 패턴, 구조 패턴, 행위 패턴으로 구분
- 생성 패턴
- 클래스나 객체의 생성과 참조 과정을 정의하는 패턴
- 추상팩토리
- 구체적인 클래스에 의존하지 않고, 인터페이스를 통해 서로 연관,의존하는 객체들의 그룹으로 생성하여 추상적으로 표현함
- 연관된 서브 클래스를 묶어 한 번에 교체하는 것이 가능함
- ex) 요리 내부의 값을 김치찌개에서 된장찌개로 바꿔도 구체적인 클래스에 의존하지 않았기에 문제가 없는 상황
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/25bb3e1e-5930-42f6-bd97-2910690712ae/스크린샷_2024-10-17_오전_6.19.58.png
- 팩토리 메소드
- 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화한 패턴
- 상위 클래스에서 인터페이스만 정의하고 실제 생성은 서브 클래스가 담당
- ex) 구체적인 선언은 하위 요리 클래스 내부에서 하는 방식
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/462fd286-7cb8-4e76-a338-7d6ebe9a1312/스크린샷_2024-10-17_오전_6.23.13.png
- 빌더
- 작게 분리된 인스턴스를 건축 하듯이 조합하여 객체를 생성함
- 객체의 생성과정과 표현방법을 분리하고 있어, 동일한 객체 생성에서도 서로 다른 결과를 만들어 낼 수 있음
- 프로토타입
- 원본 객체를 복제하는 방법으로 객체를 생성하는 방법
- 싱글톤
- 클래스 내에서 인스턴스가 하나뿐임을 보장
- 하나의 객체를 생성하면 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수 없음.
- 구조 패턴
- 복잡한 시스템을 개발하기 쉽도록 클래스나 객체들을 조합하여 더 큰 구조로 만드는 패턴
- 어댑터
- 다른 클래스가 이용할 수 있도록 변환해주는 패턴
- 인터페이스가 일치하지 않을 때 이용함
- 브릿지
- 구현부에서 추상층을 분리하여, 서로가 독립적으로 확장할 수 있도록 구성
- 기능과 구현을 두 개의 별도 클래스로 구현함
- 컴포지트
- 복합 객체와 단일 객체를 구분 없이 다루고자 할 때 사용하는 패턴
- 객체들을 트리 구조로 구성하여, 복합 객체 안에 복합 객체가 포함되는 구조
- 데코레이터
- 객체 간의 결합을 통해 능동적으로 기능들을 확장
- 임의의 객체에 부가적인 기능을 추가하기 위해 다른 객체들을 덧붙이는 방식으로 구현
- 파싸드
- 서브 클래스들을 피해 인터페이스를 구성함으로써 서브 클래스들의 기능을 간편하게 사용할 수 있는 패턴
- 서브 클래스들 사이의 통합 인터페이스를 제공하는 Wrapper 객체가 필요함
- 플라이웨이트
- 매번 생성하는 것이 아니고 가능한 한 공유해서 사용
- 다수의 유사 객체를 생성하거나 조작할 때 유용
- 프록시
- 네트워크 연결, 메모리의 대용량 객체로의 접근
- 접근이 어려운 객체와 객체 사이에서 인터페이스 역할 수행
- 행위 패턴
- 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴
- 책임 연쇄
- 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴
- 각 객체들이 고리로 묶여 있어 요청이 해결될 때 까지 고리를 따라 책임이 넘어감
- 커맨드
- 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 저장하거나 로그에 남기는 패턴
- 각종 명령어들을 추상클래스와 구체 클래스로 분리
- 인터프리터
- 언어의 문법 표현을 정의하는 패턴
- SQL이나 통신 프로토콜 같은 것을 개발할 때 사용
- 반복자(Iterator)
- 접근이 잦은 객체에 대해 동일한 인터페이스 사용
- 내부 표현 방법의 노출 없이 순차적인 접근 간으
- 중재자
- 수많은 객체들 간의 복잡한 상호작용을 캡슐화 하여 객체로 정의
- 의존성을 줄여 결합도를 감소
- 메멘토
- 특정 시점에서의 객체 내부 상태를 객체화함으로 써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공
- [Ctrl] + [Z]와 같은 되돌리기 기능을 개발할 때 주로 이용함
- 옵저버
- 한 객체의 상태가 변화하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태를 전달하는 패턴
- 상태
- 객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용
- 객체 상태를 캡슐화하고 참조하는 방식으로 처리
- 전략
- 동일한 계열의 알고리즘들을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의하는 패턴
- 독립적으로 원하는 알고리즘을 선택하여 사용할 수 있으며, 클라이언트에 영향 없이 알고리즘의 변경이 가능함
- 템플릿 메소드
- 상위 클래스에서 골격을 정의하고, 세부 처리를 구체화하는 구조의 패턴
- 유사한 서브 클래스를 묶어 상위 클래스에서 정의함으로써 코드의 양을 줄이고 유지보수를 용이하게 해줌
- 팩토리 메소드랑 유사한 개념
- 방문자
- 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성
- 처리 기능은 각 클래스를 방문하여 수행함
개발 지원 도구
- 통합 개발 환경(IDE)
- 개발에 필요한 환경, 편집기, 컴파일러, 디버거 등의 다양한 툴을 하나의 인터페이스로 통합하여 제공하는 환경
- 통합 개발 환경 도구의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/75d3e0ec-ebbb-4cf8-a15d-87081f469a8c/스크린샷_2024-10-17_오전_6.36.36.png
- 빌드 도구
- 소스 코드 파일들을 컴퓨터에서 실행할 수 있는 제품 소프트웨어로 변환하는 과정 또는 결과물
- 빌드 도구는 전처리, 컴파일 등의 작업을 수행함
- 대표적인 빌드 도구
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/9ead9c7d-9b55-4491-99e5-45eab4bb2dfc/스크린샷_2024-10-17_오전_6.38.07.png
- 기타 협업 도구
- 개발에 참여하는 사람들이 서로 다른 작업 환경에서 원활하게 프로젝트를 수행할 수 있도록 도와주는 도구
서버 개발
- 서버 개발
- 웹 애플리케이션의 로직을 구현할 서버 프로그램을 제작하여 웹 어플리케이션 서버(WAS)에 탑재하는 것
- 프로그래밍 언어는 Java, Js, Python 등
- 서버 개발 프레임워크
- 서버 프로그램 개발 시 다양한 네트워크 설정, 요청 및 응답 처리, 아키텍처 모델 구현 등을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어
- 대부분 MVC 패턴 기반
- 서버 개발 프레임워크의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ab47a184-5820-48a6-a1dc-825762eb055b/스크린샷_2024-10-17_오전_6.40.49.png
- 서버 개발 과정
- DTO/VO, SQL, DAO, Service, Controller를 각각 구현하는 과정
- 순서는 임의로 변경 가능
- MVC 접근법!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/88a56a82-f952-457f-8a0b-33efc75524ba/스크린샷_2024-10-17_오전_6.42.08.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/f856da4b-e749-42d1-a66b-525b79357309/스크린샷_2024-10-17_오전_6.41.51.png
- 구현 과정과정 내용
DTO/VO 구현 - 데이터 교환을 위해 사용할 객체를 만드는 과정 - 송, 수신할 데이터의 자료형에 맞는 변수 및 객체를 생성함 | | SQL 구현 | - 데이터의 삽입, 변경, 삭제등의 작업을 수행할 SQL문 생성
- 소스 코드 내에 직접 입력, 또는 별도의 XML 파일로 관리 | | DAO 구현 | 데이터베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드를 구현 | | Service 구현 | 요청에 응답하기 위한 로직을 구현 | | Controller 구현 | 적절한 서비스를 호출하여 결과를 반환하는 코드 구현 |
배치 프로그램
- 배치 프로그램
- 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하도록 만든 프로그램을 의미함
- 배치 프로그램의 필수 요소
- 대용량 데이터
- 자동화
- 견고성
- 안정성/신뢰성
- 성능
- 배치 스케줄러
- 일괄 처리 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구
- 특정 업무를 원하는 시간에 처리할 수 있도록 지원
- 잡 스케줄러라고도 불림
- 배치 스케줄러의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/94ee26a1-6696-4351-9301-aff965427e50/스크린샷_2024-10-17_오전_6.54.41.png
- crontab 명령어 작성 방법!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/fbe11882-5246-4e94-9184-ddb656d62b67/스크린샷_2024-10-17_오전_6.56.06.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/590757e4-e084-4755-8a2b-b4e21db29389/스크린샷_2024-10-17_오전_6.55.04.png
시스템 인터페이스 요구사항 분석
- 시스템 인터페이스 요구사항
- 개발할 시스템과 외부 시스템을 연동하는데 필요한 시스템
- 시스템 인터페이스 요구사항 명세서의 구성 요소
- 인터페이스 이름
- 연계 대상 시스템
- 연계 범위 및 내용
- 연계 방식
- 송신 데이터
- 인터페이스 주기
- 기타 고려사항
- 시스템 인터페이스 요구사항 분석
- 요구사항 분류하고 구체적으로 명세한 후 이를 이해관계자에게 전달
- 요구사항 분석 기법을 적절히 이용함
- 요구사항 분해가 필요한 경우 적절한 수준으로 세분화함
- 요구사항 분석 시 누락된 요구사항이나 제한 조건을 추가함
- 상대적 중요도를 평가하여 우선순위를 부여함
- 시스템 인터페이스 요구사항 분석 절차
- 관련 요구사항을 선별하여 별도로 요구사항 목록을 만듦
- 관련된 자료를 준비
- 기능, 비기능 요구사항으로 분리
- 요구사항 명세서에 내용을 추가하거나 수정
- 요구사항 명세서와 요구사항 목록을 이해관계자에게 전달
인터페이스 요구사항 검증
- 인터페이스 요구사항 검증
- 사용자들의 요구사항이 요구사항 명세서에 기술되었는지 검토하고 베이스라인 설정
- 검증 수행 순서
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/715b61d2-dc78-43a7-8169-eaadaf75908f/스크린샷_2024-10-17_오전_7.12.45.png
- 요구사항 검증 방법
- 요구사항 검토
- 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석동료 검토 명세서 작성자가 내용을 직접 설명하고 동려들이 결함을 발견
워크스루 요구사항 명세서를 미리 배포하여 사전 검토 후 검토회를 통해 결함 발견 인스펙션 다른 검토 전문가들이 결함을 발견하는 형태의 검토 방법
- 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석동료 검토 명세서 작성자가 내용을 직접 설명하고 동려들이 결함을 발견
- 프로토 타이핑
- 견본품을 만들어 최종 결과물을 예측
- 테스트 설계
- 요구사항이 현실적으로 테스트 가능한지를 검토
- CASE 도구 활용
- 일관성 분석
- 요구사항 검토
- 요구사항 검증의 주요 항목
- 완전성
- 일관성
- 명확성
- 기능성
- 검증 가능성
- 추적 가능성
- 변경 용이성
송,수신 데이터 식별
- 식별 대상 데이터
- 송 수신 시스템 사이에서 교환되는 데이터로, 규격화된 표준 형식에 따라 전송
- 교환되는 데이터의 종류
- 인터페이스 표준 항목
- 송,수신 데이터 항목
- 공통 코드
- 인터페이스 표준 항목
- 송 수신 시스템을 연계하는데 표준적으로 필요한 데이터
- 시스템 공통부와 거래 공통부시스템 공통부 시스템 간 연동 시 공통 정보
거래 공통부 송 수신되는 데이터를 처리할 때 필요한 정보
- 송, 수신 데이터 항목
- 송 수신 시스템이 업무를 수행하는데 사용하는 데이터
- 데이터 항목과 순서는 인터페이스별로 다름
- 공통 코드
- 시스템들에서 공통적으로 사용하는 코드
- 정보 흐름 식별
- 개발할 시스템과 내 외부 시스템 사이 방향성을 식별
- 송, 수신 데이터 식별
- 개발할 시스템과 연계할 내, 외부 시스템 사이의 정보 흐름과 데이터베이스 산출물을 기반으로 식별
- 인터페이스 표준 항목과 송, 수신 데이터 항목 식별
- 교환 범위를 확인하고 송, 수신 데이터 항목을 식별
- 코드성 데이터 항목 식별
- 코드성 데이터 항목에 대해 코드, 코드명, 코드 설명 등의 코드 정보를 식별
인터페이스 방법 명세화
- 인터페이스 방법 명세화
- 내, 외부 시스템에 연계하여 작동할 때 인터페이스별 송, 수신 방법, 송, 수신 데이터, 오류 식별 및 처리 방안 내용을 문서로 정리
- 송, 수신 방법 명세화
- 각각의 인터페이스에 대해 연계 방식, 통신 및 처리 유형, 발생 주기 등의 송, 수신 방법을 정의하고 명세를 정의
- 송, 수신 데이터 명세화
- 송, 수신 데이터에 대한 명세를 작성
- 오류 식별 및 처리 방안 명세화
- 오류를 식별하고 오류 처리 방안에 대한 명세를 작성
- 인터페이스별로 송, 수신 방법을 명세화하기 위해 필요한 정보
- 시스템 연계 기술
- 인터페이스 통신 유형
- 처리 유형
- 발생 주기
- 시스템 연계 기술
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ea517563-223a-405f-b09e-7ad04e74137d/스크린샷_2024-10-17_오전_7.21.49.png
- 인터페이스 통신 유형유형 내용
단방향 요청만 하고 응답이 없는 형식 동기 요청 후 응답이 올 때 까지 대기 비동기 요청 후 다른 작업을 수행하다 응답이 오면 처리 - 인터페이스 처리 유형유형 내용
실시간 방식 요청 내용을 바로 처리 지연 처리 방식 데이터를 매 건 단위로 처리할 경우 비용이 많이 발생할 때 배치 방식 대량의 데이터를 처리할 때 사용 - 인터페이스 발생 주기
- 개발할 시스템과 내,외부 시스템 간 송, 수신 데이터가 전송되어 인터페이스가 사용되는 주기를 의미
미들웨어 솔루션
- 미들웨어
- 운영체제와 응용 프로그램, 서버와 클라이언트 사이에서 다양한 서비스를 제공하는 소프트웨어
- 표준화된 인터페이스를 제공함으로써 시스템 간의 데이터 교환에 일관성을 보장함
- 미들웨어의 종류
- DB
- RPC
- MOM
- TP-Monitor
- ORB
- WAS
- DB
- 클라이언트에서 원격의 데이터베이스와 연결하는 미들웨어
- RPC(원격 프로시저 호출)
- 원격 프로시저를 마치 로컬 프로시저처럼 호출하는 미들웨어
- MOM(메시지 지향 미들웨어)
- 비동기형 메시지를 전달하는 미들웨어
- 이기종 분산 데이터 시스템의 데이터 동기를 위해 많이 사용됨
- TP-Monitor(트랜잭션 처리 모니터)
- 트랜잭션을 처리 및 감시하는 미들웨어
- 사용자 수가 증가해도 빠른 응답 속도를 유지해야 하는 업무로 사용함
- ORB(객체 요청 브로커)
- 객체 지향 미들웨어
- TP-Monitor의 장점인 트랜잭션 처리와 모니터링 등을 추가로 구현한 제품도 존재
- WAS(웹 애플리케이션 서버)
- 동적인 콘텐츠를 처리하기 위한 미들웨어
- 웹 환경을 구현하기 위한 미들웨어
모듈 연계를 위한 인터페이스 기능 식별
- 모듈 연계
- 내부 모듈과 외부 모듈 또는 내부 모듈 간 데이터의 교환을 위해 관계를 설정
- 대표적인 모듈 연계 방법
- EAI(Enterprise Application Integration)
- ESB(Enterprise Service Bus)
- 웹 서비스
- EAI
- 기업 내 각종 애플리케이션 및 플랫폼 간의 정보 전달, 연계, 통합 등 상호 연동이 가능하게 해주는 솔루션
- EAI의 구축 유형!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/a0aa8dfd-9951-4aea-af16-c87a22f594df/스크린샷_2024-10-17_오전_7.30.46.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/2b0b459f-2766-47a5-90ad-6da23f43bb0a/스크린샷_2024-10-17_오전_7.30.26.png
- ESB
- 애플리케이션 간 연계, 표준 기반의 인터페이스를 제공하는 솔루션
- 애플리케이션 통합측면에서 EAI와 유사하지만 서비스 중심의 통합을 지향
- 범용적으로 사용하기 위해 결합도 약하게 유지
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/e66c3ffa-ac3d-4d18-adf6-cdd66bd2cf14/스크린샷_2024-10-17_오전_7.31.40.png
- 웹 서비스
- 네트워크의 정보를 표준화된 서비스 형태로 만들어 공유하는 기술
- 서비스 지향 아키텍처(SOA) 개념
- 웹 서비스의 구성
- SOAP
- HTTP, HTTPS, SMTP 등을 활용하여 XML기반의 메시지 교환
- UDDI
- WSDL을 등록하여 서비스와 서비스 제공자를 검색하고 접근하는데 사용
- WSDL
- 웹 서비스명, 서비스 제공 위치, 프로토콜 XML 형식으로 구현
- SOAP
- 모듈 간 인터페이스 기능 식별
- 식별된 모듈 간 관련 기능을 검토하여 인터페이스 동작에 필요한 기능을 식별
- 모듈 간 동작하는 기능을 통해 인터페이스 기능을 식별
- 시나리를 통해 내부 모듈과 관련된 인터페이스 기능을 식별
- 실제적으로 필요한 인터페이스 기능을 최종적으로 선별
- 인터페이스 기능 구현을 정의하는데 사용
모듈 간 인터페이스 데이터 표준 확인
- 인터페이스 데이터 표준
- 모듈 간 인터페이스에 사용되는 데이터의 형식을 표준화하는 것
- 기존의 데이터 중에서 공통 영역을 추출하거나 어느 한쪽의 데이터를 변환하여 정의함
- 인터페이스 데이터 표준 확인
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/63553d08-9c94-475c-8a0e-7b4d8d7403ad/스크린샷_2024-10-17_오전_7.35.24.png
인터페이스 기능 구현의 정의
- 인터페이스 기능 구현의 정의
- 인터페이스를 실제로 구현하기 위해 인터페이스 기능에 대한 구현 방법을 기능별로 기술하는 것
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/8f142ab7-d2a2-40d8-aa12-e077b965e368/스크린샷_2024-10-17_오전_7.36.10.png
- 모듈 세부 설계서
- 모듈의 구성 요소와 세부적인 동작 등을 정의한 설계서
- 모듈 세부 설계서 종류컴포넌트 명세서 컴포넌트 개요, 내부 클래스의 동작, 외부와의 통신하는 명세 등을 정의
인터페이스 명세서 인터페이스 클래스의 세부 조건 및 기능 등을 정의
인터페이스 구현
- 인터페이스 구현
- 송, 수신 시스템 간의 데이터 교환 및 처리를 실현해 주는 작업
- 대표적인 인터페이스 구현 방법
- 데이터 통신을 이용한 인터페이스 구현
- 인터페이스 엔티티를 이용한 인터페이스 구현
- AJAX
- JS를 이용하여 클라이언트와 서버 간에 XML 데이터를 주고 받는 비동기 통신 기술
- 웹 페이지 일부 영역만을 업데이트 할 수 있음
- JSON
- 용량이 적은 데이터를 교환하기 위해 데이터 객체를 속성, 값의 쌍 형태로 표현하는 개방형 표준 포맷
- 데이터 통신을 이용한 인터페이스 구현
- ex) JSON을 이용한 인터페이스 구현 순서
- 인터페이스 객체를 생성, 각 시스템 환경에 맞게 선택함
- JSON 이용해 인터페이스 객체를 만듦
- 인터페이스 객체를 AJAX 기술 등을 이용하여 수신 측으로 보냄
- 인터페이스 객체를 수신해 파싱한 후 처리함
- 수신 측에서 송신 측으로 처리 결과를 보냄
- ex) JSON을 이용한 인터페이스 구현 순서
- 인터페이스 엔티티를 이용한 인터페이스 구현
- 인터페이스가 필요한 시스템 사이에 별도의 인터페이스 엔티티를 두어 상호 연계하는 것
- 테이블을 엔티티로 활용함
- ex) 인터페이스 테이블을 이용한 인터페이스 구현 순서
- 인터페이스 이벤트가 발생하면 인터페이스 데이터를 기록
- 송신 측 인터페이스 테이블에 인터페이스 데이터를 전송
- 수신 측 인터페이스 테이블에 입력되면 인터페이스 데이터를 읽음
- 수신 측 인터페이스 테이블에서 읽은 후 사전에 정의된 데이터 트랜잭션 수행
인터페이스 보안
- 인터페이스 보안
- 인터페이스의 보안 취약점 분석 후 적절한 보안 기능을 적용
- 인터페이스 보안 기능 적용
- 인터페이스 아키텍처에 따라 IPSec, SSL, S-HTTP를 사용 | | --- | --- | | 애플리케이션 영역 | 보안 가이드를 참조하여 코드 상의 보안 취약점을 보완 | | 데이터베이스 영역 | - 데이터베이스, 스키마, 엔티티의 접근 권한과 프로시저, 트리거 등 동작 객체의 보안 취약점에 보안 기능 적용
- 개인 정보나 업무상 민감한 데이터의 경우 암호화나 익명화 등 데이터 자체의 보안 방안도 고려 |
- | 네트워크 영역 | - 스니핑 등을 이용한 데이터 탈취 및 변조 위협을 방지하기 위해 네트워크 트래픽에 대한 암호화를 설정
- 데이터 무결성 검사 도구
- 인터페이스 보안 취약점을 분석하는데 사용되는 도구
- 시스템 파일의 변경 유무를 확인하고, 파일이 변경되었을 경우 이를 관리자에게 알려줌
- 종류
- TripWire
- AIDE
- Samhain
- Claymore
- Slipwire
- Fcheck
인터페이스 구현 검증
- 인터페이스 구현 검증
- 인터페이스가 정상적으로 문제없이 작동하는지 확인
- 인터페이스 구현 검증 도구, 감시 도구를 이용
- 인터페이스 구현 검증 도구
- 인터페이스 단위 기능과 시나리오 등을 기반으로 하는 통합 테스트가 필요함
- 테스트 자동화 도구
- 인터페이스 구현 감시 도구
- 동작 상태는 APM(애플리케이션 성능 관리)을 사용하여 감시(Monitoring)할 수 있음
- APM을 통해 종합적인 정보를 조회하고 분석할 수 있음
- 대표적인 APM
- 스카우터
- 제니퍼
- APM(Application Performance Management/Monitoring)
- 애플리케이션의 성능 관리를 위해 다양한 모니터링 기능을 제공하는 도구
- APM은 리소스 방식과 엔드투엔드의 두 가지 유형이 있음
- 리소스 방식
- Nagios, Zabbix, Carti
- 엔드투엔드 방식
- VisualVM, 제니퍼, 스카우터
- 리소스 방식
사용자 인터페이스
- 사용자 인터페이스(UI, User Interface)
- 사용자와 시스템 간의 상호작용이 이뤄지도록 도와주는 장치나 소프트웨어
- 사용자 인터페이스의 세 가지 분야
- 물리적 제어
- 상세적인 표현과 전체적인 구성
- 편리하고 간편하게 사용하도록 하는 기능
- 사용자 인터페이스의 구분구분 내용
CLI 명령과 출력이 텍스트 형태로 이루어지는 인터페이스 GUI 아이콘이나 메뉴를 마우스로 선택하여 작업을 수행하는 그래픽 환경의 인터페이스 NUI 말이나 행동으로 기기를 조작하는 인터페이스 - 사용자 인터페이스의 기본 원칙
- 직관성
- 유효성
- 학습성
- 유연성
UI 설계 도구
- 와이어프레임
- 페이지에 대한 개략적인 레이아웃이나 뼈대를 설계하는 도구
- 페이지의 영역 구분, 콘텐츠, 텍스트 배치 등을 화면 단위로 설계함
- 목업
- 실제 화면과 유사하게 만든 정적인 형태의 모형
- 스토리보드
- 와이어프레임에 콘텐츠에 대한 설명, 페이지 간 이동 흐름 등을 추가한 문서
- 디자이너와 개발자가 최종적으로 참고하는 작업 지침서
- 서비스 구축을 위한 모든 정보가 들어 있음
- 프로토타입
- 와이어프레임이나 스토리보드 등에 인터랙션을 적용함으로써 실제 구현된 것처럼 테스트가 가능한 동적인 형태의 모형
- 종류
- 제작 기간이 짧은 경우, 제작 비용이 적을 경우, 업무 협의가 빠를 경우 | | --- | --- | | 디지털 프로토타입 | - 파워포인트, 아크로뱃, 비지오, 옴니그래플 등과 같은 프로그램을 사용
- 재사용이 필요한 경우, 산출물과 비슷한 효과가 필요한 경우, 숙력된 전문가가 있는 경우 |
- | 페이퍼 프로토타입 | - 아날로그적인 방법
- 유스케이스
- 사용자의 요구사항을 기능 단위로 표현
- 사용자가 원하는 목표를 달성하기 위해 수행할 내용을 기술함
- 사용자의 요구사항을 빠르게 파악함으로써 초기에 시스템의 기능적인 요구를 결정
- 다이어그램 형식으로 묘사됨
품질 요구사항
- 품질 요구사항
- 사용자의 입장에서 얼마나 충족하는가
- 사용자의 요구사항을 충족시킴으로써 확립
- 소프트웨어 품질 관련 표준
- ISO/IEC 9126의 소프트웨어 품질 특성
UI 설계서
- UI 설계서
- 요구사항을 바탕으로 UI 설계를 구체화하여 작성하는 문서
- 기획자, 개발자, 디자이너 등과의 원할한 의사소통을 위함
- UI 흐름 설계
- UI 상세 설계
- 실제 설계 구현을 위해 자세하게 설계
- 반드시 시나리오를 작성해야함
- UI 시나리오 문서
- 사용자 인터페이스의 기능 구조, 대표 화면, 화면 간 인터랙션의 흐름, 다양한 상황에서의 예외 처리 등을 정리한 문서
- 사용자가 최종 목표를 달성하기 위한 방법이 순차적으로 묘사되어 있음
- UI 시나리오 문서의 요건
- 완전성
- 일관성
- 이해성
- 가독성
- 수정 용이성
- 추적 용이성
- UI 상세 설계 순서
HCI / UX / 감성공학
- HCI(Human Computer Interaction or Inteface)
- 사람이 시스템을 보다 편리하고 안전하게 사용할 수 있도록 연구하고 개발하는 학문
- 최종목표는 최적의 UX 만드는 것
- 어떤 제품이 좋은 제품인지, 어떻게 하면 좋은 제품을 만들 수 있는지 연구
- UX(User Experience)
- 사용자가 시스템이나 서비스를 이용하면서 느끼고 생각하게 되는 총체적인 경험
- UI가 사용성, 접근성, 편의성을 중시한다면, UX는 UI를 통해 사용자가 느끼는 만족이나 감정 중시
- 기술을 효용성 측면만 아니라 삶의 질을 향상시키는 하나의 방향으로 봄
- UX의 특징
- 주관성
- 정황성
- 총체성
- 감성공학
- 제품이나 작업환경을 사용자의 감성에 알맞도록 설계 및 제작하는 기술
- 여러 분야의 학문이 공존하는 종합과학임
- 목적은 인간의 삶을 편리하고 안전하며 쾌적하게 만드는 것
- 인간의 감성을 제품 설계에 적용하기 위해 공학적인 접근 방법 사용
애플리케이션 테스트
- 애플리케이션 테스트
- 애플리케이션에 잠재되어 있는 결함을 찾아내는 일련의 행위 또는 절차
- 고객의 요구사항을 만족시키는지 확인하고 소프트웨어가 기능을 정확히 수행하는지 검증함
- 애플리케이션의 기본 원리기본 원리 설명
완벽한 테스트 불가능 잠재적인 결함을 줄일 수 있지만 결함이 없다고 증명할 수 없음 파레토 법칙 20%에 해당하는 코드에서 전체 결함의 80%가 발견된다는 법칙 살충제 패러독스 동일한 테스트 케이스로 동일한 테스트를 반복하면 더 이상 결함이 발견되지 않는 현상 테스팅은 정황 의존 소프트웨어의 특징, 테스트 환경, 테스터의 역량 등 정황에 따라 테스트 결과가 달라질 수 있으므로, 정황에 따라 다르게 테스트를 수행해야함 오류-부재의 궤변 결함을 모두 제거해도, 사용자의 요구사항을 만족시키지 못하면 품질이 높다고 할 수 없다. 테스트와 위험은 반비례 테스트를 할 수록 미래에 발생할 위험을 줄일 수 있음 테스트의 점진적 확대 작은 부분에서 시작하여 점점 확대하며 진행 테스트의 별도 팀 수행 개발자와 관계없는 별도의 팀에서 수행
애플리케이션 테스트의 분류
- 프로그램 실행 여부에 따른 테스트
- 소스 코드에 대한 코딩 표준, 코딩 스타일, 코드 복잡도, 남은 결합 등을 발견하기 위함
- 종류: 워크스루, 인스펙션, 코드 검사 | | --- | --- | | 동적 테스트 | - 프로그램을 실행하여 오류를 찾는 테스트
- 개발의 모든 단계에서 테스트를 수행
- 종류: 블랙박스 테스트, 화이트박스 테스트 |
- | 정적 테스트 | - 프로그램을 실행하지 않고 명세사나 소스 코드를 대상으로 분석
- 테스트 기반에 따른 테스트
- 종류: 동등 분할, 경계 값 분석 등 | | --- | --- | | 구조 기반 테스트 | - 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인
- 종류: 구문 기반, 결정 기반, 조건 기반 등 | | 경험 기반 테스트 | - 유사 소프트웨어나 기술 등에 대한 테스터의 경험을 기반으로 수행
- 명세가 불충분하거나 테스트 시간에 제약이 있는 경우
- 종류: 에러 추정, 체크 리스트, 탐색적 테스팅 |
- | 명세 기반 테스트 | - 사용자의 요구사항에 대한 명세를 빠짐없이 테스트 케이스로 만들어 구현하고 있는지 확인하는 테스트
- 시각에 따른 테스트
- 명세서대로 완성됐는지 테스트 | | --- | --- | | 확인 테스트 | - 사용자의 시각에서 생산된 제품의 결과를 테스트
- 요구한대로 제품이 완성됐는지, 정상적으로 동작하는지 테스트 |
- | 검증 테스트 | - 개발자의 시각에서 제품의 생산 과정을 테스트
- 목적에 따른 테스트회복 테스트 실패하도록 한 후 올바르게 복구되는지 확인
안전 테스트 불법적인 침입으로부터 시스템을 보호할 수 있는지 강도 테스트 과도한 정보량이나 빈도 등을 부과하여 과부하 시에도 정상적으로 실행되는지 성능 테스트 실시간 성능이나 전체적인 효율성을 진단, 응답 시간, 처리량 등을 테스트 구조 테스트 논리적인 경로, 소스 코드의 복잡도 등을 평가 회귀 테스트 변경 또는 수정된 코드에 새로운 결함이 없음을 확인하는 테스트 병행 테스트 변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력하여 결과를 비교하는 테스트
개발 단계에 따른 애플리케이션 테스트
- 개발 단계에 따른 애플리케이션 테스트
- 개발 단계에 따라 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트로 분류됨
- 애플리케이션 테스트와 소프트웨어 개발 단계를 연결하여 표현한 것을 V-모델이라고 함
- 단위 테스트
- 코딩 직후 모듈이나 컴포넌트에 초점을 맞춰 테스트함
- 기능성 테스트를 최우선으로 수행
- 구조 기반 테스트와 명세 기반 테스트로 나뉘지만 주로 구조 기반 테스트를 시행함
- 통합 테스트
- 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트를 의미
- 모듈 간 또는 통합된 컴포넌트 간의 상호 작용 오류를 검사함
- 시스템 테스트
- 완벽하게 수행되는가를 점검
- 기능정 요구사항과 비기능적 요구사항으로 구분하여 각각을 만족하는지 테스트
- 인수 테스트
- 사용자의 요구사항을 충족하는지에 중점을 둠
- 사용자가 직접 테스트함
사용자 인수 테스트 시스템 사용의 적절성 여부를 확인함 운영상의 인수 테스트 - 시스템 관리자가 시스템 인수 시 수행하는 테스트 기법 - 백업/복원 시스템, 재난 복구, 사용자 관리, 정기 점검 | | 계약 인수 테스트 | 계약상의 인수/검수 조건을 준수하는지 여부 | | 규정 인수 테스트 | 정부 지침, 법규, 규정에 맞게 개발 되었는지 여부 | | 알파 테스트 | 사용자가 개발자 앞에서 행하는 테스트 기법 | | 베타 테스트 | 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법 |
통합 테스트
- 통합 테스트
- 단위 테스트가 끝난 모듈을 통합하는 과정에서 발생하는 오류 및 결함을 찾는 테스트 기법
- 종류
- 종류: 빅뱅 통합 테스트 방식 | | --- | --- | | 점진적 통합 방식 | - 모듈 단위로 단계적으로 통합하면서 테스트 하는 방법
- 종류: 하향식 통합 테스트, 상향식 통합 테스트, 혼합식 통합 테스트 |
- | 비점진적 통합 방식 | - 통합하는 절차 없이 모든 모듈이 미리 결합되어 있는 프로그램 전체를 테스트 하는 방법
- 하향식 통합 테스트
- 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트
- 깊이 우선 통합법이나 넓이 우선 통합법을 사용함
- 하향식 통합 테스트 절차
- 제어 모듈은 작성된 프로그램을 사용, 주요 제어 모듈의 종속 모듈들은 스텁으로 대체
- 깊이 우선 또는 넓이 우선 등의 통합 방식에 따라 하위 모듈인 스텁들이 한 번에 하나씩 실제 모듈로 교체
- 모듈이 통합할 때 마다 테스트를 실시함
- 새로운 오류가 발생하지 않음을 보증하기 위해 회귀 테스트를 실시
- 상향식 통합 테스트
- 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트
- 상향식 통합 테스트 절차
- 하위 모듈들을 클러스터로 결합
- 상위 모듈에서 데이터 입,출력을 확인하기 위해 더미 모듈인 드라이버를 작성함
- 통합된 클러스터 단위로 테스트
- 테스트 완료 시, 프로그램 구조의 상위로 이동하여 결합하고 드라이버는 실제 모듈로 대체됨
- 혼합식 통합 테스트
- 하위 수준에는 상향식 통합, 상위 수준에서는 하향식 통합을 사용하여 최적의 테스트를 지원
- 샌드위치 식 통합 테스트 방법이라고도 함
- 회귀 테스팅
- 통합 테스트로 인해 변경된 모듈이나 컴포넌트에 새로운 오류가 있는지 확인
- 이미 테스트된 프로그램의 테스팅을 반복
- 수정한 모듈이나 컴포넌트가 다른 부분에 영향을 미치는지, 오류가 생기지 않았는지 새로운 오류가 발생하지 않음을 보증하기 위해 반복 테스트함.
테스트 케이스/ 테스트 시나리오 / 테스트 오라클
- 테스트 케이스
- 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력 값, 실행 조건, 기대 결과 등으로 구성 된 테스트 항목에 대한 명세서
- 오류 방지, 인력 시간, 자원 낭비를 지울 수 있음
- 테스트 시나리오
- 테스트 케이스를 적용하는 순서에 따라 여러 개의 테스트 케이스를 묶은 집합
- 적용하는 구체적인 절차를 명세함
- 구체적인 절차, 사전 조건, 입력 데이터 등이 설정되어 있음
- 테스트 오라클
- 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입하여 비교
- 테스트 케이스에 대한 예상 결과를 계산하거나 확인함
- 테스트 오라클의 특징
- 제한된 검증
- 모든 테스트 케이스에 적용할 수 없음
- 수학적 기법
- 값을 수학적 기법을 이용하여 구할 수 있음
- 자동화 기법
- 대상 프로그램의 실행, 결과 비교, 커버리지 측정 등을 자동화 할 수 있음
- 제한된 검증
- 테스트 오라클의 종류
- 모든 오류를 검출할 수 있음 | | --- | --- | | 샘플링 오라클 | - 특정한 몇몇 테스트 케이스의 입력 값들에 대해서만 기대하는 결과를 제공
- 전수 테스트가 불가능한 경우 사용 | | 추정 오라클 | - 특정 테스트 케이스의 입력값에 대해 기대하는 결과 제공
- 나머지 입력 값들에 대해서는 추정으로 처리하는 오라클 | | 일관성 검사 오라클 | 애플리케이션에 변경이 있을 때, 테스트 케이스의 수행 전과 후의 결과 값이 동일한지를 확인 |
- | 참 오라클 | - 입력 값에 대해 기대하는 결고라르 제공하는 오라클
테스트 자동화 도구
- 테스트 자동화
- 사람이 반복적으로 수행하던 테스트 절차를 스크립트 형태로 구현하는 자동화 도구를 적용함으로써 쉽고 효율적으로 테스트를 수행할 수 있도록 한 것
- 테스트 유형에 따른 테스트 자동화 도구의 종류
- 정적 분석 도구
- 테스트 실행 도구
- 성능 테스트 도구
- 테스트 통제 도구
- 정적 분석 도구
- 프로그램을 실행하지 않고 분석하는 도구
- 테스트 실행 도구
- 스크립트 언어를 사용하여 테스트를 실행하는 도구
- 데이터 주도 접근 방식
- 데이터를 저장하고 이를 읽어 실행하는 방식
- 키워드 주도 접근 방식
- 수행할 동작을 나타내는 키워드와 테스트 데이터를 저장하여 실행하는 방식
- 성능 테스트 도구
- 가상의 사용자를 만들어 성능의 목표 달성 여부를 확인하는 도구
- 테스트 통제 도구
- 테스트 계획 및 관리, 테스트 수행, 결함 관리 등을 수행하는 도구
- 종류
- 형상 관리 도구
- 결함 추적 / 관리 도구
- 테스트 하네스 도구
- 테스트가 실행될 환경을 시뮬레이션하여 컴포넌트 및 모듈이 정상적으로 테스트되도록 하는 도구
- 테스트 하네스
- 컴포넌트 및 모듈을 테스트하는 환경의 일부분으로, 테스트를 지원하기 위해 생성된 코드와 데이터
- 테스트 하네스의 구성 요소테스트 드라이버
테스트 스텁 테스트 슈트 컴포넌트나 모듈, 시스템에 사용되는 테스트 케이스의 집합 테스트 케이스 테스트 스크립트 테스트 실행절차에 대한 명세서 목 오브젝트 조건부로 입력해 두면, 그 상황에 맞는 예정된 행위를 수행 - 테스트 수행 단계별 테스트 자동화 도구테스트 단계 자동화도구 설명
테스트 계획 요구사항 관리 요구사항 정의 및 변경 사항 등을 관리하는 도구 테스트 분석 / 설계 테스트 케이스 생성 테스트 데이터 및 테스트 케이스 작성을 지원 테스트 수행 테스트 자동화 자동화를 도와주는 도구 정적 분석 코딩 표준, 런타임 오류 검증 동적 분석 시뮬레이션을 통해 오류를 검출 성능 테스트 가상의 사용자를 생성하여 처리 능력을 측정 모니터링 CPU, Memory 등과 같은 시스템 자원의 상태 확인 및 분석을 지원 테스트 관리 커버리지 분석 충분성 여부 검증 형상 관리 도구 및 데이터 관리 결함 추적/ 관리 발생한 결함 추적 및 관리 활동을 지원
결함 관리
- 결함
- 소프트웨어가 개발자가 설계한 것과 다르게 동작하거나 다른 결과가 발생되는 것
- 결함 관리 프로세스
- 결함 상태 추적
- 발견된 결함은 지속적ㄱ으로 상태 변화를 추적하고 관리해야ㅏㅎㅁ
정보시스템 구축관리
개별 환경 구축
- 개발 환경 구축
- 개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축
- 응용 소프트웨어가 운영될 환경과 유사한 구조로 구축
- 하드웨어와 소프트웨어를 선정함
- 성능, 편의성, 라이선스 등의 비즈니스 환경에 적합한 제품들을 최종적으로 결정하여 구축함
- 하드웨어 환경
- 사용자와의 인터페이스 역할을 하는 클라이언트, 서비스를 제공하는 서버로 구성
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/fdcae290-8799-49e3-8f8e-d909a5ecd7c2/스크린샷_2024-10-12_오후_10.31.17.png
- 클라이언트의 종류
- 개인용 컴퓨터(PC), 스마트폰 등
- 서버의 종류종류 특징
웹 서버 - 직접 요청을 받아 처리함 - 정적 파일들을 제공함 | | 웹 애플리케이션 서버(WAS) | 동적 서비스를 제공하거나 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행함 | | 데이터베이스 서버 | 데이터베이스와 이를 관리하는 DBMS를 운영함 | | 파일 서버 | 데이터베이스에 저장하기에는 비효율적이거나, 서비스 제공을 목적으로 유지하는 파일들을 저장함 |
- 소프트웨어 환경
- 클라이언트와 서버 운영을 위한 시스템 소프트웨어와 개발에 사용되는 개발 소프트웨어로 구성됨
- 시스템 소프트웨어의 종류
- 운영체제, 웹 서버 및 WAS 운용을 위한 서버 프로그램, DBMS
- 개발 소프트웨어의 종류종류 특징
요구사항 관리 도구 요구사항의 수집과 분석, 추적 등을 편리하게 도와주는 소프트웨어 설계/모델링 도구 UML을 지원하며, 전 과정에서 설계 및 모델링을 도와주는 소프트웨어 구현 도구 개발 언어를 통해 실제 구현을 지원하는 소프트웨어 빌드 도구 소스의 빌드 및 배포, 라이브러리 관리를 지원하는 소프트웨어 테스트 도구 모듈들이 요구사항에 적합하게 구현되었는지 테스트하는 소프트웨어 형상 관리 도구 버전별로 관리하여 품질 형상을 지원하는 소프트웨어 - 웹 서버의 기능기능 내용
HTTP/HTTPS 지원 브라우저로부터 요청을 받아 응답할 때 사용되는 프로토콜 통신 기록 처리한 요청들을 로그 파일로 기록하는 기능 정적 파일 관리 HTML, CSS, 이미지 등의 정적 파일들을 저장하고 관리 대역폭 제한 트래픽의 포화를 방지하기 위해 응답 속도 제한 가상 호스팅 여러 개의 도메인 이름을 연결하는 기능 인증 합법적인 사용자인지를 확인 - 개발 언어의 선정 기준기준 내용
적정성 개발하려는 소프트웨어의 목적에 적합해야 함 효율성 코드의 작성 및 구현이 효율적이어야 함 이식성 다양한 시스템 및 환경에 적용이 가능해야 함 친밀성 개발 언어에 대한 개발자들의 이해도와 활용도가 높아야 함 범용성 다른 개발 사례가 존재하고 여러 분야에서 활용되고 있어야 함
소프트웨어 아키텍처
- 소프트웨어 아키텍처
- 소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체
- 분할 방법과 분할된 모듈에 할당될 기능, 모듈 간의 인터페이스 등을 결정함
- 소프트웨어 아키텍처 설계의 기본 원리, 모듈화, 추상화, 단계적 분, 정보은닉이 있음
- 모듈화
- 소프트웨어의 성능 향상, 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 시스템의 기능들을 모듈 단위로 나누는 것을 의미함
- 모듈의 크기를 너무 작게 나누면 개수가 많아져 모듈 간의 통합 비용이 많이 듬
- 모듈의 크기를 너무 크게 나누면 개수가 적어 통합 비용은 적게 들지만 모듈 하나의 개발 비용이 많이 듬
- 추상화
- 전체적이고 포괄적인 개념을 설계한 후 구체화시켜 나가는 것
- 완전한 시스템을 구축하기 전에, 유사한 모델을 만들어서 여러 가지 요인들을 테스트 할 수 있음
- 추상화의 유형과정 추상화 전반적인 흐름만 파악
데이터 추상화 데이터 구조를 대표할 수 있는 표현으로 대체하는 방법 제어 추상화 이벤트 발생의 대표할 수 있는 표현
- 단계적 분해
- 상위의 중요 개념으로부터 하위의 개념으로 구체화 시키는 분할 기법
- 하향식 설계 전략
- 포괄적인 기능에서부터 점차적으로 구체화
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/50d04f5a-7fcf-4c1e-b9e5-493ff044b48d/스크린샷_2024-10-12_오후_11.25.52.png
- 정보 은닉
- 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법
- 모듈을 독립적으로 수행할 수 있음
- 하나의 모듈이 변경되더라도 다른 모듈에 영향을 주지 않으므로 수정, 시험, 유지보수가 용이함
- 상위 설계와 하위 설계
- 소프트웨어 개발의 설계 단계는 크게 상위 설계와 하위 설계로 구분할 수 있음
별칭 아키텍쳐 설계, 예비 설계 모듈 설계, 상세 설계 설계 대상 전체적인 구조 내부 구조 및 행위 세부 목록 구조, DB, 인터페이스 컴포넌트, 자료구조, 알고리즘 - 소프트웨어 아키텍처의 품질 속성
- 이해관계자들이 요구하는 수준의 품질을 유지 및 보장할 수 있게 설계되었는지 확인하기 위해 품질 평가 요소들을 구체화 시켜 놓은 것
- 품질 평가 요소의 종류시스템 측면 성증, 보안, 가용성, 기능성, 사용성, 변경 용이성, 확장성 등
비즈니스 측면 시장 적시성, 비용과 혜택, 예상 시스템 수명, 목표 시장, 공개 일정 등 아키텍처 측면 개념적 무결성, 정확성, 완결성, 구축 가능성, 변경성, 시험성 등
- 소프트웨어 아키텍쳐의 설계 과정
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/f58f2955-b009-4fbf-b275-e8b26a59fe93/스크린샷_2024-10-12_오후_11.30.37.png
- 협약(Contract)에 의한 설계
- 컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것
- 정확한 인터페이스를 명세함
- 명세에 포함될 조건조건 내용
선행 조건 오퍼레이션이 호출되기 전에 참이 되어야 할 조건 결과 조건 오퍼레이션이 수행된 후 만족되어야 할 조건 불변 조건 오퍼레이션이 실행되는 동안 항상 만족되어야 할 조건
아키텍처 패턴
- 아키택처 패턴
- 아키택처를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 주요 아키텍처 패턴의 종류
- 레이어 패턴
- 클라이언트-서버 패턴
- 파이프-필터 패턴
- 모델-뷰-컨트롤러 패턴
- 레이어 패턴
- 시스템을 계층으로 구분하여 구성하는 패턴
- 서로 마주보는 두 개의 계층 사이에서만 사용작용이 이루어짐
- 대표적으로 OSI참조 모델이 있음
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ab3f22c4-63c5-40e2-893d-cb7558a31719/스크린샷_2024-10-12_오후_11.50.54.png
- 클라이언트-서버 패턴
- 파이프-필터 패턴
- 데이터 스트림 절차를 필터로 캡슐화하여 파이프를 통해 전송하는 패턴
- 앞 시스템의 처리 결과물을 처리한 후 다시 파이프를 통해 다음 시스템으로 넘겨주는 패턴을 반복함
- 데이터 변환, 버퍼링, 동기화 등에 주로 사용됨
- 대표적으로 UNIX의 쉘이 있음
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/c0f0c61e-109f-43dd-aa8f-917de3ad3a2f/스크린샷_2024-10-12_오후_11.53.22.png
- 모델-뷰-컨트롤러 패턴
- 서브시스템을 모델, 뷰, 컨트롤러로 구조화하는 패턴
- 사용자의 요청을 받으면 핵심 기능과 데이터를 보관하는 모델을 이용하여 뷰에 정보를 출력하는 구조임
- 여러 개의 뷰를 만들 수 있음
- 한 개의 모델에 대해 여러 개의 뷰를 필요로 하는 대화형 애플리케이션에 적합함
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/797097ff-90b3-430f-8eed-7737a9a4de38/스크린샷_2024-10-12_오후_11.55.48.png
- 기타 패턴종류 내용
마스터-슬레이브 패턴 슬레이브 컴포넌트에서 처리된 결과물을 다시 돌려받는 방식으로 작업 예) 장애 허용 시스템, 병렬 컴퓨팅 시스템 브로커 패턴 사용자가 원하는 서비스와 특성을 브로커 컴포넌트에 요청하면 요청에 맞는 컴포넌트와 사용자를 연결해주는 패턴 예) 분산 환경 시스템 피어-투-피어 패턴 피어라 불리는 하나의 컴포넌트가 클라이언트가 될 수도, 서버가 될 수도 있는 패턴 예) 파일 공유 네트워크 이벤트-버스 패턴 이벤트 메시지를 발행(Publish)하면, 해당 채널을 구독(Subscribe)한 리스너들이 메시지를 받아 이벤트를 처리 예) 알림 서비스 블랙보드 패턴 모든 컴포넌트들이 공유 데이터 저장소와 블랙보드 컴포넌트에 접근이 가능한 패턴 예) 음성 인식, 차량 식별, 신호 해석 인터프리터 패턴 프로그램 코드의 각 라인을 수행하는 방법을 지정하고, 기호마다 클래스를 갖도록 구성된 패턴 예) 번역기, 컴파일러, 인터프리터
객체지향
- 객체지향
- 각 요소들을 객체로 만든 후, 객체들을 조립해서 소프트웨어를 개발하는 기법
- 재사용 및 확장이 용이
- 객체지향의 구성 요소
- 객체
- 클래스
- 메시지
- 객체지향의 특징
- 캡슐화
- 상속
- 다형성
- 연관성
- 객체
- 데이터와 함수를 묶어 놓은 소프트웨어 모듈
- 데이터
- 객체가 가지고 있는 정보로, 속성이나 상태, 분류 등
- 함수
- 객체가 수행하는 기능으로 객체가 갖는 데이터를 처리하는 알고리즘
- 객체의 상태를 참조하거나 변경하는 수단
- 데이터
- 데이터와 함수를 묶어 놓은 소프트웨어 모듈
- 클래스
- 공통된 속성과 연산을 갖는 객체의 집합
- 속성과 연산을 정의하고 있는 틀
- 클래스에 속한 각각의 객체를 인스턴스 라고 함
- 메시지
- 객체들 간의 상호작용에 사용되는 수단으로, 객체의 동작이나 연산을 일으키는 외부의 요구사항
- 메시지를 받은 객체는 예상된 결과를 반환함
- 캡슐화
- 외부에서의 접근을 제한하기 위해 인터페이스를 제외한 세부 내용을 은닉하는 것
- 외부 모듈의 변경으로 인한 파급효과가 적다
- 상대 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 단순해지고, 객체 간의 결합도가 낮아짐
- 상속
- 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
- 하위 클래스는 물려받은 속성과 연산을 다시 정의하지 않아도 즉시 자신의 속성으로 사용할 수 있음
- 하위 클래스는 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용할 수 있음
- 다형성
- 하나의 메시지에 대해 각각의 객체가 고유한 방법으로 응답할 수 있는 능력
- 예) ‘+’ 연산자의 경우 숫자 클래스에서는 덧셈, 문자 클래스에서는 문자열의 연결 기능으로 사용됨
- 연관성
객체지향 분석 및 설계
- 객체지향 분석의 방법론
- 사용자의 요구사항과 객체, 속성, 연산, 관계 등을 정의하여 모델링하는 작업
- 업무를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석함
- 클래스를 식별하는 것이 주요 목적임
- 객체지향 분석의 방법론종류 내용
Rumbaugh(럼바우) 방법 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어서 수행함 Booch(부치) 방법 - 미시적 개발 프로세스와 거시적 개발 프로세스를 모두 사용함 - 클래스와 객체들을 분석 및 식별하고 속성과 연산을 정의 | | Jacobson 방법 | 유스케이스(Use Case)를 강조하여 사용함 | | Coad와 Yourdon 방법 | - E-R 다이어그램을 사용하여 객체의 행위를 모델링함
- 객체 식별, 구조 식별, 주제 정의, 속성과 인스턴스 연결 정의, 연산과 메시지 연결 정의 등의 과정으로 구성함 | | Wirfs-Brock 방법 | 분석과 설계 간의 구분이 없고 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행함 |
- 럼바우 분석 기법
- 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법
- 객체 모델링 기법
- 분석 활동은 객체 모델링 → 동적 모델링 → 기능 모델링 순
동적 모델링 상태 다이어그램을 이용하여 시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현하는 모델링 기능 모델링 자료 흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링 - 객체지향 설계 원칙
- 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜져야 할 원칙
- SRP, OCP, LSP, ISP, DIP의 다섯 가지 원칙의 앞 글자를 따 SOLID 원칙이라고 부름
- 객체지향 설계 원칙의 종류종류 내용
단일 책임 원칙(SRP) 객체는 단 하나의 책임만 가져야 한다는 원칙 개방-폐쇄 원칙(OCP) 기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계 리스코프 치환 원칙(LSP) 자식 클래스는 부모 클래스의 기능을 수행할 수 있어야 한다. 인터페이스 분리 원칙(ISP) 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다는 원칙 의존 역전 원칙(DIP) 의존 관계 성립 시 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 원칙
모듈
- 모듈
- 모듈화를 통해 분리된 시스템의 각 기능으로, 서브루틴, 서브시스템, 소프트웨어 내의 프로그램, 작업 단위 등을 의미함
- 소프트웨어를 구성하는 각 모듈의 기능이 서로 독립됨을 의미함
- 모듈의 독립성은 결합도와 응집도에 의해 측정됨
- 결합도
- 모듈간의 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계
- 결합도가 약할수록 품질이 높고, 강할수록 품질이 낮음
- 결합도의 종류와 강도
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/8407a7b0-ece0-40c5-b0c9-7f346e809eb7/스크린샷_2024-10-17_오전_12.00.49.png
- 결합도의 종류종류 내용
내용 결합도 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때의 결합도 공통(공유) 결합도 공유되는 공통 데이터 영역을 여러 모듈이 사용할 떄의 결합도 외부 결합도 어떤 모듈에서 선언한 데이터를 외부의 다른 모듈에서 참조할 때의 결합도 제어 결합도 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어 신호나 제어 요소를 전달하는 결합도 - 결합도의 종류종류 내용
스탬프(검인) 결합도 배열이나 레코드 등의 자료 구조로 전달될 때의 결합도 자료 결합도 모듈 간의 인터페이스가 조료 요소로만 구성될 떄의 결합도 - 응집도
- 모듈의 내부 요소들이 서로 관련되어 있는 정도
- 응집도가 강할수록 품질이 높고, 약할수록 품질이 낮음
- 응집도의 종류와 강도
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/74b04a60-4dbc-409d-954b-f398e896efd6/스크린샷_2024-10-17_오전_4.04.12.png
- 응집도의 종류종류 내용
기능적 응집도 모듈 내부의 모든 기능 요소들이 단일 문제와 연관 순차적 응집도 하나의 활동으로부터 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우 교환적 응집도 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 절차적 응집도 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 순차적으로 수행할 경우 시간적 응집도 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성 논리적 응집도 유사한 성격을 갖거나 특정 형태로 분류 우연적 응집도 각 구성 요소들이 서로 관련 없는 요소로만 구성 - 팬인 / 팬아웃
- 팬인은 제어하는 모듈의 수
- 팬아웃은 제어되는 모듈의 수
- 팬인이 높다는 것은 재사용 측면에서 설계가 잘 되어있다고 볼 수 있음
- 팬인이 높은 경우 단일 장애점이 발생할 수 있으므로 중점적인 관리 및 테스트가 필요
- ex) 다음의 시스템 구조도에서 각 모듈의 팬인과 팬아웃을 구하시오.
- 팬인은 빨간색, 팬아웃은 파란색
- N-S차트(Nassi-Schneiderman Chart)
- 논리의 기술에 중점을 두고 도형을 이용해 표현하는 방법
- GOTO나 화살표 이용X
- 연속, 선택 및 다중 선택, 반복의 3가지 제어 논리 구조로 표현
- 시각적으로 명확히 식별하는 데 적합함
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/2e6572e7-1281-4a2c-9941-aed494c5facb/스크린샷_2024-10-17_오전_4.09.53.png
단위 모듈
- 단위 모듈
- 소프트웨어 구현에 필요한 여러 동작 중 한 가지 동작을 수행하는 기능을 모듈로 구현한 것
- 단위 모듈로 구현되는 하나의 기능을 단위 기능
- 독립적인 컴파일이 가능하며, 다른 모듈에 호출되거나 삽입되기도 함
- 단위 모듈의 구현 과정
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/aff3c21d-4b1c-40b9-b055-66c4e27e9528/스크린샷_2024-10-17_오전_4.11.37.png
- IPC(Inter-Process Communication)
- 모듈 간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합
- 복수의 프로세스를 수행, 프로세스 간 통신까지 구현
- IPC의 대표 메소드 5가지
Shared Memory 공유 가능한 메모를 구성 Socket 네트워크 소켓을 이용 Semaphores 공유 자원에 대한 접근 제어를 통해 통신 Pipes&named Pipes - Pipe라고 불리는 선입선출 형태 - Pipe는 하나의 프로세스가 이용 중이라면 다른 프로세스는 접근할 수 없음 | | Message Queueing | 메시지가 발생하면 이를 전달하는 방식으로 통신하는 방식 |
- 단위 모듈 테스트
- 모듈이 정해진 기능을 정확히 수행하는 지 검증하는 것
- 단위 테스트라고도 불림
- 시스템 수준의 오류는 잡아낼 수 없음
- 테스트 케이스
- 소프트웨어가 사용자의 요구사항을 정확하게 준수 했는지를 확인하기 위한 테스트 항목에 대한 명세서
- 테스트 케이스를 이용하지 않은 테스트는 검증이 누락되거나 불필요한 검증의 반복으로 인력과 시간을 낭비 할 수 있음
- ISO/IEC/IEEE 29119-3 표준에 따른 테스트 케이스의 구성 요소
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/5cea3691-6e43-4415-93fb-4f2df80b465d/스크린샷_2024-10-17_오전_4.16.03.png
공통 모듈
- 공통 모듈
- 여러 프로그램에서 공통으로 사용할 수 있는 모듈
- 해당 기능을 명확히 이해할 수 있도록 명세 기법을 준수해야 함
- 공통 모듈 명세 기법의 종류명세 기법 내용
정확성 해당 기능이 필요하다는 것을 알 수 있도록 명확성 이해할 때 중의적으로 해석되지 않도록 작성 완전성 필요한 모든 것을 기술 일관성 상호 충돌이 발생하지 않도록 작성 추적성 요구사항의 출처, 관련 시스템 등의 관계를 파악 - 재사용
- 이미 개발된 기능들을 새로운 시스템이나 기능 개발에 사용하기 적합하도록 최적화하는 작업
- 필요한 비용과 시간을 절약 가능
- 사용법을 공개해야함
- 재사용 규모에 따른 분류함수와 객체 클래스나 메소드 단위
컴포넌트 컴포넌트 자체에 대한 수정 없이 인터페이스를 통해 통신 애플리케이션 공통된 기능들을 제공하는 애플리케이션을 공유
- 효과적인 모듈 설계 방안
- 결합도를 줄이고 응집도를 높여서 모듈의 독립성과 재사용성을 높임
- 복잡도와 중복성을 줄이고 일관성을 유지시킴
- 모듈의 기능이 예측이 가능해야 하며 지나치게 제한적이어서는 안 됨
- 모듈 크기는 시스템의 전반적인 기능과 구조를 이해하기 쉬운 크기로 분해함
- 효과적인 제어를 위해 모듈 간의 계층적 관계를 정의하는 자료가 제시
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/64a6d882-a2c2-40c4-ac20-68fcf342a85b/스크린샷_2024-10-17_오전_6.09.51.png
코드
- 코드
- 자료의 분류, 조합, 집계, 추출을 용이하게 하기 위해 사용하는 기호
- 코드의 주요 기능식별기능 데이터 간의 성격에 따라 구분
분류기능 특정 기준이나 동일한 유형에 해당하는 데이터를 그룹화 배열기능 의미를 부여하여 나열할 수 있음 표준화기능 기준에 맞추어 표현 간소화 기능 복잡한 데이터를 간소화 - 코드의 종류종류 내용
순차코드 발생 순서, 크기 순서 등 일정 기준에 따라 일련번호 부여 예) 1, 2, 3, 4 … 블록 코드 공통성이 있는 것끼리 블록으로 구분하고 일련번호 부여 예) 1001~1100: 총무부, 1101~1200: 영업부 10진 코드 0~9까지 10진 분할하고 다시 그 각각에 대하여 10진 분할하는 방법을 필요한 만큼 반복하는 방법 예) 1000: 공학, 1100: 소프트웨어 공학 1110: 소프트웨어 설계 그룹 분류 코드 일정 기준에 따라 대분류, 중분류, 소분류 등으로 구분하여 일련번호 부여 예) 1-01-001: 본사-총무부-인사계, 2-01-001: 지사-총무부-인사계 연상 코드 명칭이나 약호와 관계있는 숫자와 문자, 기호 이용 예) TV-40: 40인치 TV, L-15-220: 15W 220V의 램프 표의 숫자 코드 성질 즉, 길이, 넓이, 부피, 지름 높이 등의 물리적 수치를 그대로 코드에 적용 예) 120-720-1500: 두께표길이가 1207201500인 강판 합성 코드 하나의 코드로 수행하기 어려운 경우 2개 이상의 코드를 조합하여 만드는 방법 예) 연상 코드 + 순차 코드 KE-711: 대한항공 711기, AC-253: 에어캐나다 253기
디자인 패턴
- 디자인 패턴
- 모듈 간의 관계 및 인터페이스를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 개발 과정 중에 문제가 발생하면 새로 해결책을 구상하는 것보다 문제에 해당하는 디자인 패턴을 참고하여 적용하는 것이 더 효율적임
- GOF의 디자인 패턴은 생성 패턴, 구조 패턴, 행위 패턴으로 구분
- 생성 패턴
- 클래스나 객체의 생성과 참조 과정을 정의하는 패턴
- 추상팩토리
- 구체적인 클래스에 의존하지 않고, 인터페이스를 통해 서로 연관,의존하는 객체들의 그룹으로 생성하여 추상적으로 표현함
- 연관된 서브 클래스를 묶어 한 번에 교체하는 것이 가능함
- ex) 요리 내부의 값을 김치찌개에서 된장찌개로 바꿔도 구체적인 클래스에 의존하지 않았기에 문제가 없는 상황
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/25bb3e1e-5930-42f6-bd97-2910690712ae/스크린샷_2024-10-17_오전_6.19.58.png
- 팩토리 메소드
- 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화한 패턴
- 상위 클래스에서 인터페이스만 정의하고 실제 생성은 서브 클래스가 담당
- ex) 구체적인 선언은 하위 요리 클래스 내부에서 하는 방식
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/462fd286-7cb8-4e76-a338-7d6ebe9a1312/스크린샷_2024-10-17_오전_6.23.13.png
- 빌더
- 작게 분리된 인스턴스를 건축 하듯이 조합하여 객체를 생성함
- 객체의 생성과정과 표현방법을 분리하고 있어, 동일한 객체 생성에서도 서로 다른 결과를 만들어 낼 수 있음
- 프로토타입
- 원본 객체를 복제하는 방법으로 객체를 생성하는 방법
- 싱글톤
- 클래스 내에서 인스턴스가 하나뿐임을 보장
- 하나의 객체를 생성하면 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수 없음.
- 구조 패턴
- 복잡한 시스템을 개발하기 쉽도록 클래스나 객체들을 조합하여 더 큰 구조로 만드는 패턴
- 어댑터
- 다른 클래스가 이용할 수 있도록 변환해주는 패턴
- 인터페이스가 일치하지 않을 때 이용함
- 브릿지
- 구현부에서 추상층을 분리하여, 서로가 독립적으로 확장할 수 있도록 구성
- 기능과 구현을 두 개의 별도 클래스로 구현함
- 컴포지트
- 복합 객체와 단일 객체를 구분 없이 다루고자 할 때 사용하는 패턴
- 객체들을 트리 구조로 구성하여, 복합 객체 안에 복합 객체가 포함되는 구조
- 데코레이터
- 객체 간의 결합을 통해 능동적으로 기능들을 확장
- 임의의 객체에 부가적인 기능을 추가하기 위해 다른 객체들을 덧붙이는 방식으로 구현
- 파싸드
- 서브 클래스들을 피해 인터페이스를 구성함으로써 서브 클래스들의 기능을 간편하게 사용할 수 있는 패턴
- 서브 클래스들 사이의 통합 인터페이스를 제공하는 Wrapper 객체가 필요함
- 플라이웨이트
- 매번 생성하는 것이 아니고 가능한 한 공유해서 사용
- 다수의 유사 객체를 생성하거나 조작할 때 유용
- 프록시
- 네트워크 연결, 메모리의 대용량 객체로의 접근
- 접근이 어려운 객체와 객체 사이에서 인터페이스 역할 수행
- 행위 패턴
- 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴
- 책임 연쇄
- 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴
- 각 객체들이 고리로 묶여 있어 요청이 해결될 때 까지 고리를 따라 책임이 넘어감
- 커맨드
- 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 저장하거나 로그에 남기는 패턴
- 각종 명령어들을 추상클래스와 구체 클래스로 분리
- 인터프리터
- 언어의 문법 표현을 정의하는 패턴
- SQL이나 통신 프로토콜 같은 것을 개발할 때 사용
- 반복자(Iterator)
- 접근이 잦은 객체에 대해 동일한 인터페이스 사용
- 내부 표현 방법의 노출 없이 순차적인 접근 간으
- 중재자
- 수많은 객체들 간의 복잡한 상호작용을 캡슐화 하여 객체로 정의
- 의존성을 줄여 결합도를 감소
- 메멘토
- 특정 시점에서의 객체 내부 상태를 객체화함으로 써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공
- [Ctrl] + [Z]와 같은 되돌리기 기능을 개발할 때 주로 이용함
- 옵저버
- 한 객체의 상태가 변화하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태를 전달하는 패턴
- 상태
- 객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용
- 객체 상태를 캡슐화하고 참조하는 방식으로 처리
- 전략
- 동일한 계열의 알고리즘들을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의하는 패턴
- 독립적으로 원하는 알고리즘을 선택하여 사용할 수 있으며, 클라이언트에 영향 없이 알고리즘의 변경이 가능함
- 템플릿 메소드
- 상위 클래스에서 골격을 정의하고, 세부 처리를 구체화하는 구조의 패턴
- 유사한 서브 클래스를 묶어 상위 클래스에서 정의함으로써 코드의 양을 줄이고 유지보수를 용이하게 해줌
- 팩토리 메소드랑 유사한 개념
- 방문자
- 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성
- 처리 기능은 각 클래스를 방문하여 수행함
개발 지원 도구
- 통합 개발 환경(IDE)
- 개발에 필요한 환경, 편집기, 컴파일러, 디버거 등의 다양한 툴을 하나의 인터페이스로 통합하여 제공하는 환경
- 통합 개발 환경 도구의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/75d3e0ec-ebbb-4cf8-a15d-87081f469a8c/스크린샷_2024-10-17_오전_6.36.36.png
- 빌드 도구
- 소스 코드 파일들을 컴퓨터에서 실행할 수 있는 제품 소프트웨어로 변환하는 과정 또는 결과물
- 빌드 도구는 전처리, 컴파일 등의 작업을 수행함
- 대표적인 빌드 도구
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/9ead9c7d-9b55-4491-99e5-45eab4bb2dfc/스크린샷_2024-10-17_오전_6.38.07.png
- 기타 협업 도구
- 개발에 참여하는 사람들이 서로 다른 작업 환경에서 원활하게 프로젝트를 수행할 수 있도록 도와주는 도구
서버 개발
- 서버 개발
- 웹 애플리케이션의 로직을 구현할 서버 프로그램을 제작하여 웹 어플리케이션 서버(WAS)에 탑재하는 것
- 프로그래밍 언어는 Java, Js, Python 등
- 서버 개발 프레임워크
- 서버 프로그램 개발 시 다양한 네트워크 설정, 요청 및 응답 처리, 아키텍처 모델 구현 등을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어
- 대부분 MVC 패턴 기반
- 서버 개발 프레임워크의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ab47a184-5820-48a6-a1dc-825762eb055b/스크린샷_2024-10-17_오전_6.40.49.png
- 서버 개발 과정
- DTO/VO, SQL, DAO, Service, Controller를 각각 구현하는 과정
- 순서는 임의로 변경 가능
- MVC 접근법!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/88a56a82-f952-457f-8a0b-33efc75524ba/스크린샷_2024-10-17_오전_6.42.08.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/f856da4b-e749-42d1-a66b-525b79357309/스크린샷_2024-10-17_오전_6.41.51.png
- 구현 과정과정 내용
DTO/VO 구현 - 데이터 교환을 위해 사용할 객체를 만드는 과정 - 송, 수신할 데이터의 자료형에 맞는 변수 및 객체를 생성함 | | SQL 구현 | - 데이터의 삽입, 변경, 삭제등의 작업을 수행할 SQL문 생성
- 소스 코드 내에 직접 입력, 또는 별도의 XML 파일로 관리 | | DAO 구현 | 데이터베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드를 구현 | | Service 구현 | 요청에 응답하기 위한 로직을 구현 | | Controller 구현 | 적절한 서비스를 호출하여 결과를 반환하는 코드 구현 |
배치 프로그램
- 배치 프로그램
- 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하도록 만든 프로그램을 의미함
- 배치 프로그램의 필수 요소
- 대용량 데이터
- 자동화
- 견고성
- 안정성/신뢰성
- 성능
- 배치 스케줄러
- 일괄 처리 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구
- 특정 업무를 원하는 시간에 처리할 수 있도록 지원
- 잡 스케줄러라고도 불림
- 배치 스케줄러의 종류
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/94ee26a1-6696-4351-9301-aff965427e50/스크린샷_2024-10-17_오전_6.54.41.png
- crontab 명령어 작성 방법!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/fbe11882-5246-4e94-9184-ddb656d62b67/스크린샷_2024-10-17_오전_6.56.06.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/590757e4-e084-4755-8a2b-b4e21db29389/스크린샷_2024-10-17_오전_6.55.04.png
시스템 인터페이스 요구사항 분석
- 시스템 인터페이스 요구사항
- 개발할 시스템과 외부 시스템을 연동하는데 필요한 시스템
- 시스템 인터페이스 요구사항 명세서의 구성 요소
- 인터페이스 이름
- 연계 대상 시스템
- 연계 범위 및 내용
- 연계 방식
- 송신 데이터
- 인터페이스 주기
- 기타 고려사항
- 시스템 인터페이스 요구사항 분석
- 요구사항 분류하고 구체적으로 명세한 후 이를 이해관계자에게 전달
- 요구사항 분석 기법을 적절히 이용함
- 요구사항 분해가 필요한 경우 적절한 수준으로 세분화함
- 요구사항 분석 시 누락된 요구사항이나 제한 조건을 추가함
- 상대적 중요도를 평가하여 우선순위를 부여함
- 시스템 인터페이스 요구사항 분석 절차
- 관련 요구사항을 선별하여 별도로 요구사항 목록을 만듦
- 관련된 자료를 준비
- 기능, 비기능 요구사항으로 분리
- 요구사항 명세서에 내용을 추가하거나 수정
- 요구사항 명세서와 요구사항 목록을 이해관계자에게 전달
인터페이스 요구사항 검증
- 인터페이스 요구사항 검증
- 사용자들의 요구사항이 요구사항 명세서에 기술되었는지 검토하고 베이스라인 설정
- 검증 수행 순서
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/715b61d2-dc78-43a7-8169-eaadaf75908f/스크린샷_2024-10-17_오전_7.12.45.png
- 요구사항 검증 방법
- 요구사항 검토
- 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석동료 검토 명세서 작성자가 내용을 직접 설명하고 동려들이 결함을 발견
워크스루 요구사항 명세서를 미리 배포하여 사전 검토 후 검토회를 통해 결함 발견 인스펙션 다른 검토 전문가들이 결함을 발견하는 형태의 검토 방법
- 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석동료 검토 명세서 작성자가 내용을 직접 설명하고 동려들이 결함을 발견
- 프로토 타이핑
- 견본품을 만들어 최종 결과물을 예측
- 테스트 설계
- 요구사항이 현실적으로 테스트 가능한지를 검토
- CASE 도구 활용
- 일관성 분석
- 요구사항 검토
- 요구사항 검증의 주요 항목
- 완전성
- 일관성
- 명확성
- 기능성
- 검증 가능성
- 추적 가능성
- 변경 용이성
송,수신 데이터 식별
- 식별 대상 데이터
- 송 수신 시스템 사이에서 교환되는 데이터로, 규격화된 표준 형식에 따라 전송
- 교환되는 데이터의 종류
- 인터페이스 표준 항목
- 송,수신 데이터 항목
- 공통 코드
- 인터페이스 표준 항목
- 송 수신 시스템을 연계하는데 표준적으로 필요한 데이터
- 시스템 공통부와 거래 공통부시스템 공통부 시스템 간 연동 시 공통 정보
거래 공통부 송 수신되는 데이터를 처리할 때 필요한 정보
- 송, 수신 데이터 항목
- 송 수신 시스템이 업무를 수행하는데 사용하는 데이터
- 데이터 항목과 순서는 인터페이스별로 다름
- 공통 코드
- 시스템들에서 공통적으로 사용하는 코드
- 정보 흐름 식별
- 개발할 시스템과 내 외부 시스템 사이 방향성을 식별
- 송, 수신 데이터 식별
- 개발할 시스템과 연계할 내, 외부 시스템 사이의 정보 흐름과 데이터베이스 산출물을 기반으로 식별
- 인터페이스 표준 항목과 송, 수신 데이터 항목 식별
- 교환 범위를 확인하고 송, 수신 데이터 항목을 식별
- 코드성 데이터 항목 식별
- 코드성 데이터 항목에 대해 코드, 코드명, 코드 설명 등의 코드 정보를 식별
인터페이스 방법 명세화
- 인터페이스 방법 명세화
- 내, 외부 시스템에 연계하여 작동할 때 인터페이스별 송, 수신 방법, 송, 수신 데이터, 오류 식별 및 처리 방안 내용을 문서로 정리
- 송, 수신 방법 명세화
- 각각의 인터페이스에 대해 연계 방식, 통신 및 처리 유형, 발생 주기 등의 송, 수신 방법을 정의하고 명세를 정의
- 송, 수신 데이터 명세화
- 송, 수신 데이터에 대한 명세를 작성
- 오류 식별 및 처리 방안 명세화
- 오류를 식별하고 오류 처리 방안에 대한 명세를 작성
- 인터페이스별로 송, 수신 방법을 명세화하기 위해 필요한 정보
- 시스템 연계 기술
- 인터페이스 통신 유형
- 처리 유형
- 발생 주기
- 시스템 연계 기술
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/ea517563-223a-405f-b09e-7ad04e74137d/스크린샷_2024-10-17_오전_7.21.49.png
- 인터페이스 통신 유형유형 내용
단방향 요청만 하고 응답이 없는 형식 동기 요청 후 응답이 올 때 까지 대기 비동기 요청 후 다른 작업을 수행하다 응답이 오면 처리 - 인터페이스 처리 유형유형 내용
실시간 방식 요청 내용을 바로 처리 지연 처리 방식 데이터를 매 건 단위로 처리할 경우 비용이 많이 발생할 때 배치 방식 대량의 데이터를 처리할 때 사용 - 인터페이스 발생 주기
- 개발할 시스템과 내,외부 시스템 간 송, 수신 데이터가 전송되어 인터페이스가 사용되는 주기를 의미
미들웨어 솔루션
- 미들웨어
- 운영체제와 응용 프로그램, 서버와 클라이언트 사이에서 다양한 서비스를 제공하는 소프트웨어
- 표준화된 인터페이스를 제공함으로써 시스템 간의 데이터 교환에 일관성을 보장함
- 미들웨어의 종류
- DB
- RPC
- MOM
- TP-Monitor
- ORB
- WAS
- DB
- 클라이언트에서 원격의 데이터베이스와 연결하는 미들웨어
- RPC(원격 프로시저 호출)
- 원격 프로시저를 마치 로컬 프로시저처럼 호출하는 미들웨어
- MOM(메시지 지향 미들웨어)
- 비동기형 메시지를 전달하는 미들웨어
- 이기종 분산 데이터 시스템의 데이터 동기를 위해 많이 사용됨
- TP-Monitor(트랜잭션 처리 모니터)
- 트랜잭션을 처리 및 감시하는 미들웨어
- 사용자 수가 증가해도 빠른 응답 속도를 유지해야 하는 업무로 사용함
- ORB(객체 요청 브로커)
- 객체 지향 미들웨어
- TP-Monitor의 장점인 트랜잭션 처리와 모니터링 등을 추가로 구현한 제품도 존재
- WAS(웹 애플리케이션 서버)
- 동적인 콘텐츠를 처리하기 위한 미들웨어
- 웹 환경을 구현하기 위한 미들웨어
모듈 연계를 위한 인터페이스 기능 식별
- 모듈 연계
- 내부 모듈과 외부 모듈 또는 내부 모듈 간 데이터의 교환을 위해 관계를 설정
- 대표적인 모듈 연계 방법
- EAI(Enterprise Application Integration)
- ESB(Enterprise Service Bus)
- 웹 서비스
- EAI
- 기업 내 각종 애플리케이션 및 플랫폼 간의 정보 전달, 연계, 통합 등 상호 연동이 가능하게 해주는 솔루션
- EAI의 구축 유형!https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/a0aa8dfd-9951-4aea-af16-c87a22f594df/스크린샷_2024-10-17_오전_7.30.46.png
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/2b0b459f-2766-47a5-90ad-6da23f43bb0a/스크린샷_2024-10-17_오전_7.30.26.png
- ESB
- 애플리케이션 간 연계, 표준 기반의 인터페이스를 제공하는 솔루션
- 애플리케이션 통합측면에서 EAI와 유사하지만 서비스 중심의 통합을 지향
- 범용적으로 사용하기 위해 결합도 약하게 유지
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/e66c3ffa-ac3d-4d18-adf6-cdd66bd2cf14/스크린샷_2024-10-17_오전_7.31.40.png
- 웹 서비스
- 네트워크의 정보를 표준화된 서비스 형태로 만들어 공유하는 기술
- 서비스 지향 아키텍처(SOA) 개념
- 웹 서비스의 구성
- SOAP
- HTTP, HTTPS, SMTP 등을 활용하여 XML기반의 메시지 교환
- UDDI
- WSDL을 등록하여 서비스와 서비스 제공자를 검색하고 접근하는데 사용
- WSDL
- 웹 서비스명, 서비스 제공 위치, 프로토콜 XML 형식으로 구현
- SOAP
- 모듈 간 인터페이스 기능 식별
- 식별된 모듈 간 관련 기능을 검토하여 인터페이스 동작에 필요한 기능을 식별
- 모듈 간 동작하는 기능을 통해 인터페이스 기능을 식별
- 시나리를 통해 내부 모듈과 관련된 인터페이스 기능을 식별
- 실제적으로 필요한 인터페이스 기능을 최종적으로 선별
- 인터페이스 기능 구현을 정의하는데 사용
모듈 간 인터페이스 데이터 표준 확인
- 인터페이스 데이터 표준
- 모듈 간 인터페이스에 사용되는 데이터의 형식을 표준화하는 것
- 기존의 데이터 중에서 공통 영역을 추출하거나 어느 한쪽의 데이터를 변환하여 정의함
- 인터페이스 데이터 표준 확인
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/63553d08-9c94-475c-8a0e-7b4d8d7403ad/스크린샷_2024-10-17_오전_7.35.24.png
인터페이스 기능 구현의 정의
- 인터페이스 기능 구현의 정의
- 인터페이스를 실제로 구현하기 위해 인터페이스 기능에 대한 구현 방법을 기능별로 기술하는 것
- !https://prod-files-secure.s3.us-west-2.amazonaws.com/34c9c849-1f6c-44a2-a69b-66c38be75f42/8f142ab7-d2a2-40d8-aa12-e077b965e368/스크린샷_2024-10-17_오전_7.36.10.png
- 모듈 세부 설계서
- 모듈의 구성 요소와 세부적인 동작 등을 정의한 설계서
- 모듈 세부 설계서 종류컴포넌트 명세서 컴포넌트 개요, 내부 클래스의 동작, 외부와의 통신하는 명세 등을 정의
인터페이스 명세서 인터페이스 클래스의 세부 조건 및 기능 등을 정의
인터페이스 구현
- 인터페이스 구현
- 송, 수신 시스템 간의 데이터 교환 및 처리를 실현해 주는 작업
- 대표적인 인터페이스 구현 방법
- 데이터 통신을 이용한 인터페이스 구현
- 인터페이스 엔티티를 이용한 인터페이스 구현
- AJAX
- JS를 이용하여 클라이언트와 서버 간에 XML 데이터를 주고 받는 비동기 통신 기술
- 웹 페이지 일부 영역만을 업데이트 할 수 있음
- JSON
- 용량이 적은 데이터를 교환하기 위해 데이터 객체를 속성, 값의 쌍 형태로 표현하는 개방형 표준 포맷
- 데이터 통신을 이용한 인터페이스 구현
- ex) JSON을 이용한 인터페이스 구현 순서
- 인터페이스 객체를 생성, 각 시스템 환경에 맞게 선택함
- JSON 이용해 인터페이스 객체를 만듦
- 인터페이스 객체를 AJAX 기술 등을 이용하여 수신 측으로 보냄
- 인터페이스 객체를 수신해 파싱한 후 처리함
- 수신 측에서 송신 측으로 처리 결과를 보냄
- ex) JSON을 이용한 인터페이스 구현 순서
- 인터페이스 엔티티를 이용한 인터페이스 구현
- 인터페이스가 필요한 시스템 사이에 별도의 인터페이스 엔티티를 두어 상호 연계하는 것
- 테이블을 엔티티로 활용함
- ex) 인터페이스 테이블을 이용한 인터페이스 구현 순서
- 인터페이스 이벤트가 발생하면 인터페이스 데이터를 기록
- 송신 측 인터페이스 테이블에 인터페이스 데이터를 전송
- 수신 측 인터페이스 테이블에 입력되면 인터페이스 데이터를 읽음
- 수신 측 인터페이스 테이블에서 읽은 후 사전에 정의된 데이터 트랜잭션 수행
인터페이스 보안
- 인터페이스 보안
- 인터페이스의 보안 취약점 분석 후 적절한 보안 기능을 적용
- 인터페이스 보안 기능 적용
- 인터페이스 아키텍처에 따라 IPSec, SSL, S-HTTP를 사용 | | --- | --- | | 애플리케이션 영역 | 보안 가이드를 참조하여 코드 상의 보안 취약점을 보완 | | 데이터베이스 영역 | - 데이터베이스, 스키마, 엔티티의 접근 권한과 프로시저, 트리거 등 동작 객체의 보안 취약점에 보안 기능 적용
- 개인 정보나 업무상 민감한 데이터의 경우 암호화나 익명화 등 데이터 자체의 보안 방안도 고려 |
- | 네트워크 영역 | - 스니핑 등을 이용한 데이터 탈취 및 변조 위협을 방지하기 위해 네트워크 트래픽에 대한 암호화를 설정
- 데이터 무결성 검사 도구
- 인터페이스 보안 취약점을 분석하는데 사용되는 도구
- 시스템 파일의 변경 유무를 확인하고, 파일이 변경되었을 경우 이를 관리자에게 알려줌
- 종류
- TripWire
- AIDE
- Samhain
- Claymore
- Slipwire
- Fcheck
인터페이스 구현 검증
- 인터페이스 구현 검증
- 인터페이스가 정상적으로 문제없이 작동하는지 확인
- 인터페이스 구현 검증 도구, 감시 도구를 이용
- 인터페이스 구현 검증 도구
- 인터페이스 단위 기능과 시나리오 등을 기반으로 하는 통합 테스트가 필요함
- 테스트 자동화 도구
- 인터페이스 구현 감시 도구
- 동작 상태는 APM(애플리케이션 성능 관리)을 사용하여 감시(Monitoring)할 수 있음
- APM을 통해 종합적인 정보를 조회하고 분석할 수 있음
- 대표적인 APM
- 스카우터
- 제니퍼
- APM(Application Performance Management/Monitoring)
- 애플리케이션의 성능 관리를 위해 다양한 모니터링 기능을 제공하는 도구
- APM은 리소스 방식과 엔드투엔드의 두 가지 유형이 있음
- 리소스 방식
- Nagios, Zabbix, Carti
- 엔드투엔드 방식
- VisualVM, 제니퍼, 스카우터
- 리소스 방식
사용자 인터페이스
- 사용자 인터페이스(UI, User Interface)
- 사용자와 시스템 간의 상호작용이 이뤄지도록 도와주는 장치나 소프트웨어
- 사용자 인터페이스의 세 가지 분야
- 물리적 제어
- 상세적인 표현과 전체적인 구성
- 편리하고 간편하게 사용하도록 하는 기능
- 사용자 인터페이스의 구분구분 내용
CLI 명령과 출력이 텍스트 형태로 이루어지는 인터페이스 GUI 아이콘이나 메뉴를 마우스로 선택하여 작업을 수행하는 그래픽 환경의 인터페이스 NUI 말이나 행동으로 기기를 조작하는 인터페이스 - 사용자 인터페이스의 기본 원칙
- 직관성
- 유효성
- 학습성
- 유연성
UI 설계 도구
- 와이어프레임
- 페이지에 대한 개략적인 레이아웃이나 뼈대를 설계하는 도구
- 페이지의 영역 구분, 콘텐츠, 텍스트 배치 등을 화면 단위로 설계함
- 목업
- 실제 화면과 유사하게 만든 정적인 형태의 모형
- 스토리보드
- 와이어프레임에 콘텐츠에 대한 설명, 페이지 간 이동 흐름 등을 추가한 문서
- 디자이너와 개발자가 최종적으로 참고하는 작업 지침서
- 서비스 구축을 위한 모든 정보가 들어 있음
- 프로토타입
- 와이어프레임이나 스토리보드 등에 인터랙션을 적용함으로써 실제 구현된 것처럼 테스트가 가능한 동적인 형태의 모형
- 종류
- 제작 기간이 짧은 경우, 제작 비용이 적을 경우, 업무 협의가 빠를 경우 | | --- | --- | | 디지털 프로토타입 | - 파워포인트, 아크로뱃, 비지오, 옴니그래플 등과 같은 프로그램을 사용
- 재사용이 필요한 경우, 산출물과 비슷한 효과가 필요한 경우, 숙력된 전문가가 있는 경우 |
- | 페이퍼 프로토타입 | - 아날로그적인 방법
- 유스케이스
- 사용자의 요구사항을 기능 단위로 표현
- 사용자가 원하는 목표를 달성하기 위해 수행할 내용을 기술함
- 사용자의 요구사항을 빠르게 파악함으로써 초기에 시스템의 기능적인 요구를 결정
- 다이어그램 형식으로 묘사됨
품질 요구사항
- 품질 요구사항
- 사용자의 입장에서 얼마나 충족하는가
- 사용자의 요구사항을 충족시킴으로써 확립
- 소프트웨어 품질 관련 표준
- ISO/IEC 9126의 소프트웨어 품질 특성
UI 설계서
- UI 설계서
- 요구사항을 바탕으로 UI 설계를 구체화하여 작성하는 문서
- 기획자, 개발자, 디자이너 등과의 원할한 의사소통을 위함
- UI 흐름 설계
- UI 상세 설계
- 실제 설계 구현을 위해 자세하게 설계
- 반드시 시나리오를 작성해야함
- UI 시나리오 문서
- 사용자 인터페이스의 기능 구조, 대표 화면, 화면 간 인터랙션의 흐름, 다양한 상황에서의 예외 처리 등을 정리한 문서
- 사용자가 최종 목표를 달성하기 위한 방법이 순차적으로 묘사되어 있음
- UI 시나리오 문서의 요건
- 완전성
- 일관성
- 이해성
- 가독성
- 수정 용이성
- 추적 용이성
- UI 상세 설계 순서
HCI / UX / 감성공학
- HCI(Human Computer Interaction or Inteface)
- 사람이 시스템을 보다 편리하고 안전하게 사용할 수 있도록 연구하고 개발하는 학문
- 최종목표는 최적의 UX 만드는 것
- 어떤 제품이 좋은 제품인지, 어떻게 하면 좋은 제품을 만들 수 있는지 연구
- UX(User Experience)
- 사용자가 시스템이나 서비스를 이용하면서 느끼고 생각하게 되는 총체적인 경험
- UI가 사용성, 접근성, 편의성을 중시한다면, UX는 UI를 통해 사용자가 느끼는 만족이나 감정 중시
- 기술을 효용성 측면만 아니라 삶의 질을 향상시키는 하나의 방향으로 봄
- UX의 특징
- 주관성
- 정황성
- 총체성
- 감성공학
- 제품이나 작업환경을 사용자의 감성에 알맞도록 설계 및 제작하는 기술
- 여러 분야의 학문이 공존하는 종합과학임
- 목적은 인간의 삶을 편리하고 안전하며 쾌적하게 만드는 것
- 인간의 감성을 제품 설계에 적용하기 위해 공학적인 접근 방법 사용
애플리케이션 테스트
- 애플리케이션 테스트
- 애플리케이션에 잠재되어 있는 결함을 찾아내는 일련의 행위 또는 절차
- 고객의 요구사항을 만족시키는지 확인하고 소프트웨어가 기능을 정확히 수행하는지 검증함
- 애플리케이션의 기본 원리기본 원리 설명
완벽한 테스트 불가능 잠재적인 결함을 줄일 수 있지만 결함이 없다고 증명할 수 없음 파레토 법칙 20%에 해당하는 코드에서 전체 결함의 80%가 발견된다는 법칙 살충제 패러독스 동일한 테스트 케이스로 동일한 테스트를 반복하면 더 이상 결함이 발견되지 않는 현상 테스팅은 정황 의존 소프트웨어의 특징, 테스트 환경, 테스터의 역량 등 정황에 따라 테스트 결과가 달라질 수 있으므로, 정황에 따라 다르게 테스트를 수행해야함 오류-부재의 궤변 결함을 모두 제거해도, 사용자의 요구사항을 만족시키지 못하면 품질이 높다고 할 수 없다. 테스트와 위험은 반비례 테스트를 할 수록 미래에 발생할 위험을 줄일 수 있음 테스트의 점진적 확대 작은 부분에서 시작하여 점점 확대하며 진행 테스트의 별도 팀 수행 개발자와 관계없는 별도의 팀에서 수행
애플리케이션 테스트의 분류
- 프로그램 실행 여부에 따른 테스트
- 소스 코드에 대한 코딩 표준, 코딩 스타일, 코드 복잡도, 남은 결합 등을 발견하기 위함
- 종류: 워크스루, 인스펙션, 코드 검사 | | --- | --- | | 동적 테스트 | - 프로그램을 실행하여 오류를 찾는 테스트
- 개발의 모든 단계에서 테스트를 수행
- 종류: 블랙박스 테스트, 화이트박스 테스트 |
- | 정적 테스트 | - 프로그램을 실행하지 않고 명세사나 소스 코드를 대상으로 분석
- 테스트 기반에 따른 테스트
- 종류: 동등 분할, 경계 값 분석 등 | | --- | --- | | 구조 기반 테스트 | - 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인
- 종류: 구문 기반, 결정 기반, 조건 기반 등 | | 경험 기반 테스트 | - 유사 소프트웨어나 기술 등에 대한 테스터의 경험을 기반으로 수행
- 명세가 불충분하거나 테스트 시간에 제약이 있는 경우
- 종류: 에러 추정, 체크 리스트, 탐색적 테스팅 |
- | 명세 기반 테스트 | - 사용자의 요구사항에 대한 명세를 빠짐없이 테스트 케이스로 만들어 구현하고 있는지 확인하는 테스트
- 시각에 따른 테스트
- 명세서대로 완성됐는지 테스트 | | --- | --- | | 확인 테스트 | - 사용자의 시각에서 생산된 제품의 결과를 테스트
- 요구한대로 제품이 완성됐는지, 정상적으로 동작하는지 테스트 |
- | 검증 테스트 | - 개발자의 시각에서 제품의 생산 과정을 테스트
- 목적에 따른 테스트회복 테스트 실패하도록 한 후 올바르게 복구되는지 확인
안전 테스트 불법적인 침입으로부터 시스템을 보호할 수 있는지 강도 테스트 과도한 정보량이나 빈도 등을 부과하여 과부하 시에도 정상적으로 실행되는지 성능 테스트 실시간 성능이나 전체적인 효율성을 진단, 응답 시간, 처리량 등을 테스트 구조 테스트 논리적인 경로, 소스 코드의 복잡도 등을 평가 회귀 테스트 변경 또는 수정된 코드에 새로운 결함이 없음을 확인하는 테스트 병행 테스트 변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력하여 결과를 비교하는 테스트
개발 단계에 따른 애플리케이션 테스트
- 개발 단계에 따른 애플리케이션 테스트
- 개발 단계에 따라 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트로 분류됨
- 애플리케이션 테스트와 소프트웨어 개발 단계를 연결하여 표현한 것을 V-모델이라고 함
- 단위 테스트
- 코딩 직후 모듈이나 컴포넌트에 초점을 맞춰 테스트함
- 기능성 테스트를 최우선으로 수행
- 구조 기반 테스트와 명세 기반 테스트로 나뉘지만 주로 구조 기반 테스트를 시행함
- 통합 테스트
- 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트를 의미
- 모듈 간 또는 통합된 컴포넌트 간의 상호 작용 오류를 검사함
- 시스템 테스트
- 완벽하게 수행되는가를 점검
- 기능정 요구사항과 비기능적 요구사항으로 구분하여 각각을 만족하는지 테스트
- 인수 테스트
- 사용자의 요구사항을 충족하는지에 중점을 둠
- 사용자가 직접 테스트함
사용자 인수 테스트 시스템 사용의 적절성 여부를 확인함 운영상의 인수 테스트 - 시스템 관리자가 시스템 인수 시 수행하는 테스트 기법 - 백업/복원 시스템, 재난 복구, 사용자 관리, 정기 점검 | | 계약 인수 테스트 | 계약상의 인수/검수 조건을 준수하는지 여부 | | 규정 인수 테스트 | 정부 지침, 법규, 규정에 맞게 개발 되었는지 여부 | | 알파 테스트 | 사용자가 개발자 앞에서 행하는 테스트 기법 | | 베타 테스트 | 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법 |
통합 테스트
- 통합 테스트
- 단위 테스트가 끝난 모듈을 통합하는 과정에서 발생하는 오류 및 결함을 찾는 테스트 기법
- 종류
- 종류: 빅뱅 통합 테스트 방식 | | --- | --- | | 점진적 통합 방식 | - 모듈 단위로 단계적으로 통합하면서 테스트 하는 방법
- 종류: 하향식 통합 테스트, 상향식 통합 테스트, 혼합식 통합 테스트 |
- | 비점진적 통합 방식 | - 통합하는 절차 없이 모든 모듈이 미리 결합되어 있는 프로그램 전체를 테스트 하는 방법
- 하향식 통합 테스트
- 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트
- 깊이 우선 통합법이나 넓이 우선 통합법을 사용함
- 하향식 통합 테스트 절차
- 제어 모듈은 작성된 프로그램을 사용, 주요 제어 모듈의 종속 모듈들은 스텁으로 대체
- 깊이 우선 또는 넓이 우선 등의 통합 방식에 따라 하위 모듈인 스텁들이 한 번에 하나씩 실제 모듈로 교체
- 모듈이 통합할 때 마다 테스트를 실시함
- 새로운 오류가 발생하지 않음을 보증하기 위해 회귀 테스트를 실시
- 상향식 통합 테스트
- 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트
- 상향식 통합 테스트 절차
- 하위 모듈들을 클러스터로 결합
- 상위 모듈에서 데이터 입,출력을 확인하기 위해 더미 모듈인 드라이버를 작성함
- 통합된 클러스터 단위로 테스트
- 테스트 완료 시, 프로그램 구조의 상위로 이동하여 결합하고 드라이버는 실제 모듈로 대체됨
- 혼합식 통합 테스트
- 하위 수준에는 상향식 통합, 상위 수준에서는 하향식 통합을 사용하여 최적의 테스트를 지원
- 샌드위치 식 통합 테스트 방법이라고도 함
- 회귀 테스팅
- 통합 테스트로 인해 변경된 모듈이나 컴포넌트에 새로운 오류가 있는지 확인
- 이미 테스트된 프로그램의 테스팅을 반복
- 수정한 모듈이나 컴포넌트가 다른 부분에 영향을 미치는지, 오류가 생기지 않았는지 새로운 오류가 발생하지 않음을 보증하기 위해 반복 테스트함.
테스트 케이스/ 테스트 시나리오 / 테스트 오라클
- 테스트 케이스
- 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력 값, 실행 조건, 기대 결과 등으로 구성 된 테스트 항목에 대한 명세서
- 오류 방지, 인력 시간, 자원 낭비를 지울 수 있음
- 테스트 시나리오
- 테스트 케이스를 적용하는 순서에 따라 여러 개의 테스트 케이스를 묶은 집합
- 적용하는 구체적인 절차를 명세함
- 구체적인 절차, 사전 조건, 입력 데이터 등이 설정되어 있음
- 테스트 오라클
- 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입하여 비교
- 테스트 케이스에 대한 예상 결과를 계산하거나 확인함
- 테스트 오라클의 특징
- 제한된 검증
- 모든 테스트 케이스에 적용할 수 없음
- 수학적 기법
- 값을 수학적 기법을 이용하여 구할 수 있음
- 자동화 기법
- 대상 프로그램의 실행, 결과 비교, 커버리지 측정 등을 자동화 할 수 있음
- 제한된 검증
- 테스트 오라클의 종류
- 모든 오류를 검출할 수 있음 | | --- | --- | | 샘플링 오라클 | - 특정한 몇몇 테스트 케이스의 입력 값들에 대해서만 기대하는 결과를 제공
- 전수 테스트가 불가능한 경우 사용 | | 추정 오라클 | - 특정 테스트 케이스의 입력값에 대해 기대하는 결과 제공
- 나머지 입력 값들에 대해서는 추정으로 처리하는 오라클 | | 일관성 검사 오라클 | 애플리케이션에 변경이 있을 때, 테스트 케이스의 수행 전과 후의 결과 값이 동일한지를 확인 |
- | 참 오라클 | - 입력 값에 대해 기대하는 결고라르 제공하는 오라클
테스트 자동화 도구
- 테스트 자동화
- 사람이 반복적으로 수행하던 테스트 절차를 스크립트 형태로 구현하는 자동화 도구를 적용함으로써 쉽고 효율적으로 테스트를 수행할 수 있도록 한 것
- 테스트 유형에 따른 테스트 자동화 도구의 종류
- 정적 분석 도구
- 테스트 실행 도구
- 성능 테스트 도구
- 테스트 통제 도구
- 정적 분석 도구
- 프로그램을 실행하지 않고 분석하는 도구
- 테스트 실행 도구
- 스크립트 언어를 사용하여 테스트를 실행하는 도구
- 데이터 주도 접근 방식
- 데이터를 저장하고 이를 읽어 실행하는 방식
- 키워드 주도 접근 방식
- 수행할 동작을 나타내는 키워드와 테스트 데이터를 저장하여 실행하는 방식
- 성능 테스트 도구
- 가상의 사용자를 만들어 성능의 목표 달성 여부를 확인하는 도구
- 테스트 통제 도구
- 테스트 계획 및 관리, 테스트 수행, 결함 관리 등을 수행하는 도구
- 종류
- 형상 관리 도구
- 결함 추적 / 관리 도구
- 테스트 하네스 도구
- 테스트가 실행될 환경을 시뮬레이션하여 컴포넌트 및 모듈이 정상적으로 테스트되도록 하는 도구
- 테스트 하네스
- 컴포넌트 및 모듈을 테스트하는 환경의 일부분으로, 테스트를 지원하기 위해 생성된 코드와 데이터
- 테스트 하네스의 구성 요소테스트 드라이버
테스트 스텁 테스트 슈트 컴포넌트나 모듈, 시스템에 사용되는 테스트 케이스의 집합 테스트 케이스 테스트 스크립트 테스트 실행절차에 대한 명세서 목 오브젝트 조건부로 입력해 두면, 그 상황에 맞는 예정된 행위를 수행 - 테스트 수행 단계별 테스트 자동화 도구테스트 단계 자동화도구 설명
테스트 계획 요구사항 관리 요구사항 정의 및 변경 사항 등을 관리하는 도구 테스트 분석 / 설계 테스트 케이스 생성 테스트 데이터 및 테스트 케이스 작성을 지원 테스트 수행 테스트 자동화 자동화를 도와주는 도구 정적 분석 코딩 표준, 런타임 오류 검증 동적 분석 시뮬레이션을 통해 오류를 검출 성능 테스트 가상의 사용자를 생성하여 처리 능력을 측정 모니터링 CPU, Memory 등과 같은 시스템 자원의 상태 확인 및 분석을 지원 테스트 관리 커버리지 분석 충분성 여부 검증 형상 관리 도구 및 데이터 관리 결함 추적/ 관리 발생한 결함 추적 및 관리 활동을 지원
결함 관리
- 결함
- 소프트웨어가 개발자가 설계한 것과 다르게 동작하거나 다른 결과가 발생되는 것
- 결함 관리 프로세스
'경험' 카테고리의 다른 글
첫 개인 프로젝트 하는 입장에서 Framework 선택 (3) | 2024.10.25 |
---|---|
정보처리기사 실기 정리 4 (3) | 2024.10.25 |
정보처리기사 실기 정리 3 (3) | 2024.10.25 |
정보처리기사 실기 정리 2 (0) | 2024.10.25 |
정보처리기사 실기 정리 1 (1) | 2024.10.25 |