[정보처리기사 실기] 정리본

BbickBbick_Develop·2022년 7월 17일
4

1단원 : 요구사항 확인

1. 소프트웨어 생명 주기

  • 소프트웨어를 개발하기 위한 과정을 각 단계별로 나눈 것
  • 나선형 모형, 폭포수 모형, 프로토타입 모형, 애자일 모형 존재
    • 나선형 모형 : 여러번의 SW 개발 과정을 거쳐 점진적으로 완벽한 최종 SW를 개발하는 모형
    • 폭포수 모형 : 고전적 생명 주기 모형
    • 프로토타입 모형 : 실제 개발될 소프트웨어에 대한 견본품을 만들어 최종 결과물을 예측
    • 애자일 모형
      • 특정한 개발 방법론 X, 요구사항 변화에 유연하게 대응, 일정한 주기 반복
      • 스크럼, XP, 칸반, 린, 기능중심개발(FDD) 등
      • 소프트웨어 공학 : 소프트웨어의 위기를 극복하기 위한 방안으로 연구된 학문
        • 여러가지 방법론과 도구, 관리 기법들을 통하여 소프트웨어의 품질과 생산성 향상을 목적
      • 스크럼
        • PO(백로그 담당), SM(가이드 역할), DT(그냥 일반 팀원)
        • 스프린트 계획 회의 -> 스프린트 -> 일일 스크럼 회의, 스프린트 검토 회의 -> 스프린트 회고
      • XP
        • 의사소통, 단순성, 용기, 존중, 피드백
        • XP 실천 방법
          • 페어 프로그래밍, 공동 코드 소유, 테스트 주도 개발, 전체 팀, 계속적 통합, 리팩토링, 소규모 릴리즈

2. 관리 시스템들

  • DBMS : 가용성, 성능, 기술 지원, 구축 비용, 상호 호환성
  • WAS(웹 어플리케이션 서버) : 가용성, 성능, 기술 지원, 구축 비용
  • 오픈 소스 : 라이선스 종류, 사용자 수, 기술의 지속 가능성

3. 요구사항

  • 소프트웨어가 어떤 문제를 해결하기 위해 제공하는 서비스에 대한 설명과 정상적으로 운영되는 데 필요한 제약 조건

  • 기능 요구사항

    • 시스템이 무엇을 하는지, 어떤 기능을 하는지 등에 대한 기능이나 수행과 관련된 요구 사항
  • 비기능 요구사항

    • 품질이나 제약사항과 관련된 요구사항
  • 요구사항 개발 프로세스

    • 도출

    • 분석

      • 개발 대상에 대한 사용자의 요구 사항을 이해하고 문서화 하는 활동
      • DFD : 자료의 흐름 및 변환 과정과 기능을 도형 중심으로 기술. 구조적 분석 기법에 이용
        • 프로세스, 자료 흐름, 자료 저장소, 단말로 구성
        • 자료 사전 : 정의(=), 연결(+), 생략( () ), 선택( [] ), 반복( {} ), 설명(**)
      • 분석용 CASE : 요구사항을 자동으로 분석하고, 요구사항 분석 명세서를 기술하도록 개발된 도구.
        • SADT, SREM(=RSL/REVS), PSL/PSA, TAGS
        • SADT : SoftTech社 개발. 시스템 정의/소프트웨어 요구사항 분석/시스템 및 소프트웨어 설계를 위한 도구
        • HIPO : 시스템 실행 과정인 입력, 처리, 출력의 기능을 표현한 것. 하향식 소프트웨어 개발을 위한 문서화 도구.
          • 고유 모듈로 분할하여 이들 간의 인터페이스를 계층 구조로 표현한 것을 HIPO Chart라고 함.
    • 명세

      • 분석된 요구사항을 바탕으로 모델 작성, 문서화
      • 정형 명세 기법 : VDM, Z, Petri-net, CSP
      • 비정형 명세 기법 : FSM, Decision Table, ER모델링, State Chart(SADT) 등
    • 확인

4. UML

  • UML은 시스템 개발 과정에서 참여자 상호 간의 의사소통이 원활하게 이루어지도록 표준화한 대표적 객체지향 모델링 언어
  • 구성 요소는 사물(Things), 다이어그램(Diagram), 관계(Relationships)
    • 다이어그램은 사물과 관계를 도형으로 표현한 것
      • 구조적 다이어그램
        • 클래스 다이어 그램
          • 클래스, 제약조건, 관계로 구성
          • 연관 클래스 : 연관 관계에 있는 두 클래스에 추가적으로 표현해야 할 속성이나 오퍼레이션이 있는 경우 생성하는 클래스
        • 객체 다이어그램 : 럼바우의 객체 지향 분석 기법, 인스턴스를 특정 시점의 객체와 객체 사이의 관계로 표현
        • 컴포넌트 다이어그램 : 구현 단계에서 사용, 컴포넌트 간의 관계나 컴포넌트 간의 인터페이스를 표현
        • 배치 다이어그램 : 구현 단계에서 사용, 물리적 요소의 위치
        • 복합체 구조 다이어그램 : 복합 구조
        • 패키지 다이어그램 : 유스케이스나 클래스 등의 모델 요소를 그룹화한 패키지들의 관계를 표현
          • 패키지, 객체, 의존관계
      • 행위 다이어그램
        • 유스케이스 다이어그램 : 시스템, 액터, 유스케이스, 관계로 구성됨.
          • 포함 관계(include) : 새롭게 만든 유스케이스 쪽으로 점선 화살표 연결
          • 확장 관계(exclude) : 원래 유스케이스 쪽으로 점선 화살표 연결
        • 시퀀스 다이어그램 : 시스템, 객체들의 메시지
          • 액터, 객체, 생명선, 실행 상자, 메시지, 객체 소멸, 프레임
        • 커뮤니케이션 다이어그램 : 객체들의 메시지, 객체들 간 연관 관계 표현(시퀀스와의 차이점)
          • 액터, 객체, 링크, 메시지
        • 상태 다이어그램 : 럼바우 동적 모델링 활용, 상호작용에 따라 상태 변화하는 것 표현
          • 상태, 시작 상태, 종료 상태, 상태 전환, 이벤트, 프레임
        • 활동 다이어그램 : 객체 처리 로직이나 조건에 따른 처리 흐름(조건노드 등)
          • 액션, 액티비티, 시작노드, 종료노드, 조건 노드(나가는 게 2 이상), 병합 노드(들어오는 게 2 이상), 포크 노드(네모, 나가는 게 2 이상), 조인 노드(네모, 들어오는 게 2 이상), 스윔 레인(주체 구분선)
        • 상호작용 개요 다이어그램, 타이밍 다이어그램 : 이름 그대로 쓰면 됨.
    • 관계는 사물과 사물 사이의 연광성을 표현한 것
      • 연관 관계 : Association, 실선 연결, 서로 관련되어 있는 관계(사람-집)
      • 집합 관계 : Aggregation, 속이 빈 마름모, 포함되어 있는 관계(컴퓨터-마우스)
      • 포함 관계 : Composition, 속 찬 마름모, 포함하는 사물 변화가 포함되는 사물에게 영향을 미치는 관계(문-키)
      • 일반화 관계 : Generalization, 속이 빈 화살표, 하나의 사물이 다른 사물에 비해 더 일반적이거나 구체적인 관계(커피 - 아메리카노, 에스프레소)
      • 의존 관계 : Dependency, 점선 화살표, 서로에게 영향을 주는 짧은 시간 동안만 연관을 유지하는 관계(등급-할인율)
      • 실체화 관계 : 속이 빈 점선 화살표, 사물이 할 수 있거나 해야하는 기능(날 수 있다-새, 비행기)
  • 럼바우, 부치, 제이콥슨 등의 객체지향 방법론의 장점을 통합함.
  • 스테레오 타입 : UML에서 표현하는 기본 기능 외에 추가적인 기능을 표현하는 것(<<>> 내에 표현할 형태를 기술)

