IT/IT 지식

알아두면 좋은 IT 지식 10 - 알고리즘, 파티션 유형, 갱신 기법

new1life 2022. 7. 13. 17:12

알고리즘

Divide and Conquer(분할 정복 알고리즘)은 그대로 해결하기 힘든 문제를 작은 문제로 나누어서 문제를 해결하는 알고리즘입니다.
Greedy(탐욕 알고리즘) : 현재 시점에서 제일 최적의 방법을 고르는 알고리즘입니다.
Backtracking : 모든 조합을 시도하여 해답을 찾아내는 알고리즘입니다.

 

파티션 유형 
범위 분할(Range Partitioning) : 선택한 열의 값을 기준으로 분할합니다.
해시 분할(Hash Partitioning) : 해시 함수를 적용한 결과 값에 따라서 데이터를 분할합니다.
조합 분할(Composite Partitioning) : 범위 분할을 한 후에 해시 함수를 이용하여 다시 분할합니다.

 

AJAX

JavaScript를 사용한 비동기 통신기술로, 클라이언트, 서버 사이에서 XML 데이터를 교환하는 기술입니다.

 

인수 테스트(Acceptance Test) 종류
사용자 인수 테스트, 운영상의 인수 테스트, 계약 인수 테스트, 규정 인수 테스트
테스트, 베타 테스트

알파, 베타 테스트가 나오면 인수 테스트입니다.

 

즉각 갱신 기법(Immediate Update)
트랜잭션의 연산을 실행해서 데이터를 업데이트한 것을 실제 데이터 베이스에 바로 반영하는 기법입니다.
업데이트한 내용을 모두 로그(Log)에 보관합니다. 취소(Undo) 재시도(Redo) 모두 사용하는 것이 가능합니다.


연기 갱신 기법(Deferred Update)
트랜잭션이 완료될 때까지 데이터베이스에 갱신을 연기하는 방법입니다. 역시나 트랜잭션 수행으로 인한 업데이트 내용은 로그(Log) 보관합니다. 트랜잭션이 부분적으로 완료가 된 시점에 로그 기록을 실제 데이터 베이스에 반영합니다.
그렇기 때문에, 트랜잭션 수행 중에 장애가 발생하여 롤백해도 취소(Undo)할 필요가 없습니다.
재시도(Redo)를 통해 최근 데이터베이스로 회복한 후에 다시 실행할 수 있습니다.


검사점 기법(Check Point)
트랜잭션 중간중간에 검사점인 체크 포인트를 로그에 보관해 트랜잭션 전체를 취소하는 것이 아닌, 검사점까지만 취소할 수 있는 기법입니다.

그림자 페이지 대체 기법(Shadow Paging) - 로그가 필요 없음
트랜잭션의 연산으로 업데이트해야 할 때, 복사된 페이지인 그림자 페이지를 보관하는 기법입니다. 트랜잭션을 취소할 때 그림자 페이지를 이용하여 회복할 수 있습니다. 그렇기 때문에 로그(Log), 취소(Undo), 재시도(Redo) 필요가 없습니다.

 

버퍼 오버플로

메모리를 사용하는 데 오류가 발생하게 되면, 이상한 동작을 하는 프로그램 취약점을 말합니다.

 

FP 기능별 가중치 산정 요소
자료 입력(입력 양식), 정보 출력(출력 보고서), 명령어(사용자 질의수), 데이터 파일,
필요한 외부 루틴과의 인터페이스 <-클래스 인터페이스가 아닙니다.

 

SPICE

소프트웨어 품질 생산성 증진 위해 소프트웨어의 프로세스를 평가 개선하는 국제 표준입니다.
공식 명칭은 ISO/IEC 15504입니다.
SPICE의 목적은 프로세스 개선을 위해 개발 기관이 자체적으로 평가하는 것, 기관에서 지정한 요구조건의 만족 여부를 개발 조직이 자체적으로 평가하는 것, 계약 체결을 위해서 수탁 기관의 프로세스를 평가하는 것입니다.

 

객체지향 설계 원칙(SOLID) – SRP, OCP, LSP, ISP, DIP
단일 책임 원칙(SRP, Single Responsibility Principle) : 모든 클래스는 오직 하나의 책임만 가지며, 클래스는 그 하나의 책임을 완전히 캡슐화해야 한다는 원칙입니다.
개방 폐쇄의 원칙(OCP, Open-Closed Principle) : 확장에 대해서는 오픈 마인드를 가지고 있어야 하고, 수정에 대해서는 클로즈드 마인드를 가지고 있어야 한다는 원칙입니다.
리스 코프 교체(치환) 원칙(LSP, Liskov Substitution Principle) : 컴퓨터 프로그램에서 자료형 S가 자료형 T의 하위 형태라면, 필요한 프로그램의 속성을 변경하지 않아도 자료형 T의 객체를 자료형 S의 객체로 교체할 수 있어야 한다는 원칙입니다.

