인프라 기본 이론
4.1 직렬/병렬
직렬 처리로 속도를 올리는 데는 한계가 있다.
병렬화를 통해 속도는 빨라지지 않지만, 단위 시간당 처리량을 늘릴 수 있다.
- 병렬 처리에는 합류점, 직렬화 구간, 분기점이 병목 지점이 되기 쉽다.
- 병렬화할 때는 일을 분담해서 처리를 한 후 다시 집약할 때 오버헤드가 걸린다. 그러므로 이 오버헤드를 감안하더라도 효과가 있을 경우에 병렬화를 한다.
직렬처리
- 직렬 장점
-
- 구조가 간단해서 설계나 구현 난이도가 낮다.
- 직렬 단점
-
- 복수의 리소스(컴퓨터나 프로세서 등)를 유용하게 이용할 수 없다.
병렬처리
- 병렬 장점
- 복수의 리소스를 유용하게 이용할 수 있으며, 직렬에 비해 동일 시간당 처리할 수 있는 양이 증가한다. 또한, 일부가 고장 나더라도 처리를 계속할 수 있다.
- 병렬 단점
- 처리 분기나 합류를 위한 오버헤드가 발생한다. 배타 제어 등을 고려해야 하고 구조가 복잡해서 설계나 구현 난이도가 높다.
4.2 동기/비동기
동기
다른 사람에게 일을 부탁한 후 끝날 때까지 아무것도 하지 않고 기다리기 때문에 그 사이에 다른 것을 할 수 없다.
하지만 의뢰한 것이 끝났는지 여부를 확실하게 확인할 수 있다.
- 장점
- 의뢰한 처리가 끝났는지 여부를 쉽게 확인할 수 있어서 구조가 간단하다.
- 구현 난이도가 낮다.
- 단점
- 의뢰한 처리가 끝나기까지 기다려야 하기 때문에 대기 시간을 활용할 수 없다.
비동기
끝날 때까지 기다리지 않기 때문에 병렬로 다른 일을 할 수 있다.
하지만 의뢰한 일이 끝났는지 여부를 확인하고 싶으면 별도의 방법을 이용해야 한다.
- 장점
- 의뢰한 처리가 진행되고 있는 동안 시간을 효율적으로 사용해서 병렬 처리를 할 수 있다.
- 단점
- 의뢰한 처리가 끝났는지 확인하지 않으면 모르기 때문에 불필요한 확인 처리가 늘어난다.
- 구조가 복잡해서 구현 난이도가 높다.
4.3 큐(queue)
큐(대기 행렬)에서는 줄을 설 때는 가장 마지막에 서고, 처리는 선두부터 순서대로 된다.
먼저 들어온 데이터가 먼저 나가는 큐 동작을 FIFO(First In First Out) 방식이라고 한다.
사용되는 곳
- CPU 처리를 기다리고 있는 프로세스나 스레드 행렬 (런큐, run-queue)
- 하드 디스크 등의 저장소 읽기 처리를 기다리고 있는 I/O 요구 행렬
- 네트워크 접속 성립을 기다리고 있는 접속 요구 행렬
4.4 배타적 제어
복수의 처리가 공유 자원(CPU, 메모리, 디스크 등)에 동시에 액세스(주로 갱신)하면 불일치가 발생할 수 있기 때문에 배타적 제어로 보호해 주어야 한다.
배타적 제어에서는 특정 처리가 공유 자원을 이용하고 있는 동안 다른 처리가 이용할 수 없게 해서 불일치가 발생하지 않도록 한다.
배타적 제어 사용
- 장점
- 공유 데이터의 일관성을 유지할 수 있다.
- 단점
- 병렬 처리가 안 된다.
배타적 제어 미사용
- 장점
- 병렬로 빠르게 처리할 수 있다.
- 단점
- 데이터 불일치가 발생할 가능성이 있다.
4.5 상태 저장/상태 비저장
상태 저장(stateful)
상태를 고려하기 때문에 복잡한 처리가 가능하지만, 시스템 복잡성이 커진다.
- 장점
- 자신의 상태를 이해하기 때문에 요청 내용을 최소화할 수 있다
상태 비저장(stateless)
상태를 고려하지 않기 때문에 간단하며, 성능이나 안정성 측면에서 우수하다.
- 장점
- 요청과 그에 대한 응답 구조가 간단하다는 것이다.
프로세스 상태 전이(프로세스 처리는 상태 저장 방식)
- 애플리케이션을 실행하면 프로세스가 생성된다. (프로세스 실행 개시)
- 실행 큐라 불리는 순서 대기 행렬에 줄을 선다. (실행 가능 상태)
- 차례가 돌아오면 ‘실행 상태’로 전이하고 애플리케이션이 처리한다.
- 디스크 액세스 등 I/O 대기가 발생하는 처리를 실행한 경우 ‘대기 상태’로 전이한다.
- 이 세 가지 상태를 전이하면서 처리가 전부 끝나면 ‘종료 상태’가 된다.
4.6 가변 길이/고정 길이
가변 길이(variable-length)
공간을 유용하게 활용할 수 있지만 성능 면에서 불안정하다.
고정 길이(fixed-length)
쓸데없는 공간이 생기지만 성능 면에서는 안정적이다.
4.7 데이터 구조(배열과 연결 리스트)
배열
데이터를 빈틈없이 순서대로 나열한 데이터 구조.
- 장점
- N번째 요소 탐색이 빠르다.
- 단점
- 데이터 추가, 삭제가 느리다.
연결 리스트
- 데이터를 선으로 연결한 데이터 구조.
- 장점
- 데이터 추가, 삭제가 빠르다.
- 단점
- N번째 요소 탐색이 느리다.
해시 테이블
배열과 연결 리스트의 상호 장점만 조합해서 약점을 보완한 데이터 구조.
큐(queue)나 스택(stack) 등의 데이터 구조도 배열이나 연결 리스트로 구현돼 있다.
4.8 탐색 알고리즘(해시/트리 등)
필요한 때에 필요한 데이터를 빠르게 찾기 위해서 데이터를 정리해 둘 필요가 있다.
데이터를 찾을 때의 데이터 구조와 데이터 저장 방식(메모리, HDD, SSD 등) 특성에 따라 적합한 데이터 정리 방법이 달라진다.
데이터 정리 방법을 ‘데이터 구조’, 처리 순서를 ‘알고리즘’이라고 한다.
처리 상대에 맞추어 데이터 구조를 정리할 필요가 있기 때문에 ‘알고리즘과 데이터 구조’는 자주 함께 다루어진다.