5. 개발 방법론

  • 객체지향 방법론 : 개체를 하나의 객체로 만들어 이 객체들을 조립해서 필요한 SW를 구현하는 방법론
    • 요구사항 분석-설계-구현-테스트-유지보수(인도)
  • 컴포넌트 기반 방법론 : 기존의 시스템이나 SW를 구성하는 컴포넌트를 조합하여 하나의 새로운 App을 제작
    • 개발 준비-분석-설계-구현-테스트-전개-인도
  • 소프트웨어 재사용 : 이미 개발되어 인정받은 소프트웨어를 다른 소프트웨어 개발이나 유지에 사용하는 것
    • 합성 중심 : 블록을 끼워 맞춰 소프트웨어를 완성(블록 구성 방법이라고도 함)
    • 생성 중심 : 추상화 형태로 써진 명세를 구체화하여 프로그램을 만드는 방법(패턴 구성 방법이라고도 함)
  • 소프트웨어 재공학 : 기존 시스템을 이용하여 나은 시스템을 구축, 새로운 기능 추가로 SW 성능 향상
  • CASE : SW 개발 과정에서 사용되는 과정 전체 또는 일부를 컴퓨터와 전용 SW 도구를 사용하여 자동화!
    • 소프트웨어 생명 주기 전 단계 연결, 그래픽 지원, 다양한 SW 개발 모형 지원
  • 비용 산정 기법
    • 하향식 비용 산정 기법
      • 전문가 감정 기법, 델파이 기법
    • 상향식 비용 산정 기법
      • LOC : 낙+중*4+비/6
        • COCOMO : 보헴 제안, LOC에 의함. Man-Month로 나타냄.
          • COCOMO 유형 : 조직형(5만 이하), 반분리형(30만 이하), 임베디드형
      • 수학적 산정 기법
        • Putnam : 노력 분포를 예상. Rayleigh-Nordon 곡선 노력 분포도가 기초. 푸트남이 제안. 생명 주기 예측 모형
        • 기능 점수 모형 : 소프트웨어의 기능을 증대시키는 요인 별로 가중치 부여, 기능 점수 구한 후 비용 산정.
          • 자료 입력(입력 양식), 정보 출력(출력 보고서), 명령어(사용자 질의수), 데이터 파일, 외부 루틴과의 인터페이스
    • 비용 산정 자동화 추정 도구 : SLIM(Rayleigh-Norden + Putnam), ESTIMACS(FP 모형)
    • PERT : 전체 작업의 상호 관계를 표시하는 네트워크(낙관, 가능성, 비관으로 종료 시기 결정)
    • CPM : 필요한 작업 나열, 작업에 필요한 소요 기간 예측. 임계 경로(최장 경로) 찾기
    • 간트 차트 : 시간선 차트. 막대 도표를 이용하여 작업 일정을 표시하는 프로젝트 일정표.
  • 소프트웨어 생명 주기 표준 및 평가 모델
    • ISO/IEC 12207 : 생명 주기 프로세스. 기본, 지원, 조직으로 나눔.
    • CMMI : 초기, 관리, 정의, 정량적 관리, 최적화(초관정정최)로 나눠 업무 능력 및 조직 성숙도를 평가
    • SPICE : ISO/IEC 15504, 소프트웨어의 품질 및 생산성 향상을 위해 소프트웨어 프로세스를 평가.
      • 불완전, 수행, 관리, 확립, 예측, 최적화
  • 테일러링 : 소프트웨어 개발 방법론의 젗라, 사용기법 등을 수정 및 보완하는 작업
    • 내부적 기준 : 목표 환경, 요구사항, 프로젝트 규모, 보유 기술
    • 외부적 기준 : 법적 제약사항, 표준 품질 기준
  • 개발 프레임워크 : SW 개발에 공통적으로 사용되는 구성 요소와 아키텍처를 일반화 -> 반제품 형태의 SW 시스템
    • 스프링 : 자바를 위한 Open Source 경량형 App Framework
    • 특성 : 모듈화, 재사용성, 확장성, 제어의 역흐름

2단원 : 데이터 입출력 구현

1. 데이터 전반

  • 데이터 전환 : 데이터를 추출하여 새로 개발할 정보 시스템에서 운영할 수 있도록 변환한 후 적재하는 과정
  • 데이터 검증 : 원래 데이터를 목적 시스템의 데이터로 전환하는 과정이 정상적으로 수행되었는지 확인
  • 오류 데이터 측정 및 정제 : 데이터 품질 분석 -> 오류 데이터 측정 -> 오류 데이터 정제

2. 데이터베이스

데이터 베이스 기초 및 설계

  • 공동으로 사용될 데이터를 중복을 배제하여 통합하고, 저장장치에 저장하여 항상 사용할 수 있도록 운영하는 데이터

    • 통합된 데이터, 저장된 데이터, 운영 데이터, 공용 데이터로 구분
  • DBMS : 사용자의 요구에 따라 정보를 생성, DB를 관리해주는 소프트웨어

    • 정의기능, 조작기능, 제어기능 존재(DDL, DML, DCL)
  • 스키마 : 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세

    • 외부 스키마 : 각 개인의 입장에서 필요로 하는 DB의 논리적 구조의 정의
    • 개념 스키마 : DB의 전체적인 논리적 구조, 하나만 존재.
    • 내부 스키마 : 물리적 저장장치의 입장에서 본 DB 구조
  • DB 설계 순서 : 요구 조건 분석 -> 개념 -> 논리 -> 물리 -> 구현

    • 개념적 설계 : 현실 세계에 대한 인식을 추상적 개념으로 표현하는 과정
    • 논리적 설계 : 현실의 자료를 특정 DBMS가 지원하는 논리적 자료 구조로 변환(Mapping)하는 과정
    • 물리적 설계 : 논리적 구조의 데이터를 물리적 구조의 데이터로 변환
  • 데이터 모델 : 현실 세계의 정보를 체계적으로 표현한 개념적 모형

    • 구조 : 데이터 구조 및 정적 성질 표현
    • 연산 : 실제 데이터를 처리하는 작업에 대한 명세
    • 제약 조건 : 논리적인 제약 조건
  • 개체 : 데이터베이스에 표현하려는 것. 현실 세계의 대상체

    • 유일한 식별자에 의해 식별
  • 관계 : 1:1, 1:N, N:M으로 구별

  • E-R 모델 : 현실 세계의 무질서한 데이터를 개념적인 논리 데이터로 표현하기 위한 방법

    • 사각형(개체), 마름모(관계), 타원(속성), 이중 타원(다중 속성), 밑줄 타원(기본키), 복수 타원(복합 속성), 관계, 선/링크
  • 관계형 DB의 릴레이션 구조

    • 속성(애트리뷰트)(학번, 이름, 학년...), 튜플(가로줄 하나), 도메인(속성의 자료값의 집합)
    • 릴레이션 스키마(속성의 집합) + 릴레이션 인스턴스(실제 값)으로 구성
    • 튜플의 수를 카디널리티 또는 기수, 대응수라고 함
    • 속성의 수를 디그리 또는 차수라고 함
  • 후보키, 기본키, 대체키, 슈퍼키, 외래키

    • 후보키는 유일성과 최소성을 모두 만족, 기본키는 후보키 중에 나옴. 나머지 후보키는 대체키
    • 슈퍼키는 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키(최소성 만족X, 유일성은 만족)
    • 외래키는 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합
  • 무결성 : 참조 무결성과 개체 무결성

    • 참조 무결성 : 외래키 값은 Null or 참조 릴레이션의 기본키 값과 동일. 참조 X하는 외래키는 불가.
    • 개체 무결성 : 기본키는 Not Null, 중복 X
  • 관계대수 : 원하는 정보와 그 정보를 검색하기 위해서 어떻게 유도하는가를 기술하는 절차적인 언어

    • 관계연산자
      • Select : 시그마(수평 연산, 튜플의 부분집합을 구함)
      • Project : 파이(수직 연산, 애트리뷰트의 부분집합을 구함)
      • Join : 애도리본(두 개의 릴레이션을 합침. 커티시언 프로덕트 후 셀렉트)
      • Division : 나누기(R+S 할 때 R-S한 속성을 구하는 연산)
    • 일반 집합 연산자
      • 합집합 = U
      • 교집합 = 뒤집은 U
      • 차집합 = -
      • 교차곱 = X
  • 관계해석 : 관계 데이터의 연산을 표현하는 방법

이상과 정규/반정규화

  • 이상 : 삽입 이상, 삭제 이상, 갱신 이상
    • 삽입 이상 : 삽입 불가되는 현상
    • 삭제 이상 : 상관없는 값도 함께 삭제
    • 갱신 이상 : 일부 튜플의 정보만 갱신, 정보에 불일치성이 생김
  • 함수적 종속과 정규화 :
    • 제 1 정규화 : 도메인이 모두 원자값
    • 제 2 정규화 : 부분적 함수 종속 제거
    • 제 3 정규화 : 이행적 함수 종속 제거
    • BCNF : 결정자이면서 후보키가 아닌 것 제거
    • 제 4 정규화 : 다치 종속 제거
    • 제 5 정규화 : 조인 종속성 이용
  • 반정규화 : 정규화된 데이터 모델을 의도적으로 통합/중복/분리하여 정규화 원칙을 위배하는 행위
    • 중복 테이블 추가
      • 집계 테이블 : 집계 데이터를 위한 테이블 생성 + 트리거 설정
      • 진행 테이블 : 이력 관리
      • 특정 부분만을 포함하는 테이블 추가
  • 시스템 카탈로그 : 다양한 객체에 관한 정보를 포함하는 Sys DB

