Home 3장 3계층형 시스템을 살펴보자
Post
Cancel

3장 3계층형 시스템을 살펴보자

3.1 3계층형 시스템의 구성도

가장 아래에 서버가 배열되어 있고 서버끼리는 스위치를 경유해 연결되어 있다. 각각의 서버 안에는 CPU, 메모리, 디스크 등의 하드웨어 부품이 나열돼 있다. 그리고 그림에서 논리 구성에 해당하는 부분은 OS 영역을 보여주고 있다.

3.2 주요 개념 설명

3.2.1 프로세스와 스레드

예) 인터넷에서 다운 받은 프로그램을 더블클릭해서 실행시키면 창이 뜬다. 다시 한 번 프로그램 아이콘을 더블클릭 하면 별도의 창이 열린다. 이것이 프로세스나 스레드로 불리는 것이다.

프로세스 및 스레드는 프로그램 실행 파일 자체가 아니라 OS상에서 실행돼서 어느 정도 독립성을 가지고 동작하는 것이다. 프로세스 및 스레드가 활동하려면 메모리 공간이 필요하다. 이것은 커널에 의해 메모리 상에 확보된다.

**메모리 공간을 가지는 것이 ‘프로세스’, 하나의 프로세스가 동작하고 있으면 내부에서는 메모리 공간을 점유하는 스레드 하나가 동작하고 있다. 각 스레드는 메모리 공간을 공유하고 있다.

그림에서 웹 서버에 있는 막대 인간이 프로세스다. 그 주변을 감싸고 있는 하얀 영역이 프로세스의 메모리 공간을 나타낸다. AP 서버에서는 막대인간이 스레드이다. 프로세스는 전용 메모리 공간을 이용해 동작하지만 스레드는 다른 스레드와 메모리 공간을 공유하고 있는 운명 공동체다.

 프로세스스레드
장점개별 처리 독립성이 높다.생성 시 부하가 낮다.
단점생성 시 CPU 부하가 높다.메모리 공간 공유로 의도치 않은 데이터 읽기,쓰기 발생

3.2.2 OS 커널

OS에서 커널이 본질이다. 커널 자체가 OS의 인프라라고 생각하면 된다. OS 처리는 원칙적으로 커널을 통해 이루어 진다.

  1. 시스템 콜 인터페이스 : 프로세스/스레드에서 커널로 연결되는 인터페이스이다. 애플리케이션이 OS를 통해 어떤 처리를 할 때 시스템 콜 명령을 이용해 커널에 명령을 내린다.
  2. 프로세스 관리 : 언제 어떤 프로세스가 어느 정도의 CPU 코어를 이용할 수 있는지 처리 우선순위를 어떻게 결정할 것이지 등을 관리한다.
  3. 메모리 관리 : 물리 메모리 공간의 최대치를 고려한다. 프로세스가 이용하는 독립 메모리 공간을 확보하거나 상호 간의 참조 영역을 지키기 위해 독립성을 관리하는 등의 메모리 관리 역할을 한다.
  4. 네트워크 스택
  5. 파일 시스템 관리 : 물리 디스크에 제공되는 데이터를 관리하는 기능이다. 문서파일이나 엑셀파일에 해당한다. 주요 관리 기능으로 디렉터리 구조 제공, 액세스 관리, 고속화, 안전성 향상 등이 있다.
  6. 장치 드라이버

3.3 웹 데이터 흐름

3.3.1 클라이언트 PC부터 웹 서버까지

PC에서의 처리 흐름은 디스크에서 프로그램을 읽어 프로세스를 시작하고, 메모리 공간을 확보한다. 주소창에 ‘http://abcd.com’을 입력하면 이름의 해석이 이루어진 후에 웹 브라우저로 접속하게 된다. 이름의 해석이 필요한 이유는 인터넷상의 주소는 IP라는 숫자로 표현돼 있어서 문자열인 URL과 IP를 연결시키지 않으면 통신이 되지 않기 때문이다.

웹 서버에 도착하게 되면 웹 서버는 HTTP 요청에 대해 적절한 파일이나 콘텐츠를 반환한다. 요청에 대한 응답은 HTML 파일이라는 텍스트 데이터나 이미지, 동영상 등의 바이너리 데이터로 구성된다. 그리고 이 데이터는 정적 콘텐츠(실시간으로 변경할 필요가 없는), 동적 콘텐츠(높은 빈도로 변경되는 데이터)로 구분된다.

동적 콘텐츠의 경우 데이터를 서버 내부의 디스크에 저장하면 갱신 빈도가 높기 때문에 디스크 성능이 병목 현상의 원인이 될 수 있다. 그래서 일반적으로 AP 서버가 HTML을 동적으로 생성한다.

3.3.2 웹 서버부터 AP 서버까지

동적 콘텐츠에 대한 요청을 처리하는 것이 AP 서버다. 예) 자바를 이용한 AP 서버에서는 JVM 가상 머신이 동작하고 있다.

대량의 데이터 관리 목적인 경우 DB 서버가 적합하다. 이 경우 AP 서버의 스레드는 DB 서버에 질의하고 그 결과를 HTML 등으로 정리해서 반환한다. 그리고 AP서버가 DB서버에 접속하려면 드라이버가 필요하다.

DB 서버 이외의 옵션 : 규모가 작고 갱신 빈도가 낮은 정보는 JVM 내부에 캐시로 저장해 두었다가 반환하는 것이 좋다. 반대로 규모가 큰 정적 데이터 전송 시에는 DB 서버 이외에 CND(Content Delivery Network)라 불리는 데이터 전송 전용 서버를 이용하는 경우도 있다.

