소프트웨어 공학
- 품질 높은 소프트웨어를 효율적으로 개발하기 위한 학문
- 소프트웨어 공학의 3R
- 역공학(Reverse Engineering)
- 재공학(Re-Engineering) : 분석-> 재구성->역공학->이관
- 재사용(Reuse)
소프트웨어 개발 단계
- 계획 : 비용, 일정, 타당성
- 분석 : 요구사항
- 설계 : 모델링
- 구현
- 테스트
- 유지보수
소프트웨어 개발 방법론
- 폭포수 모델
- 프로토타이핑 모델
- 나선형 모델
- RAD(안나옴)
- V모형 : 테스트 쪾에 강조
- 4세대 기법 (안나옴)

애자일 방법론
- XP(익스트림 프로그래밍) : 의사소통, 용기, 피드백, 존중, 단순성
- 스크럼 : 스프린트(스트린트 단위로 개발), 백로그
- 크리스털 : 규모에 따른 방법론 제공
- FDD : 기능주도 개발
예) 다음이 설명하는 방법론은 무엇인가? A-애자일
프로젝트 관리(별로 안나올듯)
- 프로젝트 핵심 관리 대상
- PMBOK
- 프로젝트 관리 프로세스 및 지식체계
- 착수, 계획, 실행, 통제, 종료
비용산정 (계획단계)
- 하향식
- 전문가 판단 기법, 델파이 기법(여러 전문가들이 모여서)
- 상향식
- 수학적
- COCOMO : 조직형(5만라인 이하), 반분리형(30만 라인 이하), 내장형(30만 라인 이상)
- Putnam : Rayleigh-Norden, SLIM
- FP : 내부 논리 파일(ILF), 외부 연계 파일(EIF), 외부 입력(EI), 외부 출력(EO), 외부 조회(EQ)
일정산정 (계획단계)
- WBS : workdown break structure
- CPM 네트워크 작성
- 임계경로 계산
- 간트 차트 표현

플랫폼
- CPND
- Contents : 텍스트, 이미지, 오디오, 비디오 등
- Platform : 웹사이트, 애플리케이션 등
- Network : 통신 시스템
- Device : 스마트폰, 컴퓨터, 태블릿
미들웨어
- 원격 프로시저 호출(Remote Procedure Call)
- 메시지 지향 미들웨어(Message Oriented Middleware)
- ORB(Object Request Broker)
- DB 접속 미들웨어
- TP 모니터(Transaction Processing Monitor)
- 웹 애플리케이션 서버(Web Application Server)
- 엔터프라이즈 서비스 버스(Enterprise Service Bus)
WAS - 동적
WEB - 정적

요구사항 개발 프로세스
- 도출 : 인터뷰, 설문조사, 브레인스토밍, 워크샵
- 분석 : DFD(데이터플로우 다이어그램), Data Dictionary, Mini-Spec(소단위명세서), ERD, STD(상태전이도) - 구조적/ UML - 객체지향
- 명세 : 정형(수학적)/비정형(자연어), 기능(뭐 눌렀을때 뭐 돼야함)/비기능(품질 등)
- 확인 및 검증
도분명확
기능적 요구사항 (Functional Requirements)
시스템에 주어지는 특정 입력에 대한 시스템이 산출하는 출력을 통해 정의된다.
- 시스템은 어떤 서비스를 제공하는가
- 어떤 입력이 주어졌을 때 어떻게 반응하는가
- 어떤 상황에서 어떻게 행동하는가
- 시스템이 무엇을 해야 하는지 설명 (기능 or 시스템 서비스)
기능적 사용자 요구사항 : 사용자에 의해 이해 될 수 있는 추상적 방법으로 설명
기능석 시스템 요구사항 : 시스템 기능, 입력, 출력, 예외사항 등
비기능적 요구사항 (Non-Functional Requirements)
소프트웨어 기능들에 대한 조건(시스템의 속성)과 제약사항에 관한 요구사항
- 기능적 요구사항보다 더 결정적인 부분이 될 수 있다 -> why? 이부분이 충족되지 않으면 시스템 이용가치 X
- 각각의 특징과 서비스보다는 전체적인 시스템에 적용

HIPO
- 하향식 소프트웨어 개발을 위한 문서화 도구
- HIPO Chart 종류
- 가시적 도표 - 전반적으로 보는거
- 총체적 도표 - 입력, 출력을 보는거
- 세부적 도표 - 하나의 부분에서 입력, 출력 보는거
객체지향 분석 방법론
- 럼바우 방법
- 객체 모델링 : 객체 다이어그램
- 동적 모델링 : 상태 다이어그램
- 기능 모델링 : DFD
객동기 순서대로
- 부치(Booch) 방법 : 미시적 및 거시적 개발 프로세스
- Jacobson 방법 : Use care를 중심으로 한 분석 방법
- Coad Yourdon 방법 : E-R 다이어그램을 사용
- Wirfs-Brock 방법 : 분석과 설계의 구분 없음
설계의 종류
- 상위 설계 : 아키텍처, 데이터 등 - 분석, 설계
- 하위 설계 : 모듈, 자료구조, 알고리즘 - 구현, 테스트
- 협약에 의한 설계 : 선행조건, 결과조건, 불변조건
소프트웨어 아키텍처 4+1 뷰
- 논리 뷰 : 시스템의 기능적 요구사항 - 개발 입장
- 구현 뷰 : 모듈의 구성과 개발자의 관점을 반영 - 개발 입장
- 프로세스 뷰 : 프로그램 실행 시의 시스템을 표현 - 개발 입장
- 배치 뷰 : 시스템의 물리적 배치 - 개발 입장
- 유스케이스 뷰 : 아키텍처 설계 및 검증을 주도 - 사용자 입장
소프트웨어 아키텍처 패턴 종류
- 계층화 패턴 : OSI 7 계층
- 클라이언트-서버 패턴 : 네이버 웹호출
- 마스터-슬레이브 패턴
- 파이프-필터 패턴
- 브로커 패턴
- 피어 투 피어 패턴 : 토렌트
- 이벤트-버스 패턴
- 모델-뷰-컨트롤러 패턴
- 블랙보드 패턴
- 인터프리터 패턴
UML(Unified Modeling Language) - 그림 그리는 것
- 시스템의 구조와 동작을 명세하는 표준화된 모델링 언어
- UML 구성요소
- UML 특징
- 가시화 언어
- 명세화 언어
- 구축언어
- 문서화 언어
명문가구(이름있는 가구)
UI 설계
- UI : 정보 기기와 사용자 간의 상호작용을 가능하게 하는 매개체
- UX : UI를 통해 경험하는 모든 것
- UI 유형
- CLI
- GUI
- NUI : 인간의 움직임 이용
- OUI : 자연 그대로의 상태 특성들을 반영한 장치 제어
- VUI : 목소리 이용
다음 설명의 UI 유형 문제
UI 설계 도구
- 와이어프레임 : 디자인 그림
- 스토리보드
- 프로토타입 : 시제품
- 목업 : 정적인 모형
- 유스케이스 : 기능 명세
UI 설계 원칙
- 직관성 : 딱봤을때 인지 가능
- 유효성 : 사용자 요구사항을 만족시켜야함
- 학습성 : 배우기 쉬워야함
- 유연성: 사용자 요구사항을 받아들여 확장 가능해야
협업도구
- 여러 사람들이 프로젝트를 동시에 수행할 수 있도록 도와주는 소프트웨어
형상관리 도구
- 소프트웨어 개발과정에서 발생하는 모든 변경을 통제하고 관리하는 방법
- 변경관리 / 버전관리 / 형상관리
- 형상관리 절차
- 형상 식별 : 관리 항목 구분
- 형상 통제 : 변경 요청을 검토하고, CCB의 승인을 거쳐. 베이스라인에 반영
- 형상 감사 : 검토
- 형상 기록 : 기록
- 형상관리 도구
- CVS, SVN, GIT
절차 순서 나오기 좋아보임 - 식통감기(밥먹으면 통증이 오는 감기)
버전관리 도구 사용 방식

