본문 바로가기
computer_science

복습

by useSword 2024. 3. 28.

멀티스레딩 : 여러 개의 스레드를 병행으로 실행할 수 있는 하드웨어 지원

 

데드락 : 여러개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태

메모리 누수 : 컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상

 

P.S.

react에서 useEffect에서 메모리 누수를 위해 클린업 함수를 사용해야한다고 했었음.
난 클린업 함수에 대해 자세히 이해하지 못했었고 몇가지 예시를 보고 알았음.
클린업 하는 방법은 useEffect안에서 return을 하고 실행되길 원하는 함수를 작성하면 된다.

클린업 함수 사용 예시)
1. Socket 베이스 실시간 채팅에서 사용자가 방을 떠났을 때 
클린업 함수를 이용해서 Socket disconnect하는 코드를 작성해야 합니다.

2. 이벤트 또는 데이터에 subscription 했을 경우에도 그걸 정리하기 위해서 클린업 코드를 작성해야 합니다.

 

 

워터폴(Waterfall) 방법론
요구사항 정의(설계) → 디자인 → 개발 → 테스트 → 배포의 과정이 순차적으로 진행

애자일(Agile) 방법론
빠르게 제품을 출시하여 고객의 요구사항, 변화된 환경에 맞게 요구를 더 하고 수정해나가는 탄력적인 방법론



<소프트웨어 테스팅 종류>

Black-Box(Functional) 테스트
내부가 어떻게 돌아가는지 볼 수 없는 것이 특징입니다. 외부 사용자 관점에서 기능을 테스트
White-Box(Structural) 테스트
프로그램 코드를 보고 검증하면서 소프트웨어 기능을 테스트하는 기법

 

Unit(단위) 테스트

프로그램을 구성하는 기본 단위를 다른 부분과 분리하고 독립 실행한 결괏값을 확인함.

예를 들어 함수형 프로그래밍이라면 함수가 하나의 단위

 

통합 테스트(Integration Test)
개발된 각 컴포넌트(Component)를 통합하면서 발생할 수 있는 버그를 확인하기 위한 테스트이다.
개별 컴포넌트만 테스트할 때는 확인할 수 없는 부분을 확인하기 위한 테스트이다.

 

인수 테스트(Acceptance Test)
고객의 요구사항(Requirements) 을 만족하는지 여부를 확인하는 테스트

System(시스템)
전체 시스템 관점에서 테스트를 수행한다.
시스템 테스트는 고객의 요구사항을 만족시키기 위해 필요한 내용은 모두 테스트 범위에 포함시킨다.
다만 통합 테스트처럼 화이트박스 테스트는 아니고 블랙박스 관점에서 테스트 항목을 추출하여 테스트한다.


성능 테스트(Performance Test)
소프트웨어의 성능이 기준을 만족하는지 확인하는 테스트이다.
그래서 성능에 대한 기준을 정하는 것이 매우 중요한데 요구사항에 성능이 정의되어 있으면 요구사항을 기준으로 삼아야한다.
ex) 웹페이지의 반응 속도는 5초를 넘지 말아야함.


안정성 테스트(Stability Test)
소프트웨어가 안정성 기준을 만족하는지 확인하는 테스트이다.
ex) 1000명이 동시접속하여 24시간 사용해도 시스템이 다운되지 않아야함


스모그 테스트(Smoke Test)
스모그(Smoke)는 연기를 뜻하는 것으로 하드웨어 보드에서 연기가 나는지 확인하는 것을 비유한 테스트이다.
즉, 아주 기본적인 기능을 확인하는 테스트. 그렇기 때문에 스모그 테스트를 통화하지 못하면 그 외의 테스트는 수행할 가치가 없다고 판단


몽키 테스트(Monkey Test)
원숭이가 터치스크린을 무작위로 터치하는 것을 비유한 테스트이다.
주로 UI 컴포넌트(Component)에 무작위로 클릭 이벤트(Click Event)를 전송하여 시스템에 오류가 발생하는지 확인하는 테스트이다.

