1. 3계층형 시스템의 구성도
- 가장 아래에는 스위치를 경유해서 배열된 서버가 연결되어 있음.
- 각 서버는 물리장치(CPU, 메모리, 디스크, NIC/HBA 같은 하드웨어 부품)이 나열되어있음.
- 그 위는 CPU와 메모리 영역을 확대한 것으로 논리 구성. OS(오퍼레이팅 시스템) 영역을 보여주고 있음.
1-1. 프로세스와 스레드
- 그림의 '막대 인형'으로 표현하고 있음.
- 프로세스 및 스레드는 프로그램 실행 파일 자체가 아니라 OS상에서 실행되어서 어느 정도 독립성을 가지고 동작하는 것.
- 프로세스나 스레드가 활동하려면 자신 소유의 메모리 공간이 필요함.
- 커널에 의해 메모리가 확보됨.
- 다양한 처리를 하면서 데이터를 주고 받기 위해 확보된 메모리공간을 사용함.
- 프로세스와 스레드의 차이점
-> 프로세스는 전용 메모리 공간을 이용하여 동작하며 스레드는 다른 스레드와 메모리 공간을 공유하고 있는 공동체.
- 프로세스가 메모리 공간을 공유할 수 없는 것은 아님.
-> 오라클DB에서는 프로세스별 독자 메모리 영역 외에 여러 프로세스가
'공유 메모리 공간(디스크 상의 데이터 캐시, 실행 완료된 SQL캐시, 테이블, 인덱스 등)'을 상호 이용할 수 있게 되어있음.
- 프로세스와 스레드 중 어떤것을 사용할지는 개발자가 정함.
- 프로세스는 독자 메모리 공간을 가지기 때문에 생성 시 CPU 부하가 비교적 높아짐. EX) 연결 풀링(pooling)
때문에 멀티 프로세스 애플리케이션에서는 프로세스 생성 부담을 낮추기 위해 미리 프로세스를 시작시켜둠.
프로세스 | 스레드 | |
장점 | 개별 처리 독립성이 높음 | 생성 시 부하가 낮음 |
단점 | 생성 시 CPU 부하 높음 | 메모리 공간을 공유하기에 의도하지 않은 데이터 읽기/쓰기 발생할 수 있음. |
1-2. OS커널
- OS에서 커널은 본질이자 인프라.
- 커널이 존재하기 때문에 개발자는 하드웨어나 다른 애플리케이션에 끼치는 영향을 의식하지 않고 애플리케이션을 만들수 있음.
- OS처리는 원칙적으로 커널을 통해 이루어짐.
- 6가지 커널의 역할(시스템 콜 인터페이스, 프로세스 관리, 메모리 관리, 네트워크 스택, 파일시스템 관리, 장치드라이버)
(1) 시스템 콜 인터페이스
- 프로세스/스레드에서 커널로 연결되는 인터페이스.
- 애플리케이션이 OS를 통해 어떤 처리를 하고 싶으면
시스템 콜이라고 하는 명령을 이용해 커널에 명령을 내리며 인터페이스를 통해 전달됨.
-> 디스크 상의 데이터를 읽고 싶거나 네트워크 통신, 새로운 프로세스 생성을 하고 싶을 때 해당 시스템 콜을 호출하면 기능을 이용할 수 있음. 구체적인 처리는 프로세스가 의식할 필요없음.
(2) 프로세스 관리
- 프로세스 관리.
- OS 상에서는 수천개의 프로세스를 가동할 수 있지만, 물리서버의 CPU 코어수는 많아야 수 십개.
- 언제 어떤 프로세스가 어느정도의 CPU 코어를 이용할 수 있는지, 처리 우선순위를 어떻게 결정할 것인지를 관리함.
- OS의 가장 중요한 기능.
(3) 메모리 관리
- 메모리영역을 관리함.
- 프로세스 관리는 CPU코어를 고려하고, 메모리 관리는 물리 메모리 공간의 최대치를 고려함.
- 프로세스가 이용하는 독립 메모리 공간을 확보. 상호 간의 참조영역을 지키기위해 독립성 관리.
(4) 네트워크 스택
(5) 파일 시스템 관리
- 파일 시스템용 인터페이스 제공.
- 파일 시스템은 OS 기능 중 하나로, 물리 디스크에 제공된 데이터를 관리하는 기능.
- 물리 시스템에 기록된 데이터는 숫자의 집합에 불과하며, 파일시스템 덕분에 애플리케이션은 '파일'이라는 단위로 데이터를 작성하거나 삭제할 수 있음.
- 디렉터리(폴더) 구조 제공, 액세스 관리, 고속화, 안정성 향상 등이 있음.
(6) 장치 드라이버
- 디스크나 NIC 등의 물리 장치용 인터페이스 제공.
- 각각에 물리적 속도에 대응하는 애플리케이션을 개발하는 것은 현실적이지 못하기 때문에 커널은 장치 드라이브를 이용해 그 아래에 있는 물리 장치를 은폐함.
- 각 장치 제조사가 OS에 대응하는 장치 드라이버를 제공해서 해당 OS의 표준장치로 커널을 경유해 이용할 수 있게하는 것.
2. 웹 데이터의 흐름
- 클라이언트(PC) -> 웹 서버 -> AP서버 -> DB서버 -> AP서버 -> 웹 서버 -> 클라이언트(PC)
2-1. 클라이언트(PC) -> 웹 서버
- 클라이언트 PC에서 웹 브라우저를 실행해서 웹서버에 요청을 보내고, AP서버에 질의.
(1) 웹 브라우저가 특정 인터넷 사이트에 요청을 발행
(2) 웹 브라우저는 서버가 어디있는지 모르기에, IP를 해석한 후 결과를 가지고 해당하는 '웹서버'에 요청을 보냄.
(3) 웹 서버(Apache HTTP Server)의 HTTP를 처리할 수 있는 'httpd'프로세스가 요청을 접수
(4) httpd가 받은 요청을 분석해 정적콘텐츠(디스크에서 읽을지)인지 동적콘텐츠(AP서버에 질의할지)인지 판단.
(5-1) 정적콘텐츠 : 디스크 내부에 있는 정보는 커널의 '시스템 콜'로 실행. 커널을 통해 물리디스크의 내용 취득.
(5-2) 동적콘텐츠 : AP서버에 있는 정보도 OS의 '시스템 콜'로 실행. 커널을 통해 NIC에 대한 네트워크 통신이 요청됨.
스위치를 경유해서 AP서버에 대한 질의가 이루어짐.
2-2. 웹 서버 -> AP서버
- 클라이언트(PC)의 동적 콘텐츠 요청에 대해 AP 서버는 콘텐츠를 만들어 내야함.
- 자바를 이용한 AP서버에서는 JVM이라는 가상머신이 동작하고 있음. JVM도 하나의 OS로서 다양한 기능을 가지고있음
- 그 가운데 하나가 스레드 요청을 접수하는 것.
(1) 웹 서버로부터 온 요청은 NIC를 경유해서 커널에 의해 끼어들기 처리됨.
(2) (JVM이)스레드가 요청을 받으면 자신이 계산할 수 있는지, DB 질의가 필요한지 판단.
-> 규모가 작고 갱신 빈도가 낮은 정보는 JVM 내부에 캐시로 저장해 두었다가 반환(고속처리가능)
-> 규모가 큰 정적 데이터 전송 시에는 DB서버 외에 CDN(Content Delivery Network)를 이용하기도함.
(3) AP 서버가 DB 서버에 접속하려면 '드라이버'를 통해 '연결 풀'에 액세스함.
(4) DB에 대한 접속 요청은 OS의 '시스템콜'로 실행되고 커널을 통해 NIC에 대한 네트워크 통신이 이루어짐.
(5) 네트워크 경유로 DB 서버에 대한 질의가 이루어짐.
2-3. AP서버 -> DB서버
- DB 서버는 데이터 저장 창고. 관리 대상 데이터가 방대하기 때문에 얼마나 효율적으로 액세스하는지가 중요.
- 대부분 서버 메모리에 캐시가 있는지 먼저 확인. 없으면 디스크에 액세스.
- 인메모리 DB 에서는 디스크 자체를 사용하지 않고, 모든 처리를 메모리 내에서 완료하는 구조라 고속화 실현가능.
(1) AP 서버로부터 요청 도착. (요청은 SQL언어로 이루어짐)
(2) 프로세스가 요청을 접수하고 SQL을 해석해 데이터 액섹스 방식을 결정.
(3) 캐시가 존재하는지 확인
(4) 캐시에 없으면 디스크에 액세스.
(5) 디스크가 데이터를 반환.
(6) 데이터를 캐시 형태로 저장.
(7) 결과를 AP서버에 반환.
2-4. AP서버 -> 웹 서버
(1) DB 서버로 부터 데이터 도착
(2) 스레드가 데이터를 가지고 계산 등을 한 후에 HTTP로 전송가능한 파일 데이터(HTML, XML, 바이너리 데이터) 생성
(3) 결과를 웹 서버로 반환.
2-5. 웹 서버 -> 클라이언트(PC)
(1) AP 서버로부터 데이터 도착.
(2) 웹서버의 httpd 프로세스가 받은 데이터를 그대로 반환.
(3) 결과가 웹 브라우저로 반환되고 화면에 표시됨.
2-6. 정리
- 프로세스나 스레드가 요청을 받음.
- 도착한 요청을 파악하여 필요에 따라 별도 서버로 요청을 보냄.
- 도착한 요청에 대해 응답함.
'Book' 카테고리의 다른 글
[AWS Discovery Book] (1) 클라우드와 아마존 웹 서비스 (0) | 2022.02.12 |
---|---|
[그림으로 공부하는 IT인프라 구조] (4) 인프라를 지탱하는 응용 이론(完) (0) | 2022.02.10 |
[그림으로 공부하는 IT인프라 구조] (3) 인프라를 지탱하는 기본 이론 (0) | 2022.02.10 |
[그림으로 공부하는 IT인프라 구조] (1) 인프라 & 구성방식 (0) | 2022.02.10 |
[CleanCode] 01. 깨끗한 코드 & 의미 있는 이름 (0) | 2021.08.08 |