• 최근 미뤄뒀던 정보처리기사 실기를 준비하며… 꼭 외워야 하는 내용 정리

결합도(Coupling)

  • 모듈과 모듈 사이의 관련성이 어느 정도인가를 나타내며, 관련성이 적을수록 모듈의 독립성이 높아 모듈 간 영향이 작아진다. 자료 결합도가 제일 낮고 내용 결합도가 가장 높다.
  • 자료 결합도의 품질이 가장 높고 내용 결합도의 품질이 가장 낮다.
  • 자스제외공내

  • 자료 결합도(Data Coupling) : 모듈 간의 인터페이스로 전달되는 파라미터를 통해서만 모듈 상호 작용이 일어난다.
  • 스탬프 결합도(Stamp Coupling) : 모듈 간의 인터페이스로 배열이나 오브젝트, 스트럭처 등이 전달되는 경우
  • 제어 결합도(Control Coupling) : 단순 처리할 대상인 값만 전달하는 것이 아니라 어떻게 처리해야 한다는 제어요소가 전달되는 경우
  • 외부 결합도(External Coupling) : 모듈에서 외부로 선언한 데이터(변수)를 다른 모듈에서 참조할 때의 경우로 외부에서 도입된 데이터 포맷, 통신 프로토콜, 또는 디바이스 인터페이스를 공유할 때 주로 발생
  • 공통 결합도(Common Coupling) : 파라미터가 아닌 모듈 밖에 선언되어 있는 전역변수를 참조하고 전역변수를 갱신하는 식으로 상호 작용하는 경우
  • 내용 결합도(Content Coupling) : 다른 모듈 내부에 있는 변수나 기능을 또 다른 모듈에서 사용하는 경우

응집도(Cohension)

  • 모듈 내부의 구성요소 간 관계의 밀접 정도로 평가되며, 응집도가 높을수록 필요한 요소들로 구성되고 낮을수록 요소들 간의 관련성이 적은 요소들로 구성된다.
  • 기능적 응집도의 품질이 가장 높고 우연적 응집도의 품질이 가장 낮다.
  • 기순통절시논우

  • 기능적 응집도(Functional Cohension) : 모듈 내부의 모든 기능이 단일한 목적을 위해 수행된다.
  • 순차적 응집도(Sequential Cohension) : 모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동이 사용하는 경우
  • 통신적 응집도(Communication Cohension) : 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여 있을 경우
  • 절차적 응집도(Procedural Cohension) : 모듈이 다수의 관련 기능을 가질 때, 모듈 안의 구성 요소들이 그 기능을 순차적으로 수행하는 경우
  • 시간적 응집도(Temporal Cohension) : 연관된 기능이라기보다는 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리하는 경우
  • 논리적 응집도(Logical Cohension) : 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우
  • 우연적 응집도(Coincidential Cohension) : 모듈 내부의 각 구성 요소들이 연관이 없는 경우

소프트웨어 아키텍처 패턴

  • 소프트웨어 설계 시 참조 가능한 솔루션
  • 일반적으로 발생하는 문제점들에 대해 일반화되고 재사용 가능한 솔루션

요구공학

  • 요구사항을 도출, 분석, 명세, 확인하는 구조화된 활동

요구사항 분석 기법

  • 자료 흐름 지향 분석 : 데이터 흐름도(DFD)와 자료 사전(DD)을 통해 분석
  • 객체지향 분석 : 시스템 기능과 데이터를 함께 분석해 UML로 표준화

요구공학 프로세스

  1. 개발 단계(CMM Level 3) : 요구사항 분석
  2. 관리 단계 (CMM Levle 2) : 설계 - 개발 - 테스트를 거치는 동안 요구사항 잘 만족하는지 확인

요구공학 개발 단계 구성 (CMM Level 3)

  1. 도출 : 이해관계자 식별, 고객 분석
  2. 분석 : 분류 -> 개념 모델링 생성 -> 할당 -> 협상 -> 분석
  3. 명세 : 정형화된 형태로 명세 작성
  4. 확인 : 요구사항 이해를 확인하고 문서가 완전한지 검증

요구사항 도출 기법

  • 인터뷰 : 직접 대화
  • 브레인스토밍 : 말하기 쉬운 분위기 속에서 비판없이 의견을 수용
  • 델파이 기법 : 전문가 경험 활용
  • 롤 플레잉 : 각자 맡은 역을 연기
  • 워크숍 : 단기간 집중하여 정보 획득 후 공유(사전 준비 필요)
  • 설문 조사

요구사항 분석 단계

  1. 요구사항 분류 : 기능적 요구사항 (시스템이 제공해야 할 기능) vs 비기능적 요구사항(시스템이 준수해야 할 제약사항)
  2. 개념 모델링 생성 : 주로 UML 사용. 요구사항을 쉽게 이해할 수 있도록 개념적 표현
  3. 요구사항 할당 : 요구사항 만족을 위한 아키텍처 구성요소 식별
  4. 요구사항 협상 : 충돌되는 경우 합의, 우선순위 부여
  5. 정형 분석 : 정형화된 언어를 통해 수학적 기호로 표현

요구사항 명세 기법

  1. 비정형 명세 기법 : 자연어 기반 서술
  2. 정형 명세 기법 : 수학적 표기법으로 서술

요구사항 명세 원리 및 검증 항목

  1. 명확성 : 각 명세 내용은 하나의 의미만 부여
  2. 완전성 : 모든 요구사항이 포함되어야 함
  3. 검증 가능성 : 달성 정도를 확인할 수 있어야 함
  4. 일관성 : 모순이 없어야 함
  5. 수정 용이성 : 쉽게 수정할 수 있어야 함
  6. 개발 후 이용성 : 운영 및 유지보수에 이용이 가능해야 함
  7. 추적 가능성 : 추적이 가능해야 함

요구사항 확인 기법

  1. 정형 기술 검토(TCR)
  2. 프로토타이핑 활용
  3. 테스트 케이스를 통한 확인
  4. CASE 도구 활용
  5. 베이스라인 검증
  6. 요구사항 추적표 (RTM : Requirement Tracebility Matrix) 통해 검증
    • 요구사항 정의서 기준으로 개발단계별 최종 산출물이 어떻게 변경되었는지 확인 가능한 문서

정형 기술 검토 (TCR) 기법

  • 동료 검토 (Peer Review) : 작성자가 설명하고, 이해 관계자들이 설명을 들으며 결함 발견
  • 워크 스루 (Walk Through) : 검토 자료 사전 배포 후, 짧은 시간 동안 회의 진행
  • 인스펙션 (Inspection) : 저작자가 아닌 다른 전문가가 검토
  • 참가자 구성
    • 주재자(Moderator) : 참가자를 선정하고 계획 및 주재
    • 작성자
    • 낭독자
    • 기록자
    • 검토자
  • 관리 리뷰 (Management Review) : 프로젝트 진행 상황을 전반적으로 검토
  • 기술 리뷰 (Technical Review) : 명세를 준수하고 있는지 검토
  • 감사 (Audit) : 제품이 표준이나 가이드라인을 준수하는지 검토. 제품 제공자, 소비자, 제 3기관이 수행

요구공학 관리 단계 구성(CMM Level 2)

  1. 협상 : 구현 가능한 기능 협상
  2. 기준선 설정 : 기준선(베이스라인) 설정
    • 베이스라인 : 개발 과정의 산출물의 변화를 통제하는 시점
  3. 변경관리 : 형상통제 위원회를 운영하여 변경 관리
    • CCB : 형상 관리의 방침을 정하고 산출물을 검토하는 조직
  4. 확인 및 검증 : 요구사항에 부합하는지 확인

미들웨어

  • 컴퓨터와 컴퓨터 간 연결 및 연결 관리를 돕는 소프트웨어
  • Weblogic, Jeus, Tomcat 등

네트워크

  • 원하는 정보를 수신자에게 정확하게 전달하기 위한 인프라
    1. LAN : 근거리 네트워크
    2. WAN : 광대역 네트워크

네트워크 프로토콜

  • 컴퓨터(통신 장비) 간 메시지 교환을 위한 규약
  • 단편화 : 전송이 가능한 상태로 나누는 기법
  • 재조립 : 단편화된 조각을 복원하는 기법(송신측)
  • 동기화 : 송신-수신 시점 맞추는 기법

프로토콜

  • 서로 다른 시스템 간 데이터 교환을 위한 규약

프로토콜의 기본 3요소

  1. 구문(Syntax) : 정보 전송을 위한 데이터 형식
  2. 의미(Semantic) : 정보 전송을 위한 제어 정보
  3. 타이밍(Timing) : 정보 전송을 위한 순서와 속도 조절

OSI 7계층

  • 네트워크 통신에서 충돌 문제를 최소화하고자, 국제표준화기구(ISO)에서 제시한 네트워크 통신 규약
  • 물데네트세표응!

물리 계층

  • 데이터를 전기적인 신호로 변환시켜 통신
    1. 단위 : 비트
    2. 프로토콜 : RS-232C
    3. 장비 : 허브, 리피터

물리 계층 장비

  • 허브 : 여러 대의 컴퓨터를 연결해 네트워크로 보내거나, 하나의 네트워크로 수신된 정보를 여러 대의 컴퓨터로 보내는 장비
  • 리피터 : 디지털 신호를 증폭시키는 장비

데이터링크 계층

  • 노드 간 오류 제어, 흐름 제어, 회선 제어
    1. 단위 : 프레임
    2. 장비 : L2 스위치, 브릿지, NIC, 스위칭 허브
    3. 프로토콜 : HDLC, PPP, Frame Relay, ATM

데이터링크 계층 장비

  • L2 스위치 : 목적지 MAC 주소를 기반으로 빠르게 데이터를 전송하는 장비
    1. Store and Forwarding : 데이터를 전부 받은 후 처리
    2. Cut Through : 목적지 주소만 확인 후 바로 전송
    3. Fragment Frame : 앞 64비트만 읽어 에러 처리 후 전송
  • 브릿지 : LAN과 LAN을 연결하는 장비
  • NIC : 네트워크 인터페이스 카드. 외부 네트워크와 빠른 통신을 위해 컴퓨터 내에 설치되는 장비
  • 스위칭 허브 : 스위치 기능을 가진 허브

데이터링크 계층 프로토콜

  • HDLC : 점대점, 다중점 통신에 사용하는 프로토콜
  • PPP : 통신 노드 간 연결을 위한 프로토콜
  • Frame Relay : 프레임 간 중계기능, 다중화 기능을 통해 빠른 데이터 전송이 가능한 고속 전송 기술
  • ATM : 고정 크기 단위로 전송하는 비동기식 전송 기술

네트워크 계층

  • 데이터 전송을 위한 최적의 경로 설정
    1. 단위 : 패킷
    2. 장비 : L3 스위치, 라우터, 게이트웨이, 인터넷 공유기, 망(백본) 스위칭 허브
    3. 프로토콜 : IP, 라우팅 프로토콜, ARP, RARP, ICMP, IGMP

네트워크 계층 장비

  • L3 스위치 : 3계층에서 동작하는 스위치 (L2 스위치 기능 + L3 라우터 기능을 모두 갖춘 장비)
  • 라우터 : 최적의 경로를 지정하고 경로에 따라 전송시키는 장비
  • 게이트웨이 : 다른 통신망에 접속할 수 있게 해주는 장비
  • 인터넷 공유기 : 하나의 인터넷 라인을 여러 컴퓨터가 공유할 수 있게 해주는 장비
  • 망(백본) 스위칭 허브 : 광역 네트워크를 커버하는 스위칭 허브

네트워크 계층 프로토콜

  • IP : 패킷 단위의 네트워크 통신 프로토콜
  • 라우팅 프로토콜 : 최적의 데이터 전송 경로를 설정하는 프로토콜
  • ARP : IP주소(3계층)를 MAC 주소(2계층)으로 변환하는 프로토콜
  • RARP : MAC 주소는 알지만 IP 주소를 모를 때 사용하는 프로토콜
  • ICMP : IP 패킷 처리 시의 문제를 알려주는 프로토콜, 신뢰성없는 IP를 대신하여 송신측으로 네트워크의 IP 상태 및 에러 메시지를 전달해주는 프로토콜
  • IGMP : 멀티캐스트 실시간 전송을 위해 사용하는 프로토콜(화상회의 등)
  • IPSec : 네트워크 계층에서 사용하는 보안 프로토콜. 인증 헤더 + 암호화를 이용. MAC + 암호화를 통해 인증 + 기밀성 제공

전송계층(Transport)

  • 종단 간 신뢰성있고 효율적으로 데이터 전송
    1. 단위 : 세그먼트
    2. 장비 : L4 스위치
    3. 프로토콜 : TCP, UDP

전송계층 장비

  • L4 스위치 : OSI 4계층에서 네트워크 단위를 연결하는 장비. TCP/UDP 등 스위칭 수행

전송계층 프로토콜

  • TCP
    1. 신뢰성 보장 : 패킷 손실, 중복이 없도록 보장 (IP 계층 보완)
    2. 연결지향적 : 연결 회선을 통해 통신이 이뤄짐
    3. 흐름제어 : 송신-수신 속도 일치시킴
    4. 혼잡제어 : 네트워크 혼잡도에 따라 송신율 제어
  • TCP 헤더 구조
    1. Source Port Number
    2. Destination Port Number
    3. Sequence Number : 신뢰성과 흐름 담당
    4. Acknowledgement Number : 승인 번호(수신을 기대하는 다음 번호)
    5. HLEN : 헤더 길이
    6. Flag Bit : 값 유효 여부 등을 표시하는 플래그
    7. Window Size
    8. Checksum : 에러 확인
    9. Urgent Pointer : 시퀀스 번호로부터의 옵셋
    10. Options and Padding
  • UDP
    1. 비신뢰성 : 메시지의 도착을 보장하지 않음
    2. 비순서화 : 수신된 메시지 순서 맞추지 않음
    3. 실시간 응용 및 멀티캐스팅 가능
    4. 단순 헤더 (고정 크기 헤더)
  • UDP 헤더 구조
    1. Source Port Number
    2. Destination Port Number
    3. UDP Length
    4. UDP Checksum
    5. Data

세션계층 (Session)

  • 송수신간(단말기 사이) 연결을 제어
    1. 단위 : 데이터
    2. 프로토콜 : RPC, NetBIOS, SSH, SSL/TLS

세션계층 프로토콜

  • RPC : 원격 프로시저 호출. 다른 주소 공간에 있는 프로세스 실행 가능
  • NetBIOS : 응용계층의 애플리케이션에 API 제공
  • SSH : 보안 쉘. 원격 호스트에 접근하기 위한 프로토콜
  • SSL/TLS : 안전한 데이터 전송을 위한 보안 프로토콜 (4계층(응용) - 7계층(전송) 사이에서 안전한 데이터 전송을 보장)

표현계층 (Presentaion)

  • 응용프로그램의 데이터를 통신에 알맞은 형태로 만들거나, 하위 계층의 데이터를 사용자가 이해할 수 있는 형태로 만드는 계층
    1. 단위 : 데이터
    2. 프로토콜 : JPEG, MPEG

표현계층 프로토콜

  • JPEG : 이미지를 위한 표준 규격
  • MPEG : 멀티미디어를 위한 표준 규격

응용계층 (Application)

  • 사용자가 OSI 환경에 접근할 수 있도록 서비스(인터페이스)를 제공하는 계층
    1. 단위 : 데이터
    2. 프로토콜 : HTTP, FTP, SMTP, POP3, IMAP, Telnet

응용계층 프로토콜

  • HTTP : 인터넷에서 데이터를 주고받기 위한 텍스트 기반의 프로토콜
  • FTP : 서버-클라이언트 간 파일 전송을 위한 프로토콜
  • SMTP : 이메일을 보내기 위한 프로토콜
  • POP3 : 이메일을 가져오기 위한 프로토콜 (로컬 PC에 저장 후 불러옴)
  • IMAP : 이메일을 가져오기 위한 프로토콜 (메일 서버에서 불러옴)
  • Telnet : 네트워크 연결에 사용하는 응용계층의 프로토콜

IPv4 IPv6

IPv4

  • 32bit(=4byte) 주소 체계를 갖는 인터넷 프로토콜
  • 8bit * 4 = 32bit
  • 전송방식
    • 멀티캐스트 : 같은 데이터를 여러 명의 그룹 수신자들에게 동시에 전송하는 프로토콜
    • 유니캐스트 : 식별된 고유 주소의 목적지에 1:1로 데이터를 전송하는 프로토콜
    • 브로드캐스트 : 같은 서브 네트워크의 모든 수신자에게 데이터를 전송하는 프로토콜
  • 구성 : (127, 191, 223, 239, 255)
    • D 클래스 : 멀티캐스트 용도
    • E 클래스 : 연구용

IPv6

  • 128bit(=16byte) 주소 체계를 갖는 인터넷 프로토콜
  • 16bit * 8 = 128bit
  • 전송방식
    • 멀티캐스트 : 같은 데이터를 여러 명의 그룹 수신자들에게 동시에 전송하는 프로토콜
    • 유니캐스트 : 식별된 고유 주소의 목적지에 1:1로 데이터를 전송하는 프로토콜
    • 애니캐스트 : 잠재적인 수신자 그룹 안에서 가장 가까운 노드에게 연결해 전송하는 프로토콜
  • 특징
    1. IP 주소 확장
    2. 인증 및 보안 기능
    3. 실시간 패킷 추적 가능
    4. Plug & Play 지원(실시간 멀티미디어 처리)
    5. 이식성(물리적 위치의 제한 없음)
    6. 단순 헤더

IPv4 -> IPv6 전환 방법

  1. 듀얼 스택 : IP 계층에 IPv4, IPv6 프로토콜을 모두 탑재하여 전송 상대에 따라 선택
  2. 터널링 : 인접한 IPv4 망에 터널을 만들고 캡슐화하여 전송
  3. 주소변환 : 게이트웨이(주소변환기)로 패킷 변환

