[IT 인프라구조] 3. 3계층형 시스템을 살펴보자1 - 시스템 상에서 데이터 흐름을 봐보자 ! ( 웹 서버/AP 서버/ 프로세스와 스레드/OS 커널 /시스템 콜 인터페이스 )
1장에서 알아보았던 웹 서버, AP 서버, DB서버를 통달한 하나의 그림이다 ! 세 대의 서버는 스위치로 연결되어 있고, 각각의 서버 내부에는 CPU, 메모리, 디스크 같은 하드웨어 부품이 나열되어 있다. 이번 장에서 살펴볼 부분은 논리 구성 부분이다!
이번 장에서 배울 논리구성부분에서는 "OS(오퍼레이팅 시스템)" 영역을 볼 예정이다.
위의 그림에서 서버 내부에 해당하는 부분은, 확대해서 보았을때 1,2장에서 배웠던 물리장치들이다! ( CPU, 메모리, 디스크, NIC/HBA등,,)
OS를 이해하는데 필요한 필수 개념 3가지를 먼저 알아보자 !
- 프로세스와 스레드
프로그램 실행 파일 자체가 아닌, OS상에서 실행되어 독립성을 가지고 동작하는 것.
프로세스 및 스레드가 활동하려면 메모리 공간이 필요하다! (이는 커널에 의해 메모리상에 확보된다)
-> 다양한 처리를 하면서 데이터를 주고받기 위해 사용하는 공간이다.
-> 각각 막대인간의 프로세스와 스레드가 os 안에서 메모리 공간을 가지고 있다.
단 차이점은, 웹 서버는 프로세스별 독립된 메모리 공간을 가지고 있지만, AP서버의 스레드는 하나의 메모리 공간을 공유하고 있다.
프로세스는 전용 메모리 공간을 이용해서 동작하지만, 스레드는 메모리 공간을 서로 공유한다.
-> 둘 중에 어떤것을 이용할지는 개발자가 정한다!
프로세스 : 개별 처리 독립성이 높지만, 생성시 CPU 부하가 높다.
(때문에 멀티 프로세스 애플리케이션에서는 연결 풀링을 사용한다)
스레드 : 생성시 부하가 낮지만, 메모리 공간을 공유하기 때문에 의도하지않은 데이터 읽기 / 쓰기가 발생할 수 있다.
하지만 프로세스도 메모리 공간을 공유할 수 있다 ! 공유하고자 하는 데이터와 캐시 데이터는 공유 메모리상에 두면 된다.
공유 메모리에는 디스크상의 데이터 캐시나 실행 완료된 SQL 캐시, 테이블, 인덱스 등이 저장된다.
- OS 커널
-> 커널이 OS의 본질이라고 할 수 있다! 커널 자체가 OS의 인프라이기 때문이다!
OS처리는 원칙적으로 커널을 통해 이루어진다. 커널의 역할은 많지만, 그림에 있는것이 대표적인 역할이다.
커널의 역할인 시스템 콜 인터페이스, 프로세스 관리, 메모리 관리, 네트워크 스택, 파일 시스템 관리, 장치 드라이버 등의 역할을 알고있자!
1. 시스템 콜 인터페이스
프로세스/스레드에서 커널로 연결되는 인터페이스이다. 애플리케이션이 OS를 통해서 어떤 처리를 하고 싶으면 시스템 콜이라고 하는 명령을 이용해서 커널에 명령을 내린다. 예를 들어, 디스크상의 데이터를 읽고 싶거나 네트워크 통신을 하고 싶을 때, 새로운 프로세스를 생성하고 싶은경우에 해당 시스템 콜을 호출하면 기능을 이용할 수 있다.
2. 프로세스 관리
프로세스를 관리한다. OS상에서는 수십, 수백, 수천 개의 프로세스를 가동 할 수 있다. 물리서버의 CPU 코어 수는 많아야 수십개 정도 이다. 언제, 어떤 프로세스가 어느정도의 CPU 코어를 이용 할지, 우선순위는 어떻게 할지를 관리하는것이 이 기능의 역할이다. 이 기능이 OS에게 있어 가장 중요한 기능이라고 할 수 있다.
3. 메모리 관리
메모리 영역을 관리한다. 프로세스 관리는 CPU 코어를 고려했지만, 메모리 관리에서는 물리 메모리 공간의 최대치를 고려한다. 프로세스가 이용하는 독립 메모리 공간을 확보하고, 독립성을 관리하는 메모리 관리 역할을 한다.
5. 파일 시스템 관리
파일 시스템용 인터페이스를 제공한다.
파일 시스템은 OS 기능의 하나로서 물리 디스크에 제공된 데이터를 관리하는 기능이다. 일상에서 사용하는 '문서 파일, 엑셀 파일' 등이 이에 해당한다. 물리 디스크에 기록된 데이터는 0100숫자의 집합에 불과하기 때문에, 구분 표시도 없고 그대로 사용하기에는 매우 어렵다. 하지만 파일 시스템은 파일이라는 단위로 데이터를 작성하거나 삭제할 수 있다. 주요 관리 기능으로는 폴더 구조 제공, 액세스 관리, 고속화, 안정성 향상등이 있다.
6. 장치 드라이버
디스크나 NIC (네트워크 인터페이스 카드)등의 물리 장치용 인터페이스를 제공한다. 보통 NIC나 디스크는 다수의 제조사가 독자 제품을 제공한다. 각각에 대응하는 애플리케이션을 개발하는것은 현실적이지 못해서 , 커널을 경유해 이용할 수 있도록 한것이다! (각 장치 제조사가 해당 OS에 대응하는 장치 드라이버를 제공한다)
웹 데이터 흐름
-> 3계층형 그림으로 봤을때 전체적으로 이해할 웹 데이터의 흐름이다! 1절 - 5절으로 나누어 이해하며 따라가보자!
흐름 - 1. 클라이언트 PC부터 웹 서버까지
웹 브라우저가 요청을 발행 - 이름 해석 - 웹 서버가 요청을 접수 - 웹 서버가 정적/동적 콘텐츠인지 판단 - 필요한 경로로 데이터에 액세스
서버가 아닌 PC에서의 처리 흐름을 봐보자 !
디스크에서 프로그램을 읽어서 프로세스를 시작하고, 메모리 공간을 확보한다. (PC와 서버에서 기본적으로 같은 동작이다. 시스템 콜이 이용되고 있다) 예를들어, " http://naver.com " 을 입력 후 엔터 키를 누르면, 이름 해석이 이루어진 후에 웹 브라우저로 접속하게 된다. http를 이용해서 naver.com 서버에 접속한다 라는 의미이다.
하지만 웹 브라우저는 이 서버가 어디에 있는지 모르기 때문에 조사를 하기 시작한다.
인터넷상의 주소는 IP라는 숫자로 표현되어 있어서 문자열인 URL과 IP를 연결시키지 않으면 통신이 되지 않기 때문이다.
웹 서버의 역할은 HTTP 요청에 대해 적절한 파일이나 콘텐츠를 반환하는 것이다.
*HTTP는 HyperText Transfer Protocol이라는 프로토콜(텍스트를 송수신하기 위한 약속)을 가리킨다.
웹 서버에는 HTTP를 처리할 수 있는 'httpd 프로세스(아파치 하이퍼텍스트 전송 프로토콜 서버 프로그램)'가 가동되고 있다. 아파치에서 요청에 대한 대답 내용은 HTML 파일이라는 텍스트 데이터나 이미지, 동영상 등의 바이너리 데이터로 구성되며, '정적 콘텐츠'와 '동적 콘텐츠'로 분류할 수 있다.
'정적 콘텐츠'는 실시간으로 변경할 필요가 없는 데이터이다. 회사 로고이미지등..같은 데이터는 디스크에 저장해서 요청이 있으면 저장해둔 내용을 http를 통해 사용자 웹 브라우저로 반환한다.
'동적 콘텐츠'란 높은 빈도로 변경되는 데이터를 가리킨다. 사용자의 은행 잔고 정보, 최신 날씨 정보 등.. 이러한 데이터는 서버 내부의 디스크에 저장하면 갱신 빈도가 높아 디스크 성능 병목현상의 원인이 될 수 있다. 따라서 이런 동적 콘텐츠는 'AP 서버'가 HTML 파일을 동적으로 생성한다. 웹 서버는 동적 콘텐츠에 대한 요청을 AP 서버에게 던지고 결과를 기다린다.
흐름 - 2. 웹 서버부터 AP 서버까지
위의 흐름에서 '동적 콘텐츠'에 대한 요청을 처리하는것이 AP 서버라고 했다. 구체적인 처리 내용을 살펴보자
1. 웹 서버로부터 요청이 도착한다.
2. 스레드가 요청을 받으면 자신이 계산할 수 있는지, 아니면 DB 접속이 필요한지를 판단한다
3. DB 접속이 필요하면 연결 풀에 액세스한다.
4,5. DB 서버에 요청을 던진다.
AP서버는 동적 콘텐츠 요청에 대해 아직 존재하지 않는 콘텐츠를 가능한 재빠르게 만들어내야하는 역할을 한다.
자바를 이용한 AP 서버에서는 Java Virtual Machine(JVM)이라는 가상 머신이 동작하고 있다.
JVM도 하나의 거대한 프로세스이며, 하나의 OS로서 다양한 기능을 가지고 있다. 그 중 하나가 스레드의 요청을 접수하는 것이다.
예를들어, '1+1' 의 요청이 들어왔을때는 애플리케이션 상에서 계산하여 AP서버의 담당 스레드가 계산한 후 결과를 반환한다.
'사용자 로그인 정보'에 대한 요청이라면, AP서버가 가지고 있지 않다. 수많은 사용자의 정보가 AP서버에 저장되고 관리되지는 않기 때문에, AP서버의 스레드는 DB 서버에 질의하고, 그 결과를 HTML등으로 정리해서 반환한다.
데이터가 필요하면 DB 서버에 접속하는 것이 일반적이지만, 항상 효율적이진 않다.
자주 바뀌지 않고 규모가 작으며 갱신 빈도가 낮은 정보는, JVM 내부에 캐시로 저장해 두었다가 반환하는것이 좋다.
반대로 정적 데이터이지만 큰 정적 데이터 전송 시에는 DB 서버 이외에 CDN같은 데이터 전송 전용 서버를 이용하는 경우도 있다.
** 대부분의 웹 시스템에서는 CDN을 이용중이다. CDN은 대량의 데이터 전송에 특화된 것으로, 전 세계에 있는 서버에 캐시를 배치하는 기술과 병렬 기술을 활용하여 처리를 효율화하고 있다.
한편, 기업형 시스템에서는 CDN과 같은 구조를 잘 사용하지 않는다. 하나의 시스템에 대한 사용자수가 제한되어있고, 참조 뿐만 아니라 데이터를 갱신하는 업무가 많기 때문이다.
다음장에서 이어 AP서버부터 DB서버까지 봐보도록 하자!