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
      • scrum : 스플린트 단위(2주, 4주)로 산출물을 만들어 냄, 매일 15분 정도의 짧은 회의
      • FDD : 기능 위주의 개발
      • lean
      • crystal
    • 애자일 소프트웨어 개발 선언
      • 공정과 도구보다 개인과 상호작용을
      • 포괄적인 문서보다 작동하는 소프트웨어를
      • 계약 협상보다는 고객과의 협력을
      • 계획을 따르기보다는 변화에 대응하기를
    • 객체지향 특징
      • 캡슐화
      • 정보은닉
      • 상속 : private은 부모만 사용 가능(본인만)
      • 다형성 - 오버로딩, 오버라이딩
      • 추상화
    • 객체지향 분석 기법(상향식, 디자인 패턴), 절차지향 분석 기법(하향식, 구조적)
    • 객체지향 설계원칙(SOLID)
      • 단일 책임 원칙 : 하나의 클래스는 하나의 역할만 수행해야 한다.
      • 개방 폐쇄 원칙 : 클래스 수정에는 닫혀있고 클래스 확장에는 열려 있어야 한다.
      • 리스코프 치환 원칙 : 상속 관계에서 자식이 부모 클래스를 대체할 수 있어야 한다.
      • 인터페이스 분리 원칙 : 상관 없는 인터페이스와 관계를 맺지 않아야 한다.
      • 의존성 역전 원칙 : 자주 바뀌는 클래스에 의존을 맺지 않아야 한다.
    • 소프트웨어 아키텍처 패턴
      • 계층화 패턴
      • 클라이언트-서버 패턴 : 요청과 응답을 주고받음
      • 마스터(1)-슬레이브(다) 패턴
        • 실시간 시스템에서 사용
        • 마스터(주) : 마스터만이 입출력 수행(비대칭 구조), 연산, 통신, 조정, 슬레이브 제어, 운영체제 수행
        • 슬레이브(종) : 자료수집과 연산만 담당, 마스터에게 서비스를 요청, 사용자 프로그램만 담당
      • 파이프-필터 패턴 : 노드와 간선으로 구성
      • 브로커 패턴
      • 피어투 피어 패턴 : 서로 연결되어 있음
      • 이벤트-버스 패턴 : 버스를 통해 연결되어 있음
      • 모델(DB)-뷰-컨트롤러 패턴
    • 코드의 종류
      • 순차코드 : 일정한 기준에 따라 순서대로 일련번호 부여
      • 표의 숫자 코드 : 중량, 면적, 거리 등을 코드화 하는 방식
      • 연상 코드 : 코드값을 보면 대상을 연상할 수 있는 코드
      • 추가) 코드의 오류도 잘 나옴!
    • GoF 디자인 패턴(잘 만들어 놓은 코드) 아래는 목적으로 분류한 것!
      • 생성 패턴(각 종류 시험 직전에 기억하기!)
        • (팩프추싱빌) -> 추상 팩토리, 빌더, 팩토리 메소드, 프로토 타입(시제품 만들기), 싱글톤
      • 구조 패턴
        • 어댑터(기존 클래스 재사용, 중간에서 맞춰주는), 브리지(연결, 분리하여 독립적), 프록시, 컴포지트, 데코레이터, 플라이웨이트, 퍼사드
      • 행위 패턴
        • 전략 패턴, 중재자, 커맨드, 옵서버, 상태, 반복자, 방문자, 책임 연쇄, 인터프리터, 메멘토, 템플릿 메소드
    • 디자인 패턴(객체지향↔절차지향)의 구성 : 패턴 이름 및 유형, 문제 및 배경, 해결 방안, 사례, 결과, 샘플 코드
    • 자료 흐름도의 구성 요소
      • Process(프로세스) : 동그라미
      • Data Flow(자료 흐름) : 화살표 / 시간의 흐름과는 관계 x
      • Data Store(자료 저장소) : 작대기 두 개 =
      • Terminator(단말) : 네모박스, 자료의 출처와 도착지를 표현
    • 객체지향 분석 방법론
      • Rumbaugh(럼바우) 방법(순서 기억 (객)동기) ★★★★★★★★★★★★★
        • 객체 모델링 - 객체 다이어그램
        • 동적 모델링 - 상태 다이어그램
        • 기능 모델링 - DFD(자료 흐름도, 시간의 흐름 x)
      • Booch(치) 방법: 미시, 거시적 개발 프로세스 모두 사용
      • Jacobson 방법 : Use Case 사용
      • Coad와 Yourdon 방법 : E-R 다이어그램을 사용
    • 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을 대체
    • MVC : 뷰(다) -> 컨트롤러(제어) -> 모델(1, 데이터/비즈니스 로직)
    • FEP(Front-End Processor, 전위처리기)
    • 협약에 의한 설계
      • 클래스에 대한 여러 가정을 공유하도록 명세한 것이다.
      • 선행조건, 결과조건, 불변조건이 있다.
    • 소프트웨어 품질관리 방법
      • 워크스루
        • 목적 : 교육적 목적, 문서의 이해, 문제의 식별
        • 문제 해결에 중점 x
        • 검토 자료를 회의 전에 배포, 짧은 시간 회의
      • 인스펙션
        • 워크스루를 발전시킨 형태
        • 문제 해결에 중점 o
    • 캡슐화
      • 속성과 관련된 연을 클래스 안에 묶어서 하나로 취급하는 것을 의미한다.
      • 결합도↓, 재사용성↑
    • 소프트웨어 형상 관리 도구 : SVN, CVS, Git
      빌드 자동화 도구 : Ant, Maven, Gradle
    • 간트 차트(Gantt Chart) : 작업에 필요한 자원은 고려 x
    • SOA는 EAI의 구성요소가 아니다.
    • 객체 : 데이터와 데이터를 처리하는 함수를 캡슐화한 하나의 모듈
      캡슐화 : 데이터와 데이터를 조작하는 연산을 하나로 묶어 하나의 모듈 내에서 결합 되도록 하는 것
    • 기능적 요구사항 : 실제로 어떻게 동작하는지에 관점
      비기능적 요구사항 : 성능, 보안, 품질, 안전성
    • 상향식 설계에서는 기능 추가가 어렵다.
    • 이식(Migration) : 기존 소프트웨어 시스템을 새로운 기술 또는 하드웨어 환경에서 사용할 수 있도록 변환
      재구성(Restructuring) : 소프트웨어 구조 향상을 위해 코드를 재구성하는 것
    • feedback : 사용자가 명령에 대한 진행 상황과 표시된 내용을 해석할 수 있도록 도와주는 것