라우팅 프로토콜 종류

  1. RIP : 동적 & 내부 라우팅 프로토콜. 벨만-포드 알고리즘 사용(거리-벡터 알고리즘 기초)
    • 홉 카운트 15 / UDP 포트 520 사용 / 30초마다 정보 공유
    • 거리-벡터 알고리즘 : 인접 라우터와 정보를 교환하여 경로 도출
  2. OSPF : 동적 & 내부 라우팅 프로토콜. 다익스트라 알고리즘 사용(링크-상태 알고리즘 기초)
    • 홉 카운트 무제한/ RIP의 단점 개선 / AS(자치시스템) 분할(지역별로 라우팅 관리)
    • 링크-상태 알고리즘 : 링크 상태 정보를 모든 라우터에게 전달해 경로 도출(범위 넓고 복잡)
  3. BGF : 동적 & 외부 라우팅 프로토콜. AS간 경로 정보 교환 / 경로-벡터 알고리즘 사용 / ISP 사업자간 주로 사용

QoS (Quality of Service)

  • 데이터의 중요도에 따라 우선순위를 부여, 데이터 전송 성능을 보장하는 것

패킷 스위칭

  • 패킷으로 데이터를 전송하며 전송하는 동안만 자원을 사용하는 통신 방식
    1. X.25 : 고정된 대역폭 사용, 낮은 성능
    2. 프레임 릴레이 : 유연한 대역폭 사용, 가격 저렴
    3. ATM : 광대역 전송에 쓰이는 스위칭 기법
  • 헤더의 주소 정보에 따라 전송한다. 이메일 등에 적합

서킷 스위칭

  • 서킷이라는 특정 연결을 만들어 독점적으로 사용해 통신하는 방식(전송 보장)
  • 데이터 일부를 송수신 해 경로를 파악 후 전송한다. 영상 등에 적합

디자인 패턴

  • 소프트웨어 설계 시 자주 쓰이는 방법을 정리한 패턴으로, 참고 시 개발 효율성이 높아진다.

디자인 패턴 구성요소

  1. 패턴 이름
  2. 문제 및 배경
  3. 솔루션
  4. 사례
  5. 결과
  6. 샘플코드

디자인 패턴 유형

  1. 생성(5) : 객체의 생성방식을 결정하는 패턴
  2. 구조(7) : 객체를 조직화하는데 유용한 패턴
  3. 행위(11) : 객체의 행위를 조직, 관리, 연합하는데 사용하는 패턴

디자인 패턴 - 생성 패턴

  1. 팩토리 메소드(Factory Method) : 상위 클래스에서 인터페이스 정의, 서브 클래스가 실제 생성
  2. 프로토타입(Prototype) : 원형 객체를 복사하여 생성 (객체 생성 시 갖춰야 할 기본 형태가 있을 때 사용)
  3. 빌더(Builder) : 객체를 조립하여 생성. 생성 방법과 구현 방법을 구분하여, 동일한 객체 생성이여도 다른 결과가 나올 수 있음)
  4. 싱글톤(Singletone) : 클래스 내 객체가 하나 뿐임을 보장. 하나의 객체를 생성해 어디든 참조할 수 있으나 동시 참조 불가
  5. 추상 팩토리(Abstract Factory) : 구체적인 클래스에 의존하지 않고, 연관된 객체들의 그룹으로 생성 (객체 간 결합이 느슨해짐)

디자인 패턴 - 구조 패턴

  1. 퍼싸드(Facade) : 복잡한 시스템에 단순한 인터페이스를 제공해 접근성을 높인 패턴
  2. 플라이웨이트(Flyweight) : 객체가 필요할 때 생성하는 대신 공유하여 메모리 절약
  3. 컴포지트(Composite) : 객체 관계를 파일 트리 구조로 구성하여, 복합 객체와 단일 객체를 동일하게 취급
  4. 프록시(Proxy) : 실제 기능을 수행하는 객체(Real object) 대신 가상의 객체(Proxy object)를 사용해 로직의 흐름을 제어하는 디자인 패턴
  5. 브리지(Bridge) : 구현부에서 추상층을 분리하여 결합도를 낮춘 패턴
  6. 어댑터(Adapter) : 호환성 없는 클래스의 인터페이스를 이용할 수 있게 변환
  7. 데코레이터(Decorator) : 객체 결합을 통해 기능을 확장

디자인 패턴 - 행위 패턴

  1. 중재자(Mediator) : 객체 사이에 중재자를 두어 의존성을 줄이는 패턴
  2. 인터프리터(Interpreter) : 여러 언어 구문을 해석할 수 있게 해주는 패턴
  3. 템플릿 메소드(Template Method) : 상위 클래스에서 기능을 정의하고, 하위 클래스에서 세부 처리 방법을 구체화하는 패턴
  4. 옵저버(Observer) : 객체를 지켜보고 있다가, 객체의 상태가 변하면 그 객체에 의존하는 다른 객체들에게 변화된 상태를 전달
  5. 커맨드(Command) : 요청을 객체로 캡슐화하여, 각 요청(명령)이 들어오면 그에 맞는 서브 클래스 실행
  6. 비지터(Visitor) : 처리 기능을 별도로 분리한 패턴 (분리된 처리 기능은 클래스를 방문하여 수행)
  7. 반복자(Iterator) : 접근이 잦은 객체에 대해 동일한 인터페이스를 사용하도록 하는 패턴 (내부 노출 없이 순차적 접근 가능)
  8. 상태(State) : 객체의 상태를 캡슐화하고, 이를 참조해 동작을 다르게 처리
  9. 전략(Strategy) : 동일한 계열의 알고리즘을 캡슐화하고, 전략을 선택해 사용
  10. 책임 연쇄(Chain of Responsibility) : 한 객체가 요청을 처리하지 못하면, 연결된 객체로 넘어가 처리
  11. 메멘토(Memento) : 특정 시점의 객체 내부 상태를 객체화하여, 해당 시점으로 되돌리는 기능을 제공

소프트웨어 아키텍처

  • 소프트웨어 구성요소와, 구성요소의 특성, 구성요소 간 관계를 표현하는 구조

현행 시스템 파악

  1. 구성 현황 / 기능 현황 / 인터페이스 파악
  2. 아키텍처, 소프트웨어 구성 파악
  3. 하드웨어, 네트워크 구성 파악

소프트웨어 4+1 뷰

  • 요구사항을 4개의 관점에서 바라보는 방법. 4개 구조가 충돌되지 않는지, 요구사항을 충족하는지 증명하기 위해 유스케이스 사용
    • 프로세스 뷰 : 비기능적인 속성으로 자원 사용 등을 표현한 뷰
    • 유스케이스 뷰 : 유스케이스를 도출하고 다른 뷰를 검증하는 뷰
    • 배치 뷰 : 컴포넌트가 물리적인 아키텍처에 어떻게 배치되는가를 보여주는 뷰
    • 논리 뷰 : 기능적인 요구사항이 어떻게 제공되는지 표현한 뷰
    • 구조 뷰 : 소프트웨어 모듈의 구성을 보여주는 뷰

소프트웨어 아키텍처 패턴 종류

  1. 계층화 패턴 : 시스템을 계층으로 구분 (ex. OSI 7계층 : 서로 마주보는 계층에서만 상호작용 발생)
  2. 클라이언트-서버 패턴 : 하나의 서버 + 다수의 클라이언트 -> 사용자는 클라이언트와만 상호작용
  3. 파이프-필터 패턴 : 데이터 스트림을 처리하는 시스템에서 사용 (ex. Unix의 Shell : 하나의 서브시스템이 데이터를 받아 처리하고, 결과를 다음 서브 시스템에게 넘겨줌)
  4. 브로커 패턴 : 사용자가 요청하면, 브로커가 적합한 컴포넌트를 연결하는 방식. 원격 서비스 호출에 응답하는 컴포넌트가 여럿일 때 적합
  5. 모델-뷰-컨트롤러 패턴 : 3개의 서브시스템으로 구조화한 패턴
    • 모델 : 핵심 기능과 데이터 보관
    • : 사용자에게 정보 표시
    • 컨트롤러 : 사용자의 입력 처리 - 하나의 모델에 여러 개의 뷰를 필요로 하는 대화형 애플리케이션에 적합

소프트웨어 아키텍처 비용 평가 모델

  1. SAAM : 변경 용이성과 기능성에 집중. 경험없어도 쉽게 사용 가능
  2. ATAM : SAAM을 계승. 아키텍처 품질 속성을 만족하는지도 평가
  3. CBAM : ATAM에 경제성 평가 보장
  4. ADR : 아키텍처 구성요소 간 응집도 평가
  5. ARID : ATAM + ADR. 전체가 아닌 특정 부분에 대한 비용 평가

SDLC (소프트웨어 생명주기)

  • 시스템의 요구분석 ~ 유지보수까지 전 과정을 모델링한 것

SDLC 모델 종류

  1. 폭포수 모델(Waterfall model) : 선형 순차적 모델. 고전적 생명주기 모델. 각 개발 단계를 마무리 지은 후 넘어가는 모델로 가장 오래됐고, 성공사례가 많으며, 단계별 산출물이 명확하고 요구사항 변경이 어려움
  2. 프로토타이핑 모델(Prototyping model) : 주요 기능을 프로토타입으로 구현하고, 피드백을 반영해 만들어나가는 모델
  3. 나선형 모델(Spiral model) : 위험을 최소화하기 위해 점진적으로 개발해나가는 모델
    • 절차 : 계획 및 정의 - 위험 분석 - 개발 - 고객 평가
  4. 반복적 모델(Iteration model) : 병렬적으로 개발 후 통합하거나, 반복적으로 개발해 점차 완성시켜나가는 모델

SDLC 모델 프로세스

  1. 요구사항 분석 : 요구사항을 분석하고, 제약조건, 목표 등을 정의
  2. 설계 : 수행 방법을 논리적으로 결정 (ex. 시스템 구조 설계, 사용자 인터페이스 설계)
  3. 구현 : 프로그래밍 언어를 사용해 실제로 코드를 작성 (ex. 인터페이스 개발, 자료 구조 개발, 오류 처리)
  4. 테스트 (ex. 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트)
  5. 유지보수

소프트웨어 개발 방법론

  • 소프트웨어의 개발 시작부터 전 개발 과정을 형상화한 방법론

소프트웨어 개발 방법론 종류

  1. 구조적 방법론 : 전체 시스템을 나눠 개발하고 통합하는 분할-정복 방식의 방법론. 나씨-슈나이더만 차트 사용
  2. 정보공학 방법론 : 정보 시스템 개발에 필요한 절차를 체계화한 방법론 (대형 프로젝트)
  3. 객체지향 방법론 : 객체라는 단위로 시스템을 설계하는 방법론
  4. 컴포넌트 기반 방법론 : 컴포넌트를 조립해 작성하는 방법론
  5. 애자일 방법론 : 절차보다 사람이 우선되는, 변화에 유연한 경량 개발 방법론
  6. 제품 개발 방법론 : 제품에 적용할 공통 기능을 정의하여 개발하는 방법론 (임베디드 소프트웨어 작성에 유용)

XP

  • 1-3주의 반복 주기를 갖는 애자일 방법론

XP의 5가지 가치

  1. 용기 : 용기를 갖고 빠르게 개발
  2. 단순성 : 필요한 것만 하자
  3. 의사소통 : 개발자-관리자-고객 간 원활하게 소통
  4. 피드백 : 의사소통에 대한 빠른 피드백
  5. 존중 : 팀원간 상호 존중

XP의 12가지 기본 원리

  1. 짝 프로그래밍 (Pair Programming) : 다른 사람과 페어로 개발하여 공동 책임을 지님
  2. 공동 코드 소유 (Collective Ownership) : 시스템에 있는 코드는 누구나 언제든 수정 가능
  3. 지속적인 통합 (CI ; Continuos Integration) : 여러 번 소프트웨어를 통합하고 빌드해야 함
  4. 계획 세우기 (Planning Process) : 고객이 원하는 가치를 정의하고, 개발에 필요한 것은 무엇이며, 어떤 곳에서 지연이 될 수 있는지 알려줘야 함
  5. 작은 릴리즈 (Small Release) : 작은 시스템을 먼저 만들고, 짧은 단위로 업데이트
  6. 메타포어 (Metaphor) : 공통 이름 체계를 통해 의사소통을 원활히
  7. 간단한 디자인 (Simple Release) : 요구사항에 적합한 단순한 시스템을 설계
  8. 테스트 기반 개발 (TDD ; Test Drive Develop) : 테스트를 먼저 수행하고, 통과할 수 있는 코드를 작성
  9. 리팩토링 (Refactoring) : 기능을 바꾸지 않으면서 중복제거, 단순화 등을 위해 코드를 재구성
  10. 40시간 작업 (40-Hour Work) : 피곤으로 인한 실수가 없도록 주 40시간만 일하자
  11. 고객 상주 (On Site Customer) : 개발자들의 질문에 즉각 대답해줄 수 있는 고객이 풀타임 상주해야 함
  12. 코드 표준 (Coding Standard) : 코딩 표준을 두고 효과적으로 개발

  • 낭비 요소를 제거해 품질을 향상시키는 애자일 방법론

린의 7가지 원칙

  1. 낭비제거
  2. 품질 내재화
  3. 지식 창출
  4. 늦은 확정
  5. 빠른 인도
  6. 사람 존중
  7. 전체 최적화

스크럼

  • 매일 정해진 시간 / 장소에서 짧은 시간의 개발을 위한 애자일 방법론

스크럼 용어

  • 백로그 : 제품에 대한 요구사항
  • 스프린트 : 짧은 기간 내 반복적으로 개발
  • 데일리(스크럼) 미팅 : 매일 To-Do List 계획 수립. 번다운 차트 작성
  • 스크럼 마스터 : 프로젝트 리더
  • 스프린트 회고 : 각자 반성하고 개선점 확인
  • 번 다운 차트 : 남아있는 백로그 대비 시간을 시각적으로 표현 (백로그를 수직, 시간을 수평)

비용산정 모델

  • 소프트웨어 개발 계획을 수립하기 위해 투입될 자원이나 시간을 산정하는 방식
    • 하향식 : 전문가가 산정 (ex. 델파이 기법)
    • 상향식 : 요구사항과 기능에 따라 산정 (ex. LoC, Man Month, COCOMO, 푸트남, FP)

비용산정 모델 종류

  • LoC(Lines of Codes) 모형 : 코드 라인 수의 예측치를 구하여 비용 산정
    • 산정방법 : (낙관치 + 중관치 x 4 + 비관치) / 6
  • COCOMO 모형 : 프로그램 규모에 따라 비용을 산정
    1. 조직형 / 단순형 (Organic) : 소규모 5만 라인 (5KSDI) 이하
    2. 반 분리형 (Semi-Detached) : 중간형 30만 라인 (30KSDI) 이하
    3. 임베디드형 (Embedded) : 초대형
  • Man Month 모형 : 한 사람이 1개월 간 할 수 있는 일의 양을 기준으로 비용 산정
    • Man Month = LoC / 개발자의 월간 생산성
    • 프로젝트 기간 = Man Month / 프로젝트 인력
  • 푸트남(Putnam) 모형 : 생명주기 단계별 인력분포를 예측하는 방식 (시간에 따른 함수로 표현되는 Rayleigh-Norden 곡선 분포도 기초)
  • FP(기능점수) 모형 : 요구 기능별로 가중치를 부여해 총 점수를 계산해 비용 산정

일정 관리 모델

  1. CPM(주 공정법) : 여러 작업의 수행 순서가 얽힌 프로젝트에서 일정을 계산하는 기법
    • 임계 경로(Critical Path) 계산법 : 가장 긴 경로 계산
  2. CCPM(중요 연쇄 공정법) : 주 공정법의 연쇄법으로, 자원 제약사항을 고려해 계산
  3. PERT : 낙관치, 중관치, 비관치의 3점 추정방식으로 일정 관리

UI

  • 사용자와 시스템 사이의 매개체

UI 유형

  1. CLI : 텍스트(명령어) 기반
  2. GUI : 그래픽 기반(마우스, 펜)
  3. NUI : 신체 부위 이용(터치, 음성)
  4. OUI : 유기적 상호작용 기반 인터페이스(모든 사물이 입출력장치로 변화)

UI 설계 원칙

  1. 직관성 : 누구나 쉽게 이해하고 쉽게 사용할 수 있어야 함
  2. 유효성 : 사용자 목표가 달성될 수 있어야 함
  3. 학습성 : 쉽게 배울 수 있어야 함
  4. 유연성 : 인터렉션을 최대한 포용해야 함

UI 설계 지침

  1. 사용자 중심 : 사용자가 이해하기 쉽게 설계
  2. 일관성 : 조작법을 빨리 이해할 수 있도록 일관적으로 설계해야 함
  3. 단순성
  4. 결과 예측 가능
  5. 명확성 : 개념적으로 인지하기 쉬워야 함
  6. 표준화 : 디자인 표준으로 선행학습 이후 쉽게 사용할 수 있어야 함
  7. 오류 발생 해결 : 오류 상황을 인지할 수 있어야 함
  8. 접근성 : 연령, 성별 등 다양한 계층을 수용해야 함
  9. 가시성 : 주요 기능은 메인 화면에 노출해야 함

UI 시나리오 문서 작성 요건

  1. 완전성 : 누락 없이 최대한 상세하게 작성
  2. 일관성 : 요구사항은 일관적이어야 함. UI도 일관적으로 작성
  3. 이해성 : 이해하기 쉬워야 함
  4. 가독성 : 쉽게 읽혀야 함
  5. 추적 용이성 : 변경사항을 알아보기 쉬워야 함
  6. 수정 용이성 : 쉽게 수정할 수 있어야 함

UI 설계 도구

  1. 화면 설계 도구 : 파워 목업, 발사믹 목업, 카카오 오븐
  2. 프로토타이핑 도구 : UX핀, 액슈어(디스크립션까지 작성 가능), 네이버 프로토나우
  3. UI 디자인 산출물로 작업하는 프로토타이핑 도구 : 인비전, 픽사에이트, 프레이머