스트레스 테스트(Stress Test)
소프트웨어의 한계치를 확인하는 테스트

인터페이스 테스트(Interface Test)
각 모듈(Module)간에 데이터가 정상적으로 오고 가는지를 테스트

포지티브 테스트(Positive Test)
정상적인 값을 대입하여 정상적인 결과가 나오는지 확인하는 테스트

네가티브 테스트(Negative Test)
비정상적인 값을 대입하여 에러처리가 제대로 이루어지는지 확인하는 테스트

 

 

선형탐색 
하나씩 찾기. 원하는 값을 발견시 더이상 안보고 끝.
리스트가 정렬되어 있지 않은 상태에서 사용됨.작은 단위일 때 선호.
o(n)

이진 탐색
반으로 쪼개서 원하는 값이 있는 부분은 남김
리스트가 정렬되어 있는 상태에서 사용됨
o(logN)

 

 

 

heap : 최댓값 및 최솟값을 찾아내는 연산을 빠르게 하기 위해 고안된 완전이진트리(complete binary tree)를 기본으로 한 자료구조

사용사례:
우선순위 큐를 구현할 때 사용된다.
힙 정렬을 구현할 때 사용된다.
최댓값과 최솟값을 빠르게 찾아내야 할 때 사용된다.
중간값을 빠르게 찾아내야 할 때 사용된다.
최단 경로를 찾아야 할 때 사용된다.

 


최소 힙(Min Heap), 최대힙(Max Heap) 두가지가 있다.
최소 힙은 루트노드가 최솟값이 되고, 부모노드의 key는 자식노드의 key보다 작아야 한다는 규칙이 있다.
최대 힙은 루트노드가 최댓값이 되고, 부모노드의 key가 자식 노드의 key보다 커야 한다는 규칙이 있다

 

Primary key
데이터베이스 테이블 내의 모든 레코드에서 고유한 아이디를 제공
foreign key
데이터가 일관될 수 있도록 돕는 역할

 

 

해시테이블(HashTable)
 (Key, Value)로 데이터를 저장하는 자료구조 중 하나이고 빠르게 데이터를 검색할 수 있는 자료구조.
보안적 이유?
key 값의 value 값이 hash 함수를 통해 bucket에 value가 저장되는 형식

 

<충돌이 일어날 경우>
1. 분리 연결법: 동일한 버킷의 데이터에 대해 자료구조를 활용해 추가 메모리를 사용하여 다음 데이터의 주소를 저장하는 것
분리 연결법을 연결리스트

사용이유 : 다른언어로도 사용할 수 있기 떄문에 유연성이 좋고 충돌이 나도 방법이 많아 해결하기가 편함

2. 개방 주소법 : 추가적인 메모리를 사용하는 Chaining 방식과 다르게 비어있는 해시 테이블의 공간을 활용하는 방법


DFS (깊이 우선 탐색)
예를 들어, 미로찾기를 할 때 최대한 한 방향으로 갈 수 있을 때까지 쭉 가다가 더 이상 갈 수 없게 되면 다시 가장 가까운 갈림길로 돌아와서 그 갈림길부터 다시 다른 방향으로 탐색을 진행하는 것이 깊이 우선 탐색 방식


BFS  (너비 우선 탐색)
주로 두 노드 사이의 최단 경로를 찾고 싶을 때 이 방법을 선택합니다.
ex) 지구 상에 존재하는 모든 친구 관계를 그래프로 표현한 후 Sam과 Eddie사이에 존재하는 경로를 찾는 경우
깊이 우선 탐색의 경우 - 모든 친구 관계를 다 살펴봐야 할지도 모름
너비 우선 탐색의 경우 - Sam과 가까운 관계부터 탐색

 

 

SQL Injection
임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위
입력 값에 대한 검증

 


Prepared Statement 구문사용
사용자의 입력 값이 데이터베이스의 파라미터로 들어가기 전에DBMS가 미리 컴파일 하여 실행하지 않고 대기하고 
그 후 입력 값을 문자열로 인식하게 하여 단순 문자열이기 때문에 쿼리문이 의도대로 작동하지 않습니다.

 


