책 리뷰

[그림으로 공부하는 IT 인프라 구조] 책 정리

Rudtjs 2022. 7. 12. 12:46

야마자키 야스시 지음

 

 

인프라

인프라란 경제활동의 기반을 형성하는 시실·제도 등의 의미로 사용된다.

하지만 IT에서 인프라는 다른 의미를 가지고 있는데 개발이나 서비스를 하기 위해 요한 모든 자원을 관리하는 기반 즉 네트워크, 서버, 데이터베이스, 정보보안, 시스템 소프트웨어 및 기반시설 등 IT 서비스의 기반이 되는 시스템이나 구조를 의미한다.

 

 

가장 많이 쓰는 시스템 구조

우리가 오늘날 가장 많이 사용하는 IT 인프라는 대부분 웹 서비스를 위해 구성되어 있고, 가장 많이 사용하는 인프라 구조가 웹서버, AP 서버, DB서버로 이루어진 3계층형 시스템이다.

출처: http://bit.ly/2J6lH22

 

프로세스와 스레드

프로세스 및 스레드는 프로그램 실행 파일 자체가 아니라 OS상에서 실행돼서 어느 정도 독립성을 가지고 동작하는 것이다.   

  정의 차이점 장점 단점
프로세스 OS로부터 자원을 할당 받은 작업의 단위  독립된 메모리 영역을 할당해 준다 개별 처리 독립성이 높다. 생성 시 cpu 부하가 높다
스레드 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위 Code/Data/Heap 메모리 영역을 공유한다. 생성 시 부하가 낮다 메모리 영역을 공유하기 때문에 의도하지 않는 데이터 읽기/쓰기가 발생 한다.

 

OS 커널

커널은 OS의 본질이며, 하드웨어와 응용 프로그램 사이에서 인터페이스를 제공, 컴퓨터 자원 관리 등 인터페이스로써 다양한 역활을 수행한다. 그중에서 그림에 보이는 6가지를 간단하게 설명해보겠다.

그림으로 공부하는 IT 인프라 구조 - os 커널

1. 시스템 콜 인터페이스

  • 프로세스/스레드로부터 명령을 받는 인터페이스이다.
  • 애플리케이션이 OS를 통해서 어떤 처리를 하고 싶을 때 시스템 콜이라고 하는 명령을 이용해서 커널에 명령을 내린다. 이때 명령이 인터페이스를 통해서 전달된다.

예를 들어, 디스크상의 데이터를 읽고 싶거나 네트워크 통신을 하고 싶을 때 시스템 콜을 호출하면 기능을 이용할 수 있다.

 

2. 프로세스 관리

OS상에서는 수십, 수백, 수천 개의 프로세스를 가동할 수 있다. 이에 비해 물리 서버의 CPU 코어 수는 많아야 수십 개 정도밖에 안 된다. 언제 어떤 프로세스가 어느 정도의 CPU 코어를 이용할 수 있는지, 처리 우선순위를 어떻게 결정할 것인지 관리하는 것이 이 기능의 역할이다.

 

3. 메모리 관리

메모리 영역을 관리한다. 프로세스가 이용하는 독립 메모리 공간을 확보하거나 상호 간의 참조 영역을 지키기 위해 메모리 관리 역할을 한다.

 

4. 네트워크 스택

TCP/IP는 표준 프로토콜로, 인터넷에서 데이터를 주고받는데 필요한 일련의 프로토콜 모음이다.  TCP/IP는 애플리케이션 계층, 전송 계층, IP 계층, 링크 계층으로 구성되어 있으며 계층 형식으로 이러워져 있기 때문에 TCP/IP 스택이라고 부른다.

 

애플리케이션 계층: 애플리케이션이 사용하는 프로토콜을 모두 애플리케이션 계층 프로토콜이라 부른다. 애플리케이션 계층 프로토콜은 자신이 통신을 하는 것이 아니라 통신 자체는 모두 OS, 즉 TCP/IP에 맡긴다.

 

전송 계층: 애플리케이션이 보낸 데이터를 그 형태 그대로 상대방에게 전달하는 것 즉 패킷의 "운송"을 담당하는 프로토콜이다. 전송 제어 프로토콜은 송신측과 수신 측 간의 연결성 제공, 신뢰성,  패킷 사이의 순서를 보장한다. 

 