트랜잭션

  • 트랜잭션 : 작업 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산(논리적 기능을 수행하기 위함)
    • 원자성, 일관성, 독립성, 영속성
  • CRUD 분석 : 프로세스와 테이블 간에 CRUD 매트릭스를 만들어서 트랜잭션을 분석하는 것
  • INDEX : 데이터 레코드를 빠르게 접근하기 위해 <키 값, 포인터> 쌍으로 구성되는 데이터 구조
  • 클러스티드/넌 클러스티드 인덱스
    • 클러스티드 인덱스 : 키의 순서에 따라 데이터도 정렬
    • 넌 클러스티드 인덱스 : 키 값만 정렬, 데이터는 정렬 X
  • 뷰 : 하나 이상의 기본 테이블로부터 유도된 가상 테이블(CREATE와 DROP 문 사용)
  • 파티션 : 대용량의 테이블이나 인덱스를 작은 논리적 단위로 나눈 것
    • 범위 분할 : 월별, 일별
    • 해시 분할 : 고객번호, 주민번호같이 데이터가 고른 칼럼에 효과적
    • 조합 분할 : 범위 분할로 분할하고 다시 해시 함수 적용
  • 분산 데이터베이스의 목표
    • 위치 투명성 : 단지 논리적 명칭으로 액세스
    • 중복 투명성 : 마치 하나의 데이터처럼
    • 병행 투명성 : 다수 트랜잭션이 동시 실현해도 결과 영향 X
    • 장애 투명성 : 장애에도 불구하고 트랜잭션 명확히.

3. 데이터 복구 및 보안

  • RTO/RPO : Recovery Time Objective 목표 복구 시간, Recovery Point Objective 목표 복구 시점
  • 암호화 : 암호화와 복호화 과정을 거침. 개인키 암호 방식과 공개키 암호 방식으로 나뉨.
  • 접근 통제
    • 임의 접근 통제(DAC) : 사용자 신원에 따라 접근 권한 부여
    • 강제 접근 통제(MAC) : 주체와 객체 등급 비교 후 접근 권한 부여
    • 역할 기반 접근 통제(RBAC) : 사용자 역할에 따라 접근 권한 부여
  • 스토리지 : 대용량 데이터 저장하기 위해 서버와 저장장치 연결하는 기술
    • DAS : 전용 케이블로 직접 연결
    • NAS : 네트워크 통해 연결
    • SAN : DAS의 빠른 처리와 NAS의 파일 공유 장점 혼합. 전용 네트워크 별도 구성

4. 자료구조

  • 선형 구조
    • 배열 : 크기와 형이 동일한 자료들이 순서대로 나열. 정적인 자료 구조
    • 선형 리스트
    • 스택 : LIFO
    • 큐 : FIFO
    • 데크
  • 비선형 구조
    • 그래프 : 정점과 간선의 두 집합, 방향과 무방향 그래프로 나뉨
      • 최대 간선수 : 방향 그래프는 N(N-1), 무방향 그래프는 N(N-1)/2
    • 트리 : 사이클 없는 그래프
      • 맨 위에 있는 노드는 루트 노트
      • 각 노드에서 뻗어나온 가지의 수는 디그리
      • 자식이 하나도 없는 노드는 단말 노드
      • 레벨은 근 노드가 레벨 1
      • 깊이는 노드가 가질 수 있는 최대의 레벨
      • Preorder : 루트->왼->오른
      • Inorder : 왼->루트->오른
      • Postorder : 왼->오른->루트

정렬은 생략함


3단원 : 통합 구현

1. 통합 구현

  • 통합구현 : 송수신 모듈과 중계 모듈 간 연계를 구현하는 것
    • 송수신 시스템, 모듈, 중계시스템, 연계데이터, 네트워크로 구성
  • 연계 매커니즘 : 데이터 생성 및 추출 -> 코드 매핑 및 데이터 변환 -> 인터페이스 테이블 또는 파일 생성 -> 연계 서버 또는 송신 어댑터
    • 연계 매커니즘의 연계 방식 : 직접 연ㄱ녜 방식, 간접 연계 방식
  • 연계 서버/송, 수신 시스템 :
    • 송신 시스템은 인터페이스 테이블 또는 파일의 데이터를 전송 형식에 맞도록 변환 및 송신을 수행하는 시스템
    • 수신 시스템 : 수신 데이터를 인터페이스 테이블이나 파일로 생성하는 시스템
    • 연계 서버는 모든 처리를 수행.
  • 연계 테스트 : 케이스 작성 -> 환경 구축 -> 수행 -> 검증
  • 연계 데이터 보안 : 전송 구간 보안과 데이터 자체를 보안하는 것으로 나뉨
  • XML : 특수한 목적을 갖는 마크업 언어를 만드는 데 사용되는 다목적 마크업 언어, 웹브라우저 간 HTML 문법이 호환되지 않는 문제와 SGML의 복잡함을 해결하기 위해 개발.
  • SOAP : 네트워크 상에서 HTTP/HTTPS, SMTP 등을 이용하여 XML을 교환하기 위한 통신 규약
  • WSDL : 웹서비스와 관련된 서식이나 프로토콜 등을 표준적인 방법으로 기술하고 게시하기 위한 언어

4단원 : 서버 프로그램 구현

1. 개발 환경

  • 개발 환경 구축 : 개발 프로젝트를 이해하고 SW 및 HW 장비를 구축

  • 하드웨어 환경 : Web Server, WAS, DB Server, File Server

  • 소프트웨어 환경 : 시스템 소프트웨어(OS, 서버 프로그램, DBMS) + 개발 소프트웨어

  • 웹 서버 기능 : HTTP/HTTPS 지원, 통신 기록, 정적 파일 관리, 대역폭 제한, 가상 호스팅(하나의 서버로 여러개 도메인 연결), 인증

  • 개발 언어 선정 기준 : 적정성, 효율성, 이식성, 친밀성, 범용성

2. 개발 패턴과 방법

  • 소프트웨어 아키텍처 : SW를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체

    • 품질 속성 : 시스템, 비즈니스, 아키텍처 측면으로 나뉨
  • 모듈화 : 시스템의 기능들을 모듈 단위로 나누는 것

  • 추상화 : 전체적이고 포괄적인 개념 설계 후 차례로 세분화해서 구체화시킴

    • 과정 추상화, 자료 추상화, 제어 추상화로 나뉨
  • 단계적 분해 : 상위의 중요 개념으로부터 하위의 개념으로 구체화 시킴

  • 정보 은닉 : 한 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 함

  • 상위 설계와 하위 설계

    • 상위 설계 : 아키텍처, 예비 설계 / 구조, DB, 인터페이스를 설계
    • 하위 설계 : 모듈, 상세 설계 / 컴포넌트, 자료구조, 알고리즘을 설계
  • 협약에 의한 설계 : 컴포넌트 설계 시 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것

    • 선행 조건, 결과 조건, 불변 조건
  • 아키텍처 패턴 : 전형적인 해결 방식 및 예제

    • 레이어 패턴 : 계층으로 구분하여 구성

    • 클라이언트-서버 패턴 : 하나의 서버-여러개의 클라이언트 컴포넌트

    • 파이프-필터 패턴 : 데이터 스트림 절차의 각 단계를 필터로 캡슐화, 파이프 통해 전송 / 대표적으로 UNIX 쉘

    • MVC 패턴 : 모델, 뷰, 컨트롤러로 구성

    • 마스터-슬레이브 패턴 : 장애 허용/병렬 컴퓨팅 시스템

    • 브로커 패턴 : 분산 환경 시스템, 사용자가 원하는 서비스와 특성을 브로커에 요청 -> 브로커가 연결

    • 피어-투-피어 : 하나의 컴포넌트가 클라이언트 or 서버 둘다 가능(파일 공유 네트워크)

    • 이벤트-버스 패턴 : 소스가 이벤트 메시지를 발행(퍼블리시)하면, 구독한 리스너들이 이벤트를 처리(알림 서비스)

    • 블랙보드 패턴 : 모든 컴포넌트들이 블랙보드 & 공유 데이터 저장소에 접근 가능(음성 인식, 차량 식별 등)

    • 인터프리터 패턴 : 각 라인을 수행하는 방법을 지정, 기호마다 클래스를 갖도록 구성(번역기, 컴파일러, 인터프리터)

3. 객체 지향

  • 객체 지향 : SW의 각 요소를 객체로 만든 후 그 객체를 조립해 SW를 개발하는 기법
    • 객체 : 데이터 + 함수
    • 클래스 : 공통된 속성 및 연산을 갖는 객체 집합
    • 메시지 : 객체의 동작이나 연산을 일으키는 외부의 요구 사항
    • 캡슐화 : 외부 접근 제한, 세부내용 은닉
    • 상속 : 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려 받는 것
    • 다형성 : 각각 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 것
    • 연관성 : 두 개 이상의 객체들이 상호 참조하는 관계
      • is member of : 연관화, 상호 관련
      • is instance of : 분류화, 동일한 특성
      • is part of : 집단화, 하나의 상위 객체를 구성
      • is a : 일반화, 특수화/상세화
  • 객체 지향 분석 : 객체, 속성, 연산, 관계 등을 정의하여 모델링하는 작업
    • 방법론
      • 럼바우 : 객동기
        • 객체 모델링 = 정보 모델링 : 객체 다이어그램으로 표시
        • 동적 모델링 : 동적인 행위 표현
        • 기능 모델링 : 자료 흐름도 이용
      • 부치 : 미시,거시
      • 제이콥슨 : 유스케이스
      • 코드와 요르돈 : E-R 다이어그램
      • Wirfs-Brock : 분석과 설계 간 구분 없음
  • SOLID : SRP(단일 책임), OCP(개방-폐쇄), LSP(리스코프 치환), ISP(인터페이스 분리), DIP(의존 역전)