UI 품질 요구사항 (ISO/IEC 9126 기반)

  1. 이식성 : 다른 환경에도 잘 적응하는가?
    • 적용성 : 다른 환경에도 잘 적용되고
    • 설치성 : 잘 설치되며
    • 대체성 : 다른 SW를 대체할 수 있는지
  2. 신뢰성 : 오류가 없거나 있더라도 괜찮은가?
    • 성숙성 : 오류가 없고
    • 고장허용성 : 오류가 있어도 성능을 유지할 수 있고
    • 회복성 : 오류를 금방 회복할 수 있는지
  3. 사용성 : 쓰기 편한가?
    • 이해성 : 이해하기 쉽고
    • 학습성 : 배우기 쉽고
    • 운용성 : 다루기 쉬운지
  4. 유지보수성 : 개선 및 확장이 쉬운가?
    • 분석성 : 결함이나 고장을 발견하기 쉽고
    • 변경성 : 수정하기 쉽고
    • 안정성 : 수정하더라도 안정적이고
    • 시험성 : 변경된 내용을 검증할 수 있는지
  5. 효율성 : 한정된 자원을 효율적으로 쓰는가?
    • 시간반응성 : 처리 속도가 빠르고
    • 자원효율성 : 적절한 자원을 제공하는지
  6. 기능성 : 요구사항을 정확하게 만족하며 기능하는가?
    • 적절성 : 적절하고
    • 정밀성 : 정확하고
    • 상호운용성 : 상호 운용되고
    • 보안성 : 보안성 있고
    • 호환성 : 표준 잘 지키는지

UI 표준

  1. UX 원칙 정의
  2. 정책 및 철학 설정
  3. 스타일 가이드 정의
  4. UI 패턴 모델 정의
  5. 조직 구성

UI 개발을 위한 주요 기법

  • 3C 분석 : Customer(고객), Company(자사), Competitor(경쟁사) 분석
  • SWOT 분석 : 강점, 약점, 기회, 위협 요인을 분석
  • 시나리오 플래닝 : 다양한 시나리오를 설계해 불확실성 제거
  • 사용성 테스트 : 사용자가 직접 제품을 사용하며 과제 수행
  • 워크숍 : 집단이 모여 지식, 아이디어를 교환하고 검토하는 연구회

UI 화면 설계 구분

  • 와이어프레임 : 화면 단위의 레이아웃 설계
  • 스토리보드 : 정책, 와이어프레임 등 구축하려는 서비스를 위한 정보가 수록된 문서
  • 프로토타입 : 와이어프레임(or 스토리보드) + 동적 효과

사용자 요구사항 도출

  1. 페르소나 정의
  2. 콘셉트 모델 정의
  3. 요구사항 정의
  4. UI 컨셉션

UML

  • 표준화된 범용 모델링 언어

UML의 특징

  1. 가시화 언어 : 원활한 의사소통을 위해 가시화
  2. 구축 언어 : UML -> 소스코드 변환 가능
  3. 명세화 언어
  4. 문서화 언어

UML의 구성요소

  1. 사물
  2. 관계
  3. 다이어그램

UML 다이어그램

  • 정적(구조적) 다이어그램
    1. 클래스 다이어그램 : 클래스 간 관계 표현
    2. 객체 다이어그램 : 객체 간 관계 표현
    3. 컴포넌트 다이어그램 : 컴포넌트 간 관계를 표현. 구현 단계에서 사용
    4. 배치 다이어그램 : 물리적 요소의 위치 표현. 구현 단계에서 사용
    5. 복합체 구조 다이어그램 : 복합 구조인 경우 그 내부 표현
    6. 패키지 다이어그램 : 패키지 간 관계 표현
  • 동적(행위적) 다이어그램
    1. 시퀀스 다이어그램 : 시간적 개념 중심으로 메시지 표현
    2. 유스케이스 다이어그램 : 사용자 관점에서 표현
    3. 커뮤니케이션 다이어그램 : 객체들이 주고 받는 메시지와 상호작용(객체 간 연관)까지 표현
    4. 활동 다이어그램 : 시스템이 수행하는 활동을 표현
    5. 상태 다이어그램 : 객체의 상태와 상태 변화를 표현
    6. 타이밍 다이어그램 : 객체의 상태 변화와 시간 제약을 표현

UML 스테레오 타입

  • UML 기본 요소 + 새로운 요소를 더한 확장 매커니즘. « »(길러멧) 기호 사용
  • <<include>> : 어떤 시점에 반드시 다른 유스케이스를 실행함
  • <<extend>> : 어떤 시점에 다른 유스케이스를 실행할 수도 있고 아닐 수도 있음
  • <<abstract>> : 추상 클래스 (인스턴스 생성 하지 않고 공통 특징만 정의)
  • <<interface>> : 모든 메서드와 상수가 추상인 클래스
  • <<entity>> : 정보 또는 행위를 표현하는 클래스
  • <<boundary>> : 상호작용을 담당하는 클래스
  • <<control>> : 로직 및 제어를 담당하는 클래스

다이어그램 종류

클래스 다이어그램

  • 클래스의 속성(변수), 연산(메서드), 클래스 간 관계를 표현한 다이어그램
  • 속성 : 클래스의 구조적 특성 (인스턴스가 보유 가능한 값의 범위)
  • 접근 제어자 : 접근 가능한 정도

클래스 접근제어자

  • public : 외부 모든 클래스에서 접근 가능
  • protected : 동일 패키지(하위 클래스 포함)일 때 접근 가능
  • default : 자바 전용. 접근 제어자 명시가 없을 때 동일 패키지(하위 클래스 포함) 또는 파생 클래스에서 접근 가능
  • private : 같은 클래스 내에서만 접근 가능

클래스 간 관계

  1. 연관(Association) : 관련되어 있음 < - - > (양방향은 화살표 생략)
  2. 의존(Dependency) : 클래스가 다른 클래스 사용 < . . . >
  3. 집합(Aggeregation) : 포함하지만 독립적
  4. 포함(Composition) : 포함하고 생명주기를 함께 함
  5. 일반화(Generalization) : 일반적인지 구체적인지
  6. 실체화(Realization) : 기능으로 묶인 관계

컴포넌트 다이어그램

  • 컴포넌트와 컴포넌트 간 관계를 표현한 다이어그램
    • 컴포넌트 : 탭 2개가 달린 직사각형 + 이름

패키지 다이어그램

  • 패키지 관계를 표현한 다이어그램
    • 패키지 : 폴더 형태

시퀀스 다이어그램

  • 시간적 개념 중심으로 메시지 흐름을 표현한 다이어그램
    • 생명선 : - - - - -
    • 실행 : - - [ ] - - (함수 실행시간)

유스케이스 다이어그램

  • 사용자 시점에서 표현한 다이어그램

커뮤니케이션 다이어그램

  • 객체들이 주고받는 메시지와 상호작용(객체 간 연관)까지 표현한 다이어그램
    • 객체 : 사각형 (객체명:클래스명 으로 표현)
    • 메시지 : -> 표현

활동 다이어그램

  • 시스템의 처리 활동을 순서대로 표현한 다이어그램
    • 종료점 : 조건 노드, 병합 노드, 포크 노드

상태 다이어그램

  • 객체의 상태와 상태 변화를 표현한 다이어그램
    • 종료점 : 전이, 전이 조건, 이벤트

데이터 모델

  • 현실 세계의 정보를 컴퓨터가 이해할 수 있도록 표현한 모델

데이터 모델의 구성 요소

  • 연구제!!!
  1. 연산
  2. 구조
  3. 제약조건

데이터 모델의 절차

  • 개논물
  • 개념적 -> 논리적 -> 물리적

개념적 데이터 모델

  • 현실 세계의 정보를 추상적, 개념적으로 표현
  • DB 종류에 무관함
  • 주요 산출물 : E-R 다이어그램
    • E-R 다이어그램 : 현실의 정보를 사람이 이해할 수 있는 형태로 표현해 개체와 개체의 속성, 개체 간 관계를 도식화 한 다이어그램
    • E-R 다이어그램 구성요소
      • 개체 : □
      • 속성 : ○
      • 다중 값 속성 : ◎
      • 관계-속성 : ─
    • 개체 정의서 : 개념 데이터 모델링 단계에서 도출된 개체와 관련된 정보를 명세화한 문서

논리적 데이터 모델

  • 논리적 데이터베이스 구조로 매핑
  • 목표 DBMS 설정, 스키마 설계
  • 정규화 수행
  • 모델링 종류
    1. 관계 데이터 모델
    2. 계층 데이터 모델
    3. 네트워크 데이터 모델

물리적 데이터 모델

  • 객체 생성 (테이블, 뷰, 인덱스 등)
  • 반 정규화 수행

관계 데이터 모델

  • 2차원 테이블 형태
  • Codd 박사가 제안
  • 1:1, 1:N, N:M 자유롭게 표현

네트워크 데이터 모델

  • 그래프 형태
  • CODASYL DBTG 모델이라고도 함
  • 상위-하위 레코드 간 N:M 관계

계층 데이터 모델

  • 트리 형태
  • 상하 관계 존재
  • 1:N 관계만 허용

데이터베이스

  • 다수의 인원과 시스템이 사용할 목적으로 관리하는 데이터 집합
    1. 통합된 데이터
    2. 저장된 데이터
    3. 운영 데이터
    4. 공용 데이터

데이터베이스 특성

  1. 실시간 접근성 : 쿼리에 실시간으로 응답
  2. 계속적인 변화 : 삽입/삭제/갱신으로 최신 데이터 유지
  3. 동시 공용 : 다수 사용자가 이용
  4. 내용 참조 : 사용자가 요구하는 내용으로 참조

데이터베이스의 종류

  1. 파일 시스템 개념 : DB 전 단계의 데이터 관리 방식
  2. 관계형 DBMS(= RDBMS) : 관계형 데이터 모델을 기반으로 하는 DB 관리 시스템
  3. 계층형 DBMS(= HDBMS) : 데이터를 상하 종속 관계로 계층화한 모델
  4. 네트워크형 DBMS(= NDBMS) : 데이터를 망상 형태로 표현한 모델

DBMS

  • 데이터의 추가, 변경, 삭제 등의 관리 기능을 제공하는 소프트웨어

DBMS의 유형

  1. Key-Value DBMS : Unique한 키에 하나의 값을 갖는 형태 (ex. Redis, DynamoDB)
  2. Column Family Data Store DBMS : Key 안에 (Column, Value) 조합의 필드를 갖는 DBMS. 구글의 Bigtable 기반 (ex.. HBase, Cassandra)
  3. Document Store DBMS : 값의 데이터 타입이 문서 타입(XML, JSON)인 DBMS (ex. MongoDB, Couchbase)
  4. Graph DBMS : 시멘틱 웹과 온톨로지 분야에서 활용되는 그래프로 데이터를 표현 (ex. Neo4j, AllegroGraph)
    • 온톨로지 : 실세계에 존재하는 개념 정보를 컴퓨터가 이해할 수 있도록 서술한 지식베이스

DBMS의 특징

  1. 데이터 일관성 : 조작 후에도 데이터는 변함없음
  2. 데이터 회복성 : 장애 발생 시 복구되어야 함
  3. 데이터 무결성 : 동일한 내용에 서로 다른 데이터가 저장되지 않아야 함
  4. 데이터 효율성 : 응답시간, 저장공간 등을 최적화해야 함
  5. 데이터 보안성 : 불법적인 노출, 변경으로부터 보호해야 함

DBMS 분석 시 고려 사항

  1. 성능 측면 : 가용성, 성능, 상호 호환성
  2. 지원 측면 : 기술 지원, 구축 비용

관계 대수

  • 원하는 정보를 어떻게 유도하는가에 대한 절차적 정형 언어

일반 집합 연산자

  1. 합집합(Union) : 전체
  2. 교집합(Intersection) : 공통
  3. 차집합(Difference) : R에만 존재하고 S에는 없음
  4. 카티션 프로덕트(CARTESIAN Product) : R과 S에 속한 모든 튜플 연결

순수 관계 연산자

  1. 셀렉트 σ : σ 조건 (R) R에서 조건을 만족하는 튜플 반환 -> 가로
  2. 프로젝트 π : π 속성리스트 (R) R에서 주어진 속성들로만 구성된 튜플 반환 -> 세로
  3. 조인 ▷◁ : R ▷◁ S 공통 속성으로 R과 S의 튜플 연결하여 반환
  4. 디비전 ÷ : R ÷ S S의 모든 튜플과 관련된 R의 튜플 반환

관계 해석

  • 원하는 정보가 무엇인가에 대한 비절차적 언어 (프레디킷 해석 기반)

정규화(Normalization)

  • 데이터의 중복성을 제거하여 이상 현상을 방지하는 과정

이상 현상(Anomaly)

  • 데이터 중복으로 인해 릴레이션 조작 시 발생하는 비합리적 현상
  • 삽입, 삭제, 갱신 이상 (select, update, delete)

정규화 단계

  1. 1NF (1차 정규화) : 도메인은 원자값으로만 구성
  2. 2NF (2차 정규화) : 부분 함수 종속성 제거 (완전 함수적 종속 관계)
  3. 3NF (3차 정규화) : 이행 함수 종속성 제거 (A -> B, B -> C, A -> C일 때 이행 함수 종속 관계)
  4. 보이스-코드(BC)NF : 결정자는 모두 후보키여야 함
  5. 4NF (4차 정규화) : 다치(다중값) 종속 제거
  6. 5NF (5차 정규화) : 조인 종속 제거 (릴레이션의 모든 조인 종속이 후보키를 통해서만 설립)

반 정규화(De-Normalization)

  • 정규화된 개체/속성/관계를 단순화하는 기법
  • 장점 : 성능 & 관리 효율성 증대
  • 단점 : 일관성 & 무관성 하락

반 정규화 기법

  1. 테이블 병합
  2. 테이블 분할
  3. 중복 테이블 추가 : 집계테이블, 진행테이블, 특정 부분만을 포함하는 테이블
  4. 중복 컬럼 허용
  5. 중복 관계 허용

NoSQL

  • Not Only SQL
  • 전통적인 RDBMS가 아닌 DBMS를 지칭
  • 조인 연산 불가, 수평적으로 확장 가능

NoSQL의 특징

  1. Basically Available : 언제든지 접근 가능해야 함
  2. Soft-State : 노드의 상태는 외부 정보로 결정됨
  3. Eventually Consistency : 일정 시간이 지나면 데이터 일관성이 유지됨

NoSQL의 유형

  1. Key-Value
  2. Column Family Data Store
  3. Document Store
  4. Graph

데이터 마이닝

  • 대규모 데이터 속에서 의미있는 정보를 파악해 의사결정에 활용하는 기법

데이터 마이닝 기법

  1. 분류 규칙 (Classification) : 과거 데이터로부터 분류 모델을 만들어 이를 토대로 새로운 결과 값을 예측
  2. 연관 규칙 (Association) : 데이터 항목 간 종속 관계를 찾아냄 (ex. 넥타이 구매자는 셔츠도 같이 구매함)
  3. 연속 규칙 (Sequence) : 연관 규칙에 ‘시간’ 관련 정보가 포함된 기법
  4. 데이터 군집화 (Clustering) : 유사한 특성을 지닌 그룹으로 분류하되 정보가 없는 상태에서 분류

데이터 마이닝 종류

  • 텍스트 마이닝 : 대량의 텍스트 속에서 의미있는 정보를 찾아내는 기법 (자연어, 문서 처리기술 적용)
  • 웹 마이닝 : 웹으로부터 얻는 방대한 정보 속에서 의미있는 정보를 찾아내는 기법 (데이터 마이닝 기술 응용)

빅데이터의 특성

  1. Volumn(양) : PB 수준의 대규모 데이터
  2. Variety(다양성) : 유형이 로그, 소셜, 위치 등 다양해짐
  3. Velocity(속도) : 정보가 빠르게 증가하고 수집됨