빌드 도구
- 실행 가능한 소프트웨어로 변환해주는 도구
- 빌드 도구 종류
- Make : Unix 계열 운영체제에서 주로 사용
- Ant : Java 기반의 빌드 도구로 XML 기반의 빌드 스크립트를 사용
- Maven : 의존성 관리와 프로젝트 라이프 사이클 관리에 강점
- Jenkins : Java 기반의 오픈소스 지속적 통합 서비스 도구
- Gradle: Groovy 기반의 오픈 소스 빌드 자동화 도구(안드로이드 개발에 주로)
프레임워크
- 개발에 필요한 구성요소와 아키텍처를 제공하는 반제품 형태의 소프트웨어
- 프레임워크 특징
- 전자정부 프레임워크, 스트럿츠, 스프링
- 아이바티스, 마이바티스, 하이버네이트 (ORM 프레임워크)
라이브러리
- 프로그램에서 자주 사용되는 루틴이나 리소스를 모아 놓은 것
- 내부 라이브러리 / 외부 라이브러리
프레임워크, 라이브러리 두개 설명 주워지고 각각이 뭔지 쓰는 문제
프레임 워크 특징
API(애플리케이션 프로그래밍 인터페이스)
- 다른 소프트웨어 또는 서비스와 상호 작용하는 데 사용되는 인터페이스
결합도
- 자료 결합도(Data Coupling) : 값 전달 - 결합도 제일 낮음(제일 좋은것 결합도는 낮을 수록 좋으니까)
- 스탬프 결합도(Stamp ") : 배열 등 전달
- 제어 결합도(Control ") : 제어 요소 전달
- 외부 결합도(External ") : 다른 모듈 변수 사용
- 공통 결합도(Common ") : 전역변수 사용
- 내용 결합도(Content ") : 다른 모듈 기능 이용
예) 소스코드 형태로 주어지고 어떤 결합도인지 묻는 문제
응집도
- 기능적 응집도 : 단일한 목적 수행 - 응집도 제일 높음 제일 좋음
- 순차적 " : 출력값을 입력값으로 사용
- 통신적 " : 동일한 입출력
- 절차적 " : 순차적 수행
- 시간적 " : 같은 시간 기능 수행
- 논리적 " : 유사한 성격
- 우연적 " : 연관관계 없음
모듈의 독립성을 높이기 위해서 -> 응집도 높이고 결합도 낮추고
팬인(Fan-in), 팬아웃(Fan-out)

c의 팬인 1, 팬아웃 2
MVC 모델 계층
- 프레젠테이션 계층(Presentaion Layer) : 사용자 인터페이스 - 뷰
- 제어 계층(Control Layer) : 요청을 분석하고, 적절한 비즈니스 로직 호출 - 컨트롤
- 비즈니스 로직 계층(Business Logic Layer) : 핵심 업무 로직을 처리 - 컨트롤
- 퍼시스턴스 계층(Persistence Layer) : 데이터 관리 - 모델
- 도메인 모델 계층(Domain Model Layer) : 데이터를 전달 - 모델
시큐어 코딩
- OWASP : 오픈소스 웹 애플리케이션 보안 프로젝트
- 시큐어 코딩 가이드
- 입력 데이터 검증 및 표현 : SQLi, XSS, 자원삽입 등
- 보안기능 : 부적절한 인가, 취약한 암호화 알고리즘, 패스워드 평문저장 등
- 시간 및 상태 : 경쟁조건, 종료되지 않는 반복문 - 이 아래로는 안나옴 위에 두개만 봐
- 에러처리 : 오류메시지 정보 노출, 부적절한 예외 등
- 코드 오류 : 널 포인터 역참조 등
- 캡슐화
- API 오용
배치 프로그램
- 데이터를 모아서 일괄로 처리하는 작업
- 필수 요소
인터페이스
- 서로 다른 시스템간에 정보를 주고 받는 시스템
- 구성
- 데이터 식별
- 전문 공통부 : ip 등
- 전문 개별부 : 실제 데이터
- 전문 종료부 : 끝났음을 표시
EAI
- 기업 내의 애플리케이션을 통합하는 솔루션
- 구축유형
- Point-to-Point
- Hub&Spoke
- Message Bus(ESB 방식)
- Hybrid
전송 데이터
- JSON : 이름과 값의 쌍 - 중괄호
- XML : 구조화된 문서 표현 - 마크업 언어
- YAML :데이터 직렬화 언어
- CSV : 콤마로 구분
AJAX
- 비동기 방식으로 데이터를 교환
- 페이지의 일부만을 변경 가능
SOAP
- HTTP, HTTPS, SMTP 등을 한 메시지 교환
- SOAP 고성
- SOAP : 메시지를 교환하는 프로토콜
- UDDI : 비지니스 업체 목록 등록 - 도서관
- WSDL : 서비스의 기술적 세부사항 기술 - 설명서
- 보안 프로토콜
- SAML : 인증/권한관리
- XKMS : 키관리
- XACML : 접근제어
REST
- HTTP URI를 통한 자원 명시와 HTTP
Method를 통한 CRUD Operation 적용
- REST 구성
- 자원(Resource) :URI를 통해 식별
- 행위(Method) : GET, POST, PUT, DELETE
- 표현(Representation) : 데이터 표현
- RESTful : REST의 원리를 따르는 시스템
인터페이스 보안
- 패킷 공격 기법: 스니핑, 스푸핑
- 보안 기능 적용
- 네트워크 영역 : IPSec, SSL, S-HTTP, TLS
- 애플리케이션 영역 : 시큐어 코딩
- DB영역 : 암호화
인터페이스 구현 검증 도구
- xUNIT : 다양한 언어 지원
- STAF
- FitNesse
- NTAF
- Selenium
- watir
객체지향 구성요소
- 클래스(Class) : 속성과 연산을 정의해서 만든 틀
- 객체(Object) : 클래스의 인스턴스
- 속성(Attribute) : 객체들이 가지고 있는 고유한 데이터
- 메서드(Method) : 작업을 수행하기 위한 명령문의 집합
- 메시지(Message) : 객체에게 어떤 행위를 하도록 지시
객체지향 특징
- 정보은닉(Information Hiding) : 내부 데이터에 직접 접근할 수 없도록 제한
- 캡슐화(Encapsulation) : 속성과 메서드를 하나로 묶은 것
- 상속(Inheritance) : 상위 클래스의 속성과 메서드를 하위 클래스가 물려받는 것
- 다형성(Polymorphism) : 하나의 메시지에 대해 여러 가지 방법으로 응답 - 오버로딩(이름만 같고 파라미터만 다른것), 오버라이딩(상속에서 부모거를 재정의 하는 것)
- 추상화(Abstraction) : 실체의 핵심적인 개념만을 추출
객체지향 설계 원칙(SOLID)
- 단일 책임 원칙(SRP) : 한 클래스는 하나의 책임만 가져야 한다
- 개방 폐괘 원칙(OCP) : 확장에 열려있고, 수정에 닫혀 있어야 힌다
- 리스코프 치환 원칙(LSP) : 자식 클래스는 언제나 자신의 부모 클래스를 대체
- 인터페이스 분리 원칙(ISP) : 사용하지 않는 인터페이스는 구현하지 말아야 한다
- 의존성 역전 원칙(DIP) : 변화가 거의 없는 것에 의존
디자인 패턴
- 재사용할 수 있도록 만들어놓은 패턴들의 모음
- 디자인 패턴 구조
- 패턴의 이름과 유형, 문제 및 배경, 솔루션, 사례, 결과, 샘플코드
- Gof 디자인 패턴
- 생성 패턴 : 객체 생성과 관련한 패턴
- 구조 패턴 : 객체를 조합해서 더 큰 구조를 만드는 패턴
- 행위 패턴 : 알고리즘이나 책임 분배에 관련된 패턴
요약 정리
🚩 생성
1) Builder : 생성 단계를 캡슐화 해서 구축 공정을 동일하게 이용하도록 하는 패턴
2) Prototype : 기존 객체를 복제해서 새 객체를 생성할 수 있도록 하는 패턴
3) Factory Method : 상위 클래스에서 객체를 생성하는 인터페이스를 정의하고 하위 클래스에서 인스턴스를 생성하는 패턴
4) Abstract Factory : 생성군들을 하나에 모아놓고 팩토리 중에서 선택하게 하는 패턴
5) Singleton : 유일한 하나의 인스턴스를 보장하도록 하는 패턴
🚩 구조
1) Bridge : 추상과 구현을 분리해서 결합도를 낮춘 패턴
2) Decorator : 소스를 변경하지 않고 기능을 확장하는 패턴
3) Facade : 하나의 인터페이스를 통해 느슨한 결합을 제공하는 패턴
4) Flyweight : 대량의 작은 객체들을 공유하는 패턴
5) Proxy : 대리인이 대신 그 일을 처리하는 패턴
6) Composite : 개별 객체와 복합 객체를 클라이언트에서 동일하게 사용하도록 하는 패턴
7) Adapter : 인터페이스로 인해 함께 사용하지 못하는 클래스를 함께 사용하도록 하는 패턴
🚩 행위
1) Interpreter : 언어 규칙 클래스를 이용하는 패턴
2) Templete Method : 알고리즘 골격의 구조를 정의한 패턴
3) Chain of Responsibility : 객체끼리 연결 고리를 만들어 내부적으로 전달하는 패턴
4) Command : 요청 자체를 캡슐화해 파라미터로 넘기는 패턴
5) Iterator : 내부 표현은 보여주지 않고 순회하는 패턴
6) Mediator : 객체 간 상호작용을 캡슐화한 패턴
7) Memento : 상태 값을 미리 저장해두었다가 복구하는 패턴
8) Observer : 상태가 변할 때 의존자들에게 알리고 자동으로 업데이트하는 패턴
9) State : 객체 내부 상태에 따라서 행위를 변경하는 패턴
10) Strategy : 다양한 알고리즘을 캡슐화해 알고리즘 대체가 가능하도록 하는 패턴
11) Visitor : 오퍼레이션을 별도의 클래스에 새롭게 정의한 패턴
테스트의 필요성
- 오류 발견 관점
- 오류 예방 관점
- 품질 향상 관점
테스트 오라클
- 태스트의 결과가 참인지 거짓인지를 판단하기 위해서 미리 정의된 참값을 입력하여 비교하는 기법 및 활동
- 테스트 오라클의 유형
- 참 오라클
- 샘플링 오라킁
- 휴리스틱 오라클
- 일관성 검사 오라클
테스트 레벨

