IT인프라

인프라에 앞선 기본 이론

정한_s 2021. 10. 22. 11:15

효율적인 인프라를 구축/설계하기 위해서는 기본 원리를 이해하고 그것의 장단점을 파악하고 있어야 한다. 따라서 인프라를 이해하기 위한 기본 이론들을 알아보자

 

1. 웹 데이터 흐름

 

직렬/병렬

 

직렬은 하나의 작업을 수행하고 다른 작업을 하는 것이다. 수행 능력을 높이기 위해 CPU의 클럭 주파수를 올려야 한다

병렬은 작업을 동시에 진행하는 것이다. 수행 능력을 높이기 위해 처리할 수 있는 CPU 코어를 늘려야 한다.

 

CPU 클럭 주파수를 올리는 것에 한계가 있기 때문에 코어를 늘리는 병렬 방식이 채택되었다. 병렬 방식으로는 멀티 프로세스 방식, 멀티 스레드 방식 등이 있다. 

더보기

1. 멀티 프로세싱

  • CPU가 1개가 아닌 여러개인 것을 말함
  • register와 cache를 독립적으로 가진 여러개의 CPU가 1개의 메모리에 연결된 구조

2. 멀티 코어

  • CPU 칩 내부에 register와 cache를 갖고 있는 core 만 따로 회로를 구성한 구조

3. 멀티 태스팅 / 멀티프로그래밍

  • 메모리에 여러 프로그램을 올려서 사용하는 구조
  • 메모리에 여러개의 프로세스를 동시에 올리고, CPU는 프로세스를 concurrency 하게 실행

4. 멀티프로그래밍

  • 하나의 메모리에 동시에 여러개의 프로세스를 올림

5. 멀티 태스킹

  • 멀티 프로그래밍된 메모리를 대상으로 CPU가 시분할로 여러 프로세스를 빠르게 처리함 (= concurrency)

프로세스의 스레드가 코어를 점유한다. 프로세스 당 1개 이상의 스레드가 있다. 코어의 개수만큼 스레드의 개수가 동작하기 때문에 스레드를 늘려도 코어의 개수가 늘어나지 않는다면 성능적으로 의미가 없다. OS는 코어의 개수만큼 CPU가 있다고 생각, 4개의 프로세스가 모드 단일 스레드이고 프로세서의 코어가 4개라면 4개의 프로세스가 동작할 수 있다. 

 

 

무조건 병렬화를 한다고 해서 성능이 올라가는 것은 아니다. 병렬화를 할 때 주의할 점은 다음과 같다

  • 병렬 처리에서는 합류점, 직렬화 구간, 분기점이 병목 되기 쉽다(오버헤드가 생긴다)
  • 병렬화가 유효한 부분을 파악해서 병렬화 하지 않으면 효과가 없다. 오버헤드나 구조 복잡화 등에 단점을 고려해야 한다

동기/비동기

 

동기는 다른 사람에게 일을 부탁한 후 끝날 때까지 대기하고 있기 때문에 그 사이에 다른 일을 할 수 없다. 하지만 의로한 것이 끝났는지 여부를 확실히 알 수 있다.

비동기는 끝날 때 까지 기다리지 않기 때문에 병렬로 다른 일을 할 수 있다. 하지만 의뢰한 일이 끝났는지 여부는 별도의 방법을 사용해야 한다.

이처럼 비동기와 동기의 차이점은 작업의 시점을 맞추는 것에 있다. 작업의 시점이란 끝과 시작을 맞추는 것이다. 동기는 그 시점을 맞추는 것이고 비동기는 맞추지 않는 것이다.

 

 배타적 제어

공유하는 자원일 경우, 동시에 사용하지 못하도록 제어하는 것이다. 직렬 처리에서는 배타적 제어가 필요 없지만 병렬처리에서는 필요하다. 베타적 제어 부분에서 병목현상이 발생하기 쉽다. 베타적 제어에서는 자원의 불일치가 발생하지 않도록 해야 한다.

DB에서는 스핀 락과 슬립 락이 있다. 스핀 락은 매우 짧은 시간 락을 유지하는 것으로 이 시간 동안 CPU는 유휴 상태가 된다. 슬립 락은 장시간 락을 유지하는 방식이며 이때 컨텍스트 스위치가 발생한다.

리눅스 커널은 빅 커널 락(BKL)이라고 불리는 하나의 스핀 락이 유지된다. 커널의 BKL이 이용되는 부분은 처리가 직렬화돼서 동시에 하나의 코어만 커널 코드를 실행할 수 있다.

 

상태 저장/상태 비저장

상태 저장은 상태를 고려하기 때문에 복잡한 처리가 가능하지만, 시스템 복잡성이 커진다 (ex tls)

상태 비저장은 상태를 고려하지 않기 때문에 간단하고 성능이나 안정성 측면에서 우수하다 (ex http)

 

컴퓨터의 내부 구조에서 거의 모든 곳에 상태 저장이 사용된다. 프로세스의 상태를 처리하고 PCB에 저장하는 등 OS가 상태 정보를 관리한다. 

 

탐색 알고리즘

 

해시 테이블

삭제가 빠른 연결 리스트와 탐색이 빠른 배열을 조합한 데이터 구조이다. DB에서 SQL 실행 시 SQL을 파스 후 반환하고 실행한 정보를 메모리에 캐시 된다. 이후 데이터의 변경이 없는 경우 캐시된 데이터를 재사용한다.

 

특정 정보와 일치하는 데이터를 찾는데 특화되어 있다

 

트리

데이터 베이스에서 인덱스라는 것이 있다. B 트리 자료구조를 사용하고 있다. 인덱스가 없는 경우 테이블의 전체 데이터를 디스크에서 메모리에 옮긴 후 모든 데이터를 조사해서 특정 데이터를 반환해야 한다(풀 스캔). 이에 반에 인덱스가 있는 경우는 특정 범위의 데이터 블록만 읽으면 되기 때문에 효율적이다. 하지만 인덱스 테이블을 구성해야 하므로 검색이 빨라지는 대신 테이블의 인덱스를 관리하는 오버헤드가 생긴다. 

 

특정 범위 안에 있는 데이터를 찾는데 특화되어 있다