IP 계층: 먼저 IP의 역활은 지정한 대상 서버까지 전달받은 데이터를 전달해 주는 것이라고 할 수 있다. 단, IP에서는 반드시 전달된다고 보장하지 않는다.  더군다나 IP는 상대방이 패킷을 잘 수령했는지 여부조차 파악하는 기능도 없다. 그저 전송 계층에서 내려온 패킷에 주소를 붙여 네트워크 계층으로 보내기만 할 뿐이다.

 

링크 계층: 링크 계층은 물리 계층, 네트워크 접속 계층, 미디어 접근 계층으로 불리기도 한다. 링크 계층에서는 네트워크의 물리적인 연결 매체를 통해 패킷을 주고받는 작업을 담당한다.

 

패킷: 네트워크 분야에서는 네트워크를 통해 오고 가는 데이터를 "패킷"이라고 부른다.

5. 파일 시스템 관리

파일 시스템은 물리 디스크에 제공된 데이터를 관리하는 기능이다. 일상에서 사용하는 문서 파일이나 엑셀 파일이 해당한다.

 

6. 장치 드라이브

디스크나 NIC 등의 물리 장치용 인터페이스를 제공한다.

 

웹 데이터 흐름

클라이언트가 pc에서 웹 브라우저를 실행해서 웹 서버에 요청을 보내고 서버가 응답하는 흐름이다.

 

전체적인 흐름

  1. 웹 브라우저가 요청을 발행한다.
  2. 이름 해석을 한다
  3. 웹 서버가 요청을 접수한다.
  4. 웹 서버가 정적 콘텐츠인지 동적 콘텐츠인지 판단한다.
  5. 필요한 경로로 데이터 액세스 한다.

1. 웹 서버에서 AP서버 까지

동적 컨텐츠 요청을 처리하는 것이 AP 서버다. 

 

1. 웹 서버로부터 요청이 도착한다.

2. 스레드가 요청을 받으면 자신이 계산할 수 있는지, 아니면 DB 접속이 필요한지 판단한다.

3. DB 접속이 필요하면 연결 풀에 액세스 한다.

4. DB 서버에 요청을 던진다.

 

2. AP 서버부터 DB 서버까지

SQL이라는 언어의 형태로 요청을 받고 이 SQL을 해석해서 데이터 액세스 방식을 결정하고, 디스크나 메모리에서 필요한 데이터만 수집해 오는 역할을 한다.

  1. AP 서버로부터 요청이 도착한다.
  2. 프로세스가 요청을 접수하고 캐시가 존재하는지 확인한다.
  3. 캐시에 없으면 디스크에 요청을 던진다.
  4. 디스크가 데이터를 반환한다.
  5. 데이터를 캐시 형태로 저장한다.
  6. 결과를 AP 서버에 반환한다.

3. AP 서버부터 웹 서버까지

DB 서버에서 데이터가 돌아왔기 때문에 AP 서버의 요청 스레드로 결과가 반환된다.

 

  1. DB 서버로부터 데이터가 도착한다.
  2. 스레드가 데이터를 가지고 계산 등을 한 후에 파일 데이터를 생성한다.
  3. 결과를 웹 서버로 반환한다.

 

4. 웹 서버에서 클라이언트 PC까지

AP 서버에서 돌아온 데이터를 받아서 웹 서버의 프로세스가 웹 브라우저로 반환한다.

 

  1.  AP 서버로부터 데이터가 도착한다.
  2. 프로세스는 받은 데이터를 그대로 반환한다.
  3. 결과가 웹 브라우저로 반환되고 화면에 표시된다.

 

직렬/병렬

웹 서비스에서 방대한 수의 사용자 요청을 처리해야 할 때 수많은 서버를 배치해서 병렬로 처리하는 것을 알 수 있다. 이처럼 주변에서는 병렬 처리가 넘쳐나고 있는데 병렬화 한다고 해서 성능이 향상되는 것은 아니다. 그러면 어떻게 처리해야 효율적으로 활용할 수 있는지 알아보겠다. 

그림으로 공부하는 IT 인프라 구조 - 직렬/병렬 설명 그림

 

병목현상

이 그림에서 3차선 도로가 도중에 합류해서 1차선이 되고, 다시 3차선으로 분기하는 걸 볼 수 있다. 합류점부터 시작되는 1차선 구간은 혼잡해지기 쉽고 합류점이나 분기점에서는 사고가 발생하기 쉽다. 이렇게 흐름을 느리게 만드는 원인을 '병목 지점'이라고 한다. 

 

