study/정보처리기사
1과목 소프트웨어 설계
으녕오리
2025. 4. 29. 04:20
- 맞는 보기도 읽어두기(맞는 보기 그대로 나오고 아닌 보기 추가해서 문제 나오기도 함)
- 계산 문제 표시해두고, 나중에 한번씩 다시 풀어보기!
- 애자일 방법론(빠른, 민첩한)(고객존중)의 종류
- XP(eXtreme Programming, 익스트림 프로그래밍, 실용성 강조, 객체지향 o, 구조적 x, 소규모)
- 5가지 핵심가치(의사 선생님 피존 용기에 담(단)아서 주세요)
- 의사소통
- 피드백
- 존중
- 용기
- 단순성
- XP(eXtreme Programming) 12 실천사항
Pair Programming
Planning Game
Test Driven Development
Whole Team
Continuous Integration
Design Improvement
Small Releases
Coding Standards
Collective Code Ownership
Simple Design
System Metaphor
Sustainable Pace
- 5가지 핵심가치(의사 선생님 피존 용기에 담(단)아서 주세요)
- scrum : 스플린트 단위(2주, 4주)로 산출물을 만들어 냄, 매일 15분 정도의 짧은 회의
- FDD : 기능 위주의 개발
- lean
- crystal
- XP(eXtreme Programming, 익스트림 프로그래밍, 실용성 강조, 객체지향 o, 구조적 x, 소규모)
- 애자일 소프트웨어 개발 선언
- 공정과 도구보다 개인과 상호작용을
- 포괄적인 문서보다 작동하는 소프트웨어를
- 계약 협상보다는 고객과의 협력을
- 계획을 따르기보다는 변화에 대응하기를
- 객체지향 특징
- 캡슐화
- 정보은닉
- 상속 : private은 부모만 사용 가능(본인만)
- 다형성 - 오버로딩, 오버라이딩
- 추상화
- 객체지향 분석 기법(상향식, 디자인 패턴), 절차지향 분석 기법(하향식, 구조적)
- 객체지향 설계원칙(SOLID)
- 단일 책임 원칙 : 하나의 클래스는 하나의 역할만 수행해야 한다.
- 개방 폐쇄 원칙 : 클래스 수정에는 닫혀있고 클래스 확장에는 열려 있어야 한다.
- 리스코프 치환 원칙 : 상속 관계에서 자식이 부모 클래스를 대체할 수 있어야 한다.
- 인터페이스 분리 원칙 : 상관 없는 인터페이스와 관계를 맺지 않아야 한다.
- 의존성 역전 원칙 : 자주 바뀌는 클래스에 의존을 맺지 않아야 한다.
- 소프트웨어 아키텍처 패턴
- 계층화 패턴
- 클라이언트-서버 패턴 : 요청과 응답을 주고받음
- 마스터(1)-슬레이브(다) 패턴
- 실시간 시스템에서 사용
- 마스터(주) : 마스터만이 입출력 수행(비대칭 구조), 연산, 통신, 조정, 슬레이브 제어, 운영체제 수행
- 슬레이브(종) : 자료수집과 연산만 담당, 마스터에게 서비스를 요청, 사용자 프로그램만 담당
- 파이프-필터 패턴 : 노드와 간선으로 구성
- 브로커 패턴
- 피어투 피어 패턴 : 서로 연결되어 있음
- 이벤트-버스 패턴 : 버스를 통해 연결되어 있음
- 모델(DB)-뷰-컨트롤러 패턴
- 코드의 종류
- 순차코드 : 일정한 기준에 따라 순서대로 일련번호 부여
- 표의 숫자 코드 : 중량, 면적, 거리 등을 코드화 하는 방식
- 연상 코드 : 코드값을 보면 대상을 연상할 수 있는 코드
- 추가) 코드의 오류도 잘 나옴!
- GoF 디자인 패턴(잘 만들어 놓은 코드) 아래는 목적으로 분류한 것!
- 생성 패턴(각 종류 시험 직전에 기억하기!)
- (팩프추싱빌) -> 추상 팩토리, 빌더, 팩토리 메소드, 프로토 타입(시제품 만들기), 싱글톤
- 구조 패턴
- 어댑터(기존 클래스 재사용, 중간에서 맞춰주는), 브리지(연결, 분리하여 독립적), 프록시, 컴포지트, 데코레이터, 플라이웨이트, 퍼사드
- 행위 패턴
- 전략 패턴, 중재자, 커맨드, 옵서버, 상태, 반복자, 방문자, 책임 연쇄, 인터프리터, 메멘토, 템플릿 메소드
- 생성 패턴(각 종류 시험 직전에 기억하기!)
- 디자인 패턴(객체지향↔절차지향)의 구성 : 패턴 이름 및 유형, 문제 및 배경, 해결 방안, 사례, 결과, 샘플 코드
- 자료 흐름도의 구성 요소
- Process(프로세스) : 동그라미
- Data Flow(자료 흐름) : 화살표 / 시간의 흐름과는 관계 x
- Data Store(자료 저장소) : 작대기 두 개 =
- Terminator(단말) : 네모박스, 자료의 출처와 도착지를 표현
- 객체지향 분석 방법론
- Rumbaugh(럼바우) 방법(순서 기억 격(객)동기) ★★★★★★★★★★★★★
- 객체 모델링 - 객체 다이어그램
- 동적 모델링 - 상태 다이어그램
- 기능 모델링 - DFD(자료 흐름도, 시간의 흐름 x)
- Booch(부치) 방법: 미시적, 거시적 개발 프로세스 모두 사용
- Jacobson 방법 : Use Case 사용
- Coad와 Yourdon 방법 : E-R 다이어그램을 사용
- Rumbaugh(럼바우) 방법(순서 기억 격(객)동기) ★★★★★★★★★★★★★
- UML(그림 그리는 도구, 객체지향 모델링 언어)
- UML의 기본 구성 요소 : 사물(Things), 관계(Relationship), 다이어그램(Diagram)
- UML 다이어그램(종류 시험 직전에 기억하기!)
- 구조적(정적) 다이어그램
- 클래스 다이어그램 : 클래스의 속성, 메서드로 구성된 정적 다이어그램
- 컴포넌트 다이어그램 : 시스템의 구조와 관계를 보여주는 다이어그램
- 객체 다이어그램 : 인스턴스
- 컴포지트 구조 다이어그램 : 아키텍처 다이어그램
- 배치 다이어그램 : 컴포넌트들의 물리적 구성
- 패키지 다이어그램 : 관련있는 모델링 요소들을 그룹화
- 행위적(동적) 다이어그램
- 활동 다이어그램 : 활동의 흐름
- 유스케이스 다이어그램 : 사용자 관점에서 바라본 시스템을 표현
- 구성요소
- 시스템 : 개발하고자 하는 소프트웨어
- 액터
- 시스템과 상호작용 하는 외부 객체
- 서비스를 이용하는 외부 객체
- 시스템이 특정한 사례를 실행하도록 요구할 수 있는 존재,
- 대상 시스템과 상호 작용하는 사람
- ! 사용자 액터는 실제 사람, 사용자를 뜻한다.
- 유스케이스 : 행위
- 관계
- 연관 관계 : 실선
- 포함 관계(Include) << Include >> : 반드시 실행됨 ex) 아이디 중복체크
- 확장 관계(Extend) << extend >> : 특정 상황에서만 실행됨 ex) 프로필 사진
- 일반화 관계 : 상속 관계
- 추가) 접속 관계(다른 유스케이스 이용), 사용 관계(공통으로 수행해야 하는 기능을 모델링)
- 구성요소
- 상태 다이어그램 : 객체의 상태 변화
- 시퀀스 다이어그램(순차 다이어그램) : 시간적 흐름에 따른 메시지 교환, 동적
- 커뮤니케이션 다이어그램 : 객체들이 주고 받는 메시지 표현
- 구조적(정적) 다이어그램
- 소프트웨어 설계 분류
- 상위 설계(시스템 전체적인, 분석, 설계) : 아키텍처 설계, 데이터 설계, 인터페이스 정의, 사용자 인터페이스 설계
- 하위 설계(시스템 내부구조, 구현) : 모듈 설계, 자료 구조 설계, 알고리즘 설계
- 통합 설계
- 소프트웨어 설계 단계 : 계획(비용, 일정, 다양성) -> 분석(요구사항) -> 설계(상위 설계(왼쪽), 하위 설계(오른쪽)) -> 구현 -> Test -> 유지운영 (요구사항 분석과 설계 명세서 작성은 거리가 멀다)
- 추상화 기법 : 자료(데이터) 추상화, 제어 추상화, 기능 추상화, 과정 추상화 (추 / 자 제 과 기능)
- 소프트웨어 설계 모형 구조 : 데이터 설계, 아키텍처(구조) 설계, 인터페이스 설계, 절차(Procedure) 설계
- 자료 사전의 작성 규칙
- 자료사전 : 데이터를 상세하게 정의해 놓은 것
- = 정의
- + 연결
- () 생략
- {} 반복
- ** 설명
- UX(사용자 경험)을 토대로 더 편리하게 UI(화면)를 개선한다.
- UI 설계 원칙 : 직관성, 유효성, 학습성, 유연성
- 요구사항 명세 기법
- 정형 명세
- 수학, 논리학
- 명세 오류 및 모호성 쉽게 파악
- 어렵고 시간 소모 많음
- Z 명세 기법
- 비정형 명세
- 자연어, 그림 중심
- 사용자-개발자 의사전달이 용이
- 모호함
- 정형 명세
- 미들웨어의 종류
- RPC(Remote Procedure Call) : 원격 프로시저 호출
- MOM(Message Oriented Middleware) : 메시지 지향 미들웨어, 쌓아뒀다 처리함
- ORB(Object Request Broker) : 다른 시스템의 프로그램을 네트워크를 통해 호출할 수 있는 미들웨어
- DB 접속 미들웨어
- TP 모니터 : 트랜잭션의 상태를 볼 수 있음
- WAS : 동적인 것들 해결
- ESB : 메세지 버스
- 소켓 기술
- 통신을 위한 프로그램을 생성하여 포트를 할당하고, 클라이언트의 통신 요청 시 클라이언트와 연결하는 내외부 송수신 연계 기술
- telnet : 있는 그대로
- ssh(22번 소켓) : 암호화 됨
- 현행 시스템 분석
- 운영체제
- 네트워크
- DBMS
- 미들웨어
- 오픈소스(라이선스, 서비스 지속 가능성 등)
- 소프트웨어 공학의 3R
- 역공학 : 문서화
- 재공학 : 개선
- 재사용
- 시스템 품질 속성 : 가용성, 변경용이성, 성능, 보안성, 사용편의성, 시험용이성, 유지보수성, 이식성
- CASE(Computer-Aided Software Engineering) : 소프트웨어 개발 시에 컴퓨터가 도움을 주는 기술(소프트웨어 사용자~ -> x)
- 원천 기술 : 프로토타이핑 기술, 정보 저장소 기술, 구조적 기법
- 클래스(Class) 간 관계
- 일반화 관계 Generalization (상속)
- 실체화 관계 Realization (구현) : UML 모델에서 한 객체가 다른 객체에게 오퍼레이션을 수행하도록 지정하는 의미적 관계
- 의존 관계 Dependency (참조) - 일시적
- 연관 관계 Association - 장기적
- 직접 연관: 한 클래스가 다른 클래스를 참조하는 관계
- 집약 연관: 참조하는 객체나 클래스가 사용 후에도 유지되는 관계
- 합성 연관: 참조한 객체가 사라지면 참조하는 객체도 사라지는 관계
- 요구사항 도출 기법 : 인터뷰, 포커스 그룹, 집단창의력 기법, 이해관계자 설문조사, 관찰, 문헌 조사, 프로토타입, 벤치마킹, 사용자 스토리텔링
- 요구사항 개발 순서 : 도출 -> 분석 -> 명세(기록) -> 확인 (요 도 분 명 확)
- 요구사항 분석(구조적 방법론) : 자료흐름도(DFD), 자료사전(DD), 소단위 명세서(Mini-spec), ERD, STD
- 요구사항 검증(개발자가), 확인(고객이)
- 클래스 다이어그램
- 구성요소
- 클래스 이름
- 속성
- 메서드
- 접근 제어자
- + : public
- - : private
- # : protected
- 구성요소
- 투명성(나는 몰라도 되는) 조건
- 위치 투명성(Location), 분할 투명성, 지역사상 투명성, 중복 투명성(Replication), 병행 투명성(Concurrency), 장애 투명성(Failure)
- 정형 기술 검토(FTR)
- 의제의 범위 유지(의제를 제한)
- 참가자의 수, 논쟁과 반박을 제한
- 개발자가 아닌 제품의 검토에 집중
- 소프트웨어 패키징 : 사용자 중심으로 진행
- UI 설계 도구
- 목업(Mockup) : 와이어프레임보다 좀 더 실제 화면과 유사하게 만든 정적인 형태의 모형
- 스토리보드 : 와이어프레임 콘텐츠에 대한 설명, 페이지 간 이동 흐름 등을 추가한 문서
- 프로토타입 : 실제 구현된 것처럼 테스트가 가능한 동적인 형태의 모형
- 유스케이스 : 사용자가 원하는 목표를 달성하기 위해 수행할 내용을 기술
- 데이터 구현 시 사용하는 기술
- JSON
- 속성-값 쌍
- AJAX에서 많이 사용됨(AJAX - JavaScript를 사용한 비동기 통신 기술로, 클라이언트와 서버 간에 XML 데이터를 주고받는 기술)
- XML을 대체
- JSON
- MVC : 뷰(다) -> 컨트롤러(제어) -> 모델(1, 데이터/비즈니스 로직)
- FEP(Front-End Processor, 전위처리기)
- 협약에 의한 설계
- 클래스에 대한 여러 가정을 공유하도록 명세한 것이다.
- 선행조건, 결과조건, 불변조건이 있다.
- 소프트웨어 품질관리 방법
- 워크스루
- 목적 : 교육적 목적, 문서의 이해, 문제의 식별
- 문제 해결에 중점 x
- 검토 자료를 회의 전에 배포, 짧은 시간 회의
- 인스펙션
- 워크스루를 발전시킨 형태
- 문제 해결에 중점 o
- 워크스루
- 캡슐화
- 속성과 관련된 연을 클래스 안에 묶어서 하나로 취급하는 것을 의미한다.
- 결합도↓, 재사용성↑
- 소프트웨어 형상 관리 도구 : SVN, CVS, Git
빌드 자동화 도구 : Ant, Maven, Gradle - 간트 차트(Gantt Chart) : 작업에 필요한 자원은 고려 x
- SOA는 EAI의 구성요소가 아니다.
- 객체 : 데이터와 데이터를 처리하는 함수를 캡슐화한 하나의 모듈
캡슐화 : 데이터와 데이터를 조작하는 연산을 하나로 묶어 하나의 모듈 내에서 결합 되도록 하는 것 - 기능적 요구사항 : 실제로 어떻게 동작하는지에 관점
비기능적 요구사항 : 성능, 보안, 품질, 안전성 - 상향식 설계에서는 기능 추가가 어렵다.
- 이식(Migration) : 기존 소프트웨어 시스템을 새로운 기술 또는 하드웨어 환경에서 사용할 수 있도록 변환
재구성(Restructuring) : 소프트웨어 구조 향상을 위해 코드를 재구성하는 것 - feedback : 사용자가 명령에 대한 진행 상황과 표시된 내용을 해석할 수 있도록 도와주는 것