4. 모듈

  • 모듈 : 모듈화를 통해 분리된 시스템의 각 기능
  • 결합도 : 자스제외공내
    • 내용(Content) : 직접 참조
    • 공통(Common) : 공통 데이터 영역
    • 외부(External) : 외부 다른 모듈
    • 제어(Control) : 제어 요소를 전달
    • 스탬프(Stamp) : 자료구조
    • 자료(Data) : 자료 요소로만 구성
  • 응집도 : 우논시절교순기
    • 우연(Coincidental) : 서로 관련 없음
    • 논리(Logical) : 유사한 성격이나 특정 형태
    • 시간적(Temporal) : 특정 시간
    • 절차(Procedural) : 순차적으로 수행
    • 통신(Communication) : 동일한 입출력
    • 순차적(Sequential) : 하나의 출력이 그 다음 입력
    • 기능(Functional Cohesion) : 모든 기능 요소
  • 팬인/팬아웃 : 팬아웃은 나가는 화살표 숫자 팬인은 들어오는 숫자
  • N-S 차트 : 논리의 기술에 중점을 두고 도형을 이용해 표현하는 방법
  • 단위 모듈 : 한 가지 동작을 수행하는 기능을 모듈로 구현한 것
  • IPC : 모듈 간 통신 방식을 구현하기 위해 사용되는 대표적 프로그래밍 인터페이스 집합
    • 대표 메소드 : 공유 메모리, 소켓, 세마포어, 파이프와 네임드 파이프, 메시지 큐잉

5. 테스트

  • 테스트 케이스 : 소프트웨어가 요구사항을 정확하게 준수했는지 확인하기 위핸 테스트 항목에 대한 명세서

  • 공통 모듈 명세 기법의 종류:

    • 정확성, 명확성, 완전성(모든 것을 기술), 일관성(상호 충돌 안나게 작성), 추적성
  • 재사용 : 이미 개발된 기능들을 새로운 시스템이나 기능 개발에 사용하기 적합하도록 최적화하는 작업

    • 함수와 객체 단위
    • 컴포넌트 단위
    • 애플리케이션 단위
  • 코드 주요 기능 : 식별, 분류, 배열, 표준화, 간소화

    • 종류

      • 순차 코드 1 2 3 4

      • 블록 코드 1001~1100

      • 10진 코드 1000 : 공학, 2000 : 문학...

      • 그룹 분류 코드 1-01-001 : 본사-총무부-인사계

      • 연상 코드 TV-40 40인치 TV

      • 표의 숫자 코드 120-720-1500 : 두께X폭X길이

      • 합성 코드 : 연상코드 + 순차코드 등 2개 이상 코드 조합(KE-711 댄공 711기)

6. 디자인 패턴

  • 디자인 패턴 : 모듈 간의 관계 및 인터페이스를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
    • 생성
      • 추상 팩토리 : 연관 서브 클래스, 서로 연관-의존하는 객체 그룹
      • 빌더 : 객체의 생성 과정과 표현 방법을 분리, 인스턴스 건축하듯 조합
      • 팩토리 메소드 : 가상 생성자 패턴, 객체 생성을 서브 클레스에서 처리하도록 분리해 캡슐화
        • 상위 클래스에서 인터페이스만 정의, 실제 생성은 서브 클래스 담당
      • 프로토타입 : 원본 객체를 복제해 객체 생성, 비용 큰 경우
      • 싱글톤 : 인스턴스가 하나뿐임을 보장. 생성된 객체를 어디서든 참조
    • 구조
      • 어댑터 : 호환성이 없는 클래스의 인터페이스를 다른 클래스가 이용할 수 있도록 변환
        • 기존 클래스 이용 원하지만 인터페이스가 일치하지 않을 때 이용
      • 브리지 : 구현부에서 추상층을 분리, 기능과 구현을 두 개의 별도 클래스로 구현
      • 컴포지트 : 복합 객체와 단일 객체를 구분없이 다루고자 사용. 객체를 트리 구조로 구성
      • 퍼케이드 : Wrapper 객체 필요. 서브 클래스 상위에 인터페이스 구현. 서브클래스 기능 간편 사용
      • 플라이웨이트 : 가능한 한 공유해서 사용해 메모리 절약. 다수의 유사 객체를 생성하거나 조작할 때 유용
      • 프록시 : 접근이 어려운 객체와 여기에 연결하려는 객체 사이에서 인터페이스 역할 수행. 네트워크 연결 등에 사용
    • 행위는 생략

7. 기타

  • 서버 개발 프레임워크 : 대부분 MVC 기반.
    • CodeIgniter : PHP 기반.
    • Ruby on Rails : Ruby 기반
  • API : 라이브러리를 이용할 수 있도록 규칙 등을 정의해 놓은 인터페이스
    • 공개 API를 Open API라고 함
  • 배치 프로그램 : 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하도록 만든 프로그램
    • 대용량 데이터, 자동화, 견고성, 안정성/신뢰성, 성능이 꼭 필요
    • 배치 스케줄러 : 스프링 배치, Quartz, Cron이 있음

7단원 : 애플리케이션 테스트 관리

1. 애플리케이션 테스트

테스트 종류

  • 애플리케이션 테스트 : 결함 찾아내는 행위 또는 절차

    • 검증 테스트 : 개발자 입장에서 테스트
    • 확인 테스트 : 사용자 입장에서 테스트
    • 기본 원리 :
      • 파레토 법칙 : 20-80, 일부에 집중됨
      • 살충제 패러독스 : 동일한 TC로 여러 번 테스트하다보면 결함이 더 이상 발견되지 않음
      • 오류-부재의 궤변 : 결함이 없어도 요구사항 만족 못하면 품질 높은 것 아님
  • 테스트 기반에 따른 테스트

    • 명세 기반 테스트
      • 동등 분할, 경계값 분석
    • 구조 기반 테스트
      • 구문 기반, 결정 기반, 조건 기반
    • 경험 기반 테스트
      • 에러 추정, 체크 리스트, 탐색적 테스팅
  • 목적에 따른 테스트

    • 회복 테스트 : 여러가지 결함을 주고 복구되는지 확인
    • 안전 테스트 : 침입으로부터 보호하는지 확인
    • 강도 테스트 : 과부하
    • 성능 테스트 : 응답시간, 처리량 테스트
    • 구조 테스트 : 논리 경로, 복잡도 평가
    • 회귀 테스트 : 변경 또는 수정시 결함 없는지 확인. 이미 테스트된 프로그램의 테스팅을 반복.
    • 병행 테스트 : 변경 후와 변경 전 소프트웨어에 동일한 데이터 입력하고 비교
  • 정적 테스트 : 프로그램 실행 X

    • 워크스루
    • 인스펙션
  • 동적 테스트 : 프로그램 실행

    • 화이트박스 테스트 : 원시 코드를 오픈, 모든 논리적 경로를 테스트
      • 기초 경로 검사
      • 제어 구조 검사
        • 조건 검사, 루프 검사, 데이터 흐름 검사
      • 검증 기준
        • 분기 검증 기준 = 결정 검증 기준 : 모든 조건문 True와 False인 경우를 모두 한 번 씩 수행
        • 조건 검증 기준 : 개별 조건식 결과를 확인
    • 블랙박스 테스트 : 기능 테스트라고도 함. 사용자의 요구사항 명세를 보면서 테스트.
      • 동치 분할 검사 : 타당한 입력 자료와 타당하지 않은 입력 자료 개수를 균등하게 입력
      • 경계값 분석 : 조건의 경계값을 테스트
      • 원인-효과 그래프 검사 : 입력과 출력 모두를 체계적으로 분석해 효용성이 높은 TC를 선정해 검사
      • 오류 예측 검사 : 경험에 의한 검사
      • 비교 검사 : 여러 버전의 프로그램에 동일한 TC를 제공(병행 테스트와 비슷)
  • 개발 단계에 따른 테스트

    • 단위 테스트 : 모듈이나 컴포넌트에 초점을 맞춰 테스트, 구조 기반 테스트를 주로 시행
    • 통합 테스트 : 단위 테스트가 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트
      • 비점진적 통합 방식 : 모든 모듈이 미리 결합되어 있는 프로그램 전체를 테스트
      • 점진적 통합 방식 : 모듈 단위로 단계적으로 통합
        • 하향식 통합 : 상위 모듈에서 하위 모듈 방향으로 통합. 제어 모듈의 종속 모듈은 스텁으로 대체
        • 상향식 통합 : 하위->상위, 더미 모듈인 드라이버를 작성. 하위 모듈은 클러스터로 결합
        • 혼합식 통합 = 샌드위치식 통합 : 하위 수준에서는 상향, 상위 수준에서는 하향.
    • 시스템 테스트 : 개발된 소프트웨어가 완벽하게 수행되는가를 점검
    • 인수 테스트 : 사용자의 요구사항을 충족하는 지 점검
      • 알파 테스트 : 사용자가 개발자 앞에서 행하는 테스트, 통제된 환경
      • 베타 테스트 : 실업무를 가지고 사용자가 직접 테스트

