Search

3주차

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

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

웹서버, AP 서버, DB 서버 구조입니다.

3.2 주요 개념 설명

3.2.1 프로세스와 스레드

막대 인간은 하나의 프로세스나 스레드입니다. 이를 위해선 메모리가 필요한데 이는 커널에 의해 메모리상에 확보됩니다.
웹서버의 경우 각 ‘httpd 프로세스’가 독립된 메모리 공간을 가지고 있습니다.
AP서버의 경우 여러 스레드가 하나의 메모리 공간을 공유하고 있습니다.
단 프로세스의 경우에도 메모리를 공유할 수 있습니다.

3.2.2 OS 커널

커널 자체가 OS의 인프라라고 생각하면 됩니다. OS의 모든 처리는 커널에 의해 이루어지며 아래 6가지로 역할을 정리할 수 있습니다.
1.
시스템 콜 인터페이스
프로세스/스레드에서 커널로 연결되는 인터페이스로 애플리케이션이 OS를 통해 어떤 처리를 할 때 이를 이용해서 커널에 명령을 내립니다. 예를들어 디스크 I/O와 네트워크 I/O 모두 시스템콜입니다.
2.
프로세스 관리
CPU 코어를 넘어가는 프로세스들의 처리 우선순위를 결정해 작업하는 역할을 합니다.
3.
메모리 관리
물리 메모리 공간의 최대치를 고려해 프로세스가 이용하는 독립 메모리 공간을 확보하고, 상호 참조 영역을 지키기 위해 독립성을 관리합니다.
4.
파일 시스템 관리
디렉터리 구조 제공, 액세스 관리, 고속화, 안정성 향상등의 역할을 합니다.
5.
장치 드라이버
다양한 장치 드라이버 회사가 독자 제품을 제공하고 있어 장치 드라이버를 이용해 커널은 물리 장치를 연결합니다.

3.3 웹 데이터 흐름

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

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

3.3.2 웹 서버부터 AP 서버까지

동적 콘텐츠에 대한 요청을 처리하는 것이 AP서버입니다.
1.
웹 서버로부터 요청이 도착
2.
스레드가 요청을 받으면 DB 접속 필요 유무 판단
3.
DB 접속이 필요하면 연결 풀에 액세스
4.
~ 5. DB 서버에 요청
수많은 데이터를 처리하기 위해서는 DB서버가 필요하고 이에 접속하기 위해 드라이버가 필요합니다.
DB 서버 이외의 옵션
규모가 작고 갱신 빈도가 낮은 정보는 JVM 내부 캐시에 저장해두었다가 반환하는 것이 좋습니다. 반대로 규모가 큰 정적데이터의 경우 CDN을 사용하는 것이 좋습니다.

3.3.3 AP 서버부터 DB 서버까지

SQL을 해석해서 데이터 액세스 방식을 결정하고, 디스크나 메모리에서 필요한 데이터만 수집해옵니다.
1.
AP 서버로부터 요청이 도착합니다.
2.
프로세스가 요청을 접수하고 캐시가 존재하는지 확인합니다.
3.
캐시에 없으면 디스크에 액세스
4.
디스크가 데이터를 반환
5.
데이터를 캐시 형태로 저장
6.
결과를 AP 서버에 반환
서버 메모리에 캐시가 있는지 확인 후 디스크에 액세스해 데이터를 가져옵니다.이때 메모리와 캐시 값을 정기적으로 동기화하는 프로세스도 있는데 처리량을 병렬화를 통해 향상시키기 위해서 사용합니다.

3.3.4 AP 서버부터 웹 서버까지

반환 과정을 살펴볼 차례입니다.
1.
DB 서버로부터 데이터가 도착
2.
스레드가 데이터를 가지고 계산 등을 진행 후 파일 데이터를 생성
3.
결과를 웹 서버로 반환

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

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

3.3.6 웹 데이터의 흐름 정리

각 서버는 공통점이 있습니다.
프로세스나 스레드가 요청 받음
도착한 요청을 파악해서 필요에 따라 별도 서버로 요청
도착한 요청에 대해 응답

3.4 가상화

3.4.1 가상화란?

컴퓨터 시스템에서 물리 리소스를 추상화 한 것으로 한 대의 서버를 ㅇ러 대의 논리 리소스처럼 보이게 하는 기술에 대해서 설명합니다.

