정보처리기사 필기 공부
소프트웨어 생명 주기(Software Life Cycle)
소프트웨어 생명 주기는 소프트웨어 개발 방법론의 바탕이 되는 것으로, 소프트웨어 개발을 위해 정의하고
운용, 유지보수하는 등의 과정을 단계별로 나눈 것이다.
소프트웨어 개발 단계와 단계별 주요 활동, 활동의 결과에 대한 산춘물로 표현하며,
소프트웨어 수명 주기라고도 한다.
소프트웨어 생명 주기를 표현하는 형태를 소프트웨어 생명 주기 모형이라고 하며,
소프트웨어 프로세스 모형 또는 소프트웨어 공학 패러다임이라고도 한다.
개발자는 문제의 유형, 개발 방법 등에 따라 특정 모형을 선택, 사용할 수 있고, 개별적읜 모형을 사용할 수도 있다.
폭포수 모형, 프로토탕비 모형, 나선형 모형, 에자일 모형 등이 있다.
소프트웨어 생명 주기 모형
폭포수 모형
-
폭포에서 한번 떨어진 물을 거슬러 올라갈 수 없듯이 소프트웨어 개발도 이전 단계로 돌아갈 수 없다는 전제하에 각 단계를 확실히 매듭짓고 그 결과를 철저히 검토하여 승인 과정을 거친 후 다음 단계를 진행하는 개발 방법론이다.
-
소프트웨어 공학에서 가장 오래되고 가장 폭넣게 사용된 전통적인 모형으로, 고전적 생명 주기 모형이라고도 한다.
-
개발 과정의 한 단계가 끝나야만 다음 단계로 넘어갈 수 잇는 선형 순차적 모형이다.
-
제품의 일부가 될 메뉴얼을 작성해야 하며, 각 단계가 끝난 후 다음 단계를 수행하기 위한 결과물이 명확히 산출되어야만 한다.
-
두 개 이상의 과정이 병행하여 수행되지 않는다.
-
타당성 검토 > 계획 > 요구사항 분석 > 설계 > 구현 > 테스트 > 유지보수
프로토타입 모형(=원형 모형)
-
사용자의 요구사항을 정확히 파악하기 위해 실제 개발될 소프트웨어에 대한 견본품을 만들어 최종 결과물을 예측하는 모형이다.
-
시제품은 사용자와 시스템 사이의 인터페이스에 중점을 두어 개발한다.
-
시스템의 일부 혹은 시스템의 모형을 만드는 과정으로서 요구된 소프트웨어를 구현하는데, 이는 추후 구현 단계에서 사용될 골격 코드가 된다.
-
개발이 완료된 시점에서 오류가 발견되는 폭포수 모형의 단점을 보완하기 위한 모형이다.
-
요구 수집 > 빠른 설계 > 프로토타입 구축 > 고객 평가 > 프로토 타입 조정 > 구현
나선형 모형(=점진적 모형)
-
보햄이 제안, 폭포수 모형과 프로토타입 모형의 장점에 위험 분석 기능을 추가한 모형이다.
-
나선을 따라 돌듯 여러 번의 소프트웨어 개발 과정을 거쳐 점진적으로 완벽한 최종 소프트웨어를 개발하는 것이다.
-
소프트웨어를 개발하면서 발생할 수 있는 위험을 관리하고 최소화 하는 것을 목적으로 한다.
-
점진적으로 개발 과정이 반복되므로 누락되거나 추가된 요구사항을 첨가할 수 있고, 정밀하며 유지보수 과정이 필요 없다.
-
계획 및 정의 > 위험 분석 > 개발 > 고객평가
애자일 모형
-
애자일은 ‘민첩한’,‘기민한’이라는 의미로, 고객의 요구사항 변화에 유연하게 대응할 수 있도록 일정한 주기를 반복하면서 개발과정을 진행한다.
-
좋은 것을 빠르고 낭비 없게 만들기 위해 고객과의 소통에 초첨을 맞춘 방법론을 통칭한다.
-
애자일 모형은 스프린트 또는 이터레이션 이라고 불리는 짧은 개발 주기를 반복, 반복되는 주기마다 만들어지는 결과물에 대한 고객의 평가와 요구를 적극 수용한다.
-
각 개발주기에서는 고객이 요구사항에 우선순위를 부여하여 개발 작업을 진행한다.
-
소규모 프로젝트, 고도로 숙달된 개발자, 급변하는 요구사항에 적합하다.
-
스크럼, XP, 칸반, Lean, 크리스탈, ASD, FDD, DSDM, DAD 등이 있다.
애자일 선언
애자일 개발 4가지 핵심 가치
-
프로세스와 도구보다는 개인과 상호작용에 더 가치를 둔다.
-
방대한 문서보다는 실행되는 SW에 더 가치를 둔다.
-
계약 협상보다는 고객과 협업에 더 가치를 둔다.
-
계획을 따르기 보다는 변화에 반응하는 것에 더 가치르 둔다.
애자일 개발 12가지 실행 지침
-
유용한 소프트웨어를 빠르고, 지속적으로 제공하여 고객을 만족시킨다.
-
개발 막바지라도 요구사항 변경을 적극 수용한다.
-
몇 개월이 아닌 몇 주 단위로 실행되는 소프트웨어를 제공한다.
-
고객과 개발자가 프로젝트 기간에 함께 일한다.
-
개발에 대한 참여 의지가 확실한 사람들로 팀을 구성하고, 필요한 개발 환경과 자원을 제공하며, 일을 잘 끝낼 수 있도록 신뢰한다.
-
같은 사무실에서 얼굴을 맞대고 의견을 나눈다.
-
개발의 진척도를 확인하는 1차 기준은 작동하는 소프트웨어이다.
-
지속 가능한 개발을 장려하고 일정한 속도로 개발을 진행한다.
-
기술적 우수성과 좋은 설계에 지속적인 관심을 기울이면 민첩성이 향상된다.
-
단순화를 추구한다.
-
최상의 아키텍처, 명확한 요구사항, 최상의 설계는 자기 스스로 일을 주도하는 조직적인 팀으로부터 나온다.
-
더 효과적인 팀이 될 수 있는 방안을 정기적으로 깊이 고민하고 그에 따라 팀의 행동을 조정한다.
운영체제(OS, Operating System)
-
컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고 효율저그로 사용할 수 있도록 환경을 제공해 주는 소프트웨어이다.
-
컴퓨터 사용자와 컴퓨터 하드웨어 간의 인터페이스로서 동작하는 시스템 소프트웨어의 일종으로, 다른 응용 프로그램이 유용한 작업을 할 수 있도록 환경을 제공해준다.
-
컴퓨터 운영체제의 종류에는 Windows, UNIX, Linux, Mac OS 등이 있으며, 모바일 운영체제에는 iOS,Android 등이 있다.
데이터베이스 관리 시스템(DBMS)
-
사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고, 데이터베이스를 관리해주는 소프트웨어이다.
-
DBMS는 기존의 파일 시스템이 갖는 데이터의 종속성과 중복성의 무제를 해결하기 위해 제안된 시스템으로, 모든 응용 프로그램들이 데이터베이스를 공용할 수 있도록 관리해준다.
-
DBMS는 데이터베이스의 구성, 접근 방법, 유지관리에 대한 모든 책임을 진다.
-
DBMS의 종류에는 Oracle, IBM DB2, Microsoft SQL Server, MySQL, SQLite, MongoDB, Redis 등이 있다.
웹 애플리케이션 서버(WAS)
-
웹 애플리케이션 서버는 정적인 콘텐트 처리를 하는 웹 서버와 달리 사용자의 요구에 따라 변하는 동적인 콘텐츠를 처리하기 위해 사용되는 미들웨어이다.
-
데이터 접근, 세션 관리, 트랜잭션 관리 등을 위한 라이브러리를 제공한다.
-
주로 데이터베이스 서버와 연동해서 사용한다.
-
종류에는 Tomcat, Glassfish, JBoss, Jetty, JEUS, Resin, WebLogic, WebSphere 등이 있다.
와이어 프레임
- 이해관계자들과 UI 화면구성을 협의하거나 서비스의 간략한 흐름을 공유하기 위해 화면 단위의 레이아웃을 설계하는 작업
커뮤니케이션 다이어그램, 상태 다이어그램
-
커뮤니케이션 다이어그램 : 시스템이나 객체들이 메세지를 주고받으며 시간의 흐름에 따라 상호 작용하는 과정을 표현한 다이어 그램
-
상태 다이어그램 : 하나의 객체가 자신이 속한 클래스의 상태 변화 혹은 다른 객체와의 상호 작용에 따라 상태가 어떻게 변화하는지 표현하는 다이어그램
링크 상태 알고르니즘
- 다익스트라 알고리즘을 이용하여 링크 상태 정보를 모든 라우터에 전달하여 최단 경로 트리를 구성하는 라우팅 프로토콜 알고리즘
살충제 패러독스, 오류 부재의 궤변
-
살충제 패러독스 : 동일한 테스트 케이스에 의한 반복적 테스트는 새로운 버그를 차지못함, 테스트 케이스의 정기적 리뷰와 개선 및 다른 시각에서의 접근이 필요
-
오류-부재의 궤변 : 요구사항을 충적시켜주지 못한다면 결함이 없다고 해도 품질이 높다고 볼 수 없음
은행가 알고리즘(Banker’s Algorithm)
- 사전에 작업에 필요한 자원의 수를 제시하고 운영체제가 자원의 상태를 감시, 안전상태일 때만 자원을 프로세스에게 할당하는 교착상태 회픠기법
LOC(Lines of Code), Man Month
LOC(Lines of Code)
- 소프트웨어 각 기능의 원시 코드 라인 수이 낙관치, 중간치, 비관치를 측정하여 예측치를 구하고 이를 이용하여 비용을 산정하는 비용산정 모델
Man Month
- 한 사람이 1개월간 할 수 있는 일의 양을 기준으로 비용을 산정하는 모델
- Man Month = LOC / 프로그래머의 월간 생산량
- 프로젝트 기간 = Man Month / 프로젝트 인력
스레싱(Thrashing)
- 어떤 프로세스가 계속적으로 펭지 부재가 발생하여 프로세스의 실제 처리 시간보다 페이지 교체 시간이 더 많아지는 현상
SQL의 그룹함수
- 테이블의 전체 행을 하나 이상의 컬럼을 기준으로 컬럼 값에 따라 그룹화하여 그룹별로 결과를 출력하는 함수
암호화 알고리즘 종류
암호화에서 사용하는 표현
- 평문(PlainText) : 암호화 하기전의 메세지
- 암호문(CipheText) : 암호화된 메세지(해독 불가능)
- 암호화(Encrytion) : 평문을 암호문으로 변화하는 과정
- 복호화(Decryption) : 암호문을 평문으로 변환하는 과정
대칭키 암호화 방식[Symmetric Encryption]
-
암호화 할 때 사용한 키와 복호화할 때 사용한 키가 같은 암호 방식
-
가장 보편적으로 사용하는 알고리즘은 AES 알고리즘이며, 128 ~ 256bit의 키를 사용한다.
-
전에는 DES 알고리즘을 사용하였으나 취약점이 발견되어 AES 암호화 방식을 사용한다.
비대칭키 암호화 방식[Asymmetric Encryption]
- 암호화할 때의 키와 복호화 할 때 키가 서로 다른 암호 방식
해싱(Hashing)
-
해싱을 이용한 암호화 방식으로 암호화/복호화와는 다른 개념
-
해싱을 이용해 평문을 암호문으로 암호화하는 것은 가능하지만, 평문으로 복호화 하는 것은 불가능
위와 같은 성질 때문에 대칭키 암호화 방식, 비대칭키 암호화 방식은 양방향 암호화라고 하고, 해싱을 이용한 암호화 방식은 단방향 암호화 방식이라고 한다.
-
양방향암호화 : 암호화와 복호화가 가능하다.
-
단방향암호화 : 암호화는 가능하지만 복호화는 불가능하다.
스턱스넷, 다크데이터
스턱스넷
- 핵 시설을 겨냥한 웜 바이러스, SCADA 시스템만을 감염시킨다.
- 장비를 프로그램 하는데 사용되는 PLC를 감염시켜 동작을 변경한다.
다크데이터
- 정보를 수집 후 저장만 하고, 분석에 활용하고 있지 않는 대량의 데이터
- 미래에 사용할 가능성이 잇다는 이유로 삭제되지 않고 방치
디지털 저작권 관리(DRM) 구성요소
- 콘텐츠 제공자 : 제공하는 저작권자
- 콘텐츠 분배자 : 쇼핑몰 등으로써 암호화된 콘텐츠를 제공
- 패키저 : 콘텐츠를 메타데이터와 함께 배포 가능한 단위로 묶는 기능
- 보안 컨테이너 : 원본을 안전하게 유통하기 위한 전자적 보안장치
- DRM 컨트롤러 : 배포된 콘텐츠의 이용 권한을 통제
- 클리어링 하우스 : 키 관리, 라이선스 발급 관리
관계 대수(Relational Algebra)
- 관계형 데이터베이스에서 원하는 정보와 그 정보를 어떻게 유도하는가를 기술하고, 관계로 표현도니 데이터를 취급하는 대수적인 연산 체계이자 절차적 정형언어
슈퍼키
- 데이터베이스에서 릴레이션에 있는 모든 튜플에 대해 유일성은 만족시키지만 최소성은 만족시키지 못하는 키
- 데이터베이스에서 관계(테이블)의 행을 고유하게 식별할 수 있는 속성 또는 속성의 집합
XSS, SQL 삽입공격, CSRF
XSS(Cross Site Scripting)
- 검증되지 않은 외부 입력 데이터가 포함된 웹페이지가 전송되는 경우, 사용자가 해당 웹페이지를 열람함으로써 웹페이지에 포함된 부적절한 스크립트가 실행되는 공격기법
SQL Injection
- 응용 프로그램의 보얀 취약점을 이용해서 악의적인 SQL 구문을 삽입, 실행시켜서 데이터베이스(DB)의 접근을 통해 정보를 탈취하거나 조작 등의 행위를 하는 공격기법
CSRF(Cross-Site Request Forgery)
- 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 용청하게 하는 공격기법
IaaS, PaaS, SaaS, Alien Code, 낙관적 검증
IaaS, PaaS, SaaS
- 인프라형 서비스(IaaS) : 서버, 스토리지 같은 시스템 자원을 클라우드로 제공하는 서비스
- 플랫폼형 서비스(PaaS) : 인프라를 생성, 관리하는 복잡함 없이, 애플리케이션을 개발, 실행할 수 있는 플랫폼을 제공하는 서비스
- 소프트웨어형 서비스(SaaS) : 관련 데이터는 중앙에 호스팅되고, 사용자는 웹 브라우저 등 클라이언트를 통해 접속하여 서비스 형태로 이용하는 서비스, 주문형 소프트웨어라고 한다.
Alien Code
- 배드 코드의 유형으로 아주 오래되거나, 참고문서 또는 개발자가 없어 유지보수 작업이 아주 어려운 소스코드
낙관적 검증
- 트랜잭션을 수행하는 동안 어떠한 검사도 하지 않고, 트랜잭션 종료 시 일괄적으로 검증을 수행하여 데이터베이스에 반영하는 기법
정보의 접근통제 정책(DAC, MAC, RBAC)
임의적 접근통제(DAC)
- 시스템에 대한 접근을 사용자,그룹의 신분 기반으로 제한하는 방법
강제적 접근통제(MAC)
- 시스템 정보의 허용등급을 기준으로 사용자가 갖는 접급 허가 권한에 근거하여 시스템에 대한 접급을 제한하는 방법
역할기반 접급통제(RBAC)
- 중앙관리자가 사용자와 시스템의 상호관계를 통제하며 조직 내 맡은 역할(Role)에 기초하여 자원에 대한 접근을 제한하는 방법
백도어 탐지 방법
- 무결성 검사
- 프로세스 및 열린 포트 확인
- 로그 분석
- Setuid 파일 검사
DDos 공격 구성요소
HAMAD(하마드)
- Handler
- Attacker
- Master
- Agent
- Daemon
스토리보드, 와이어 프레임, 프로토 타입
스토리보드
- 정책, 프로세스, 콘텐츠 구성, 와이어 프레임(UI, UX), 기능 정의, 데이터베이스 연동 등, 서비스 구축을 위한 모든 정보가 담겨 있는 설계 산출물
와이어 프레임
- 이해관계자들과의 화면구성을 협의하거나 서비스의 간략한 흐름을 공유하기 위해 화면 단위의 레이아웃을 설계하는 작업
프로토 타입
- 정적인 화면으로 설계된 와이어 프레임 또는 스토리보드에 동적 효과를 적용함으로써 실제 구현된 것처럼 시물레이션 할 수 있는 모형
감성공학의 접근 방법
1류 접근 방법
- 인간의 감성을 표현하는 어휘를 이용하여 제품 이미지를 조사, 그 분석을 통해 제품 디자인 요소와 연계시키는 접근방법
2류 접근 방법
- 개인의 연령, 성별 등의 개별적 특성과 생활방식으로부터 개인이 갖고 있는 이미지를 구체화 하는 감성의 심리적 특성을 강조한 접근 방법
3류 접근 방법
- 기존의 감성적 어휘 대신 공학적인 방법으로 접근하여 인간의 감각을 측정, 이를 바탕으로 수학적 모델을 구축하여 활용하는 접근 방법
객체지향의 설계 원칙
단일 책임의 원칙
- 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 오나전히 캡슐화 해야 하다는 원칙
개방 폐쇄의 원칙
- 소프트웨어 구성요소 확장에 대해 열려 있고 변경에 대해서는 닫혀 있어야 한다는 원칙
리스코프 치환의 원칙
- 상위 타입의 객체를 하위 타입의 객체로 치환가능하다는 원칙
인터페이스 분리의 원칙
- 구현체 스스로가 사용하지 않는 기능에 영향 받지 않아야 한다는 우너칙
의존성 역전의 원칙
- 고수준 모듈은 저수준 모듈에 직접 의존해서는 안된다는 원칙
소프트웨어의 설계 유형
- 자료구조 설계
- 아키텍처 설계
- 인터페이스 설계
- 프로시저 설계
HIPO(Hierarchy Input Process Output) CHART의 종류
가시적 도표
- 시스템의 전체적인 기능과 흐름을 보여주는 계층구조도
총체적 도표
- 입력,처리,출력에 대한 정보를 제공하는 도표
세부적 도표
- 총체적 도표에 표시된 기능을 구성하는 기본 요소들을 상세히 기술하는 도표
비용산정 모델
기능점수(FP; Function Point) 모형
- 요구 기능을 증가시키는 인자별로 가중치를 부여하여 기능의 점수를 계산항여 비용을 산정하는 방식
푸트남(Putnam) 모형
- 소프트웨어 개발 주기의 단계별로 요구할 인력의 분포를 가정하는 모형
RANK 함수, DENSE_RANK 함수, ROW_NUMBER 함수
테이블의 특정 컬럼의 값이 10,10,10,5인 경우
-
RANK 함수 사용 : 1위, 1위, 1위, 4위 순으로 부여
-
DENSE_RANK 함수 사용 : 1위, 1위, 1위, 2위 순으로 부여
-
ROW_NUMBER 함수 사용 : 1위, 2위, 3위, 4위 순으로 부여