인터페이스 분리 원칙(ISP, Interface Segregation Principle) : 클라이언트가 자신이 이용하지 않는 함수에는 기대지 않아야 한다는 원칙입니다.

의존성 역전 원칙(DIP, Dependency Inversion Principle) : 의존 관계를 가지고 있을 때는 변하기 쉬운 숙주나물 같은 것보다는 변하기 어려운 한결같은 마음과 같은 것에 의존하라는 원칙을 의미합니다.

 

아키텍처(architecture)

영어로는 구조, 건축물이라는 뜻을 가지고 있습니다. 그렇기에 소프트웨어 아키텍처는 소프트웨어 구조구나, 소프트웨어의 건축물이구나 생각하면 됩니다.

 

레이어 패턴 (Layers Pattern) : 시스템을 계층으로 구분하여 구성한 것으로 OSI 참조 모델을 생각하면 됩니다.
클라이언트-서버 패턴 (Client-Server Pattern) : 하나의 서버 컴포넌트와 다수의 클라이언트 컴포넌트로 구성되는 패턴입니다. 서버는 하나입니다.
파이프-필터 패턴 (Pipe-Filter Pattern) : 데이터 스트림 절차의 각 단계를 필터 컴포넌트로 캡슐화하여 파이프를 통해 데이터를 전송하는 패턴입니다. 파이프 하면 생각나는 것은 유닉스의 쉘입니다.
모델--컨트롤러 패턴 (Model-View-Controller Pattern) : 서브시스템을 3개의 부분으로 구조화하는 패턴입니다. 메시지 어플을 생각하면 좋습니다.
그 외에도 마스터-슬레이브 패턴, 중개인 패턴, 피어--피어 패턴, 이벤트-버스 패턴, 블랙보드 패턴, 인터프리터 패턴이 있습니다.

 

디자인 패턴 사용의 장점과 단점

장점은 소프트웨어 구조 파악이 용이하고 재사용을 하기 때문에 개발 시간이 단축됩니다.

단점은 객체지향 설계와 구현 위주라는 점입니다. C 언어를 주로 사용하는 구조적 설계와 구현에도 사용은 할 수는 있지만 너무 복잡해서 큰 도움이 되지 않는다고 합니다.

 

UML 구성요소

사물관계다이어그램 3가지로 이루어져 있으며, Things은 사물, Relationship은 관계, Diagram은 다이어그램입니다.

 

상위 설계와 하위 설계

상위 설계 : 아키텍처 설계, 데이터 설계, 시스템 분할인터페이스 정의, 사용자 인터페이스 설계(UI 설계)
하위 설계 : 모듈 설계인터페이스 작성

 

정형 명세 법
수학적 기반/모델링 기반입니다. 수학적 하면 정형 명세 법이라고 생각하면 됩니다. Z, VDM, Petri-Net(모형 기반), CSP, CCS, LOTOS(대수적 방법)입니다. 시스템 요구특성이 정확하고 명세가 간결하기 때문에 명세와 구현이 일치합니다. 그러나 수학적 지식이 없는 사람에게는 이해도가 낮으며, 이해관계자는 부담스러울 수밖에 없습니다.

 

비정형 명세 법
상태, 기능, 객체 중심으로 설명 위주의 명세 법입니다. FSM(Finite state machine), Decision TableER 모델링, State chart(SADT) Usecase(사용자 기반 모델링)이 있습니다.
명세 작성이 간편하고 의사전달 방법이 다양합니다. 그러나, 불충분한 명세를 작성할 가능성이 있고, 이렇게 해주세요 저렇게 해주세요 처럼 모호합니다.

 

애자일

애자일 방법론에는 익스트림 프로그래밍(Extreme Programing, XP), 스크럼(Scrum), 익스트림 모델링, 크리스털 패밀리 , 기능 중심 개발(FDD, Feature-Driven Development)이 있습니다. 기능 중심 개발이지 모듈 중심 개발이 아닙니다.

스크럼 계획 과정

스프린트 계획 회의 -> 스프린트 -> 일일 스크럼 회의 -> 스프린트 검토회의 -> 스프린트 회고

백로그(요구사항 총집합)를 작성하는 사람은 PO(제품 책임자)입니다.