테스트 부분 중요
단통시인
테스트 기법
-
테스트 기법
-
화이트박스 테스트 : 문장검증, 분기검증, 경로검증, 조건검증
-
블랙박스 테스트
: 동등 분할 기법
: 경계값 분석
: 원인-효과 그래프 검사
: 오류 예측 검사
: 비교 검사
: 상태전이 검사




둘다 동적테스트
-
테스트 목적
- 회복 : 고의로 실패를 유도
- 안전 : 보안적인 결함을 점검
- 강도 : 과부하 테스트
- 성능 : 응답하는 시간, 처리량, 반응속도 등
- 구조 : 소스코드의 복잡도를 평가
- 회귀 : 변경코드에 대해
- 병행
- A/B 테스트 :
- 스모크 테스트

테스트 커버리지
- 테스트를 얼마나 수행했는지 측정하는 기준
- 커버리지 유형
- 기능 기반 커버리지
- 라인 커버리지
- 코드 커버리지
코드 커버리지
- 구문 커버리지 : 구문에 대해 한 번 이상 수행
- 조건 커버리지 : 개별 조건식에 대해 수행
- 결정 커버리지 : 결정포인트 내의 모든 분기문에 대해 수행
- 조건/결정 커버리지 : 결정포인트 T/F, 개별조건식 T/F
- 변경 조건/결정 커버리지 : 모든 결정포인트 내의 개별 조건식은 적어도 한번 T/F
- 다중 조건 커버리지 : 가능한 조합을 100% 보장
조건, 결정 커버리지 정도 나올 듯
결함관리
- 발생한 결함을 추적하고 관리할 수 있게 해주는 도구
- 결함관리 프로세스
- 에러 발견
- 에러 등록
- 에러 분석
- 결함 확정
- 결함 할당
- 결함 조치
- 결함 조치 검토 및 승인
프로세스 순서 나올법
테스트 장치
- 테스트 드라이버(Test Driver) : 상향식 테스트에 필요
- 테스트 스텁 : 하향식 테스트에 필요
- 테스트 슈트 : 테스트 케이스의 집합
- 테스트 케이스 : 입력 값, 실행 조건, 기대 결과 등의 집합
- 테스트 스크립트 : 자동화된 테스트 실행 절차
- 목 오브젝트 : 조건부로 상황에 예정된 행위를 수행하는 객체 발생한 결함을 추적하고 관리할 수 있게 해주는 도구
통합 테스트