테스트 케이스

  • 테스트 케이스 : 테스트 항목에 대한 명세서. 사용자의 요구사항을 정확하게 준수했는지 확인하기 위해 설계.

  • 테스트 시나리오 : 테스트 케이스 묶은 집합

  • 테스트 오라클 : 사전에 정의된 참값을 대입하여 비교하는 기법

    • 참, 샘플링, 휴리스틱(추정), 일관성(변경 있을 때 수행 전과 수행 후 결과 값 동일한지 확인)
  • 테스트 자동화 도구

    • 정적 실행 도구
    • 테스트 실행 도구 : 스크립트 언어 사용
    • 성능 테스트 도구 : 처리량, 응답 시간, 경과 시간, 자원 사용률 테스트
      • JMeter(다양한 프로토콜 지원), LoadUI(Drag&Drop 등 편리성 강화), OpenSTA
    • 테스트 통제 도구
    • 테스트 하네스 도구 : 애플리케이션의 컴포넌트 및 모듈을 테스트 하기 위해 생성된 코드와 데이터
      • 드라이버, 스텁, 슈트, 케이스, 스크립트, 목 오브젝트로 구성

결함

  • 결함 : 개발자가 설계한 것과 다르게 동작하거나 다른 결과가 발생되는 것
  • 결함 상태 추적 : 테스트에서 발견된 결함은 지속적으로 상태 변화를 추적하고 관리
    • 분포, 추세, 에이징을 측정해 추적
  • 결함 분류 : 시스템 결함, 기능 결함, GUI 결함, 문서 결함
  • 결함 심각도 : High, Medium, Low / Critical, Major, Normal, Minor, Simple
  • 결함 우선순위 : Critical, High, Medium, Low / 즉시 해결, 주의 요망, 대기, 개선 권고

모니터링

  • 시스템 모니터링 : 자원 사용량 확인 및 분석 도구
    • Scouter, Zabbix
  • 복잡도/시간 복잡도
    • 빅 오 표기법
  • 순환 복잡도 : 논리적인 복잡도를 측정하기 위한 소프트웨어
    • V(G) = E-N+2(화살표 수-노드 수+2)

최적화

  • 소스 코드 최적화 : 클린 코드로 작성하는 것
    • 클린 코드 작성 원칙 : 가독성, 단순성, 의존성 배제, 중복성 최소화, 추상화
  • 나쁜 코드의 예
    • 스파게티 코드 : 코드의 로직이 서로 복잡하게 얽힘
    • 외계인 코드 : 아주 오래되거나 참고문서/개발자가 없어 유지보수가 어려운 코드
  • 소스 코드 품질 분석 도구
    • 정적 분석 도구 : pmd, cppcheck, SonarQube, checkstyle 등
    • 동적 분석 도구 : Avalanche, Valgrind 등

9단원 : 소프트웨어 개발 보안 구축

  • Secure SDLC : SDLC + 보안

    • CLASP : SDLC의 초기 단계에서 보안 강화하기 위해 개발된 방법론
    • SDL : MS社에서 제안한 방법론
    • Seven Touchpoints : 모범사례를 SDLC에 통합한 방법론
  • 소프트웨어 개발 보안 요소

    • 기밀성 : 인가된 사용자에게만 접근 허용, 전송 중 노출되어도 데이터 읽기 불가
    • 무결성 : 인가된 사용자만 수정 가능
    • 가용성 : 인가된 사용자는 언제든 정보와 자원 사용 가능
    • 인증 : 합법적인 사용자인지 확인하는 모든 행위
      • 지식 기반, 소유 기반, 생체 기반, 위치 기반, 행위 기반
    • 부인 방지 : 송, 수신 사실을 부인할 수 없도록 증거를 제공
  • 시큐어 코딩 : 보안 요소를 고려하여 코딩하는 것

  • 세션 통제 : 세션의 연결과 연결로 인해 발생하는 정보를 관리하는 것

  • 입력 데이터 검증 및 표현 관련 용어

    • 경로 순회 : 기호를 악용하여 허가되지 않은 파일에 접근
    • 스크립트 : 소프트웨어를 수행하는데 필요한 처리 절차가 기록된 텍스트
      • asp, jsp, php
  • SQL 삽입 : 내부 DB 서버의 데이터를 유출 및 변조, 관리자 인증을 우회하는 보안 약점

  • XSS : 악의적인 스크립트를 삽입해 정보를 탈취하거나 비정상적인 기능 수행 유발

  • 메모리 버퍼 오버 플로 : 할당된 메모리 범위를 넘어선 위치에서 자료를 읽거나 쓰려고 할 때 유발

  • 보안 기능 관련 용어

    • HTTPS : HTTP + 암호 통신 규약
    • SSL(Secure Sockets Layer) : TCP/IP 계층과 애플리케이션 사이에 위치하여 인증, 암호화, 무결성 보장
    • 하드 코딩 : 데이터를 코드 내부에 직접 입력
  • TOCTOU 경쟁 조건 : 검사 시점과 사용 시점을 고려하지 않고 코딩하는 경우 발생하는 보안 약점

  • 널 포인터 역참조 : 널 포인터가 가리키는 메모리 위치에 값을 저장할 때 발생하는 보안 약점

    • 스택 가드 : 복귀 주소와 변수 사이에 특정 값 저장 후 그 값이 변경되면 오버플로우 상태로 판단해 실행 중단
  • 접근 제어자 : Public -> Protected -> Default -> Private

  • 개인 키 암호화 기법 : 동일한 키로 데이터를 암호화-복호화

    • 스트림 암호화 방식 : 평문과 동일한 길이의 스트림을 생성해 비트 단위로 암호화, LFSR, RC4
    • 블록 암호화 방식 : 한 번에 하나의 데이터 블록을 암호화 하는 방식, DES, SEED, AES, ARIA
      • SEED : KISA, 1999년, 128비트
      • ARIA : 국정원+산학연협회, 2004년, AES 알고리즘 규격
      • DES : 미국 NBS, 1975년, 64비트, 3번 적용한 3DES가 있음
      • AES : 미국 NIST, 2001년, 128비트, 키 길이에 따라 AES-128, AES-192 등으로 분류
  • 공개 키 암호화 기법 : 공개키로 암호화, 비밀키로 복호화

    • RSA : 라이베스트+샤미르+애들먼, 큰 수 소인수분해 하기 어렵다는 점에서 착안
  • 해시 : 입력 데이터나 메시지를 고정된 길이의 값이나 키로 변환

    • SHA시리즈, HAVAL, MD4, MD5, N-NASH, SNEFRU 등
    • SHA 시리즈 : 미국 국가 안보국(NSA), NIST 발표, SHA-512까지 발표됨
    • MD5 : 1991년 라이베스트가 MD4를 대체하기 위하 고안. 512비트
    • N-NASH : 일본NTT에서 발표. 128비트
    • SNEFRU : 머클이 1990년 발표. 32비트 프로세스에서 구현 용이하게 할 목적.
  • TKIP : WEP의 취약성을 보완한 데이터 보안 프로토콜

  • 보안 아키텍처 : 보안 요소 및 보안 체계를 식별하고 이들 간의 관계를 정의한 구조

  • 보안 프레임워크 : 안전한 정보 시스템 환경을 유지하고 보안 수준을 향상시키기 위한 체계, ISO 27001, BS7799 기반

  • 방화벽 : 정보 선별, 수용/거부/수정 기능 가진 침입 차단 시스템

  • 침입 탐지 시스템

    • 오용 탐지 : 이미 입력해 둔 공격 패턴을 감지
    • 이상 탐지 : 평균적인 시스템 상태를 기준으로 이상함을 감지
  • 침입 방지 시스템 : 비정상적인 트래픽을 능동적으로 차단하고 격리하는 보안 솔루션.

    • 방화벽+침입 탐지 시스템
  • 데이터 유출 방지(DLP) : 내부 정보의 외부 유출을 방지하는 보안 솔루션

  • 웹 방화벽 : SQL 삽입 공격, XSS 등 웹 기반 공격을 방어할 목적으로 만들어진 웹 서버에 특화된 방화벽

  • VPN : 마치 자신의 전용 회선을 사용하는 것처럼 해주는 보안 솔루션

    • 암호화된 규격을 통해 인터넷망을 전용선의 사설망을 구축한 것처럼 이용.
  • NAC : Network Access Control, 내부 PC의 MAC 주소를 IP 관리 시스템에 등록한 후 일관된 보안 관리 기능을 제공

  • ESM : Enterprise Security Management, 다양한 장비에서 발생하는 로그 및 보안 이벤트를 통합하여 관리

  • AAA : 인증(Authenticcation), 인가(Authorization), 과금(Accounting)

  • 정보보호관리체계(ISMS) : 우리나라는 KISA에서 운영. 정보 자산을 안전하게 보호하기 위한 보호 절차와 대책

  • 서비스 거부 공격

    • Ping of death : 패킷 크기를 허용 범위 이상으로 전송
    • SMURFING : 엄청난 양의 데이터를 집중적으로 보냄(IP, ICMP 특성 악용)
    • SYN Flooding : 3-way-handshake를 의도적으로 중단시킴
    • TearDrop : Fragment Offset 값을 의도적으로 변경시켜 과부하를 발생시킴
    • LAND Attack : 송신, 수신 IP 주소를 모두 같게 해서 무한하게 응답하게 해서 과부하 발생
    • DDos(분산 서비스 거부) : 좀비PC를 이용해 여러 곳에서 분산 공격 시행
      • 이용 툴 : Trin00, TFN, TFN2k, Stacheldraht
  • 세션 하이재킹 : 클라이언트 사이의 세션 정보를 가로채는 공격 기법

    • 3-way-handshake 과정에 끼어드는 TCP 세션 하이재킹이 대표적
  • ARP Spoofing : ARP 취약점 이용. 자신의 MAC을 공격 대상의 것으로 변조. 패킷을 가로채거나 방해함

    • ARP : IP -> MAC으로 바꿔주는 프로토콜
  • 스니핑 : 네트워크 중간에서 남의 패킷 정보를 도청

  • 워터링 홀 : 웹사이트를 사전에 감염

  • 키로거 공격 : 키보드 움직임을 탐지

  • 랜섬웨어 : 돈 요구하는 등 내부 문서나 파일을 암호화

  • 백도어 : 시스템 설계자가 액세스 편의를 위해 시스템 보안을 제거하여 만들어 놓은 비밀 통로

    • 탐지 방법 : 무결성 검사, 열린 포트 확인, 로그 분석, SetUID 파일 검사 등
  • 기타 용어

    • 스미싱
    • 스피어 피싱 : 특정 대상을 선정해 계속 이메일 발송
    • APT : 지능형 지속 위협, 조직적으로 공격하는 것
    • 무작위 대입 공격(브루트 포스 공격) : 계속 모든 값을 대입
    • 큐싱 : QR+피싱
    • WEP : 유선급 프라이버시, LAN급의 보안과 프라이버시 수준의 무선 랜 보안 프로토콜
    • WPA2 : 무선랜 보안 기술 규격(WEP 취약성 대안)
    • EDR : 엔드포인트 영역 모니터링
    • TMS : 전사적 IT 인프라에 대한 위협정보를 관리하는 정보보호 통합관리 시스템
    • DTLS : SSL/TLS와 유사한 보안 기능, UDP 기반
    • 크리덴셜 스터핑 : 이미 확보해놓은 로그인 자격 증명을 다른 계정에 무작위로 대입
    • POODLE : TLS 연결을 SSL 3.0으로 낮춰 그 취약점을 이용해 암호문 해독
    • DDE : 오피스에서 앱에 데이터 전달하는 프로토콜. 일반 문서로 위장한 악성 코드에 대한 취약점 존재.
    • 좀비 PC + C&C 서버 + 봇넷
    • 제로데이 공격 : 취약점 존재 자체가 공표되기도 전에 이미 공격하는 것
    • 트로이 목마
    • CC(Common Criteria) 인증 : 국제적인 정보보안 평가기준
    • 멀버타이징 : 멀웨어 + 광고(Advertising)
    • 정보공유분석센터(ISAC) : 취약점과 그 대응방안에 대한 정보를 제공하고, 실시간 경보 및 분석체계 운영
    • BCP(업무 연속성 계획) : RTO, RPO, 업무 영향 분석(BIA) 실시해 비즈니스 연속성을 보장하기 위한 계획
    • 데이터 디들링 : 처리할 자료를 다른 자료와 바꿔서 처리하는 것
    • 비트 로커 : 윈도우 전용 볼륨 암호화 기능, TPM+ASE-128
    • 공급망 공격 : 소프트웨어 공급망에 침투하여 악성코드를 배포.