이 병목 지점을 해결하기 위해서는 1차선을 3차선으로 만들기 즉 병렬 처리를 해주는 것이다. 이것은 컴퓨터 세계에서도 마찬가지다. 하드웨어 혼자서 처리할 수 있는 양이 정해져 있지만, 하드웨어를 여러 개로 배치하면서 처리량을 늘릴 수 있다.

 

어떻게 처리해줘야 하는걸까? 병렬 처리 합류점, 직렬화 구간에서 병목 현상이 발생하기 쉬워진다. 병렬 처리를 할 때에는 가능 한 병렬화해서 직렬 부분을 줄이고, 어쩔 수 없이 직렬 화해야 하는 경우에는 효율성을 높이는 것이 중요하다. 또한 병렬화할 때 일을 분담해서 처리한 후 다시 집약할 때 오버헤드가 걸린다. 그러므로 오버헤드를 감안하더라도 효과가 있을 경우 병렬화를 하자. 

 

배타적 제어

배타적 제어는 문자 그대로 '다른 것을 배제하는 제어'다. 여러 사람이 공유하는 물건일 경우, 누군가가 그 물건을 사용하고 있으면 다른 사람은 그것을 사용할 수 없다.

 

대부분은 공유 데이터를 이용하며 부분적으로 직렬 처리를 사용해야 되는 경우 배타적 제어가 필요하다. 그리고 이 부분이 병목 현상이 발생하기가 쉽다.

 

특징

  • 복수의 처리가 공유 자원(CPU,메모리,디스크 등)에 동시에  액세스 하면 불일치가 발생할 수 있기 때문에 배타적 제어로 보호해줘야 한다.
  • 배타적 제어에서는 특정 처리가 공유 자원을 이용하고 있는 동안 다른 처리가 이용할 수 없게 해서 불일치가 발생하지 않도록 한다.

배타적 제어를 사용하면 공유한 데이터의 일관성을 유지할 수 있지만 병렬 처리가 불가능하다. 따라서 정말로 필요한 곳에만 배타적 제어를 하고 병렬 처리가 가능한 부분을 늘려서 처리 속도를 높일 수 있다.

 

탐색 알고리즘(해시/트리)

컴퓨터에서 데이터를 찾기 쉽게 정리를 잘해 두면 원하는 데이터를 빨리 찾을 수 있다. 이때, 데이터 정리 방법을 '데이터 구조' 찾는 방법을 '탐색 알고리즘'이라고 한다.

 

  • 필요한 때에 필요한 데이터를 빠르게 찾기 위해서 데이터를 정리해 둘 필요가 있다.
  • 데이터를 찾을 때의 데이터 구조와 데이터 저장 방식 특성에 따라 적합한 데이터 정리 방법이 달라진다.
  • 처리 순서에 맞추어 데이터 구조를 정리할 필요가 있기 때문에 알고리즘과 데이터 구조는 함께 다뤄진다.

 

탐색 알고리즘 구조 3가지

  • 선형 탐색(인덱스 X)
    • 풀스캔: 테이블의 모든 블록을 처음부터 순서대로 읽어 나가는 것이다.
  •  B 트리 인덱스(인덱스 O)
    • 원하는 한 건의 데이터가 들어 있는 테이블의 데이터 블록만 선택적으로 읽는다.
    • 검색이 빨라지는 대신에 데이터 추가, 갱신, 삭제 시에 인덱스 데이토도 갱신해야 한다.
  •  해시 테이블 
    • 키와 값 조합으로 표를 구성한 데이터 구성이다.
    • 데이터 양이 많아져도 검색 속도는 변하지 않는다.

 

캐시

캐시에는 '숨기는 장소'라는 의미가 있다. 컴퓨터 세계에서 캐시는 사용 빈도가 높은 데이터를 고속으로 액세스 할 수 있는 위치에 두는 것을 의미한다.

 

브라우저 캐시는 웹브라우저가 접속한 페이지를 캐시하는 것이다. 이를 통해 웹 서버 접속을 줄이고 브라우저 표시를 고속화할 수 있다.

  1.  브라우저는 요청된 페이지가 캐시돼 있는지 확인한다.
  2. 존재하지 않으면 웹 서버에 요청한다.
  3. 페이지를 저장한 후 브라우저에 표시한다.