<홈페이지 개발 보안 조치>

1.  ID, PASSWORD, 게시판 제목, 본문, 검색창, 주소검색창 등의 모든 입력란에 특수문자 (등호, 부등호, 인용부호 등)를 직접 입력하지 못하도록 웹서버의 소스코드를 수정
2. 파라미터가 숫자인 경우 isnumeric과 같은 함수를 이용하여 검증하며, 문자인 경우 정규표현식을 이용하여 특수문자를 치환 특히 sql문에서 활용되는 문자(', ", ;, --, or 등)는 반드시 치환
3. Error Message 노출 금지

완전 이진 트리
마지막 레벨을 제외하고 모든 레벨이 완전히 채워져 있으며, 
마지막 레벨의 모든 노드는 가능한 한 가장 왼쪽에 있다. 마지막 레벨 h에서 1부터 2h-1 개의 노드를 가질 수 있다.


예측 가능한 성능, 
완전 이진 트리는 힙, 트라이, 후위 순회 등 특정 알고리즘에 적합,
완전 이진 트리는 모든 노드를 채우고 있기 때문에 메모리를 효율적으로 사용
트리의 장점도 같이 얘기하면 좋을 것 같음




DML(데이터 조작어) : 저장된 데이터를 실질적으로 처리하는데 사용하는 언어

SELECT : 테이블에서 조건에 맞는 튜플을 검색함
INSERT : 테이블에 새로운 튜플을 삽입함
DELETE : 테이블에서 조건에 맞는 튜플을 삭제함
UPDATE : 테이블의 조건에 맞는 튜플의 내용을 변경함


DCL(데이터 제어어) : 관리자가 데이터 관리를 목적으로 사용(보안, 무결성, 데이터 회복, 병행 수행 제어 등)

COMMIT : 데이터베이스 조작 작업이 정상적으로 완료되었음을 관리자에게 알려줌
ROLLBACK : 데이터베이스 조작 작업이 비정상적으로 종료되었을 때 원래의 상태로 복구함
GRANT : 데이터베이스 사용자에게 사용권한을 부여함
REVOKE : 데이터베이스 사용자의 사용권한을 취소함


DDL(데이터 정의어) : SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의하거나 변경 또는 삭제할 때 사용하는 언어
CREATE : Schema, Domain, Table, View, Index를 정의함
ALTER : Table에 대한 정의를 변경하는 데 사용함
DROP : Schema, Domain,Table, View, Index를 삭제함



퀵 소트
'평균적인 경우'를 가정한다면, 퀵 소트는 O(n log n)으로 매우 빠른 알고리즘
최악의 경우 (우리가 고르는 족족 최소/최대값을 고를 경우)엔, O(n^2)의 성능으로 떨어져버릴 수가 있다.


트랜잭션: 데이터베이스를 상태를 바꾸는 일종의 작업 단위이다
하나의 논리적 기능을 수행을 작업단위. 커밋. 일종의 코딩 기술 이름같음.


원자성 (Atomicity) : 트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다는 것
일관성 (Consistency) : 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다는 것. 업데이트된 데이터베이스로 트랜잭션이 진행되는것이 아니라, 처음에 트랜잭션을 진행 하기 위해 참조한 데이터베이스로 진행
독립성 (Isolation) : 어떤 하나의 트랜잭션이라도, 다른 트랜잭션의 연산에 끼어들 수 없다는 점을 가리킨다.
지속성 (Durability) : 결과는 영구적으로 반영되어야 한다는 점
(LOCK : 베타 , 공유 )



퀵 소트 : 피벗을 최선의 방법으로 선택한다면 평균적인 경우로 퀵소트를 사용할 수 있음. 최악이 안나옴.

'computer_science' 카테고리의 다른 글

복습2  (0) 2024.03.30
네트워크 (OSI7계층, TCP/IP)  (1) 2024.03.26
computer science 2일차 (프로세스)  (0) 2024.03.20
computer science 1일차 (CPU,메모리)  (0) 2024.03.19