11단원 : 응용 SW 기초 기술 활용

1. 운영체제

  • 운영체제(OS) : 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 여러 프로그램의 모임.
    • 목적 :
      • 처리능력 향상
      • 반환시간 감소
      • 사용 가능도 향상
      • 신뢰도 향상
    • UNIX : 대부분 C언어, 트리 구조 파일 시스템, 1960년대 개발, 시분할 시스템(TIme Sharing System)
      • 커널(프로그램과 하드웨어 간 인터페이스 담당), 쉘(시스템과 사용자 간 인터페이스 담당)로 구성
    • LINUX : 리누스 토발즈 개발
      • cat 파일 내용 표시, cp 파일 복사, rm 파일 삭제, find 파일 찾음, mv 파일 이동
      • chown 파일 소유자와 그룹 변경
      • kill 프로세스를 종료, fork 새로운 프로세스 생성, ps 현재 실행중인 프로세스 표시
      • ls 파일 목록 표시
      • mkdir 디렉토리 생성, rmdir 디렉토리 삭제, cd 디렉토리 위치 변경, pwd 현재 작업중인 디렉토리 경로 표시
      • who 현재 접속 중인 사용자 표시
      • chmod
        • 8진법 숫자를 이용한 방법으로 파일 보호 모드 설정
        • rwx 순(read, write, x는 실행)으로 8진법으로 숫자 변경해서 표현
        • 111은 7, 101은 5같은 식
        • chmod 775 a.txt => a라는 파일에 사용자는 읽쓰실 모두, 그룹은 읽실, 기타는 실행만 허가

2. 기억장치

  • 기억장치 관리
    • 반입 전략 : 언제 주기억장치로 프로그램이나 데이터를 적재할 것인지를 결정
      • 요구 반입 : 요구할 때 적재
      • 예상 반입 : 미리 예상하여 적재
    • 배치 전략
      • 최초 적합 : 빈 곳 중 첫 번째
      • 최적 적합 : 단편화 가장 작게 남기는 것
      • 최악 적합 : 단편화 가장 많이 남기는 것
  • 주기억장치 할당 기법 : 주기억장치에 프로그램이나 데이터를 실행시키기 위해 어떻게 할당할 지 결정
    • 연속 할당 : 연속으로 할당
      • 단일 분할 할당 : 한순간에는 오직 한 명의 사용자만이 주기억장치의 사용자 영역을 사용
        • 오버레이 기법 : 주기억장치보다 큰 사용자 프로그램을 사용하기 위한 기법
        • 스와핑 기법 : 하나의 프로그램 전체를 주기억장치에 할당하여 사용하다가 필요에 따라 다른 프로그램과 교체
      • 다중 분할 할당
        • 고정 분할 할당 기법 = 정적 할당 기법 : 사용자 영역을 여러 개의 고정된 크기로 분할. 각 영역에 할당하여 수행
        • 가변 분할 할당 기법 = 동적 할당 기법 : 프로그램을 주기억장치에 적재하면서 필요한 만큼의 크기로 영역을 분할
          • 고정 분할 할당 기법의 단편화를 줄이기 위해 사용
    • 분산 할당 : 특정 단위 조각으로 나누어 분산하여 할당. 가상기억장치 사용
      • 가상기억장치(Virtual Memory) : 보조기억장치의 일부를 주기억장치처럼 사용하는 것.
      • 페이징 기법 : 프로그램과 주기억장치의 영역을 동일한 크기로 나눈 후 주기억장치 영역에 프로그램 적재 후 실행
        • 일정한 크기로 나눈 단위를 페이지라고 하고, 이 페이지 크기로 나누어진 주기억장치 단위를 페이지 프레임이라고 함.
        • 페이지 교체 알고리즘
          • 페이지 부재가 발생하면 어떤 페이지 프레임을 선택하여 교체할 것인지 결정해야 함
          • OPT : Optimal replacement(최적 교체) : 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체. 가장 효율적
          • FIFO : 선납선출
          • LRU : Least Recently Use, 최근에 가장 오랫동안 사용하지 않은 페이지를 교체
          • LFU : Least Frequently Use, 사용 빈도가 가장 적은 페이지를 교체
          • NUR : Not Used Recently, 최근에 사용하지 않은 페이지를 교체
            • 참조 비트와 변형 비트를 사용해 최근 사용 여부를 확인
          • SCR : Second Chance Replacement(2차 기회 교체), 가장 오랫동안 주기억장치에 있던 페이지 중 자주 사용되는 페이지의 교체를 방지하기 위한 기법
        • Localty(국부성, 지역성, 구역성, 국소성) : 프로세스 실행 중 주기억장치 참조 시 일부 페이지만 집중적으로 참조
          • 시간 구역성 : 일정 시간 동안 하나의 페이지를 집중적으로 액세스
          • 공간 구역성 : 일정 위치의 페이지를 집중적으로 액세스
          • 워킹 셋 이론의 기반
            • 워킹 셋 : 프로세스가 일정 시간 동안 자주 참조하는 페이지들의 집합
      • 세그멘테이션 기법 : 프로그램을 다양한 크기의 논리적인 단위로 나눈 후 주기억장치에 적재시켜 실행
        • 논리적인 크기로 나눈 단위를 세그먼트라고 하고, 각 세그먼트는 고유한 이름과 크기를 가짐.