3.4.2 OS도 가상화 기술의 하나

OS이전에는 하드웨어를 처리할 프로그래밍이 필요했지만, OS의 등장으로 커널에 의해 하드웨어가 추상화로 이에 대한 문제가 해결되었습니다. 또한 한번에 여러 프로그램을 실행하는데 가상 메모리와, 커널의 메모리 공간 분리 등을 통해 안정성을 높였습니다.

3.4.3 가상 머신

호스트 OS형
윈도우나 리눅스 등 호스트 OS상에 가상화 소프트웨어를 설치해서 이용 VMware Server, MS Virtual Server등이 존재합니다. 다만 소프트웨어를 에뮬레이터하는 것으로 성능면에서 제한이 있습니다.
하이퍼바이저형
VMware vSphere, KVM 등이 있는데, 하드웨어상에서 직접 가상화 소프트웨어를 실행하고, 그 위에 가상 머신을 동작시키는 기술입니다. 호스트 OS를 거치지 않아 호스트형보다 성능이 우수해 서버 가상화의 대표 기술이빈다.
완전 가상화
물리 머신상에서 동작하는 OS나 드라이버를 그대로 게스트로 이용할 수 있지만, 소프트웨어로 에뮬레이션을 진행해 성능이 저하됩니다.
준 가상화
가상 환경용 가상 하드웨어를 소프트웨어적으로 에뮬레이션합니다. 가상 환ㄱ여에서 동작시키는 게스트 OS마다 준가상화 전요 ㅇ드라이버나 준가상화용으로 최적화된 OS 커널을 이용해야 했었지만, 현재 프로세서 제조사들이 이를 지원해 자리잡은 상태입니다.

3.4.4 컨테이너의 역사

컨테이너는 리소스가 격리된 프로세스로 하나의 OS상에서 여러개를 동시에 가동할 수 있습니다. 각각 독립된 루트 파일 시스템, CP/메모리, 프로세스 공간 등을 사용할 수 있다는 점이 하드웨어 가상화인 가상머신과의 차이점입니다.

3.4.5 도커의 등장

도커의 전신인 닷클라우드는 PaaS를 구측했었으나, 애플리케이션 프레임워크나 라이브러리등의 버전이 맞지않는 문제들이 발생했습니다. 이를 위해 애플리케이션 실행 환경을 자동 구축해주는 도커 이미지라는 기술을 클라우드 이외의 환경에서도 사용할 수 있게 오픈소스로 공개해 인기를 끌기 시작했습니다.
컨테이너는 호스트 OS와 OS 커널을 공유해 컨테이너 실행이나 정지 속도가 빠릅니다.
호스트 OS의 커널을 공유하므로 VM만 사용하는 경우와 비교해 한 대의 호스트 머신상에서 훨씬 많은 컨테니어를 실행할 수 있습니다. 이를 통해 리소스를 한 곳에서 쉽게 관리할 수 있습니다.
도커는 라이브러리나 프레임워크 등을 도커 이미지로 묶어서 공유할 수 있는 것으로, 특정 환경에서는 쟇ㄴ되지만, 자신의 개발환경에서는 재현되지 않는 문제가 발생하기 어렵습니다.

3.4.6 클라우드와 가상화 기술

Saas(Software as Service)
장점
전체 애플리케잇ㄴ을 제공하는 형태 ‘올인원’ 구조로 보통 웹브라우저를 통해 직접 액세스해 고객이 설치나 다운로드를 할 필요가없어 사용한 만큼만 비용을 지불하면되 비용절약이 됩니다.
Confluence, JIRA, Github 등이 있습니다.
단점
보안에 취약합니다.
직접 구성하고, 유지관리해야 합니다.
기능 추가로 인해 이용료가 증가하면 비용적 이점을 누릴 수 없을 수 있습니다.
Paas(Platform as a Service)
장점
개발할 때 필요한 것들을 쉽게 해결할 수 있습니다.
DB, 저장소등을 제공고, 배포나 호스팅에 필요한 인프라와 서버를 제공합니다.
단점
플랫폼에 종속될 수 있습니다.
IaaS(Infrastructure as a Service)
장점
네트워크 환경만 대여한다면 서버, 저장 공간등을 사용할 수 있습니다.
당점
직접 서버를 마련하는 것보다 비용이 더 들어갑니다.
SaaS와 PaaS에 비해 복잡합니다.