1. 웹 데이터의 흐름(직렬/병렬)
- CPU나 HDD 등의 하드웨어 성능은 제품에 따라 차이가 나지만, 성능이 좋아도 혼자서 처리할 수 있는 양은 정해짐.
- 병렬 : 다수의 CPU를 이용해서 분담해서 병렬화 할 수 있는 처리는, CPU 코어를 늘려 처리량을 늘릴수 있음.
- 직렬 : 병렬화 할 수없는 업무는, CPU 클럭 주파수를 올리는 직렬 처리 속도를 높이는 방법으로 고속 처리 가능.
- 병렬화하여 분담하던 업무를 다시 한곳으로 모으면 오버헤드가 걸림. 오버헤드를 감안하더라도 효과가 있을 시에만 병렬화를 해야함.
* 활용
- 웹 서버에는 다수의 이용자가 접속하기 때문에 복수의 프로세스가 분담해서 병렬 처리를 함.
- AP 서버에서는 JVM 프로세스가 하나지만, 복수의 스레드가 병렬로 처리하고 있음.
2. 동기/비동기
- 비동기의 본질은 '병렬'
- 동기 : 누군가에게 일을 부탁하고, 그 일이 끝나기까지 기다리는 것. 끝났는지 여부가 확실함.
- 비동기 : 누군가에 일을 부탁하고, 다른일을 하는것. 처리를 병행할 수 있음.
* 활용
- Ajax
- DBMS 비동기 I/O : DBMS는 HDD등의 저장소에 비동기로 쓰기 처리를 할 수있음.
3. 큐 (queue)
- 큐(대기행렬) 에서는 줄을 설 때는 가장 마지막에 서고, 처리는 선두 부터 순서대로 됨.
- 선입선출(FIFO)방식.
* 활용
- 런큐(run-queue) : CPU 처리를 기다리고 있는 프로세스나 스레드 행렬
- 메시지 큐 : 이메일.
- 하드 디스크 등의 저장소 읽기 처리를 기다리고 있는 I/O 요구 행렬
- 네트워크 접속 성립을 기다리고 있는 접속 요구 행렬
4. 배타적 제어
- 누군가가 사용 중인 경우 다른 사람이 사용할 수 없게 함.
- 일반적으로 OS나 DBMS는 병렬 처리를 위해 배타적 제어가 필요함.
- 복수의 처리가 공유자원(CPU, 메모리, 디스크)에 동시에 액세스(주로 갱신)하면 불일치가 발생할 수 있기 때문에 배타적 제어로 보호해 주어야함.
- 배타적 제어에는 특정 처리가 공유 자원을 이용하고 있는 동안 다른 처리가 이용할 수 없게해서 불일치가 발생하지 않도록 함.
* 활용
- DB 프로세스가 공유 데이터를 변경 하는 도중에 다른 프로세스가 해당 공유데이터를 읽거나 동시에 변경하지 못하도록함.
-> 스핀락(spin-lock): 래치(latch). DBMS의 배타적 제어. 매우 짧은 시간동안 락(lock)을 유지하는 것. CPU에서 의미없는 처리를 하면서 대기하는 방식.
-> 슬립락(sleep-lock) : 비교적 장시간 락을 유지하도록 큐를 이용해서 관리하는 방식.
-> 어댑티브락(adaptive-lock) : 상황에 따라 스핀할지 슬립할지 판단하는 방식.
- OS 커널에 사용되는 배타적 제어
-> 빅 커널락 : 하나의 스핀락. 하나의 CPU만 커널 코드를 실행 할 수 있음.
5. 상태 저장(stateful) / 상태 비저장(stateless)
- 상태 저장 : 어떤 작업을 하고 있을 때 현재 상태를 저장. 복잡한 처리 및 세분화된 제어가 가능한 반면 구조가 복잡.
-> SSH 프로토콜
- 상태 비저장 : 현재의 상태를 가지고 있지 않음. 고기능은 아니지만 간단. 성능이나 안정성이 우수.
-> HTTP 프로토콜 : ID/PW 등의 인증 정보 상태 저장을 필요로 하는 경우 서버는 인증 완료 세션(session)정보를 반환하고, HTTP + 세션정보를 서버에 건네며 이전 처리 상태를 유지함.
6. 가변길이 / 고정길이
- 고정길이 : 미리 크기가 정해진 경우. 틀이 정해져 있어 원하는 것에 쉽게 액세스 할 수 있음. 공간의 효율적 활용이 어려움. 성능면에서 안정.
-> NTFS 파일시스템
- 가변길이 : 정해져 있지 않은 경우. 데이터를 꽉채워 담을 수 있기때문에 데이터 크기 절약이 가능. 고정길이에 비해 원하는 데이터 접근시간이 오래걸림. 성능면에서는 불안정.
7. 데이터 구조 ( 배열과 연결 리스트 )
- 배열과 연결리스트는 모두 순차적으로 데이터를 처리하는 구조.
- 배열 : 같은 형태의 데이터를 빈틈없이 순서대로 나열한 데이터 구조. '같은 크기'의 데이터를 '빈틈없이 순서대로' 나열하기 때문에, 몇 번째 데이터인지 알면 해당 데이터에 한번에 액세스 가능. 탐색이 빠르지만, 추가 및 삭제가 느림.
- 연결 리스트 : 데이터를 선으로 연결한 형태의 데이터 구조. 구체적으로 다음 상자의 위치정보를 가지고 있음. 추가 및 삭제가 빠르지만 탐색이 느림.
* 활용
- 탐색 알고리즘(해시 테이블) : 배열과 연결 리스트가 사용되고 있음.
-> 오라클DB 에서 SQL을 처음 실행하면 메모리에 캐시됨. 똑같은 SQL이 실행되면 메모리에 있는 것이 재사용됨. 메모리가 부족하면 실행되고 있지 않은 SQL이 해제됨.
해시 함수를 이용해 SQL을 고정 길이 해시값으로 변환하고, 이 해시값 배열로 부터 연결리스트를 찾아가 빠르게 탐색.
- 큐나 스택 등의 데이터 구조도 배열이나 연결리스트로 구현되어있음.
8. 탐색 알고리즘 (해시/트리 등)
- 해시나 트리는 탐색알고리즘이 아닌 데이터 구조이지만, 효율적 탐색을 위해 사용됨.
- 데이터 구조 : 데이터 정리 방법. EX) 알파벳순으로 페이지 정렬
-> 데이터를 찾을 때의 데이터 구조와, 데이터 저장방식(메모리, HDD, SDD 등) 특성에 따라 적합한 데이터 정리방법이 다름.
- 탐색 알고리즘 : 데이터를 찾는 방법. 처리순서. EX) 알파벳으로 찾기
* 활용
- DBMS의 풀스캔 / 인덱스 스캔
-> 풀스캔 : 인덱스가 없으면 테이블의 모든 블록을 처음부터 순서대로 읽어서 조사함. 선형탐색.
-> 인덱스 스캔 : 색인. 최소한의 필요 블록만 읽음. 일반적으로 B트리 인덱스. 검색이 빨라지는 대신 데이터 추가, 갱신, 삭제 시에 테이블 뿐아니라 인덱스 데이터도 갱신해야하므로 불필요한 오버헤드 발생할 수 있음.
'Book' 카테고리의 다른 글
[AWS Discovery Book] (1) 클라우드와 아마존 웹 서비스 (0) | 2022.02.12 |
---|---|
[그림으로 공부하는 IT인프라 구조] (4) 인프라를 지탱하는 응용 이론(完) (0) | 2022.02.10 |
[그림으로 공부하는 IT인프라 구조 ] (2) 3 계층형 시스템 (0) | 2022.02.10 |
[그림으로 공부하는 IT인프라 구조] (1) 인프라 & 구성방식 (0) | 2022.02.10 |
[CleanCode] 01. 깨끗한 코드 & 의미 있는 이름 (0) | 2021.08.08 |