3. 프로세스

  • 스래싱 : 프로세스의 처리 시간보다 페이지 교체에 소요되는 시간이 더 많아지는 현상
  • 프로세스 : 실행중인 프로그램
    • PCB를 가진 프로그램, 실기억장치에 저장된 프로그램, 디스패치가 가능한 단위, 프로시저가 활동중인 것...
  • PCB(프로세스 제어 블록) : 운영체제가 프로세스에 대한 중요한 정보를 저장해 놓은 곳
    • 프로세스 현재 상태, 포인터, 프로세스 고유 식별자, CPU 레지스터 정보, 주기억장치 관리 정보, 입출력 상태 정보, 계정 정보
  • 프로세스 상태 전이 :
    • 제출->접수->(디스크)->(준비->실행->대기)->종료
    • 디스패치 : 준비 상태에서 실행 상태로 전이
    • Wake Up : 대기 상태에서 준비 상태로 전이
    • 스풀링 : 디스크에 입출력 데이터를 일단 저장해 두는 것
  • 스레드 : 시스템의 여러 자원을 할당받아 실행하는 프로그램의 단위 또는 프로세스 내 작업 단위
    • 경량 프로세스라고도 함.
  • 스케줄링 : 시스템의 여러 자원을 해당 프로세스에게 할당하는 작업
    • 비선점 스케줄링 : 강제로 못 뺏는 경우
      • FCFS(선입선출) : 오는대로 할당
      • SJF : 짧은 것부터 할당, 대기시간은 앞 프로세스의 반환 시간. 반환시간은 프로세스의 대기 시간+실행시간
      • HRN : 우선순위를 부여. 공식은 (대기 시간+서비스시간)/서비스시간
    • 선점 스케줄링 : 강제로 빼앗을 수 있는 경우
      • Round Robin, SRT, 선점 우선순위, 다단계 큐, 다단계 피드백 큐 등
  • 환경변수 : 시스템 소프트웨어의 동작에 영향을 미치는 동적인 값들의 모임

4. 네트워크

  • IP 주소
    • IPv4 : 8x4 = 32비트로 구성, A~E클래스로 네트워크 부분 길이를 구성
    • IPv6 : 16x8 = 총 128비트로 구성, 인증성, 기밀성, 데이터 무결성 지원해 보안 문제 해결
      • 유니캐스트(1:1), 멀티캐스트(1:다), 애니캐스트(가장 가까운 사람과 1:1)
  • 서브네팅 : 할당된 네트워크 주소를 다시 여러 개의 작은 네트워크로 나누어 사용
    • 4바이트의 IP 주소 중 네트워크 주소와 호스트 주소를 구분하기 위한 비트를 서브넷 마스크라고 함.
  • 도메인 네임 : 숫자로 된 IP 주소를 사람이 이해하기 쉬운 문자 형태로 표현
    • 도메인 네임 -> IP 주소로 변환해 주는 시스템을 DNS라고 함
  • OSI 참조 모델
    • 물리 : 실제 접속과 절단 등 기계적, 전기적, 기능적, 절차적 특성
    • 데이터링크 : 시스템 간 연결 설정과 유지 및 종료
    • 네트워크 : 개방 시스템들 간의 네트워크 연결을 관리하는 기능과 데이터 교환 및 중계
    • 전송 : End-toEnd 간에 투명한 데이터 전송을 가능하게 함
    • 세션 : 송수신 측 간의 관련성을 유지, 대화 제어
    • 표현 : 서로 다른 데이터 표현 형태를 갖는 시스템 간의 상호 접속을 위해 필요한 계층
      • 코드 변환, 데이터 암호화, 데이터 압축, 구문 검색 기능 수행
    • 응용 : 사용자가 OSI환경에 접근할 수 있도록 서비스 제공
  • 네트워크 관련 장비
    • 라우터 : LAN과 LAN 연결+최적 경로 선택. LAN과 WAN을 연결하는 기능도 지원
    • 리피터 : 디지털 신호의 장거리 전송을 위해 수신 신호 재생 or 출력 전압 높여 전송
    • 허브 : 리피터 역할 포함, 가까운 거리의 컴퓨터들을 연결하는 장치
    • 브리지 : Lan과 LAN 연결.
      • 브리지가 n개일 때 서브넷 구성 시 전송 가능한 회선 수는 n(n-1)/2개
    • 게이트웨이 : OSI 전 계층의 프로토콜 구조가 다른 네트워크를 연결하는 장치
      • 데이터 출입구 역할을 함
  • 프로토콜 : 데이터 교환을 원활하게 수행할 수 있도록 표준화시켜 놓은 통신 규약
    • 구문(데이터 형식), 의미(제어 정보), 시간(통신 속도)으로 구성
  • 패킷 교환 방식 : 메시지를 일정한 길이의 패킷으로 잘라서 전송하는 방식
    • 가상 회선 방식 : 가상 통신 회선을 미리 설정, 정보 전송 전 제어 패킷에 의해 경로가 설정됨. 패킷 송수신 순서가 같음.
    • 데이터그램 방식 : 연결 경로 설정 X, 인접한 노드들의 트래픽을 감안해 독립적으로 운반. 전송 경로와 송수신 순서 매번 다름.
  • TCP/IP : 서로 다른 기종의 컴퓨터들이 데이터를 주고 받을 수 있도록 하는 표준 프로토콜
    • TCP : 전송 계층에 해당. 양방향 연결 서비스 제공. 가상 회선 방식 기반.
    • IP : 네트워크 계층 해당. 비연결형 서비스 제공. 데이터그램 방식 기반.
  • UDP : 데이터 전송 전에 연결을 설정하지 않는 비연결형 서비스 제공.
    • 실시간 전송에 유리
  • RTCP : RTP(Real-time Transport Protocol) 패킷의 전송 품질을 제어하기 위한 제어 프로토콜
    • 세션에 참여한 각 참여자들에게 주기적으로 제어 정보를 전송
  • ICMP(Internet Control Message Protocol) : IP와 조합, 통신 중에 발생하는 오류 처리 및 전송 경로 변경 등을 위한 제어 메시지 관리
  • ARP/RARP
    • ARP : IP -> MAC
    • RARP : MAC -> IP
  • 네트워크 신기술
    • 메시 네트워크 : 대규모 디바이스의 네트워크 생성
    • 피코넷 : 여러 개의 독립된 통신장치가 통신망 형성
    • 애드 훅 네트워크 : 재난 현장 같이 고정된 유선망 구축 불가시 모바일 호스트만 이용해 구성한 네트워크
    • 파장 분할 다중화 : 광섬유를 이용한 통신기술. 여러 대의 단말기가 동시에 통신 회선 사용 가능
    • SDDC(소프트웨어 정의 데이터센터) : 모든 자원을 소프트웨어 조작만으로 관리 및 제어되는 데이터 센터 의미
    • LOD(개방형 링크드 데이터) : Linked Data와 Open Data의 합성어. 누구나 사용할 수 있도록 웹 상에 공개된 연계 데이터
      • 개별 URI로 식별하고 각 URI에 링크 정보를 부여해 상호 연결 웹을 지향
    • IoT : 실세계와 가상 세계의 다양한 사물들을 인터넷으로 서로 연결
    • 클라우드 컴퓨팅 : 언제 어디서나 인터넷을 통해 컴퓨터 작업을 수행할 수 있는 가상화된 환경
    • USN(유비쿼터스 센서 네트워크) : 각종 센서로 수집한 정보를 무선으로 수집할 수 있도록 구성한 네트워크
      • 필요한 모든 것에 RFID를 부착
  • 네트워크 구축
    • 성형(중앙집중형)
    • 링형(루프형)
    • 버스형 : 한 개의 통신 회선에 여러 대의 단말 장치가 연결됨
    • 계층형(Tree)
    • 망형 : 모든 지점의 컴퓨터와 단말장치를 서로 연결. 노드가 n개일 때 n(n-1)/2개의 회선 필요, 노드 당 n-1개 포트 필요
  • 네트워크 분류
    • 근거리 통신망 LAN
    • 광대역 통신망 WAN
  • IEEE 802 주요 표준 규격 : 802.3 기억(CSMA/CD 방식 매체 접근 제어 계층 규약)
  • IEEE 802.11 : 802.11e 기억(QoS 강화를 위해 MAC 지원 기능 채택)
  • NAT(Network Address Translation) : 네트워크 주소 변환은 한 개의 정식 IP주소에 대량의 가상 사설 IP 주소 할당 및 연결
  • 스위치 : 브리지와 같이 LAN과 LAN을 연결하여 훨씬 더 큰 LAN을 만드는 장치
    • L2 스위치 : 일반적으로 부름. MAC 주소를 기반으로 프레임 전송. 2계층
    • L3 스위치 : L2 + 라우터, IP 주소 기반
    • L4 스위치 : L3 + 로드밸런서, IP 및 TCP/UDP 기반
    • L7 스위치 : IP 주소, TCP/UDP 포트 정보, 패킹 내용까지 참조하여 세밀하게 로드 밸런싱
  • 경로 제어(Routing) : 전송 경로 중 최적 패킷 교환 경로를 결정
    • IGP : 내부 게이트웨이 프로토콜은 하나의 자율 시스템 내의 라우팅에 사용
      • RIP : 거리 벡터 라우팅 프로토콜, 벨먼-포트 알고리즘 사용
      • OSPF : RIP 단점 해결, 대규모 네트워크, 다익스트라 알고리즘
    • EGP: 자율 시스템 간의 라우팅
    • BFP : EGP 단점 보완. BFP 라우터들이 연결 될 때에는 전체 경로 제어표(라우팅 테이블) 교환. 이후 변화된 정보만 교환
  • 흐름 제어 : 송수신 측 사이에 전송되는 패킷의 양이나 속도를 규제
    • 정지-대기 : 확인 후 다음 패킷을 전송. 한 번에 하나의 패킷만을 전송
    • 슬라이딩 윈도우 : 확인 신호를 이용해 송신 데이터의 양을 조절. 한 번에 여러 개의 패킷 전송 가능.
      • 패킷의 최대치 = 윈도우 크기