빅데이터 수집 및 처리 기술

  1. 비정형 데이터 수집 (ex. 척화(Chuckwa), 플럼(Flume), 스크라이브(Scribe)
  2. 정형 데이터 수집 (ex. 스쿱(Squoop), 하이호(Hiho), ETL, FTP
  3. 분산 데이터 저장/처리 (ex. HDFS(하둡 분산 파일 시스템), 맵리듀스(구글이 발표)
  4. 분산 데이터 베이스 (ex. HBase)

빅데이터 분석 및 처리 기술

  1. 빅데이터 분석
    • 데이터 가공 : ex. 피그(Pig), 하이브(Hive),
    • 데이터 마이닝 : ex. 머하웃(Mahout)
  2. 빅데이터 실시간 처리
    • 실시간 SQL 처리 : ex. 임팔라(Impala)
    • 요청 작업의 워크플로우 관리 : ex. 우지(Oozie)
  3. 분산 코디네이션
    • 분산 처리 기술 : ex. 주키퍼(Zookeeper)
  4. 분석 및 시각화
    • 시각화 기술 : ex. R

인터페이스(연계) 명세서

  • 연계에 필요한 항목을 명세화한 문서 구성요소
    1. 인터페이스 ID
    2. 최대 처리 횟수
    3. 데이터 크기 (평균/최대)
    4. 시스템 정보 (송수신 각각) : 시스템명, 업무명, 연계방식 등
    5. 데이터 정보 (송수신 각각) : 번호, 필드, 데이터 타입 등

연계 요구사항 분석 시 참고 문서

  1. 코드 정의서
  2. 테이블 정의서
  3. 응용 프로그램 구성도 (화면 설계서, 사용자 인터페이스 정의서 등)
  4. 시스템 구성도 (소프트웨어 구성도, 하드웨어 구성도, 네트워크 구성도 등)

연계 시스템의 구성

  1. 송신 시스템 : 연계할 데이터를 송신
  2. 수신 시스템 : 수신한 데이터를 변환해 저장하고 활용하는 시스템
  3. 중계 시스템 : 송신-수신 시스템 사이에서 송수신하고 모니터링하는 시스템

연계 데이터 표준화

  1. 인터페이스 데이터 공통부 : 표준 항목
  2. 인터페이스 데이터 개별부 : 개별 데이터
  3. 인터페이스 데이터 종료부 : 전송데이터의 끝을 알림

연계 매커니즘 수행 절차

  1. 연계 데이터 추출 및 생성
  2. 코드 매핑 (데이터 변환)
  3. 연계 테이블 또는 연계 파일 생성
  4. 로그 기록
  5. 연계 서버 또는 송수신 어댑터
  6. 전송
  7. 수신된 데이터 DB에 반영

연계 매커니즘 종류

직접 연계

  • 장점 : 구현이 쉽고 개발 기간이 짧음
  • 단점 : 결합도가 높음
  • 종류
    • DB Link : 수신 시스템에서 DB 링크를 생성하고 송신 시스템에서 해당 링크를 참조하는 방식
    • DB Connection : DB Connection Pool을 생성하고 해당 풀 명을 이용하여 연결하는 방식
      • 커넥션 풀 : DB와 연결된 커넥션을 미리 만들어 풀 속에 저장하고, 필요할 때마다 쓰고 반환하는 기법
    • API : 데이터를 주고 받을 때 어떤 방식으로 요청하고 제공받을 수 있는지, 규격을 정해 놓은 인터페이스
    • JDBC : JDBC 드라이버를 이용해 송신 시스템의 DB와 연결하는 방식
      • JDBC : 자바에서 데이터베이스에 접속할 수 있게 해주는 API
      • JDBC 드라이버의 구성 : Java Application - JDBC API - JDBC Driver Manager - JDBC Driver
    • 하이퍼링크 : 현재 페이지에서 다른 부분 또는 다른 페이지로 이동하게 해주는 속성

간접 연계

  • 장점 : 서로 상이한 네트워크, 프로토콜 연계 가능
  • 단점 : 성능 저하, 개발 비용 높음
  • 종류
    • EAI : 기업에서 운영되는 서로 다른 플랫폼 및 애플리케이션 간 연계를 돕는 솔루션
      • 구성요소
        • EAI 플랫폼
        • 어댑터 : EAI의 핵심장치. 애플리케이션을 연결하는 데이터 입출력 도구
        • 브로커 : 데이터 전송 시 포맷과 코드를 변환해 줌
        • 메시지 큐 : 비동기 메시지를 사용하는 프로그램 사이에서 송수신 해 주는 기술
        • 비즈니스 워크플로우 : 미리 정의된 워크플로우에 따라 업무 처리
      • 유형
        • Point-to-Point : 가장 기초적인 1:1 단순 통합방법
        • Hub & Spoke : 허브 시스템을 통한 중앙 집중 방식
        • Message Bus : 애플리케이션 사이에 미들웨어(버스)를 두어 연계
        • Hybrid : 그룹 내 = Hub & Spoke 그룹 간 = Message Bus
    • ESB : 기업에서 운영되는 서로 다른 플랫폼 및 애플리케이션을 하나의 시스템으로 관리할 수 있게 하는 아키텍처로, 미들웨어(버스)를 중심으로 애플리케이션 통합을 ‘느슨한 결합’ 방식으로 지원
    • Socket : 프로세스 간 통신의 접속점(IP 주소 + 포트넘버) 클라이언트 요청을 서버와 연결해 줌

    • EAI는 연계! ESB는 통합!

인터페이스 기능 구현

  1. 대상자 선택(대상이 될 데이터를 SQL로 선택)
  2. 인터페이스 데이터 생성(JSON 등 형식에 맞게 가공)
  3. 인터페이스 데이터 전송 요청
  4. 인터페이스 데이터 전송
  5. 인터페이스 데이터 수신
  6. 인터페이스 데이터 파싱
  7. 인터페이스 데이터 검증(포맷 및 제약조건 오류 검사)
  8. 후속 기능 수행(수신 시스템에 정의된 후속 기능 진행)
  9. 수신 결과 생성 및 전송
    10.수신 측의 처리 결과 반환

웹 서비스 방식

  1. SOAP : HTTP, HTTPS 등을 사용해 XML 기반의 메시지를 교환하는 프로토콜
  2. WSDL : Web Service Description Language. 웹 서비스명, 제공위치 등 웹 서비스의 정보가 기술된 XML 형식의 언어
  3. UDDI : WSDL의 등록, 검색을 위한 저장소 (공개적으로 접근 가능한 레지스트리)
  • XML 프로토콜이면 SOAP, 언어면 WSDL

JSON

  • 키-값 쌍으로 이루어진 데이터를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용한 포맷(AJAX에서 많이 사용)

JSON의 표현 자료형

  1. 숫자
  2. 문자열(항상 “” 따옴표 사용)
  3. 배열(대괄호 [] 표시)
  4. 객체(중괄호 {} 로 표시하며, 이름은 문자열을 쓴다)

XML

  • HTML의 단점을 보완하여, 특수한 목적을 갖는 마크업 언어

XML의 특징

  • 트리 구조이며 모든 태그에는 종료 태그가 필수
  • 속성값은 큰 따옴표(“)로 묶고 대소문자를 구분함

AJAX

  • 서버-클라이언트 간 비동기적으로 데이터를 교환하기 위한 기술

AJAX의 동작 원리

  1. 요청 이벤트 발생
  2. 자바스크립트 호출
  3. 자바스크립트가 XMLHttpRequest 객체를 사용해 서버에 요청 (비동기이므로 그동안 다른 일 처리)
  4. 서버는 XMLHttpRequest 객체를 가지고 AJAX 요청 처리
  5. 전달받은 데이터를 사용해 웹 페이지 일부만을 갱신하는 자바스크립트 호출

AJAX의 주요기술

  • XMLHttpRequest : 비동기 통신을 담당하는 자바스크립트 객체
  • XML : HTML의 단점을 보완하여, 특수한 목적을 갖는 마크업 언어
  • DOM : XML 문서를 트리 구조 형태로 접근하게 해주는 API
  • XSLT(eXtensible Stylesheet Language Transformations) : XML 문서를 다른 XML 문서로 변환하는 데 사용하는 언어
  • HTML : 웹 문서를 표현하는 마크업 언어
  • CSS : 마크업 언어가 표시되는 방법을 기술하는 언어

REST

  • HTTP URI로 자원을 표시하고, HTTP 메서드를 통해 해당 자원에 대한 삽입, 삭제, 갱신 등의 명령을 적용하는 아키텍처

REST 메서드의 종류

  1. POST (Create)
  2. GET (Read)
  3. PUT (Update)
  4. DELETE (Delete)

REST의 구성

  1. 리소스
  2. 메서드
  3. 메시지

DB 암호화 기법

  1. API 방식 : 애플리케이션 서버에 암호 모듈 적용(애플리케이션 서버에 부하 발생)
  2. 플러그인 방식 : DB 서버에 암호 모듈 적용(DB 서버에 부하 발생)
  3. TDE 방식 : DBMS 커널이 자체적으로 암호화 기능 수행 (Transparent Data Encryption)
  4. 하이브리드 방식 : API + 플러그인 (부하 분산)

인터페이스 구현 검증 도구

  1. xUnit : Java, C++ 등 다양한 언어를 지원하는 단위 테스트 프레임워크
  2. STAF : 각 테스트 대상 분산 환경에 ‘데몬’을 사용하여 테스트를 수행
  3. FitNesse : 웹 기반 테스트 케이스를 지원
  4. NTAF : STAF(재사용 및 확장성) + FitNesse(협업 기능) 장점을 통합한 NHN의 프레임워크
  5. Selenium : 다양한 브라우저와 개발 언어를 지원하는 웹 애플리케이션 테스트 프레임워크
  6. Watir : 루비 기반의 웹 애플리케이션 테스트 프레임워크

인터페이스 감시 도구

  1. 스카우터 : 애플리케이션 및 DB 모니터링 가능한 감시 도구
  2. 제니퍼 : 개발부터 운영에 이르기까지 전 생애주기 동안 모니터링 가능한 감시 도구

오류 처리 방법

  1. 화면에서 오류를 인지하도록 구현
  2. 오류 로그 생성
  3. 관련 테이블에 오류 사항 기록

프로그래밍 언어 분류(실행방식에 따라)

  1. 명령형 언어(= 절차형 언어) : 명령들이 순차적으로 실행되는 방식
    • ex. FORTRAN, COBOL, PASCAL, C, ALGOL, BASIC
  2. 객체지향 언어 : 객체 간 메시지 통신을 이용하는 방식
    • ex. 자바, C++
  3. 함수형 언어 : 수학수식과 같은 함수들로 프로그램을 구성하여 호출하는 방식
    • ex. 리스프(LISP), 하스켈(Haskell)
  4. 논리형 언어 : 논리 문장을 이용하여 표현하는 방식
    • ex. 프롤로그(Prolog)
  5. 스크립트 언어
    • PHP : 동적 웹페이지를 위한 언어
    • Perl : 실용성 모토, 인터프리터
    • Python, JavaScript
  6. 선언형 언어
    • 함수형 언어
    • 논리형 언어
    • 특수분야 언어 : SQL(DBMS 관리를 위한 질의어)

프로그래밍 구현 기법

  1. 컴파일 방식 : 고급 언어 -> 기계어로 번역
    • ex. FORTRAN, PASCAL, C, C++
  2. 인터프리터 방식 : 명령문을 하나씩 번역하고 실행하는 방식
    • ex. BASIC, LISP, PHP, Perl, Prolog
  3. 혼합형 방식 : 고급 언어를 컴파일하여 중간 언어로 변환 후 인터프리터가 번역을 실행하는 방식
    • ex. 자바

절차적 프로그래밍

  1. FORTRAN : 과학 기술 전문 언어로, 고급 수학 함수들 사용 가능(컴파일 방식)
  2. C : 유닉스 운영체제에서 사용하기 위한 언어(컴파일 방식)
  3. 알골 : 알고리즘 연구개발 목적
  4. 베이직 : 교육용으로 개발된 언어(인터프리터 방식)

객체지향 프로그래밍

  1. C++ : C 언어에 객체지향 프로그래밍 개념 추가(컴파일 방식)
  2. C# : MS에서 개발. 불안전 코드(Unsafe Code) 같은 기술을 통해 상호 운용성 확보
  3. 자바 : 웹 애플리케이션 개발에 가장 많이 사용되는 언어
  4. 델파이 : 파스칼 문법 + 여러 기능. Windows 아래에서 모든 부분 프로그래밍 가능

객체지향 프로그래밍의 구성요소

  1. 객체 : 개체 + 속성 + 메서드로 이루어진 인스턴스
  2. 클래스 : 객체를 표현하는 추상 데이터 타입
  3. 메서드 : 객체 간 통신

파이썬 자료형

  • List : 순서 있는 배열
    • 값 맨 뒤에 삽입 : append(value)
    • 중간에 삽입 : insert(index, value)
    • 삭제 : remove(value)
  • Dictionary : 키-값 쌍
    • 값 참조 : 딕셔너리이름[키] = 값
    • 값 삭제 : del 딕셔너리이름[키]
  • Set : 중복 허용 X, 순서 없음
    • 값 추가 : add(value)
    • 값 삭제 : remove(value)

자바 자료형

  • HashMap : 키-값 쌍
    • 값 추가 : put(key, value)
    • 값 삭제 : remove(key)
    • 값 얻기 : get(key)
  • ArrayList : 순서 있는 배열
    • 값 맨 뒤에 추가 : add(value)
    • 값 중간에 삽입 : add(index, value)
    • 값 삭제 : remove(index)
    • 인덱스 값 참조 : get(index)
  • HashSet : 중복 허용 X, 순서 없음
    • 값 추가 : add(value)
    • 값 제거 : remove(value)

라이브러리

  • 효율적인 개발을 위해 필요한 프로그램들을 모은 집합체(모듈과 패키지를 총칭)
    • 모듈 : 변수, 함수 등을 모아둔 파일
    • 패키지 : 모듈을 구조화한 라이브러리

라이브러리 구성

  1. 도움말
  2. 설치 파일
  3. 샘플 코드

클래스 관련 용어

인터페이스

  • 자바에서 다향성을 극대화하기 위한 문법으로 추상 메서드와 상수만을 멤버로 갖는다.

추상 클래스

  • 자식 클래스에서 상위 클래스의 미구현 추상 메서드를 구현하는 것

추상 클래스 구현

  • C++ : 메서드 뒤에 = 0 붙임
  • 자바 : 클래스명과 메서드명 앞에 abstract 붙임
  • 파이썬 : 메서드 내부에 pass 키워드 사용

상위 클래스 접근

  • C++ : 부모클래스::메서드명()
  • 자바 : super.메서드명()
  • 파이썬 : super().메서드명()

오버로딩

  • 같은 이름의 메서드를 매개변수만 다르게 하여 여러 개 정의하는 것

오버라이딩

  • 하위 클래스에서 상위 클래스 메서드를 재정의하는 것. C++은 virtual 키워드 필요

상속

  • 어떤 객체의 변수와 메서드를 다른 객체가 물려받는 것

상속 문법

  • C++ : class 자식클래스 : public 부모클래스 {}
  • 자바 : class 자식클래스 extends 부모클래스 {}
  • 파이썬 : class 자식클래스 (부모클래스):

생성자

  • 해달 클래스의 객체가 생성될 때 자동으로 호출되는 메서드
  • C++, 자바 : 클래스명과 동일하면 생성자
  • 파이썬 : __int__ 메서드명 사용하면 생성자

소멸자

  • 객체가 소멸될 때 호출되는 메서드. 할당된 메모리를 해제하는 용도로 사용됨
  • C++ : 클래스명과 동일하나 클래스명 앞에 ~ 기호를 붙이면 소멸자
  • 자바 : finalize 메서드명을 사용하면 소멸자
  • 파이썬 : __del__ 메서드명 사용하면 소멸자

자신 클래스 참조

  • C++, 자바는 this->, this.
  • 파이썬은 self.

구조체

  • 기본 타입을 이용해 새롭게 정의하는 자료형
  • C/C++ 한정 struct로 선언 후 사용

열거체

  • 정수형 상수에 이름을 붙여 쓰기 편하게 만드는 것

포맷 스트링

  • %c : 문자
  • %s : 문자열
  • %d : 10진수
  • %x : 16진수
  • %o : 8진수
  • %f : 실수(6자리까지)

비트 연산자

  • & : 같은 비트 값이 모두 1이면 1 - AND
  • | : 같은 비트 중 하나라도 1이면 1 - OR
  • ^ : 같은 비트값이 서로 다르면 1 - XOR
  • ~ : 모든 비트값을 반대로 뒤집음 - NOT

시프트 연산자

  • << 왼쪽으로 비트 이동 : * 2 효과가 있다.
  • >> 오른쪽으로 비트 이동 : / 2 효과

식별자 표기법

  • 헝가리안 표기법 : 식별자 앞에 자료형을 붙이는 표기법
  • 스네이크 표기법 : 식별자에 여러 단어가 이어질 때 각 단어 사이에 언더바를 넣는 표기법
  • 카멜 표기법 : 식별자에 여러 단어가 이어질 때 첫 단어의 시작만 소문자로, 각 단어의 첫 글자는 대문자로 쓰는 표기법
  • 파스칼 표기법 : 식별자에 여러 단어가 이어질 때 각 단어의 첫 글자는 대문자로 쓰는 표기법

리스트 인덱스

  • [0] [1] … [n-2] [n-1] [-n] [-(n-1)] [-2] [-1]

리스트 슬라이싱

  1. 시작 인덱스 : 생략 시 처음부터
  2. 종료 인덱스 : 종료 인덱스 전 까지만 슬라이싱하며 생략 시 마지막까지
  3. 스텝 : 생략 시 1
a = [7, 6, 3, 4, 0]
print(a[:4:2])
  • 출력 : [7,3]
a = "Hello Phython"
b = a[0:3]
c = a[-4:-1]
  • 출력 : Heltho

트랜잭션

  • DB 시스템에서 하나의 논리적 기능을 정상적으로 수행하기 위한 작업 단위 (특성 : ACID)
  • 원자성(Atomicity) : All or Nothing. 연산 전체는 성공 또는 실패여야 하며, 하나라도 실패할 경우 전체가 취소되어야 하는 특성
  • 일관성(Consistency) : 트랜잭션이 성공적으로 실행되면, DB는 일관된 상태를 유지해야 하는 특성 (기법 : 병행(동시성) 제어)
  • 격리성(Isolation)(독립성) : 트랜잭션 실행 중 중간 연산 결과에 다른 트랜잭션이 접근할 수 없다. (기법 : 고립화 수준)
  • 영속성(Durability)(지속성) : 성공적으로 완료된 트랜잭션 결과는 DB에 영속적으로 저장되어야 한다. (기법 : 회복기법)

트랜잭션의 상태 변환

  1. 활동상태(Active) : 트랜잭션 실행 중
  2. 부분 완료 상태(Partially Committed) : 마지막 명령문 실행 상태
  3. 완료 상태(Committed) : 성공적으로 완료
  4. 실패 상태(Failed) : 정상적 실행 불가
  5. 철회 상태(Aborted) : 트랜잭션 취소

TCL

  • 트랜잭션 제어 언어
  • 트랜잭션 결과를 허용하거나 취소하기 위한 제어 언어
  • COMMIT, ROLLBACK, CHECKPOINT

병행제어

  • 다수 사용자 환경에서 일관성 유지를 위해 제어하는 기법

병행제어 미보장 문제점

  • 갱현모연
  • 갱신손실(Lost Update)
  • 현황파악오류(Dirty Read)
  • 모순성(Inconsistency)
  • 연쇄복귀(Cascading Rollback)

병행제어 기법

  1. 로킹(Locking) : 트랜잭션의 순차적 진행을 보장하는 기법
    • 로킹단위 : 한 번에 로킹할 수 있는 객체 크기
    • 로킹단위가 작을수록 DB 공유도는 증가하지만 로킹 오버헤드 증가
  2. 낙관적 검증 기법(Validation) : 일단 검증 없이 진행 후, 종료한 다음 검증을 수행해 반영
  3. 타임 스탬프 순서(Time Stamp Ordering) : 트랜잭션이나 데이터에 타임 스탬프를 부여하여, 그 시간에 따라 작업을 수행
  4. 다중버전 동시성 제어(MVCC; Multi Version Concurrency Control) : 트랜잭션의 타임스탬프와 접근하려는 데이터의 타임스탬프를 비교해, 적절한 버전을 선택하여 접근하도록 하는 기법

고립화

  • 무결성을 해치지 않기 위해 잠금을 설정하는 정도

고립화 수준 종류

  1. Read Uncommitted : 연산 중인 데이터를 다른 트랜잭션이 읽는 것을 허용
  2. Read Committed : 연산이 완료되기 전까지 다른 트랜잭션이 읽는 것을 제한
  3. Repetable Read : 선행 트랜잭션이 특정 데이터를 읽을 때, 해당 데이터의 갱신/삭제를 제한
  4. Serializable Read : 선행 트랜잭션이 특정 데이터 영역을 읽을 때, 해당 영역 전체의 접근을 제한

회복 기법

  1. 로그 기반 회복 기법
    • 지연 갱신 회복 기법 : 트랜잭션 완료 전에는 로그에만 기록. 장애 발생 시 로그를 폐기
    • 즉각 갱신 회복 기법 : 트랜잭션 갱신 결과를 바로 DB에 반영. 장애 발생 시 로그를 참고하여 되돌림
  2. 체크포인트 회복 기법 : 체크포인트 이전으로 복원
  3. 그림자 페이징 회복 기법 : 트랜잭션 수행 시 복제본을 생성해 이를 이용해 복구

SQL 문법

  1. DDL(정의어) : Create, Alter, Drop, Truncate
  2. DML(조작어) : Select, Insert, Update, Delete
  3. DCL(제어어) : Grant, Revoke

도메인

  • 하나의 속성이 가질 수 있는 원자값의 집합

스키마

  • DB의 구조, 제약조건 등의 정보를 담고 있는 구조

스키마 3계층

  1. 외부 스키마 : 사용자(개발자) 관점에서의 구조. 사용자 뷰를 나타냄
  2. 개념 스키마 : 제약조건, 권한, 보안 등 전체적인 논리 구조
  3. 내부 스키마 : 물리적 저장장치 관점에서의 구조. 레코드 형식, 물리적 순서 등

테이블 관련 용어

  • 테이블 : 데이터를 저장하는 공간 (=릴레이션, =엔터티)
  • 튜플 : =Row. =레코드. 한 릴레이션에서 중복되는 튜플은 존재 불가
  • 카디널리티 : 튜플의 개수
  • 애트리뷰트 : =Column
  • 디그리 : 애트리뷰트의 개수

테이블 관리 명령어

  • 테이블 생성
CREATE TABLE 테이블명 (컬럼명 데이터타입 [제약조건]);
  • 테이블 생성 제약조건
    • PRIMARY KEY
    • FOREIGN KEY REFERENCES 테이블(컬럼)
    • NOT NULL
    • UNIQUE
    • CHECK (조건 OR 조건)
    • DEFAULT
  • 테이블 변경
ALTER TABLE 테이블명 ADD 컬럼명 데이터타입 [제약조건];
ALTER TABLE 테이블명 MODIFY 컬럼명 데이터타입 [제약조건];
ALTER TABLE 테이블명 DROP 컬럼명;
  • 테이블 삭제
DROP TABLE 테이블명 [CASCADE | RESTRICT];
TRUNCATE TABLE 테이블명;

  • 데이터의 독립성을 보장하고 조작 연산을 간소화할 수 있는 논리 테이블
  • ALTER로 변경 불가
  • 자체 인덱스 불가

뷰 속성

  • REPLACE : 기존 테이블 존재 시 재생성
  • FORCE : 기본 테이블 관계 없이 뷰 생성
  • NO FORCE : 기본 테이블이 있을 때만 뷰 생성
  • WITH CHECK OPTION : 서브 쿼리 내 조건을 만족하는 행만 변경
  • WITH READ ONLY : DML(조작어) 불가

뷰 관리 명령어

  • 뷰 생성
CREATE [OR REPLACE] VIEW 뷰이름 AS SELECT 이름 FROM 학생 WHERE 성별 = 'F';
  • 뷰 삭제
DROP VIEW 이름;

인덱스

  • DB 시스템에서 빠른 검색을 위한 데이터 구조
  • 인덱스가 없으면 Table Full Scan을 하지만, 인덱스가 있으면 Index Range Scan을 하므로 검색 속도가 빠르다.

인덱스 관리 명령어

  • 인덱스 생성
CREATE INDEX 인덱스명 ON 테이블(컬럼);
  • 인덱스 변경
ALTER INDEX 인덱스명 ON 테이블(컬럼);
  • 인덱스 삭제
DROP INDEX 인덱스명;

인덱스 종류

  1. 비트맵 인덱스 : 컬럼 개수가 적고 수정이 적을수록 좋은 인덱스(생년월일, 상품번호 등)
  2. 단일 인덱스 : 하나의 컬럼으로만 구성된 인덱스
  3. 순서 인덱스 : 데이터가 정렬된 순서로 생성되는 인덱스
  4. 함수기반 인덱스 : 함수를 적용해 만든 인덱스
  5. 해시 인덱스 : 해시 함수를 통해 키 값으로 데이터에 접근하는 인덱스(튜플 양에 무관하게 접근 비용 동일함)
  6. 결합 인덱스 : 두 개 이상의 컬럼으로 구성된 인덱스
  7. 클러스터드 인덱스 : PK 기준으로 레코드를 묶어 데이터의 물리적 순서에 따라 생성된 인덱스

인덱스 컬럼 선정

  • 적정 분포도 : 10-15%
    • 분포도 : 특정 컬럼 값이 테이블에 평균적으로 분포된 정도
  • 수정이 빈번하지 않은 컬럼이 분포도가 좋은 컬럼 - 단일 인덱스
  • 자주 결합되는 컬럼 - 결합 인덱스

인덱스 스캔 방식

  1. 인덱스 범위 스캔 : ⬇️➡️ 루트 블록에서 리프 블록까지 수직 탐색 후, 리프 블록을 수평 탐색
  2. 인덱스 전체 스캔 : ➡️➡️ 리프 블록을 처음부터 끝까지 수평 탐색
  3. 인덱스 단일 스캔 : ⬇️⬇️ 수직 탐색으로만 스캔
  4. 인덱스 생략 스캔 : 선두 컬럼이 조건 절에 없더라도 인덱스를 활용하는 스캔 (필요없는 부분은 과감히 스킵)

클러스터링

  • 검색 속도 향상을 위해 물리적으로 저장하는 것
  • 분포도가 넓을 수록(=좋지 않을 수록) 클러스터링이 적합

파티셔닝

  • 테이블을 논리적 단위로 쪼개는 것

파티셔닝 유형

  1. 레인지 파티셔닝 : 숫자나 날짜와 같은 범위 기준으로 파티셔닝
  2. 해시 파티셔닝 : 해시 함수의 값을 기준으로 파티셔닝(균등 분할 가능)
  3. 리스트 파티셔닝 : 값 목록을 기준으로 파티셔닝
  4. 컴포지트 파티셔닝 : 2개 이상의 파티셔닝을 결합

파티셔닝 장점

  1. 성능 향상 : 액세스 범위가 줄어드니까
  2. 가용성 향상 : 데이터 훼손 가능성이 적으니까
  3. 백업 기능
  4. 경합 감소

참조 무결성

  • 외래키 값은 항상 참조되는 테이블의 기본키여야 함

참조 무결성을 위한 옵션

  1. RESTRICT : 참조 무결성 위배 시 연산 거절
  2. CASCADE : 해당 투플을 참조하는 튜플도 함께 삭제
  3. SET NULL : 해당 튜플을 참조하는 튜플의 외래키에 NULL 값 삽입(단, NOT NULL 제약조건 시 연산 거절)

조인

  • 두 개 이상의 테이블을 연결해 데이터를 검색하는 방법

조인 명령어

SELECT A.번호, B.가격 
FROM 상품목록 A JOIN 가격목록 B ON A.번호 = B.번호 
WHERE A.번호 IS NOT NULL;

논리적 조인

  1. 내부 조인 : 양 테이블의 공통 컬럼의 값이 같을 때 사용 INNER JOIN
  2. 외부 조인
    • 왼쪽 외부 조인 : 왼쪽 테이블 전체 + 오른쪽 테이블 동일 데이터 LEFT OUTER JOIN
    • 오른쪽 외부 조인 : 오른쪽 테이블 전체 + 왼쪽 테이블 동일 데이터 RIGHT OUTER JOIN
    • 완전 외부 조인 : 양쪽 모든 데이터 추출 FULL OUTER JOIN
  3. 교차 조인 : 조인 조건이 없는 모든 데이터 조합 추출 CROSS JOIN
  4. 셀프 조인 : 자기 자신에게 별칭을 지정한 후 조인

물리적 조인

  1. Nested-Loop Join(중첩 반복 조인)
  2. Sort-Merge Join(정렬 합병 조인)
  3. Hash Join(해시 조인)

집합 연산자

  • 2개 이상의 테이블의 질의의 결과를 합치는 연산자(검색을 위해 합치는 조인과 다름)
  • UNION 연산자 : 합집합. 중복을 제거하고 모두 포함
  • UNION ALL 연산자 : 완전 합집합. 중복까지 포함
  • INSERT 연산자 : 교집합. 겹치는 데이터만 추출
  • MINUS 연산자 : 차집합. 첫 번째 쿼리에만 있고, 두 번째 쿼리에만 없는 결과만 추출

DCL 명령어

  • 권한 부여
GRANT 권한 ON 테이블 TO 사용자 [WITH GRANT OPTION];
  • 권한 회수
REVOKE 권한 ON 테이블 FROM 사용자 [CASCADE CONSTRAINT];

DBMS_OUTPUT

  • 버퍼로부터 메시지를 읽어오는 인터페이스 패키지
    DBMS_OUTPUT.PUT(문자열); // 문자열 출력하는 프로시저
    

절차형 SQL

  • SQL 안에서도 절차 지향적인 프로그래밍이 가능하도록 하는 트랜잭션 언어

절차형 SQL의 종류

  1. 프로시저 : 일련의 쿼리들을 하나의 함수처럼 실행하기 위한 쿼리의 집합
  2. 사용자 정의 함수 : 일련의 SQL 처리 후, 그 결과를 단일값으로 반환
  3. 트리거 : DB 시스템에서 삽입, 삭제, 갱신 등의 이벤트 발생 시 관련 작업이 자동으로 수행

튜닝(쿼리 성능 개선)

  • SQL 실행 계획을 수정해 프로시저 성능을 개선하는 것

튜닝 개선 절차

  1. 문제 있는 SQL 식별(APM 모니터링 도구 사용)
  2. 옵티마이저 통계 확인
  3. SQL문 재구성
  4. 인덱스 재구성
  5. 실행계획 유지관리

옵티마이저

  • SQL을 수행할 최적의 처리경로를 찾는 DBMS의 핵심엔진

옵티마이저 유형

  1. RBO : 규칙 기반 옵티마이저. 사전에 등록된 규칙에 따라 실행 계획을 선택함
  2. CBO : 비용 기반 옵티마이저. 모든 접근 경로를 고려해 실행 계획을 선택함
    • 실행 계획(Execution Plan) : 옵티마이저가 생성한 처리경로

옵티마이저의 역할

  1. 쿼리 변환 : SQL을 표준화된 형태로 변환
  2. 비용 산정 : 카디널리티, 비용 등을 계산
  3. 계획 생성
    • 힌트를 통해 옵티마이저의 실행 계획을 변경이 가능하다.

개발 도구 분류

  1. 빌드 도구
  2. 구현 도구
  3. 테스트 도구
  4. 형상관리 도구

형상관리(CM)

  • 소프트웨어 개발 과정에서 발생하는 변경사항을 관리하는 것

형상관리 절차

  1. 형상 식별(관리할 대상 식별 후 번호 부여)
  2. 형상 통제(형상통제위원회 운영, 베이스라인 관리)
    • 베이스라인 : 개발 산출물 변화를 통제하는 시점
  3. 형상 감사(무결성 평가)
  4. 형상 기록

형상관리 도구 유형

  1. 공유 폴더 방식(개발이 완료된 파일을 공유 폴더에 복사)
  2. 클라이언트/서버 방식(중앙에 버전관리 시스템이 동작)
  3. 분산 저장소 방식(로컬 저장소/원격 저장소 분산)

형상관리 도구별 특징

  1. RCS : 공유폴더 방식(잠금 처리 후 1명만 수정)
  2. CVS : 클라이언트/서버 방식(동시 접근 가능)
  3. SVN : 클라이언트/서버 방식
  4. Clear Case : 복수 클라이언트/복수 서버(필요시 서버 증설 가능)
  5. Bitkeeper : 분산 저장소 방식
  6. Git : 분산 저장소 방식

형상관리 통제 위원회(CCB)

  • 형상관리 방침을 정하고 관리하는 조직

모듈

  • 그 자체로 하나의 완전한 기능을 수행할 수 있는 독립된 실체
  • 기능 단위로 분해, 추상화되어 재사용 가능한 단위

모듈화

  • 성능 향상, 유지 관리 등을 위해 기능 단위 모듈로 분해하는 기법
  • 모듈 단위로 설계하는 기법

팬인 팬아웃

  • 팬인(Fan-In) : 어떤 모듈을 제어(호출)하는 모듈의 수
  • 팬아웃(Fan-Out) : 어떤 모듈에 의해 제어(호출)되는 모듈의 수

루틴

  • 특정 동작을 수행하는 일련의 코드
  • 메인 루틴 : 전체의 개략적인 동작 절차를 표시하며 서브 루틴을 호출하는 루틴
  • 서브 루틴 : 메인 루틴에 의해 호출되는 루틴

웹서버

  • 정적 콘텐츠를 처리하는 서버(ex. 아파치 웹 서버, 구글 웹 서버 등)

웹 어플리케이션 서버(WAS)

  • 동적 콘텐츠(JSP, 서블릿)를 처리하는 서버(ex. Tomcat, Weblogic 등)

서버 프로그램 구현 방법

  • DTO/VO -> SQL -> DAO -> Service Class -> Controller Class
    • DTO : Data Transfer Object. 화면에서 전달받은 데이터를 전송하는 객체
    • VO : Value Object. 간단한 객체
    • DAO : Data Access Object. 실질적으로 DB에 접근하는 객체

배치 프로그램

  • 사용자와 상호작용 없이 일련의 작업들을 묶어 일괄적으로 처리하는 방법

배치 프로그램 유형

  1. 이벤트 배치 : 사전에 정의된 조건이 충족될 때 실행
  2. 온디맨드 배치 : 사용자의 요구가 있을 때 실행
  3. 정기 배치 : 정해진 시점에 실행

배치 스케줄러

  • 배치(일괄 처리)를 위해 반복적인 작업을 지원하는 도구

배치 스케줄러 종류

  1. 스프링 배치 : 스프링 프레임워크에서 사용하는 스케줄러
  2. 쿼츠 스케줄러 : Job과 Trigger를 분리하는 오픈 소스 스케줄러

쿼츠 크론 표현식

  • 스케줄러에서 배치 수행시간을 설정하기 위한 표현식

SW 개발 보안 3대 요소

  1. 기밀성 : 인가되지 않은 접근에 정보 노출을 차단하는 특성
  2. 무결성 : 정당한 방법으로만 데이터를 변경할 수 있으며, 데이터의 정확성을 보장하는 특성
  3. 가용성 : 권한을 가지고 있으면 서비스를 지속해서 사용할 수 있도록 하는 특성

SW 개발 보안 용어

  1. 자산
  2. 위협
  3. 취약점
  4. 위험

해킹 종류

  • DRDos 공격 : 공격대상이 반사 서버로부터 다량의 응답을 받도록 하는 공격
  • DDos 공격 : 여러 대의 공격자를 분산 배치 후 동시에 동작시키는 DoS 공격(대역폭 소진 공격 & 서비스 마비 공격)
    • 구성요소
      1. 공격자 : 해커 컴퓨터
      2. 마스터(Master) : 공격자의 명령을 받고 에이전트를 관리하는 시스템
      3. 핸들러(Handler) : 마스터 시스템의 프로그램
      4. 에이전트(Agent) : 직접 공격하는 시스템
      5. 데몬(Daemon) : 에이전트 시스템의 프로그램
    • Stacheldraht : DDoS의 에이전트 역할을 하는 도구
  • UDP 플러딩 : 대량의 UDP 패키지를 임의의 포트번호로 전송하지만 응답 메시지는 공격자에 전달되지 않아 자원을 고갈시키는 공격
    • Trino : UDP 플러딩 공격 도구
    • TFN : UDP 플러딩, SYN 플러딩, 스머프 등등 여러 DDoS 공격이 가능한 도구
  • SYN 플러딩 : ACK를 발송하지 않고 SYN 패킷만 보내 점유하여 자원을 고갈시키는 공격
  • 죽음의 핑 : ICMP 패킷(핑)을 아주 크게 만들어 과부하시키는 공격
  • 스머프/스머핑 : 출발지 IP를 공격 대상의 IP로 변조하여 브로드캐스팅으로 ICMP Echo 패킷 요청을 보내 과부하시키는 공격
  • 티어 드롭 : 조작된 IP 패킷 조각을 보내 재조립 과정에서 오류를 발생시키는 공격
  • 랜드 어택 : 출발지 IP와 도착지 IP를 같은 주소로 만들어, 자기 자신에게 응답을 보내도록 하는 공격
  • 봉크/보잉크 : IP 패킷의 재전송, 재조합 과정에서 오류를 발생시키는 공격(봉크 : 같은 시퀀스 번호 / 보잉크 : 시퀀스 번호에 빈 공간)
  • Slow HTTP Read Dos : TCP 윈도 크기와 데이터 처리율을 감소시킨 뒤 다량의 HTTP 요청을 보내는 공격
  • Slow HTTP Header Dos : =Slowloris. 헤더 정보를 조작하여 웹 서버가 온전한 헤더정보가 올 때까지 기다리게 하는 공격
  • Slow HTTP Post Dos : =RUDY. 헤더의 Content-Length를 아주 크게 만들고 데이터를 아주 소량으로 보내 연결을 유지하게 하는 공격
  • HTTP GET 플러딩 : 과도한 GET 메시지를 통해 과부하시키는 공격(캐싱서버가 아닌 웹 서버가 직접 처리하도록 유도)
  • Hulk Dos : 공격자가 공격대상의 URL을 계속 변경하면서(=차단 정책 우회) 다량의 GET 요청을 보내는 공격
  • Hash Dos : 웹 서버의 해시 테이블에 해시 충돌을 일으켜 자원을 소모시키는 공격
  • Dos 공격 : 시스템의 자원을 고갈시켜 서비스 거부를 유발하는 공격
  • 스니핑 : 공격대상에 직접 공격을 가하지 않고 몰래 정보를 들여다보는 수동적인 공격 기법
  • 패스워드 크래킹
    1. 사전 크래킹 Dictionary Cracking : IP/PW가 될 가능성이 있는 단어를 대입하는 공격
    2. 무차별 크래킹 Brute Force Cracking : PW로 사용될 수 있는 문자를 무작위로 대입하는 공격
    3. 패스워드 하이브리드 공격 Password Hybrid Attack : 사전 + 무차별을 결합하여 공격
    4. 레인보우 테이블 공격 Rainbow Table Attack : 크래킹하려는 해시값을 테이블에서 검색하는 공격
  • 네트워크 스캐너/스니퍼 : 공격자가 취약점을 탐색하는 도구
  • ICMP Redirect 공격 : ICMP Redirect 메시지를 공격자가 원하는 형태로 위조해 패킷을 스니핑하는 공격
  • IP 스푸핑 : IP를 위조하여 인증된 시스템인 것처럼 IP를 위조하여 목표 시스템의 정보를 빼내는 공격
  • ARP 스푸핑 : MAC 주소를 위장하여 패킷을 스니핑하는 공격
  • 트로이 목마 : 겉으로는 정상적이나 실행하면 악성코드가 실행되는 프로그램
  • 버퍼 오버플로우 공격 : 메모리의 버퍼 크기를 초과하는 데이터를 입력해 프로세스 흐름을 변경시키는 공격 기법
    • 버퍼 오버플로우 공격 대응
      1. 스택가드 (활용 : 카나리(무결성 체크용 값)를 미리 삽입해 두고 버퍼 오버플로우 발생 시 카나리값을 체크해 변한 경우 복귀 주소를 호출하지 않음)
      2. 스택쉴드 (활용 : 함수 시작시 복귀주소를 특수 스택에 저장해 두고 함수 종료시 스택 값을 비교해 다를 경우 오버플로우로 간주하고 중단)
      3. ASLR (활용 : Address Space Layout Randomization; 주소 공간 배치 난수화. 주소 공간 배치를 난수화하여 실행 시마다 메모리 주소를 변경시키는 것)
      4. 안전한 함수 사용 : 버퍼오버플로우에 취약한 scanf() 대신 fscanf() 등을 사용
      5. 실행 제한 : 스택에서의 쓰기 권한 제한 등
  • 스택 버퍼 오버플로우 공격 : 스택 영역(지역변수, 매개변수가 저장되는 영역)의 버퍼에 오버플로우를 일으켜서 복귀주소를 바꾸는 공격 기법
  • 힙 버퍼 오버플로우 공격 : 힙 영역(사용자가 직접 관리 가능한 메모리 영역)의 버퍼에 오버플로우를 일으켜서 데이터를 오염시키는 공격 기법
  • 포맷 스트링 공격 : 포맷 스트링을 인자로 하는 함수의 취약점을 이용한 공격
  • 키로거 공격 : 키보드 움직임을 탐지해 주요정보를 빼가는 공격
  • 루트킷 : 불법 해킹에 사용되는 기능을 제공하는 프로그램 모음
  • 백도어 : 정상적인 인증절차를 우회하는 기법
  • 레이스 컨디션 공격 : 프로세스가 임시 파일을 만들 때 실행 중에 끼어들어 임시파일을 심볼릭 링크하는 공격
    • 심볼릭 링크 : 링크를 연결하여 원본 파일을 사용하는 것과 같은 효과를 내는 링크
  • 스피어피싱 : 특정 대상 선정 후, 일반적인 메일로 위장한 메일을 발송해 개인정보를 탈취하는 공격
  • 스미싱 : SMS + 피싱. 문자메시지를 통해 개인정보를 탈취하거나 소액결제를 유도하는 공격
  • 공급망 공격 : SW 개발사의 코드를 수정하거나 배포 서버에 접근해 파일을 변경하는 공격
  • 큐싱 : QR코드 + 피싱. QR을 이용한 피싱 공격
  • APT 공격 : 특정 대상을 목표로 한 지능적/지속적인 공격
    • 대응 : 사이버 킬체인 - 공격형 방위 시스템. APT 공격의 방어 모델
  • 봇넷 : 악성 프로그램에 감염된 컴퓨터들이 네트워크로 연결된 형태
  • 악성 봇 : 해커의 명령에 의해 원격으로 제어되는 프로그램(DDos 등에 악용)
  • : 스스로를 복제하여 전파하는 악성 프로그램
  • 제로데이 공격 : 보안 취약점이 공표되기 전 신속히 이뤄지는 공격
  • 이블 트윈 공격 : 합법적인 Wifi 제공자처럼 행세하며 연결된 사용자 정보를 탈취하는 공격
  • 랜섬웨어 : 암호화 후 복호화를 위해 돈을 요구하는 악성 소프트웨어
  • Tcpdump : 스니핑 도구(패킷 내용을 출력하는 프로그램)

  • XSS : 검증되지 않은 입력데이터가 포함된 웹페이지를 열람할 때, 웹페이지에 포함된 부적절한 스크립트가 실행되는 공격
  • Stored XSS : 악성 스크립트가 포함된 웹페이지를 읽을 때 감염되는 기법
  • DOM XSS : DOM 기반 XSS 취약점이 있는 브라우저를 대상으로 한 기법
  • Reflected XSS : 악성 URL 클릭 시 공격 스크립트가 반사되는 기법
  • CSRF : =Cross Site Request Forgery(사이트 간 요청 위조) 사용자가 자신의 의지와 무관하게 공격자가 의도한 행위를 요청하게 하는 공격
  • SQL Injection : 악의적인 SQL 구문을 삽입, 실행시켜 DB 정보를 탈취하거나 조작하는 공격
  • Union SQL Injection : UNION 연산자를 이용해 쿼리 결과를 결합해 공격
  • Form SQL Injection : HTML Form 기반 인증의 취약점을 이용한 공격
  • Stored Procedure SQL Injection : 저장 프로시저를 이용해 공격
  • Maxx SQL Injection : 한 번의 공격으로 대량의 DB값을 변조하는 공격
  • Error-Based SQL Injection : 에러값을 기반으로 한 단계씩 점진적으로 정보를 캐내는 공격
  • Blind SQL Injection : 쿼리 결과의 참/거짓을 통해 공격

  • 부 채널 공격(Side Channel Attack) : 전격 소비와 같은 물리적 특성을 측정해 비밀 정보를 알아내는 공격
  • 드라이브 바이 다운로드(Drive By Download) : 악성 스크립트를 웹 서버에 설치 후, 사용자를 멀웨어 서버로 연결해 감염시키는 공격
  • 워터링 홀(Watering Hole) : 특정인을 표적으로 삼아 특정인이 자주 방문하는 웹사이트에 악성코드를 심어 공격
  • 하트 블리드(Heart Bleed) : 하트비트(암호화 라이브러리)의 확장 모듈 취약점을 이용해 데이터를 탈취하는 공격
  • IoT-SSDP : SSDP(단순 서비스 검색 프로토콜)의 특성을 이용해 IoT 디바이스를 좀비 PC로 이용해 DDoS 공격
  • 크라임웨어(Crimeware) : 금융, 인증 정보를 탈취해 금전적 이익을 취하는 악성 코드
  • 스캠 공격(SCAM) : 기업 이메일을 도용해 거래 대금을 가로채는 공격
  • MIMT(Man in the Middle) : 통신 연결 중간에 침입해 통신 내용을 도청하는 공격
  • DNS 스푸핑 : DNS 서버 캐시를 조작해 의도치 않은 주소로 접속하게 하는 공격 (=DNS 캐시 포이즈닝)
  • 포트 스캐닝(Port Scanning) : 침입 전 어떤 포트가 활성화되어 있는지 확인하는 기법
  • 디렉토리 리스팅 취약점(Directory Listing) : 웹 서버의 인덱싱 기능이 활성화된 경우, 서버 내 모든 디렉토리를 볼 수 있는 취약점
  • 리버스 쉘 공격(Reverse Shell) : 타깃 서버(피해자)가 클라이언트로 접속하게 하고, 클라이언트에서 서버의 쉘을 획득하는 공격
  • 익스플로잇(Exploit) : SW/HW의 버그나 취약점을 악용해 공격하는 행위
  • 스턱스넷 공격(Stuxnet) : 독일 지멘스사의 SCADA 시스템을 목표로 제작된 악성코드(주요 산업 기반 시설의 제어 시스템에 침투하는 공격)
  • 크리덴셜 스터핑(Credential Stuffing) : 다른 곳에서 유출된 로그인 정보를 다른 곳에 무작위 대입하는 공격
  • 토르 네트워크(Tor Network) : 암호화 기법으로 데이터를 전송해 익명으로 사용 가능한 네트워크
  • 윈드토커(WindTalker) : 터치, 타이핑 등의 패턴을 스니핑하여 해킹
  • 멜트다운(Meltdown) : 인텔 아키텍처의 버그를 이용해 시스템 메모리에 접근하는 취약점
  • 스펙터(Specter) : 실패한 분기 예측으로 메모리 영역을 훔쳐보는 취약점

보안 취약점

  • API 오용 취약점
    • DNS Lookup에 의존하지 않기 (DNS 엔트리를 속일 수 있음)
    • 보안에 취약한 함수 사용하지 않기
    • 널 매개변수 검사하기(자바에서 매개변수가 NULL이면 반환오류가 있을 수 있다)
  • 캡슐화 취약점
    • 디버그 코드는 꼭 제거
    • 민감한 데이터를 가진 클래스 사용에 주의
  • 코드 오류 취약점
    • NULL이 될 수 있는 레퍼런스는 참조 전 NULL 값인지 검사
    • 정수를 문자로 변환할 때 잘려나가지 않도록 크기 확인
    • 자원 사용 후에는 반드시 해제
    • 변수 선언 시 초기화(이전에 사용한 내용이 남지 않도록)
  • 시간 및 상태 취약점
    • 세션 통제 취약점 : 세션 정보에 읽고 쓰기가 가능한 변수 미사용
    • 병렬 시스템 : 공유 자원의 접근 직렬화, 블록문 내에서만 재귀함수 호출
  • 에러 처리 취약점
    • 취약한 패스워드 조건 미사용
    • 오류 메시지에 정보 노출 하지 않음
    • 예외 처리 구문 작성

보안 취약점 분석 절차

  1. 자산 조사
  2. 진단 대상 선정(전수조사 vs. 샘플링)
  3. 제약사항 확인
  4. 진단 수행(기술 진단, 인터뷰, 내부 실사 등)
  5. 결과 보고서 작성

보안 솔루션

  • 네트워크 접근 제어(NAC) : 내부 네트워크에 접속을 시도할 때 통제하는 솔루션
  • 웹 방화벽(WAF) : 웹 애플리케이션에 특화되어 XSS나 SQL Injection 등을 탐지하고 차단하는 시스템
  • 방화벽(Firewall) : 내부, 외부 트래픽을 모니터링하여 접근을 사용/차단하는 시스템
  • 침입 탐지 시스템(IDS) : 비인가 사용자의 침입을 실시간으로 탐지하는 시스템
  • 가상사설망(VPN) : 공중망을 사용할 때 마치 전용망을 사용하는 것과 같은 보안 효과를 주는 솔루션
  • 침입 방지 시스템(IPS) : 공격 및 침입을 실시간으로 차단하는 시스템
  • 통합 보안 시스템(UTM) : 방화벽, IDS, IPS, VPN 등 다양한 보안 장비 기능을 통합 제공하는 시스템
  • 무선 침입 방지 시스템(WIPS) : 비인가 무선 단말기의 접속을 차단하는 시스템
  • Secure OS : OS 커널에 보안 기능을 추가한 솔루션
  • Anti-Spam Solution : 메일 서버 앞단에 바이러스 검사, 정보 유출 방지 등의 기능을 제공하는 솔루션
  • DLP : Data Loss Prevention; 주요 자료가 외부로 유출되는 것을 차단하는 솔루션
  • DRM : Digital Right Management; 디지털 저작물에 암호를 걸어 권한이 없는 사용자의 사용을 막는 솔루션

  • BIA : 비즈니스 영향 평가(Business Impact Analysis). 장애나 재해에 따른 영향도 조사
  • BCP : 비즈니스 연속성 계획(Business Continuity Plan). 위기 관리를 기반으로 비상시 비즈니스 연속성을 보장하는 체계. BIA가 선행되어야 함

  • DRS : 재해 복구 시스템(Disaster Recovery System) : DRP를 위한 관리체제
    • 유형
      1. Mirror Site : 주 센터 & 복구센터 모두 운영 상태(RTO는 0)
      2. Hot Site : 주 센터와 동일한 수준의 자원을 대기 상태로 보유하며 데이터를 최신 상태로 유지(RTO는 4시간 이내)
      3. Warm Site : 중요성이 높은 자원만 주 센터와 동일한 수준으로 보유(RTO는 수일~수주)
      4. Cold Site : 데이터만 원격지에 보관하고 재해 시 이를 근간으로 복구(RTO는 수주~수개월)
  • DRP : 재해 복구 계획(Disaster Recovery Plan). 재해로 장기간 운영이 불가한 경우를 대비한 계획
  • RTO : 복구 목표 시간(Recovery Time Object). 재해 시 업무중단 시점~업무복구 시점까지 걸린 시간
  • RPO : 복구 목표 지점(Recovery Point Object). 재해 시 업무중단 시점~정상가동까지 허용하는 손실

  • 허니팟(HoneyPot) : 일부러 허술하게 만들어 해커에게 노출하는 유인시스템
  • OWASP Top 10 : 웹 애플리케이션의 10가지 보안 취약점에 대한 방안을 제공하는 가이드
  • 핑거프린팅(Finger Printing) : 저작권 정보와 구매자 정보를 콘텐츠에 삽입해 불법 배포자를 추적할 수 있는 기술
  • CPTED : 범죄 예방 환경 설계(Crime Privent Through Environment Design). 학문 간 연계를 통해 범죄를 최소화할 수 있는 환경을 설계하는 전략
  • 워터 마킹(Water Marking) : 디지털 콘텐츠에 저작자 정보를 삽입해 불법 복제 시 원소유자를 증명하는 기술
  • CC(Common Criteria) : 컴퓨터 보안을 위한 국제 평가 기준
  • C-TAS(사이버 위협 정보 분석 공유 시스템) : 사이버 위협정보를 체계적으로 수립해 관계 기관과 자동화된 정보공유를 할 수 있는 시스템(KISA 주관)
  • CWE(Common Weakness Enumeration) : 소프트웨어의 공통 약점(CW)을 식별화(E)한 것
  • CVE(Common Vulerabilities and Exposures) : 소프트웨어의 공통 취약점(CV)을 식별화(E)한 것(CVE-연도-순서)
  • CVSS(Common Vulnerability Scoring System) : 공통 취약점(CV)에 등급(S)을 매긴 시스템(S). 위험도 계산 가능

해킹 대응 방법

  • Tripwire : 백도어가 생기거나 설정 파일 변화가 있을 때 이를 감지할 수 있게 돕는 도구
  • 난독화 : 코드의 가독성을 낮춰 역공학에 대비
  • Ping : 접속하려는 원격 호스트가 정상 운영 중인지 확인하는 명령어

접근 통제 유형

  1. 식별 : 주체가 객체에게 정보 제공
  2. 인증 : 객체가 주체의 신원을 인정
  3. 인가 : 인증된 주체에게 접근을 허용
  4. 책임추적성 : 주체의 접근과 행동을 추적 및 기록

서버 접근 통제 유형

  1. DAC(임의적 접근 통제)
    • 접근결정 : 신분
    • 권한 부여 : 데이터 소유자. ACL(Access Control List)로 자원에 대한 권한 부여
  2. MAC(강제적 접근 통제)
    • 접근결정 : 권한(등급)
    • 권한 부여 : 시스템
  3. RBAC(역할 기반 접근 통제)
    • 접근결정 : 역할
    • 권한 부여 : 중앙관리자

인증 기술의 유형

  1. 지식기반 ex. ID/PW
  2. 소지기반 ex. 공인인증서
  3. 생체기반 ex. 지문, 홍채
  4. 특징기반 ex. 서명, 발걸음

암호화 알고리즘 방식

  1. 대칭 키 암호 방식 : 암호화 알고리즘의 한 종류로, 암/복호화에 같은 암호 키를 쓰는 알고리즘을 의미
    • 블록 암호 : 고정 길이의 블록을 암호화하는 대칭 키 암호 방식
      • DES : 미 연방표준국(NIST)에서 발표. 키 길이는 56bit, 블록크기는 64bit
      • 3DES
      • AES : =Advanced Encryption Standard. 3DES의 문제점을 극복하기 위해 개발. 라운드 수는 10, 12, 14로 분류되고, 한 라운드는 빼고(SubBytes)+이동하고(ShiftRows)+섞고(MixColumns)+더하는(AddRoundKey) 4계층으로 구성됨
      • SEED : KISA가 개발. 16라운드를 거쳐 128비트 블록으로 암호화
      • ARIA : 학계(Academy) + 연구기관(Research Institute) + 정부(Agency) 국정원과 산학연구협회가 개발함
      • IDEA : DES를 대체하기 위해 개발
      • RC5 : RC4를 개선한 알고리즘. 입출력, Key, 라운드 수가 가변인 블록 알고리즘. 32/64/128비트의 키 사용
    • 스트림 암호 : 매우 긴 주기의 난수열을 발생시켜 암호화하는 대칭 키 암호 방식
      • LFSR : 선형 되먹음 시프트 레지스터
      • RC4 : 셔플링 기법을 이용해 평뮨과 XOR 연산해 암호화
  2. 비대칭 키 암호 방식 : 공개 키는 누구나 알 수 있지만 그에 대응하는 비밀키는 키의 소유자만이 알 수 있도록, 공개 키와 비밀 키를 사용하는 알고리즘
    • 디피-헬만 : 비대칭키 최초의 비밀키 교환 프로토콜. 이산대수 계산의 어려움을 근거로 함
    • RSA : 비대칭키 수학교수 3명의 앞글자를 땄음(리베르트, 샤미르, 아들만). 소인수 분해 문제의 어려움을 근거로 함
    • ECC : 비대칭키 타원 곡선 암호. RSA의 대안. 짧은 키로 높은 암호 강도
    • DSA : 전자서명 알고리즘 표준. 이산대수 계산의 어려움을 근거로 함. 구조가 간단한 것이 장점
    • Elgamel : 비대칭키 이산대수의 어려움을 근거로 함. 전자서명에 사용 가능
  3. 해시 암호 방식 : 해시 값으로 원래 입력값을 찾아낼 수 없는, 일방향성의 특성을 가진 알고리즘
    • SHA-1 : 160비트 암호화 해시함수. 1993년 미국 NIST에서 개발됨. 보안강도가 약해 SHA-256이나 SHA-512로 대체되고 있다. 전자서명시 활용
    • MD5 : 128비트 기반 암호화 해시 함수. 결과 값이 16개 문자열. 설계상 결함으로 사용이 줄어드는 추세. 메시지 무결성에 활용
    • HAVAL : MD5를 변형하여 만든 해시 함수. 128비트~256비트까지 다양한 크기 가능
    • Tiger : 64비트 CPU에 최적화 됨. 32비트 CPU에서도 빠르게 동작 가능. 64비트 CPU의 해시에 활용됨
    • HAS-160 : 국내 표준 디지털 서명 알고리즘(KCDSA)을 위해 개발된 알고리즘(MD5의 장점 + SHA-1의 장점)
  • S-HTTP : 클라이언트/서버 간 메시지를 암호화하는 보안 기술(HTTP를 사용한 경우에만 가능)

개인정보보호 관련 법령

  1. 개인정보보호법 : 주민등록번호, 여권번호, 운전면허번호, 외국인등록번호와 같은 고유 식별 번호는 분실, 도난, 유출, 변조, 훼손에 주의해야 함
  2. 정보통신망법 : 정보통신망의 이용을 촉진하고 정보통신서비스를 이용하는 자의 개인정보를 보호함과 아울러 정보통신망을 건전하고 안전하게 이용할 수 있는 환경을 조성하기 위한 규정
  3. 신용정보법 : 개인 신용정보의 취급 단계별 보호조치 및 의무사항에 관한 규정

Open SAMM

  • 확대가 가능한 개방형 프레임워크. 설계 리뷰, 코드 리뷰, 보안 테스팅 3개를 주요 검증 활동으로 함 (*SAMM : 소프트웨어 보증 성숙도 모델)

시큐어 코딩 가이드

  1. 입력데이터 검증 및 표현
  2. 보안 기능
  3. 시간 및 상태
  4. 에러 처리
  5. 코드 오류
  6. 캡슐화
  7. API 오용

SW 테스트

  • 개발된 소프트웨어가 요구사항을 만족하는지 확인하고 결함을 검출하는 활동

SW 테스트의 필요성

  1. 오류 발견 관점 : 잠재된 오류를 발견 가능
  2. 오류 예방 관점 : 사전에 오류를 발견하고 예방
  3. 품질 향상 관점 : 요구사항과 기대 수준을 만족하도록 품질 향상

SW 테스트의 기본 원칙

  1. 완벽한 테스팅은 불가 : 무한입력값, 무한경로
  2. 살충제 패러독스 : 같은 테스트케이스를 반복하면 새 오류 검출이 불가능하다.
  3. 초기에 테스팅을 시작할 것 : 후반으로 갈수록 비용이 증가한다.(오르돈의 법칙, 눈덩이 법칙)
  4. 정황에 의존하지 말 것 : SW 성격, 환경에 맞춰 테스트해야 함
  5. 오류-부재의 궤변 : 오류(결함)가 없더라도 요구사항을 만족하지 못하면 품질이 높다고 할 수 없음
  6. 결함 집중 : 결함의 80%는 전체 모듈 20% 내에서 발견된다.(파레토 법칙)
  7. 결함은 늘 존재한다 : 테스팅은 결함이 존재함을 밝히는 활동

테스트 케이스 Test Case

  • 요구사항을 만족하는지 확인하기 위해 설계된 입력값, 실행조건, 기대결과로 구성된 명세서
  • 테스트 스크립트 Test Script : TC 실행순서를 작성한 문서 (=테스트 스텝, 테스트 프로시저)
  • 테스트 시나리오 Test Scenario : 테스트할 기능, 상황을 정리해 절차를 명세화한 문서
  • 테스트 슈트 Test Suites : 실행환경에 따라 구분해 놓은 TC의 집합

테스트 케이스 구성요소

  1. 입력 명세 : 입력할 데이터 및 조건
  2. 출력 명세 : 기대되는 결과값
  3. 테스트 항목
  4. 특수절차요구
  5. 환경설정 : 수행에 필요할 HW/SW 환경
  6. 의존성 기술 : TC 간 의존성
  7. 식별자

테스트 종류에 따른 분류

  1. 구조 기반 : 내부 논리 흐름에 따라 테스트 (화이트박스)
  2. 명세 기반 : 명세서 기반으로 테스트 (블랙박스)
  3. 경험 기반 : 유사 평가 경험을 기반으로 테스트 (탐색적 테스트, 오류 추정, 체크리스트, 특성 테스트)

테스트 목적에 따른 분류

  1. 회복 테스트(Recovery) : 고의로 실패를 유도한 뒤, 정상 복귀를 테스트
  2. 안전 테스트(Security) : 보안 결함 점검
  3. 성능 테스트(Performance) : 요구에 대한 반응속도를 측정
    • 부하 테스트(Load) : 부하를 점점 늘려 임계점을 찾는 테스트
    • 스트레스 테스트(Stress) : 임계점 이상의 부하를 가해 비정상적인 상황에서의 성능을 측정
    • 스파크 테스트(Spark) : 짧은 시간 내 많은 사용자가 몰릴 때 반응 테스트
    • 내구성 테스트(Endurance) : 오랜 시간 동안 높은 부하를 가해 성능 테스트
  4. 구조 테스트(Structure) : 논리 경로, 소스코드 복잡도 측정
  5. 회귀 테스트(Regression) : 오류 제거 후, 수정에 의해 유입된 오류가 없는지 테스트
  6. 병행 테스트(Parallel) : 변경된 시스템과 기존 시스템에 동일 데이터 입력 후 결과값 비교

테스트 시각에 따른 분류

  1. 검증(Verification) : 개발자 시점, 규격(명세기능)을 만족하는가
  2. 확인(Validation) : 사용자 시점, 올바른 SW

정적 테스트 종류

  1. 리뷰 : SW의 결함을 검출하거나 진행 상황을 파악하는 활동으로 전문가가 수행
    • 리뷰의 유형
      1. 관리 리뷰
      2. 기술 리뷰(=코드 리뷰)
      3. 인스펙션 : 저작자가 아닌 다른 전문가가 검토
      4. 워크스루 : 사전에 자료 배포 후 짧은 회의
      5. 감사 : 표준 준수 확인, 제3기관 수행
  2. 정적 분석 : 분석 도구의 도움을 받아 수행(소스코드 실행 안 함). 코딩 표준, 소스코드 복잡도 검사

화이트박스 테스트

  • 모듈 내부 구조, 논리 경로를 테스트(구조 기반 테스트, 동적 테스트)
  • 유형
    1. 구문 커버리지 : 모든 명령문을 한 번 이상 수행. 결과에 무관하게 구문 실행 개수로 측정
    2. 결정 커버리지(=선택 커버리지, 분기 커버리지) : 결정 포인트 내 개별 조건식이 참/거짓을 한 번씩 수행
    3. 조건 커버리지 : 결정 포인트 내 개별 조건식이 참/거짓을 한 번씩 수행(전체 조건식에 주는 영향은 고려하지 않음)
    4. 조건/결정 커버리지 : 결정 포인트 내 전체 조건식도 참/거짓을 한 번씩, 개별 조건식도 참/거짓을 한 번씩 수행)
    5. 변경 조건/결정 커버리지 : 결정 포인트 내 개별 조건식이 다른 개별 조건식의 영향을 받지 않고 전체 조건식에 독립적으로 영향을 주도록 수행
    6. 다중 조건 커버리지 : 모든 개별 조건식의 가능한 조합을 100% 보장
      • 개별 조건식의 수가 N이라고 했을 때, 2^N의 결과가 나옴. 즉 개별조건식이 2개면 2^2=4, 3개면 2^3=8개
    7. 기본 경로 커버리지 : 맥케이브의 순환복잡도를 기반으로 수행 가능한 모든 경로를 테스트
      • 순환복잡도 계산 : V=E-N+2 또는 V=P+1
    8. 제어 흐름 테스트 : 제어 구조를 그래프로 나타내어 테스트
    9. 데이터 흐름 테스트 : 제어 흐름 그래프에 데이터 사용 현황을 추가한 그래프를 통해 테스트

블랙박스 테스트

  • 요구사항 명세를 보며 기능 위주 테스트(명세 기반 테스트, 동적 테스트)
  • 유형
    1. 상태 전이 테스트 : 이벤트에 의해 객체 상태가 전이되는 경우의 수를 측정
      • 상태 전이도 모델링 -> 전이 트리 도출 -> 전이 경로 TC -> 비정상 전이 TC
    2. 원인-결과 그래프 테스트 : 그래프를 통해 입력값 간의 관계 및 출력에 미치는 영향을 분석해 효용성이 높은 TC를 선택해 테스트
    3. 동치 분할 테스트 : 입력 데이터 영역을 유효값/무효값으로 그룹핑해 대표값 TC를 도출해 테스트
    4. 경계값 분석 테스트 : 최소값을 바로 위나 아래와 같이 입력 데이터의 극한 한계를 테스트(2-Value, 3-Value)
    5. 비교 테스트 : 여러 버전의 프로그램에 같은 입력값을 넣어 결과를 비교
    6. 분류 트리 테스트 : 트리 구조로 분석 및 표현하여 테스트
      • 항목 선정 -> 분류 트리 구축 -> 불류 클래스 조합해 TC 생성
    7. 페어와이즈 테스트 : 테스트 데이터값을 최소 한 번씩 조합
    8. 유스케이스 테스트 : 유스케이스로 모델링 되어있을 때, 프로세스 흐름 기반으로 테스트 수행
    9. 결과 테이블 테스트 : 요구사항을 테이블로 구성해 원인(조건)-결과(행위)를 조합해 테스트

경험 기반 테스트

  • 테스터의 경험과 직관을 기반으로 한 테스트
  • 유형
    1. 특성테스트 : ISO/IEC 9126 등 표준 품질 특성을 염두에 두고 테스트 수행
    2. 탐색적 테스트 : TC 명세화 없이 경험에 의존해 탐색적으로 테스트 수행(테스터의 휴리스틱한 능력 필요)
    3. 오류 추정 : 개발자가 범하기 쉬운 실수를 추정하고 이에 맞춰 테스트
    4. 체크리스트 : 테스트 내용을 목록화하여 테스트(재사용 목적)

테스트 오라클

  • 테스트 결과가 참/거짓인지 판단하기 위해 사전에 정의된 참값을 입력해 비교하는 기법
  • 유형
    1. 참 오라클 : 모든 입력값의 기대결과를 생성(오류를 모두 검출 가능)
    2. 샘플링 오라클 : 특정 몇 개 입력값의 기대결과만 생성
    3. 휴리스틱 오라클 (Heuristic) : 몇 개 입력값에 대해서는 정확한 결과를 제공하고 나머지는 휴리스틱으로 처리(샘플링 오라클 개선)
    4. 일관성 검사 오라클 (Consistent) : 변경이 있을 때 수행 전후 결과값이 동일한지 확인

테스트 레벨

  • 개발 단계에 따라 테스트를 분류한 것
  • 유형
    1. 단위 테스트 : 설계 최소 단위인 모듈, 컴포넌트, 서브 루틴 등을 테스트
    2. 통합 테스트 : 단위 테스트를 통과한 모듈 간 인터페이스, 컴포넌트 상호작용 등을 테스트
      • 빅뱅 테스트 : 모든 컴포넌트를 통합해 한꺼번에 테스트(비점증적 방식)
      • 상향식 테스트 : 최하위 모듈부터 위 방향으로 통합하며 테스트
        1. 하위 모듈을 클러스터로 결합(클러스터링)
        2. 드라이버 개발
        3. 통합된 클러스터 테스트
        4. 드라이버를 실제 모듈로 대체
      • 하향식 테스트 : 메인 제어 모듈로부터 아래 방향으로 통합하며 테스트
        1. 초기에 시스템 구조 파악
        2. 스텁 개발
        3. 깊이-우선 또는 너비-우선 방식에 따라 스텁을 실제 모듈로 대체
      • 샌드위치 테스트 : 상위모듈은 하향식, 하위 모듈은 상향식 테스트를 수행
    3. 시스템 테스트 : 통합된 단위시스템 검증(기능적 요구사항 테스트, 비기능적 요구사항 테스트)
    4. 인수 테스트 : 계약상 요구사항을 만족하는지 확인
      • 알파 테스트 : 통제된 환경에서 선택된 사용자가 개발자랑 확인
      • 베타 테스트 : 실제 환경에서 확인

테스트 하네스

  • 단위 테스트를 지원하기 위한 코드와 데이터
  • 유형
    • 목 객체 : 사전에 조건을 입력하면 그 상황에 예정된 행위를 수행하는 가짜 객체
      • 유형
        1. 테스트 스텁 : 특정 값을 리턴하거나 메시지를 출력하는 등 단순 기능을 수행하는 더미 모듈(하향식 테스트에서 사용)
        2. 테스트 드라이버 : 하위 모듈을 호출하거나 파라미터를 전달하는 모듈(상향식 테스트에서 사용)
        3. 테스트 스파이 : 테스트 대상 클래스와 협력 클래스로 가는 출력을 검증하는 데 사용
        4. 가짜 객체 : 협력 클래스 기능을 대체하기 위해 사용

테스트 자동화 도구 유형

  1. 정적 분석 도구 : 실행하지 않고 소스 코드를 테스트
  2. 테스트 실행 도구 : 작성된 스크립트를 실행해 테스트(데이터 주도 접근 방식 vs. 키워드 주도 접근 방식)
  3. 성능 테스트 도구
  4. 테스트 통제 도구 : 형상 관리 도구, 결함 추적 도구 등

테스트 리포팅

  1. 테스트 결과 정리
  2. 테스트 요약문서 작성
  3. 품질 상태 파악
  4. 결과서 작성
  5. 테스트 실행 절차 리뷰 및 평가

테스트 커버리지

  • 테스트의 수행 정도를 나타내는 값
    1. 기능 기반 커버리지 : 전체 기능을 모수로 측정
    2. 라인 커버리지 : 소스 코드 라인 수를 모수로 측정
    3. 코드 커버리지 : 구문(코드) 자체가 얼마나 테스트됐는가를 측정(커버리지라 함은 대부분 코드 커버리지를 가리킴)

소프트웨어 결함

  • Error/오류 : 사람에 의해 생성됨. Defect(결함)의 원인
  • Defect / Bug : Error로 인해 포함된 결함. 제거되지 않으면 Failure나 Problem이 됨
  • Failure / Problem : Defect가 실행될 때 발생하는 현상

결함 관리 프로세스

  1. 결함 관리 계획
  2. 결함 관리 DB에 기록
  3. 결함 검토
  4. 결함 수정
  5. 결함 재검토
  6. 결함 추적 및 모니터링
  7. 최종 결함 분석 및 보고서 작성

결함 생명주기

  • Open -> Review -> Assigned -> Resolved -> Verified -> Closed -> Deferred -> Reopen -> Closed

결함 분석 방법

  1. 고립화 : 입력값, 절차, 환경 중 무엇이 영향을 미치는지 파악
  2. 구체화 : 입력값, 절차, 환경을 정확히 파악
  3. 일반화 : 결함에 영향을 주는 요소를 최대한 일반화

결함 분석

  • 결함 추이 분석 : 결함 지표를 분석해 추후 발생될 결함을 추정하는 작업
  • 결함 분포 분석 : 특정 속성에 해당하는 결함 수를 측정
  • 결함 추세 분석 : 테스트 시간 흐름에 따른 결함 수를 측정
  • 결함 에이징 분석 : 특정 결함의 지속 시간을 측정

결함 분류

  1. 시스템 결함(비정상적인 종료, DB 에러)
  2. 기능 결함(요구사항 불일치, 스크립트 에러)
  3. GUI 결함(부정확한 메세지)
  4. 문서 결함(매뉴얼 불일치)

결함 심각도

  1. Critical(치명적) : 테스트 불가할 정도
  2. Major(주요) : 기능이 기대와 다르게 동작
  3. Normal(보통) : 사소한 기능 오작동
  4. Minor(경미) : UI 오류
  5. Simple(단순) : 미관성 해침

결함 우선순위

  1. Critical : 이 결함으로 전체 기능 미동작
  2. High : 이 결함으로 다른 기능 미동작
  3. Medium
  4. Low

성능 분석

  1. 처리량 : 주어진 시간에 처리 가능한 트랜잭션(웹 페이지) 수
  2. 응답시간 : 사용자 입력 -> 응답 출력 개시까지 걸린 시간
  3. 경과시간 : 사용자 입력 -> 트랜잭션 처리 -> 결과 출력까지 걸린 시간
  4. 자원 사용률 : 트랜잭션 처리 동안 사용하는 자원 사용량

성능 테스트 수행 방법

  1. 성능 테스트 도구 설치
  2. 환경설정
  3. 시나리오 작성
  4. 성능 테스트 실행 및 모니터링

성능 저하 원인 - DB 관련

  1. DB Lock : Lock 해제 시까지 타임 아웃
  2. 불필요한 DB Fetch : 대량의 데이터 요청으로 응답 시간 저하, 결과 세트에서 마지막 위치로 커서 옮기는 작업 빈번 시 응답 저하
  3. 연결 누수 Connection Leak : JDBC 객체 사용 후 미종료
  4. 부적절한 DB Connection Pool Size : 커넥션 풀이 너무 작거나 큼
  5. 커밋 관련 : 트랜잭션이 커밋되지 않고 반환되거나 불필요한 커밋이 잦음

리팩토링

  • 기능을 변경하지 않고 내부 코드를 보완해 유지보수성을 향상시키는 것
  • 목적 : 유지보수성 향상, 품질 향상, 생산성 향상, 유연한 시스템

클린 코드

  • 잘 작성되어 가독성 높고 단순한 코드
  • 작성원칙
    1. 가독성
    2. 단순성
    3. 의존성 최소화
    4. 중복 제거
    5. 추상화

베드 코드

  • 다른 개발자가 로직을 이해하기 어려운 코드
  • 외계인 코드 : 아주 오래되거나 참고할 개발자/문서가 없어 유지보수가 힘든 코드
  • 스파게티 코드 : 동작은 하지만 내부 코드가 복잡하여 파악이 어려운 코드

베드 코드 유형

  1. 오염 : 비즈니스 기능을 수행하지 못하는 컴포넌트가 많음
  2. 문서 부족 : 코드와 문서 불일치
  3. 의미없는 이름
  4. 높은 결합도
  5. 아키텍처 침식 : 아키텍처가 변형되어 품질 저하

코드 품질 분석 도구

  • 정적 분석 도구 : pmd, cppcheck, SonarQube, checkstyle, cobertuna
  • 동적 분석 도구 : Avalance, Valgrind

OS (운영체제)

  • 사용자가 하드웨어를 쉽게 사용할 수 있도록 인터페이스 기능을 제공하는 소프트웨어

OS의 특징

  1. 사용자 편리성 제공
  2. 인터페이스 기능 제공
  3. 스케줄링 담당 : 자원 분배
  4. 자원 관리 : CPU, 메모리 관리
  5. 제어 기능 : 입출력 장치 등

OS의 쉘

  • 사용자 명령에 대한 처리를 담당
  • 사용자 명령을 입력받아 기계어 형태로 변환해 커널에 전달

OS의 커널

  • 하드웨어와 관련된 핵심 처리 기능 담당

Windows의 특징

  1. GUI 제공
  2. 선점형 멀티태스킹 방식 제공 : 동시에 여러 프로그램을 실행하면서 자원 사용을 제어
  3. 자동 감지 기능 제공 : HW 설치 시 환경 구성
  4. OLE 기능 제공 : 문서에 개체 삽입/연결

Windows 기본 명령어

  • ATTRIB : 파일 속성 표시
  • CALL : 일괄 프로그램에서 다른 일괄 프로그램 호출
  • CD : 디렉토리 표시
  • CHKDSK : 디스크 검사
  • CLS : 화면 지움
  • CMD : 명령 프롬프트 실행
  • COMP : 두 개 이상 파일 비교
  • DISKPART : 파티션 구성 표시
  • ECHO : 메시지 표시
  • ERASE : 파일 삭제
  • EXIT : 인터프리터 종료

Unix의 특징

  1. 대화식 운영체제 기능 : 명령어 입력 시 해당 명령어 수행
  2. 다중 작업 기능
  3. 다중 사용자 기능
  4. 이식성 제공
  5. 계층 트리 구조 파일 시스템 기능 제공

Linux

  • Unix 기반의 오픈 소스 운영 체제

Mac OS

  • Unix 기반의 GUI 운영 체제

Andoroid

  • Linux 기반의 휴대용 장치를 위한 운영체제

Unix/Linux 계열 기본 명령어

  • uname -a : 모든 시스템 정보 표시
  • uname -r : OS 배포버전 표시
  • cat : 파일 내용 출력
  • uptime : 가동시간 확인
  • id : 사용자 로그인명, id 확인
  • last : 모든 로그인/로그아웃 정보 확인
  • who : 현재 접속한 사용자 정보 확인
  • ls : 현재 경로의 파일 및 폴더 출력
  • pwd : 현재 디렉토리의 절대 경로 출력
  • cd : 디렉토리 이동
  • rm : 파일 삭제
  • cp : 파일 복제
  • mv : 파일 이동
  • rsync : 복사 후 동기화
  • chmod : 퍼미션 변경
  • chown : 소유자, 소유그룹 변경
  • tar : 압축 해제
  • gzip : 압축
  • find : 파일 검색
  • grep : 문자열 검색
  • df : 남은 디스크 용량 확인
  • du : 파일 사이즈 확인
  • ps : 프로세스 목록 확인
  • pmap : 프로세스 ID 기준 메모리맵 정보 표시
  • kill : 프로세스 종료
  • fork : 프로세스 생성
  • ifconfig : 네트워크 인터페이스 확인
  • host : host는 아는데 IP 주소 모를 때 사용

접근제어

  • user / group / other / all
  • r(read : 4) w(write : 2) x(execute : 1) 순서로 점수 부여
  • chmod 664 a.txt : user, group의 rx 권한 설정, other의 r 권한 설정
  • chmod o-w a.txt : other 사용자의 쓰기 권한 제거

메모리 관리

  • 필요할 때마다 프로세스에게 기억장치를 할당하고 사용이 끝나면 회수하는 것

메모리 관리 기법

  1. 반입 기법 : 언제 주기억장치에 다음 프로세스를 언제 할당할 것인지 결정하는 기업
    • 요구 반입 : 요구가 있을 시 반입
    • 예상 반입 : 예측하여 반입
  2. 배치 기법 : 어디에 주기억장치의 어떤 위치에 프로세스를 할당할 것인지 결정하는 기법
    • 최초 배치 : 첫 번째 분할에 배치
    • 최적 배치 : 비슷한 공간에 배치
    • 최악 배치 : 가장 큰 공간에 배치
  3. 할당 기법 : 어떻게 주기억장치에 어떤 방법으로 프로세스를 할당할 것인지 결정하는 기법
    • 연속 할당 : 연속해서 배치 ex. 단일 분할, 다중 분할
    • 분산 할당 : 프로세스를 조각내어 배치 ex. 페이징(같은 크기로), 세그멘테이션(가변적 크기로)
  4. 교체 기법 : 누구를 주기억장치에 있는 프로세스 중 어떤 것을 제거할 지 결정하는 기법
    • FIFO : 가장 먼저 들어온 페이지 교체
    • LRU : 가장 오랫동안 사용되지 않은 페이지 교체
    • LFU : 참조 횟수가 적은 페이지 교체
    • OPT : 앞으로 사용될 가능성이 적은 페이지 교체
    • NUR : 최근까지 사용되지 않은 페이지 교체 (LRU 오버헤드 감소)
    • SCR : 세컨드 찬스. 먼저 들어왔지만 자주 사용되는 페이지의 교체를 막음(FIFO 보완)
    • SJF : Shortest Job First. 대기 큐 중 수행시간이 가장 짧은 프로세스에게 할당
    • SRT : Shortest Remaining Time First. 대기 큐에 수행(남은) 시간이 짧은 프로세스가 생기면 언제라도 선점
    • RR(라운드 로빈) : 시간 할당량을 정해놓고 시간 내 처리되지 못하면 대기 큐 가장 뒤로 보냄
    • HRN : 응답률이 높은 프로세스를 선택해 할당
    • 다단계 큐 : 여러 개의 큐를 이용해 각각 독립적인 스케줄링을 가징
    • 다단계 피드백 큐 : 여러 개의 큐에 프로세스 특성에 따라 서로 다른 시간 할당량을 부여(FIFO + RR : 우선 도착한 프로세스를 실행하되 완료가 안 된 프로세스는 하위 큐로 보내고 마지막 큐에서도 안 끝나면 RR 방식)

메모리 단편화

  • 메모리 할당/반납 과정에서 낭비되는 공간이 생기는 것
    1. 내부 단편화 : 적재하고 남는 공간 발생. 페이징 기법에서 자주 발생함 => Slab Allocator, 통합, 압축으로 해결
    2. 외부 단편화 : 작아서 못 쓰는 공간 발생. 세그멘테이션에서 자주 발생 => 버디 메모리 할당, 통합, 압축으로 해결

프로세스

  • CPU에 의해 관리되는 현재 실행중인 프로그램(=Job, Task)

프로세스 상태

  1. 생성(Fork)
  2. 준비(Ready) : Ready List에서 할당 대기
  3. 실행(Run or Execute)
  4. 대기(Wait) : 입출력 발생시
  5. 완료

프로세스 상태 전이

  1. 디스패치 : Ready List에서 프로세스를 선정하고 CPU 할당 (준비 -> 실행)
  2. 타이머 런 아웃 : 할당 시간 초과, PCB에 저장 후 준비 상태로 전이(실행 -> 준비)
    • PCB : Process Control Block. OS가 프로세스 관리를 위해 필요한 내용을 담고 있는 자료 구조
  3. 블록 : 입출력 발생(실행 -> 대기)
  4. 웨이크업 : 입출력 종료(대기 -> 준비)

프로세스 스케줄링

  • CPU를 사용하려는 프로세스 간 우선순위를 관리하는 작업
반환시간(응답시간) = 종료시간 - 도착시간
대기시간 = 반환시간 - 서비스시간
  • 선점형 스케줄링 : 우선순위가 높은 프로세스가 오면 기존 프로세스를 중단하고 CPU를 점유
  • 비선점형 스케줄링 : CPU를 할당받으면 반환 시까지 다른 프로세스가 점유 불가

응답률 계산식

(대기시간 + 서비스시간) / 서비스시간 = 응답률
  • 응답률이 높을수록 우선순위가 높다.

가상화

  • 물리적인 리소스를 하나로 보이게 하거나, 하나의 물리적인 리소스를 여러 개처럼 보이게 하는 기술
  • 종류
    • 플랫폼 가상화 : 하드웨어 플랫폼 위에서 실행되는 호스트 프로그램이 게스트 프로그램을 만들어 독립된 환경을 구축한 것처럼 보여주는 기술
    • 리소스 가상화 : 소프트웨어가 독립된 하드웨어에서 실행되는 것처럼 보여주는 기술
    • 스토리지 가상화 : 스토리지와 서버 사이에 계층을 추가해 논리적 단위로 활용 ex. 분산 파일 시스템
    • 컴퓨팅 가상화 : 컴퓨터 리소스를 가상화하여 논리적 단위로 활용 ex. 하이퍼바이저
    • I/O 가상화 : I/O와 서버 사이에 계층을 추가해 자원을 효율적으로 활용 ex. VNIC(가상 네트워크 인터페이스 카드)
    • 컨테이너 : 컨테이너화된 애플리케이션들이 단일 운영체제상에서 실행되도록 하는 기술 ex. 도커

네트워크 가상화 기술

  • 물리적으로 떨어진 장비들을 연결하는 기술
  • 종류
    • SDN : Software Defined Network. 컨트롤 플레인(트래픽 경로 지정) / 데이터 플레인(트래픽 전송)으로 분리하여 네트워크를 관리하는 기술
    • NFV : Network Function Virtualization. 라우터, 로드밸런서 등 하드웨어에 가상화 기술을 적용하여 네트워크 서비스를 가상화하는 기술

클라우드 컴퓨팅

  • 자신의 컴퓨터가 아닌 클라우드에 연결된 컴퓨터로 처리하는 기술
  • 분류
    • 사설 클라우드 : 조직 내부의 컴퓨팅 자원을 이용해 내부적으로 구축한 클라우드. 보안성 높고, 직접 제어 가능
    • 공용 클라우드 : 제공 업체의 서비스를 이용한 클라우드. 확장성 높음
    • 하이브리드 클라우드 : 사설 + 공용 클라우드 동시 사용
  • 유형
    • IaaS : 인프라형 서비스. 서버, 스토리지 같은 자원을 클라우드로 제공
    • PaaS : 플랫폼형 서비스. 인프라를 관리하는 복잡함 없이 애플리케이션 개발에 필요한 플랫폼을 클라우드로 제공
    • SaaS : 소프트웨어형 서비스. 사용자에게 제공하는 소프트웨어와 관련 데이터를 클라우드로 제공

클라우드 기반 개발 환경 인프라

  1. 컴퓨팅 환경 : 프로그램을 설치하고 하드웨어 세팅
  2. 스토리지 : 대규모 데이터 저장용 장치 세팅
  3. 데이터베이스 : 실데이터를 저장하고 관리하기 위한 세팅, 멀티미디어 데이터 처리를 위한 세팅
  4. 네트워킹 전송 : 서비스, 프로그램, 콘텐츠 전달을 위한 환경 세팅
  5. 개발자 도구 : 개발을 위한 환경 구축
  6. 보안 환경 구축 : 시스템과 데이터 보호를 위한 액세스, 암호화 관리 등
  7. 응용 기술 세팅 : AR, VR, 머신러닝, 딥러닝 등
  8. 생산성 향상 : 볼륨 자동 확장 환경, 스트리밍 서비스 환경 등 구축

개발 지원 도구

  1. 요구사항 관리 : JFeature
  2. 설계 : DBdesigner
  3. 구현 : Eclipse, CodeBlock
  4. 테스트 : JUnit
  5. 빌드 : Ant, Jenkins
  6. 형상관리 : SubVersion
  7. 품질관리 : jDepend, Mylyn
  8. 이슈관리 : Mentis, Git
  9. 프로젝트 관리 : Redmine, OpenProj

개발 인프라 구축 방식

  1. 온프레미스 방식 : 외부 인터넷망이 차단된 상태에서 인트라넷망만을 활용해 개발 환경 구축
  2. 클라우드 방식 : 서비스를 임대하여 개발환경 구축
  3. 하이브리드 방식

CPU 자원 할당 관련 용어

  • 우선순위 : 프로세스별 우선순위에 따라 CPU 할당
  • 기한부 : 정해진 시간 내 프로세스가 완료되도록 계획

릴리즈 노트

  • 제품에 대한 정보와 수정/변경 작업에 대한 정보를 제공하는 문서

릴리즈 노트 작성항목

  1. 헤더 : 문서 이름, 제품 이름, 버전 번호 등
  2. 개요
  3. 목적 : 새로운 기능 목록
  4. 이슈 요약 : 버그 설명이나 추가항목 등
  5. 재현 항목 : 버그 재현 단계
  6. 수정/개선 내용
  7. 사용자 영향도
  8. 소프트웨어 지원 영향도
  9. 노트 : SW/HW 설치 항목, 업그레이드 항목
  10. 면책조항
  11. 연락정보

제품 소프트웨어 패키징 도구

  • 디지털 콘텐츠의 저작권을 보호하고 안전한 유통과 배포를 보장하는 도구

패키징 도구

  1. 암호화
    • PKI : 공개키 기반 구조. 인증서를 발급받아 안전하게 통신
    • 전자서명 : 서명자와 서명사실을 나타내는 전자적 정보
  2. 키 관리
  3. 식별기술
    • DOI : Digital Object Indentifier. 디지털 저작물에 번호를 부여하는 시스템
    • URI : 인터넷 자원을 식별하는 고유 주소
  4. 저작권 표현
    • XrML : 권리 조건을 표현한 XML 기반의 마크업 언어
    • MPEG-21 : 멀티미디어 프레임워크를 위한 표준 규격
  5. 인증
    • SSO : 한 번의 인증을 통해 여러 시스템에 재인증할 필요 없이 로그인하는 기술
  6. 정책 관리
    • XML : 특수한 목적을 갖는 마크업 언어를 만드는 데 쓰는 언어
    • CMS : 콘텐츠 생산~폐기까지 전 과정을 관리하는 기술
  7. 암호화 파일 생성
    • Pre-packaging : 콘텐츠를 등록하자마자 암호화하는 방법
    • On-the-fly Packaging : 사용자가 요청한 시점에 콘텐츠를 암호화하는 방법
  8. 크랙 방지
    • 코드 난독화 : 역공학을 방지하기 위해 소스코드를 알아보기 힘들게 바꾸는 기술
    • SecureDB : DB의 파일을 암호화하는 보안 강화 기술

패키징 도구 활용시 고려사항

  1. 암호화/보안 고려
  2. 이기종 연동 고려
  3. 복잡성 및 비효율성 고려
  4. 최적화 암호화 알고리즘 적용
  5. 사용자 편의성 고려

저작권

  • 저작물에 대한 배타적 독점적 권리

DRM 구성요소

  1. 제공자(저작권자)
  2. DRM 콘텐츠 : 암호화된 콘텐츠와 콘텐츠의 메타데이터
  3. 패키저 : 콘텐츠 배포를 위해 묶는 도구
  4. 클리어링 하우스 : 라이센싱 중개/발급 및 저작권료 정산/분배
  5. 콘텐츠 소비자
  6. DRM 컨트롤러 : 콘텐츠의 이용 권한 통제
  7. 보안 컨테이너 : 콘텐츠의 유통을 위한 보안장치

제품 소프트웨어 사용자 매뉴얼

  • 사용자가 소프트웨어 사용에 필요한 내용을 기록한 문서

사용자 매뉴얼 작성 프로세스

  1. 작성 지침 정의
  2. 구성요소 정의
  3. 구성요소별 내용 작성
  4. 검토

제품 소프트웨어 배포본

  • 사용자가 쓰기 편하도록 개발된 컴포넌트 또는 패키지가 제품화된 형태

설치 매뉴얼 구성요소

  1. 목차 및 개요
  2. 이력 정보
  3. 매뉴얼 주석
  4. 설치 도구 구성

제품 소프트웨어 패키징

  • 개발이 완료된 제품 소프트웨어를 고객에게 전달하기 위해 포장하는 과정

배포용 미디어 제작 프로세스

  1. 미디어 형태 선정(CD? 온라인?)
  2. 관리 체계 확인(시리얼 넘버 등)
  3. 설치 파일 및 매뉴얼 확인
  4. 배포본 검증
  5. 배포용 미디어 정보 확인
  6. 최종 인증 확인 및 배포

백업의 유형

  1. 전체 백업(Full)
  2. 차등 백업(Differential) : 마지막 전체 백업 이후 변경된 모든 데이터 백업
  3. 중분 백업(Incremental) : 정해진 시점 기준으로 그 이후의 변경된 데이터 백업