상향식 도구 - 드라이버 임시모듈
하향식 도구 - 스텁 임시모듈
상향 하향 둘이 같이 하는거 - 백본테스트
리팩토링
- 소스코드 품질 분석
- 동료 검토(Peer review)
- 워크스루(Walkthrough)
- 인스펙션(Inspection) : 계획 -> 사전교육 -> 준비 -> 인스펙션 회의 -> 수정 -> 후속조치
- 리팩토링
클린코드 - 리팩토링의 결과
- 알고리즘 개선, 병목 현상 제거, 실행 시간 단축, 메모리 사용 최소화
- 코드 스멜
- 소스코드에서 발견할 수 있는 잠재적인 문제점
- 스파게티 코드, 외계인 코드, 레거시 시스템
- 클린코드 작성원칙
- 가독성
- 단순성
- 의존성 배제
- 중복성 최소화
- 추상화
유지보수
- 수정 보수(corrective Maintenance) : 오류 수정
- 적응 보수(Adaptive ") : 환경 변화
- 향상 보수(Perfective ") : 기능추가
- 예방 보수( ") : 잠재적 오류 대비
애플리케이션 배포
- 최종 사용자에게 소프트웨어를 전달하는 전체 과정
- CI : 지속적인 통합
- CD : 지속적인 배포
- 릴리즈 노트 :소프트웨어 제품과 함께 배포되는 문서
DRM
- 디지털 콘텐츠의 불법 사용을 제한하고 승인된 사용자에게만 컨텐츠 사용을 허용하는 기술
- DRM의 구성 및 흐름
- 콘텐츠 제공자 : 콘텐츠를 제공하는 저작권자
- 콘텐츠 분배자 : 암호화된 콘텐츠 제공
- 패키저 : 콘텐츠를 메타 데이터와 묶는 기능
- 보안 컨테이너 : 안전한 유통을 위한 전자적 보안 장치
- DRM 컨트롤러 : 콘텐츠의 이용 권한을 통제
- 클리어링 하우스 : 키 관리 및 라이선스 발급 관리
DRM 사용 규칙 제어 기술
- 콘텐츠 식별 체계 : 콘텐츠에 고유 식별 번호를 부여
- 메타데이터 : 콘텐츠에 관한 구조화된 데이터
- 권리 표현 기술 : 콘텐츠에 대한 규칙을 설정(XrML) : 이용, 교환 등
저작권 보호 기술
- 암호화 기술
- 위변조 방지
- 콘텐츠에 무단 조작 시 감지하고 오류 동작을 유발
- 워터마킹
- 콘텐츠에 저작권 정보를 은닉
- 워터마킹(불법 복제 방지), 핑거프린팅(불법 유통 방지)
데이터베이스
데이터베이스 정의
- 공유 데이터
- 저장 데이터
- 통합 데이터
- 운영 데이터
공장통운
데이터 언어
- DDL : 구조와 제약 조건 정의
- DML : 데이터 처리 및 조작
- DCL : 보안, 권한, 무결성 및 병행 제어
데이터베이스 스키마


그냥 스키마 - 개념스키마를 말함
외부 스키마 : 사용자 관점 / 논리적 독립성
개념 스키마 : 데이터베이스의 전체 구조와 제약조건 / 물리적 독립성
내부 스키마 : varchar(20), tinyint 등과 같은 실제 DB 설정
DBMS
- 데이터베이스를 효과적으로 관리하고 조작하기 위한 전용 소프트웨어
- 종류
- 계층형 : 트리 구조
- 네트워크형 : 다대다 관계 가능, CODAYSL
- 관계형 : 테이블 구조의 모델
- 객체 지향형 : 객체지향 프로그래밍 개념에 기반
- 객체 관계형 : 관계형 + 객체지향 개념
- NoSQL : 다양한 특성을 지원
- NewSQL : RDBMS와 NoSQL의 장점을 결합
데이터베이스 설계
- 요구 조건 분석
- 개념적 설계
- 논리적 설계
- 목표 데이터 모델 기반 설계
- 정규화, 트랜잭션 인터페이스 설계
- 물리적 설계
- 구조 및 성능에 대한 설계- 파티션, 클러스터, view, index
- 반정규화
- 구현
3개 쓰라하면 개논물
데이터 모델
- 복잡한 데이터 구조를 단순화, 추상화하여 체계적으로 표현한 개념적 모형
- 데이터모델 요소
- 구조 : 데이터 구조 및 개체 간 관계
- 연산 : 데이터 처리 방법
- 제약조건 : 데이터의 논리적 제약조건
E-R 다이어그램 기호

이상현상
- 데이터 중복으로 인해 릴레이션 주작 시 발생하는 예기치 않은 문제점
- 이상의 종류
- 삽입 이상 : 불필요한 데이터가 함께 삽입되는 현산
- 삭제 이상 : 연쇄 삭제 현상으로 인해 정보 손실
- 갱신 이상 : 인부 정보만 갱신되어 정보에 모순이 생기는 현상
예) 이상의 종류에 대해 써라 - 각 이상 별 특징도 써줘야함
함수적 종속
- 완전 함수적 종속
- 부분 함수적 종속
- 기본키를 구성하는 속성 중 일부만 종속되는 경우
- 이행적 함수 종속
- X -> Y -> Y -> Z 일떼, X-> Z가 성립되는 경우
정규화

두부이거다조
반정규화
- 성능 향상이나 개발 및 운영의 편의성을 위해 의도적으로 중복을 허용하거나 데이터를 재구성하는 기법
데이터베이스 이중화
- 장애에 대비하여 동일한 데이터베이스를 중복하여 관리하는 방식
- 장애나 재해 발생 시 빠른 서비스 재개(고가용성)
- 이중화 분류
- Eager 기법 : 트랜잭션 발생 시 즉시 반영
- Lazy 기법 : 트랜잭션 완료 후 반영
데이터베이스 백업
- 전체 백업 : 모든 데이터를 백업
- 증분 백업 : 변경/추가된 데이터만 백업
- 차등 백업 : 모든 변경 / 추가된 데이터를 백업
- 합성 백업 : 합성 백업 : 전체 백업본과 여러 개의 증분을 합하여 새로운 전체 백업을 만드는 작업
증분, 차증 백업 차이


RTO/RPO
- 복구 시간 목표(RTO)
- 서비스를 사용할 수 없는 상태로 허용되는 시간
- 복구 시점 목표(RPO)
- 마지막 백업 이후 허용되는 최대 데이터 손실 시간
데이터베이스 암호화
- API 방식 : 애플리케이션에서 수행
- Plug-in 방식 : DB 서버에 제품 설치
- TDE 방식
물리 속성 설계
- 파티셔닝
- 데이터베이스의 특정 부분을 여러 섹션으로 분할하는 방법
- 범위, 목록, 해시, 라운드 로빈 , 합성
- 클러스터
- 자주 사용되는 테이블의 데이터를 디스크 상 동일한 위치에 저장
- 인덱스
- 테이블 검색 속도 향상을 위한 저장 공간 활용 자료구조
- 뷰
- 기본 테이블에서 유도된 이름이 있는 가상 테이블
시스템 카탈로그
- 데이터베이스의 모든 데이터 개체들에 대한 정보를 저장한 시스템 테이블
- 데이터 사전이라고도 한다
관계 데이터 릴레이션 구조
- 릴레이션
- 릴레이션 스키마 : 릴레이션의 논리적 구조
- 릴레이션 인스턴스 : 스키마에 실제로 저장된 데이터의 집합
- 속성: 릴레이션의 열, 계체의 특성
- 튜플 : 릴레이션의 행, 속성들의 모임
- 도메인 : 속성이 가질 수 있는 값의 범위
- 차수 : 속성의 총 개수
- 카디널리티 : 튜플의 총 개수
관계대수
- 원하는 데이터를 찾기 위한 절차적 언어

관계해석
- 원하는 정보가 무엇이라는 것만 정의하는 비절차적 특성

속성 - 칼럼
- 정보의 최소 단위
- 속성의 분류
- 기본속성 : 업무로부터 추출한 모든 속성
- 설계 속성 : 코드성 데이터
- 파생속성 : 다른 속성에 영향을 받아 발생하는 속성
키
- 튜프을 식별하고 구별하는 데 사용되는 칼럼

슈퍼키 - 유일하게 나만 식별할 수 있는거
후보키 - 유일성, 최소성 모두 만족 시켜야 하는거
기본키 - 후보키 중 적절한 거
대체키 - 나머지
무결성 제약조건
- 개체 무결성
- 참조 무결성
- 외래키는 NULL이거나 참조 릴레이션의 기본키와 일치해야 함
-Restrict, Cascade
- 도메인 무결성
- 속성 값은 정의된 도메인에 속해야 한다(성별 - 남자, 여자/ 숫자 - 1,2,3,4)
- 고유 무결성 - 이 아래 안나옴
- 키 무결성
- 릴레이션 무결성
CRUD
- 해당 업무에 어떤 데이터가 존재하는지 무엇이 영향을 받는지 분석
- Create, Read, Update, Delete
SQL 처리흐름

옵티마이저
- SQL문에 대한 최적의 실행 방법을 결정
- 옵티마이저 구분
- 규칙기반 옵티마이저 : 우선순위
- 비용기반 옵티마이저 : 통계정보
튜닝
- SQL문을 최적화하여 시스템의 처리량과 응답 속도를 개선하는 작업
분산 데이터베이스
- 여러 곳에 분산된 데이터베이스를 하나의 논리적인 시스템처럼 사용할수 있는 데이터베이스
- 분산 데이터베이스 구성요소
투명성 조건
- 위치 투명성 : 실제 위치를 모르고 엑세스 가능
- 분할 투명성 : 여러 단편으로 분할
- 지역사상 투명성 : 각 지역시스템 이름과 무관하게 사용
- 중복 투명성 : 데이터의 중복을 사용자에게 숨김
- 병행 투명성 : 다수의 트랜잭션들이 동시에 실행되어도 영향을 주지 않음
- 장애 투명성 : 다양한 장애에도 트랜잭션 처리
CAP 이론
- 일관성, 가용성, 분단 허용성 세가지 속성 중, 두가지만 가질수 있다는 것
트랜잭션
- 하나의 논리적 기능을 수행하는 작업 단위
- 트랜잭션의 성질 ACID
- 원자성 : 모두 반영되거나 아니면 전혀 반영되지 않아야한다
- 일관성 : 트랜잭션의 완료 후에는 데이터베이스가 일관된 상태를 유지해야한다
- 독립성, 격리성 : 동시에 실행되는 여러 트랜잭션들은 간섭할 수 없다
- 영속성 : 결과는 시스템에 영구적으로 반영되어야 한다
트랜잭션 상태
- 활동 : 트랜잭션이 실행 중인 상태
- 실패 : 트랜잭션 실행에 오류가 발생하여 중단된 상태
- 철회 : 비정상적으로 종료되어 롤백 연산을 수행한 상태
- 부분 완료 : Commit 연산이 실행되기 직전의 상태
- 완료
절차형 SQL
- 트리거 : 이벤트에 반응해 자동으로 실행
- 저장 프로시저 - 이 밑 안나옴
- 사용자 정의 함수
병행제어
- 여러 트랜잭션이 동시에 실행되면서도 데이터베이스의 일관성을 유지하는 기법
- 병행제어를 하지 않았을 때의 문제점
병행제어 기법
- 로킹
- 2단계 로킹 규약
- 타임스탬프
- 낙관적 병행제어
- 다중 버전 병행제어
회복 기법
- 로그 기반 회복 기법 : 지연 갱신(REDO), 즉시 갱신(REDO + UNDO)
- 검사점 회복 기법
- 그림자 페이징 회복 기법
- 미디어 회복 기법
- ARIES 회복 기법
시스템 소프트웨어
- 로더 : 프로그램을 메모리에 적재
- 링커 : 목적 파일을 실행 파일로 변환
- 번역기 : 프로그래밍 언어를 다른 언어로 변환
- 운영체제 : 하드웨어 관리와 통신 등 다양한 기능을 제공
제어 프로그램
- 감시 프로그램 : 프로그램 실행과 시스템 상태를 감시/감독
- 작업관리 프로그램 : 스케쥴 관리 및 시스템 자원 할당을 담당
- 데이터 관리 프로그램 : 데이터 전송 및 파일 조작을 관리
운영체제 운용 기법
- 일괄 처리 시스템
- 실시간 처리
- 다중 프로그래밍
- 시분할 "
- 다중 처리 " : 프로세서가 여러개
- 다중 모드 "
- 분산 처리 "
유닉스 파일 시스템
- 파일 시스템 구조
- 부트 블록 : 부팅 시 필요한 코드가 저장
- 슈퍼 블록 : 전체 파일 시스템에 대한 정보가
- I-node 블록 : 파일이나 디렉토리에 대한 모든 정보 - 얘가 데이터블록을 가리키고 있다. 파일을 지우면 이게 지워지는 거임
- 데이터 블록 : 실제 파일 데이터가 저장
- 파일 디스크립터
- 유닉스 시스템에서 프로세스가 파일에 접근할 때 사용
기억장치 관리 전략
-
반입 전략
-
배치 전략
- 최초 적합(First Fit) : 들어갈 수 있는 맨 처음거에 들어감
- 최적 적합(Best Fit) : 가장 딱 맞는 공간에 들어감
- 최악 적합(Worst Fit) : 제일 많이 남아버리는데 들어감
-
교체 전략
- FIFO, OPT-계산식없어, LRU-최근에 사용되지 않은거, LFU, NUR, SCR
계산문제
-
FIFO

-
LRU

단편화
- 주기억장치에 프로그램 할당과 반납 과정에서 발생하는 빈공간
- 단편화 종류
- 단편화 해결 방법
- 통합 기법 : 인접한 분할 공간
- 압축 기법 : 분산된 여러 간편화 공간
- 재배치 기법 : 프로그램의 주소를 새롭게 지정해주는 기법
가상기억장치
- 보조기억장치의 일부를 주기억장치처럼 사용하는 기법
- 블록 분할 방법
- 페이징 기법 : 같은 크기의 블록,내부 단편화 발생
- 세그먼테이션 기법 : 가변 크기의 블록, 외부 단편화 발생
- 기타 용어
- 페이지 부재 : 필요한 페이지가 주기억 장치에 없는 상황
- 지역성 : 프로세스가 실행되는 동안 일부 페이지만 집중 참조
- 워킹 셋 : 일정시간 동안 자주 참조되는 페이지들의 집합
- 스래싱 : 프로세스 처리 시간보다 페이지 교체에 소요되는 시간이 더 현상 많아지는 현상
프로세스
- 컴퓨터에서 실행중인 프로그램
- 프로세스의 영역
- 코드 영역 : 실행할 프로그램의 코드가 저장
- 데이터 영역 : 전역 변수와 정적변수
- 스택 영역 : 지역 변수와 함수의 매개변수
- 힙역역 : 동적 할당
- 스레드
- IPC - 프로세스 간 통신
- 프로세스들이 데이터를 주고받거나 상태를 조정하기 위해 사용하는 기술
프로세스 상태전이

PCB 프로세스 제어 블록
- PCB는 운영체제가 프로세스의 정보를 저장하는 공간
- 문맥 교환
프로세스 스케줄링
- 메모리에 올라온 프로세스들 중 어느 프로세스를 먼저 처리할 지 순서를 정하는 것
- 선점형 스케줄링
- 운영체제가 실행 중인 프로세스로부터 CPU를 강제로 뺴앗을수 있는 방식
- Round Robin, SRT, MLQ, MLFQ
- 비선점형 스케줄링
- 프로세스가 CPU를 점유하고 있다면 이를 빼앗을 수 없는 방식
- FCFS, SJF, HRN
기아현상 / 에이징 기법
- 기아현상 : 우선순위가 낮은 프로세스가 무한정 기다리는 현상
- 에이지 기법 : 기아현상을 해결하기 위한 기법
병행 프로세스
- 두개 이상의 프로세스가 동시에 존재하며 실행 상태에 있는 것
- 한정된 자원에 대한 사용 순서 등의 문제가 발생할 수 있다.
- 문제 해결책
- 임계구역
- 상호배제 기법(다익스트라, 데커, 피터슨)
- 동기화 기법(세마포어, 모니터)
교착상태
- 프로세스가 자원을 점유한 상태에서 다른 프로세스의 자원을 요구하며 무한정 기다리는 현상
- 교착상태 발생 조건
- 교착상태 해결 방법
디스크 스케줄링
- 하드 디스크에 저장된 데이터에 접근하기 위해 디스크 헤드의 움직임을 최적화하는 기법
- 디스크 스케줄링 종류
- FCFS - first come first served
- SSTF - shortest seek time first
- SCAN, C-SCAN
- LOOK, C-LOOK
- N-STEP SCAN
- 에션바흐 기법
스토리지
- 데이터를 저장하는 저장소
- 스토리지 종류
- DAS 다이렉트 어테치드
- NAS 네트워크 어테치드
- SAN
RAID
- RAID-0 : 스트라이핑 사용
- RAID-1 : 미러링 사용
- RAID-2 : 오류 정정을 위한 해밍코드 사용
- RAID-3 : 한 디스크를 패리티 정보 저장용으로 사용
- RAID-4 : RAID-3과 유사하나 블록 단위 분산 저장
- RAID-5 : 각 디스크에 패리티 정보 포함
- RAID-6 : 두 개의 패리티 정보를 디스크에 분산 저장
네트워크 토폴로지
- 계층형 : 계층적 구조
- 버스형 : 모든 노드가 하나의 중앙 버스 라인에 연결
- 성형 : 모든 노드가 중앙 노드에 연결
- 링형 : 각 노드가 순환 형태로 두 개의 인접 노드와 연결됨
- 망형 : 노드들이 서로 광범위하게 연결되어 있음
데이터 전송
- 아날로그/디지털 전송
- 단방향, 반이중, 전이중 통신
- 직렬전송, 병렬전송
- 동기식 전송(SYN, STX, ETX), 비동기식 전송(Start, Stop)
LAN
- 학교, 건물, 사무실 등 가까운 거리에 한정된 망
- 전송방식 : 베이스 밴드, 브로드밴드
- 프로토콜 : LLC, MAC
- 802.X
HDLC
- 데이터 링크 계층에서 사용되는 비트 지향 프로토콜
- 프레임 구조
- 플래그, 주소필드, 제어필드, 데이터, FCS
- 프레임 유형
- 정보 프레임(데이터), 감독 프레임(오류 및 제어), 비순서 프레임(추가 제어목적)
- 스테이션
- 전송모드
- 정규 응답 모드 : 하나의 주국과 하나 이상으 종국
- 비동기 균형 모드 : 모든 단말이 주국 기능을 수행
- 비동기 응답 모드 : 종국도 자체적으로 데이터 전송을 시작할 수 있는 모드
데이터 교환 방식

다중화
- 하나의 통신 회선을 여러 가입자가 동시에 사용할 수 있게 하는 기능
- 다중화기 종류
- 주파수 분할 다중화기(FDM)
- 시분할 다중화기(TDM) : 동기식/비동기식(지능형 다중화, 통계적 시분할)
- 코드 분할 다중화(CDM)
- 파장 분할 다중화(WDM)
- 공간 분할 다중화(SDM)
- 역 다중화기, 집중화기
IP 주소 분류
- IPv4
- 유니캐스트 : 1대1
- 멀티캐스트 : 1대다
- 브로드캐스트 : 전체
- IPv6
- 유니캐스트
- 멀티캐스트
- 애니캐스트 : 다단계 방식
IP 주소 클래스
- A : 0으로 시작
- B :10으로 시작
- C : 110으로 시작
IPv6
- IPv4 주소 고갈 문제를 해결하기 위해 개발된차세대 인터넷 프로토콜 주소
- 128비트 크기로 확장된 주소 체계를 가짐
- 16비트씩 8부분, 128비트로 구성, :으로 구분
- 4 -> 6전환기술
NAT
- 사설 IP 주소와 공인 IP 주소 간의 변환
- NAT 종류
- Static NAT : 공인 IP 주소와 사설 IP 주소를 1대1로 매칭
- Dynamic NAT : 여러 공인 IP주소를 사설 IP 주소와 매칭할 때 사용
- PAT : 포트 번호를 이용해 구분
IP 관련 기술
- DNS
- 도메인 이름을 IP 주소로 변환하거나 그 반대의 작업을 수행하는 시스템
- QoS
- VPN
- 공용 네트워크를 통해 사설 네트워크에 안전하게 접속할 수 있게 하는 기술
- DHCP
- 네트워크 장치에 자동으로 IP 주소를 할당하는 프로토콜
프로토콜
- 컴퓨터나 통신 장비 간 원활한 데이터 교환을 위한 표준화된 통신 규약
- 통신 프로토콜의 기본 요소
- 구문(Syntax) : 데이터의 형식, 부호화, 신호 레벨
- 의미(Semantics) : 정보 전송을 위한 협조 사항 및 오류 관리 제어 정보
- 타이밍(Timing) : 통신 속도, 메시지 순서 제어
흐름제어
- 수신측의 처리 능력에 맞춰 송신측에서 데이터의 전송력이나 속도를 조절하는 기능
- 종류
- Stop and Wait
- Sliding Window
- 피기배킹
- 양방향 통신에서 정보 프레임과 응답 프레임을 동시에 교차 전송하는 방식
오류 제어
- 전송 중에 발생하는 오류를 검출하고 정정하는 기능
- ARQ 종류
- Stop and wait ARQ
- go back N ARQ
- Selective Repeat ARQ
- Adaptive ARQ
- 오류 원인
- 감쇠, 지연 왜곡, 상호 변조 잡음, 충격 잡음
오류 제어 방식
- 전진 오류 수정
- 수신측에서 재정송 요구 없이 스스로 오류를 검출하고 수정하는 방식
- 해밍코드, 상승 코드 등
- 후진 오류 수정
- 오류 발견 시 송신측에 재전송을 요구하는 방식
- 패리티 검사, CRC, 블록 합 방싱을 통해 오류 검출
OSI 7계층

전송계층 - 세그먼트
네트워크 - 패킷
데이터링크 - 프레임
1계층- NIC 허브 리피터
2계층- 스위치, 브리지
3계층- 라우터
백본
- 백본 네트워크는 기간망으로도 알려진 대규모 패킷 통신망
- 백본 스위치 : 모든 패킷이 지나가는 역할
- 스위치 종류
- L2 : 데이터 링크 계층, MAC 주소 기반 스위칭
- L3 : 인터넷 계층, IP 주소 기반 스위칭
- L4 : 전송 계층, 로드밸런싱하는 데 사용
- L7 : 응용계층, 보안 장비에 사용
TCP/IP 4계층

ICMP, ARP, RARP
라우팅 프로토콜

RIP, OSPF
정보보안 요소
- 기밀성 : 인가된 사용자만 정보에 접근
- 무결성 : 인가된 사용자에 의해서만 정보 변경
- 가용성 : 정보 자산에 언제든지 접근
- 인증 : 사용자가 허가받은 사용자인지 확인
- 부인방지 : 정보 전송을 부인할 수 없도록 함
AAA
- 인증(Authentication) : 사용자의 신원확인
- 권한부여(Authorization) : 권한과 서비스를 허용
- 계정관리(Accounting) : 사용자의 자원 사용 정보를 수집
인증제도
- ISMS(정보보호 관리체계 인증)
- PIMS(개인정보보호 관리체계)
- ISMS-P(정보보호 및 개인정보보호 관리체계)
- ITSEC
- TCSEC
- CC
Secure SDLC
- CLASP : 초기단계
- MS-SDL
- Seven Touchpoints
암호 알고리즘 용어
- 평문
- 암호문
- 암호화
- 복호화
- 전자서명
- 양방향 암호화
- 단방향 암호화
블록암호 알고리즘
- DES
- 3-DES
- AES
- SKIPJACK
- IDEA
- SEED
- ARIA
- LEA
대칭키 : SEED, DES, 3DES, AES, ARIA
비대칭키 : RSA, DSA, ECC
스트림암호 알고리즘
공개키암호 알고리즘
단방향 알고리즘
- MD5 : 취약점 발견, 빠름
- SHA
- HAS-160
해시 함수의 결점
- 무차별 대입 공격
- 정해진 범위 내의 모든 가능한 문자열을 이용해 암호를 해독하는 공격 방식
- 키 스트레칭으로 보완
- Rainbow Table 공격
전자우편 보안
인증 유형
- 지식 기반 인증 : 기억하는 정보
- 소유 " : 소유한 물건
- 생체 " : 신체적 특징
- 행위 "
- 위치 "
인증방식
- 계정 정보를 요청 헤더에 넣는 방식
- 쿠키/세션 방식
- 토큰 기반 인증 방식(JWT, JSON Web Token)
- OAuth : 이용자의 웹 서비스에 대한 제한된 접근 권한을 안전하게 부여
- SSO
- 커버로스
- 아이핀 : 주민증록번호 대체 수단
접근 통제 정책

MAC - 신원, 보안 등급에 따라
DAC - 소유자가 자기가 원하는 사람에게
RBAC - 부서별로 역할별로
접근 통제 모델
- 벨-라파둘라 모델
- 비바 모델
- 클락-윌슨 모델
- 만리장성 모델
취약점/ 보완관제
- 보안 취약점 점검 분류
- 보완관제
- 24시간 정보자산을 지키기 위해 전달되는 패킷을 관측
- 실제 침해사고 시 CERT팀이 대응
- 통합로그 분석 장비
보안 솔루션
- 방화벽
- 웹방화벽
- 침입탐지시스템 : 이상 탐지율 더 높음
- 침입방지시스템
- 데이터유출방지
- 가상 사설 통신망
- NAC : 접근 통제
- SOAR
- Sandbox
- FDS
- Proxy Server
방화벽
- DMZ 구간 : 내부 네트워크에 포함되어 있으나 외부에서 접근할 수 있는 구간
- 구축 유형
- 스크리닝 라우터 : IP, TCP, UDP 헤더 분석을 통해 동작
- 베스천 호스트 : 접근 제어, 프록시 기능, 인증 ,로깅 등 수행
- 듀얼 홈드 호스트 : 2개의 네트워크 인터페이스를 갖춘 호스트
- 스크린드 호스트
- 스크린드 서브넷
보안 프로토콜
- SSH 22번 포트
- SSL
- 웹 브라우저와 웹 서버 간 안전한 데이터 전송을 위한 프로토콜 443 포트
- S-HTTP
- 웹상에서 네트워크 트래픽을 암호화하기 위한 방법
- TLS
- IPSec
DoS 공격
- Smurf Attack : IP와 ICMP의 특성
- Ping Of Death : 정상 크기를 초과하는 ICMP 패킷
- Land Attack : 출발지 IP와 목적지 IP가 동일한 패킷
- Teardrop Attack : Fragment Number를 위조
- SYN Flooding : SYN 신호만 전송
- UDP Flooding : 다량의 UDP 패킷을 전송
- Ping Flooding : 많은 ICMP Echo 요청
DDoS 공격
클라우드 서비스
- 인터넷 기반 컴퓨팅
- 서비스 유형
- IaaS : 인프라
- PaaS : 플랫폼
- SaaS : 소프트웨어
도커 / 하이퍼바이저
소프트웨어 정의 기술
- 컴퓨터/통신망/데이터 센터 등을 소프트웨어로 제어하여 가상화/ 지능화
- 종류
- SDN : 소프트웨어 정의 네트워킹
- SDS : 소프트웨어 정의 스토리지
- SDC : 소프트웨어 정의 컴퓨팅
- SDDC : 소프트웨어 정의 데이터센터
인공지능
- 기계 학습 : 데이터에서 규칙 자동 학습
- 인공 신경망 : 인간 뉴런 구조 모방
- 딥 러닝 : 인공 신경망 기반 머신러닝 알고리즘
소프트웨어 공학 관련 용어
- 브룩스의 법칙
- 지연된 프로젝트에 인력 추가는 오히려 개발 속도를 느리게 함
- 파레토 법칙
- Boehm의 법칙
- 초기 단계에서 결함 발견 및 수정은 비용 절감
- 무어의 법칙