5. 기타

  • SW 관련 신기술

    • 블록체인 : P2P 네트워크, 디지털 장비에 분산 저장
    • 매시업 : 웹에서 제공하는 정보 및 서비스를 이용하여 새로운 SW나 서비스, DB를 만드는 기술
    • 서비스 지향 아키텍처(SOA) : 기업의 SW 인프라인 정보 시스템을 공유와 재사용이 가능한 서비스 단위나 컴포넌트 중심으로 구축하는 정보기술 아키텍처
      • SOA 기반 애플리케이션 구성 계층 : 표현, 업무 프로세스, 서비스 중간, 애플리케이션, 데이터 저장
    • 디지털 트윈 : 현실 속의 사물을 소프트웨어로 가상화한 모델
    • 그레이웨어 : 애드웨어나 트랙웨어, 기타 악성 코드나 악성 공유웨어처럼 제공자 입장에선 유용, 사용자 입장에선 아닐 수도
    • 양자 암호 키 분배(QKD) : 양자 통신을 위해 비밀키를 분배하여 관리
      • 두 시스템이 각자 양자 암호 키 분배 시스템을 설치하여 운용하는 식으로 활용
    • 서비스형 소프트웨어(SaaS) : SW의 여러 기능 중에서 사용자가 필요로 하는 서비스만 이용할 수 있도록 한 SW
    • 리치 인터넷 애플리케이션(RIA) : 신개념 플래시 웹 페이지 제작 기술(플래시 애니메이션 기술 + 웹 서버 애플리케이션 기술)
  • HW 관련 신기술

    • 엔 스크린(N-Screen) : N 개의 서로 다른 단말기에서 동일한 콘텐츠를 자유롭게 이용할 수 있는 서비스
    • 신 클라이언트 PC(Thin Client PC) : HDD나 주변장치 없이 기본적인 메모리만 갖추고 서버와 네트워크로 운용되는 PC
      • 서버 기반 컴퓨팅과 관련 깊음
    • 엠디스크(M-DISC) : 한 번의 기록만으로 자료를 영구 보관할 수 있는 광 저장장치
    • 멤스(MEMS) : 초정밀 반도체 제조 기술을 바탕으로 센서, 액추에이터 등 기계 구조를 다양한 기술로 미세 가공하는 초미세장치
    • 멤리스터 : 메모리+레지스터, 전류의 방향과 양 등 기존의 경험을 모두 기억하는 특별한 소자
    • 트러스트존 기술 : 하나의 프로세서 내 일반 구역과 보안이 필요한 보안 구역으로 분할하여 관리하는 HW 기반 보안 기술
  • RAID : 2개 이상의 하드디스크로 디스크 배열 구성, 데이터 블록을 서로 다른 디스크에 분산 저장하거나 다중화

    • RAID 0 : 스트라이핑, 디스크를 병렬로 연결, 하나의 디스크만 손상되어도 전체 디스크 파손
    • RAID 1 : 미러링, 같은 데이터를 다른 디스크에 동일하게 복사
    • RAID 2~4 : 하나의 디스크에 오류 정정 부호를 각각 비트/바이트/워드 단위로 저장
      • 하나의 디스크가 손상되어도 정상 가동 가능. 최소 3개 디스크 필요
    • RAID 5 : 오류 정정 부호를 여러 디스크에 분산 저장
      • 마찬가지로 최소 3개 디스크 필요. 하나 디스크 손상되어도 정상 동작 가능
    • RAID 6 : 오류 정정 부호 2개를 여러 디스크에 분산 저장
      • 2개의 디스크가 손상되어도 정상 가동 가능. 최소 4개 디스크 필요.
  • Secure OS : 보안 기능을 갖춘 커널을 이식한 보안형 OS

    • 보안 커널 : TCB(Trusted Computing Base)를 기반으로 참조 모니터의 개념을 구현하고 집행
    • 보안 기능 : 식별 및 인증, 임의적/강제적 접근 통제, 객체 재사용 보호, 완전한 조정 등
  • DB 관련 신기술

    • 하둡 : 오픈 소스 기반한 분산 컴퓨팅 플랫폼
      • 구글 맵리듀스 엔진 사용
      • 더그 커팅과 마이크 캐퍼렐라 개발
      • 자바 소프트웨어 프레임워크
    • 맵리듀스 : 대용량 데이터를 분산처리하기 위한 목적으로 개발된 프로그래밍 모델
      • 흩어져 있는 데이터를 연관성 있는 데이터 분류로 묶는 MAP 작업 수행 후
      • 중복 데이터 제거 & 원하는 데이터 추출하는 Reduce 수행
    • 데이터 마이닝 : 대량의 데이터를 분석하여 데이터에 내재된 변수 사이의 상호관계를 규명하여 일정한 패턴을 찾아냄
    • 타조 : 아파치 하둡 기반의 분산 데이터 웨어하우스 프로젝트
    • OLAP : 다차원으로 이루어진 데이터로부터 통계적인 요약 정보를 분석하여 의사결정에 활용하는 방식
    • 브로드 데이터 : 다양한 채널에서 소비자와 상호 작용을 통해 생성된 효율적이고 다양한 데이터
  • 회복 : DB가 손상되었을 때 손상되기 이전 상태로 복구하는 작업

    • REDO : 트랜잭션의 시작과 완료에 대한 기록이 있는 작업들을 재작업.
    • UNDO : 트랜잭션의 완료 기록은 없는 트랜잭션들이 작업한 변경 내용을 모두 취소.
    • 연기 갱신 기법 : 실질적인 갱신을 연기. REDO만 가능.
    • 즉각 갱신 기법 : 트랜잭션이 갱신하면 부분 완료되기 전이라도 즉시 실제 DB에 반영. REDO, UNDO 모두 가능
  • 병행제어 : 동시에 실행되는 트랜잭션들이 DB의 일관성을 파괴하지 않도록 트랜잭션 간 상호 작용을 제어하는 것

    • 로킹 : 액세스 하기 전 Lock(잠금)을 요청해서 Lock이 허락되어야만 그 로킹 단위를 액세스할 수 있도록 하는 기법

      • 주요 데이터 액세스를 상호 배타적으로 함
      • 로킹 단위 : 한꺼번에 로킹할 수 있는 객체의 크기
        • 로킹 단위가 크면 : 로크 수가 작아 관리 쉬움, 병행성 수준 낮음
        • 로킹 단위가 작으면 : 로크 수가 많아 관리 어려움, 병행성 수준 높음
      • 교착 상태(Dead Lock)은 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다림
        • 상호 배제 : 한 번에 한 개의 프로세스만 공유 자원 사용 가능
        • 점유와 대기 : 하나를 이미 갖고 있으면서 또 하나를 추가로 점유하기 위해 대기하는 프로세스
        • 비선점 : 사용 끝날 때까지 강제로 뺏기 불가
        • 환형 대기 : 대기하는 프로세스들이 원형으로 구성, 점유와 대기 중 앞 혹은 뒤 프로세스 자원을 요구해야 함
        • 이상이 필요충분 조건으로 필요
        • 해결 방법
          • 예방 기법 : 조건 중 하나를 제거함으로써 수행
          • 회피 기법 : 주로 은행원 알고리즘이 사용
          • 발견 기법 : 교착 상태가 발생했는지 점검
          • 회복 기법 : 비선점을 선점으로 바꿔주거나, 교착 상태를 일으킨 프로세스를 종료
    • 타임 스탬프 순서 : 시간표(Time Stamp)를 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행

      • 순서를 정하는 방법 중 가장 보편적
profile
삑삑도요가 되자

0개의 댓글