**대부분의 웹 시스템에서는 CND를 이용하고 기업형 시스템에서는 CND 구조를 잘 사용하지 않는다. CND는 대량의 데이터 전송에 특화된 것으로 전 세계에 있는 데이터 복사본(캐시)을 배치하는 기술과 병렬 기술을 활용해서 처리를 효율화하고 있다.

3.3.3 AP 서버부터 DB 서버까지

DB 서버에서는 오라클 DB인 경우 서버가 요청을 접수한다. 요청은 SQL 언어 형태로 이루어진다. SQL을 해석해서 액세스 방식을 결정하고, 디스크나 메모리에서 필요한 데이터만 수집해 오는 것이 데이터베이스의 주요 역할이다.

DB 서버는 데이터 저장 창고다. 관리 대상 데이터가 방대하기 때문에 얼마나 효율적으로 액세스하는가가 중요하다. 대부분은 서버 메모리에 캐시가 있는지 먼저 확인한다. 캐시가 없으면 디스크에 액세스해서 필요한 데이터를 가지고 온다.

또 인메모리 DB 등에서는 디스크 자체를 사용하지 않고 모든 처리를 메모리 내에서 완료하는 구조라서 고속화를 실현할 수 있다.

DB 서버 내부의 디스크는 이중화 관점에서 뒤떨어지기 때문에 직접 사용하는 경우는 드물다. 대부분 별도의 저장장치를 이용한다.

3.3.4 AP 서버부터 웹 서버까지

3.3.5 웹 서버부터 클라이언트 PC까지

요청 기반 아키텍처이기 때문에 각 서버는 문을 열고 기다리고 있는 상태다. 어느정도 요청이 올지는 실제 요청이 오기 전까지는 알 수 없다. => IT 인프라에서 성능 문제가 발생하는 이유임

3.4 가상화

3.4.1 가상화란?

최근에는 온프레미스(서버를 클라우드 같은 원격 환경에서 운영하는 것이 아닌 전산실 서버에 직접 설치해 운영하는 방식)에서 가상화 기술을 사용하는 경우가 많다. 가상화란 컴퓨터 시스템에서 물리 리소스를 추상화하는 것이라고 할 수 있다.

3.4.2 OS도 가상화 기술의 하나

OS는 가상화 기술 중 하나이다. OS 커널에 의해 하드웨어가 추상화되면서 컴퓨터에 연결된 기억 장치나 네트워크를 통한 데이터 교환이 하드웨어를 인식하지 않고 이루어지고 있다.

OS는 하나의 컴퓨터 내에서 동시에 다수의 프로그램이 움직일 수 있게 해준다. OS는 가상 메모리를 사용해서 프로세스 및 OS 커널의 메모리 공간을 분리하므로 하나의 프로그램이 실패한다고 해도 시스템 전체에 영향을 끼치지 않는다.

3.4.3 가상 머신

  1. 호스트 OS형 : 윈도우, 리눅스 등의 호스트 OS 상에 가상화 소프트웨어를 설치해서 이용하는 것
  2. 하이퍼바이저형 : 하드웨어상에서 직접 가상화 소프트웨어를 실행하고 그 위에 가상 머신을 동작시키는 기술이다. a. 완전 가상화 : 물리 머신상에서 동작하는 OS나 드라이버를 그대로 게스트로 이용할 수 있는 장점이 있지만 소프트웨어로 애뮬레이션하기 때문에 성능이 저하된다. b. 준가상화 : 가상 환경용 가상 하드웨어를 소프트웨어적으로 에뮬레이션한다.

호스트 OS형보다 하이퍼바이저형이 성능이 우수하다.

3.4.4 컨테이너의 역사

컨테이너는 그릇, 용기 등의 의미로 즉 리소스가 격리된 프로세스다. 하나의 OS에서 여러 개를 동시에 가동할 수 있고, 각각 독립된 루트 파일 시스템, CPU/메모리, 프로세스 공간 등을 사용할 수 있다는 점이 가상 머신과의 차이다.

3.4.5 도커의 등장

2013년 파일 시스템과 프로세스를 분리하는 기능이 추가 됐다. 이를 통해 파일 시스템 이미지의 패키징과 버저닝이 가능해졌고 컨테이너 이미지를 공유할 수 있는 도커가 등장함으로써 컨테이너 기술이 주목을 받기 시작했다.

애플리케이션 관련 프레임워크나 라이브러리 등의 버전이 일치하지 않아서 로컬에서 실행된 프로그램이 클라우드에서는 실행되지 않는 문제가 빈번하게 발생했다. 따라서 원래 클라우드 내부 구조로 개발했던 애플리케이션 실행 환경을 자동 구축해주는 도커 이미지라는 기술을 클라우드 이외의 환경에서도 사용할 수 있게 오픈 소스로 공개했다.

[도커의 장점]

  1. 컨테이너는 호스트 OS와 OS 커널을 공유하므로 컨테이너 실행이나 정지 속도가 빠르다.
  2. 호스트 OS 커널을 공유하므로 한 대의 호스트 머신상에서 많은 컨테이너를 실행할 수 있다. 따라서 리소스를 한 곳에서 쉽게 관리할 수 있다.
  3. 라이브러리나 프레임워크 등을 도커 이미지로 묶어서 공유할 수 있는 것으로 버그를 효율적으로 수정할 수 있다.

3.4.6 클라우드와 가상화 기술

하이퍼바이저 및 컨테이너 등의 가상화 기술은 구글, 페이스북, 아마존 등의 대규모 웹 서비스에서 사용되고 있다. 클라우드 서비스에서는 가상 머신 서비스, 컨테이너 서비스 FaaS 서비스나 다른 기타 서비스를 지탱하는 기술로 이용되고 있다.

This post is licensed under CC BY 4.0 by the author.

2장 서버를 열어 보자

4장 인프라를 지탱하는 기본 이론