일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 클린코드 파이썬
- Data Science
- programmers
- Boostcamp AI
- 데이터 사이언스
- 코딩테스트
- 소프티어
- 코세라
- Coursera
- 부스트캠프
- 알고리즘
- 클린코드
- string
- 프로그래머스
- 깨끗한 코드
- 티스토리챌린지
- 데이터사이언스
- 파이썬
- 문자열
- softeer
- Java
- Clean Code
- 데이터과학
- AI Mathematics
- Python
- IBM
- 코테
- 오블완
- data science methodology
- 자바
- Today
- Total
떼닝로그
[3장] 3계층형 시스템을 살펴보자 본문
3.1 3계층형 시스템의 구성도

- 아래 나열되어있는 세 개는 모두 서버이고, 스위치를 경유해서 연결되어 있다.
- 서버 내부에 나열되어 있는 CPU, 메모리, 디스크, NIC/HBA와 같은 하드웨어 부품은 모두 앞 장에서 설명한 물리 장치
- 그 위에는 CPU와 메모리 영역을 확대한 것. 이것이 바로 Operating System의 영역
3.2 주요 개념 설명
3.2.1 프로세스와 스레드
- 프로세스 및 스레드는 프로그램 실행 파일 자체가 아니라 OS 상에서 실행되어 어느 정도 독립성을 가지고 동작하는 것. 마치 사람이 숨울 쉬기 시작하면서 활동하는 것과 같은 의미
- 프로세스 및 스레드가 활동하려면 메모리 공간이 필요. 커널에 의해 메모리상에서 확보됨
- 다양한 처리를 하면서 데이터를 주고받기 위해 이 메모리 공간을 사용함
- 'httpd 프로세스'라고 쓰여 있는 인간이 프로세스. 이 주변을 감싸고 있는 하얀 공간이 프로세스의 메모리 공간. 각각 독립된 공간 가짐
- '스레드'라고 쓰여 있는 인간이 스레드. 웹 서버와 달리 AP 서버 상의 인간은 하나의 메모리 공간을 공유하고 있음
- 프로세스는 전용 메모리 공간을 이용해서 동작하지만, 스레드는 다른 스레드와 메모리 공간을 공유하고 있는 운명 공동체
프로세스 | 스레드 | |
장점 | 개별 처리 독립성이 높음 | 생성 시 부하가 낮음 |
단점 | 생성 시 CPU 부하가 높음 | 메모리 공간을 공유하기 때문에 의도하지 않은 데이터 읽기/쓰기 발생 가능 |
- 프로세스가 메모리 공간을 공유할 수 없는 것은 아님. 오라클DB에서는 여러 프로세스가 '공유 메모리 공간'을 상호 이용할 수 있음

- 프로세스별 독자 메모리도 있어 용도별로 나누어 사용하고 있으며, 프로세스 간에 공유하고 싶은 데이터는 공유 메모리 상에 둔다.
- 프로세스 단독으로 이용하는 데이터, 자신이 계산할 결과는 전용 메모리에 둔다.
3.2.2 OS 커널
- 커널이 OS의 본질. 커널 자체가 OS의 '인프라'
- 커널은 다양한 역할을 갖지만, 가장 중요한 것은 '뒤에서 무슨 일이 벌어지는지 으폐하면서도 편리한 인터페이스를 제공하는 것'
- 커널이 존재하기 때문에 하드웨어나 다른 애플리케이션에 끼치는 영향을 의식하지 않고 애플리케이션을 만들 수 있다.
- OS 처리는 원칙적으로는 커널을 통해 이뤄지게 됨

1. 시스템 콜 인터페이스
- 프로세스/스레드에서 커널로 연결되는 인터페이스
- 애플리케이션이 OS를 통해서 어떤 처리를 하고 싶으면 시스템 콜이라고 하는 명령을 이용해서 커널에 명령을 내리고, 이 명령이 인터페이스를 통해서 전달된다
- 뒤에서 구체적으로 어떤 처리를 하고 있는지는 프로세스가 의식할 필요 X
- 디스크 액세스와 네트워크 요청 모두 프로세스 관점에서 커널에 대한 시스템 콜

2. 프로세스 관리
- 프로세스 관리는 언제, 어떤 프로세스가 어느 정도의 CPU 코어를 이용할 수 있는지, 처리 우선순위를 어떻게 결정할 것인지 등을 관리
- 이 기능이 없으면 OS가 성립되지 않기 때문에 OS에게 있어 가장 중요한 기능.
3. 메모리 관리
- 프로세스 관리는 CPU 코어를 고려하고, 메모리 관리는 물리 메모리 공간의 최대치를 고려
- 프로세스가 이용하는 독립 메모리 공간을 확보하거나 상호 간의 참조 영역을 지키기 위해 독립성 관리하는 등의 역할
- 이 기능 없으면 각 프로세스는 자신 이외의 프로세스가 사용하고 있는 메모리 영역 범위를 파악해야 함...
4. 네트워크 스택
5. 파일 시스템 관리
- 파일 시스템용 인터페이스 제공

- 파일 시스템은 OS 기능의 하나로써 물리 디스크에 제공된 데이터 관리
- 파일 시스템 덕분에 애플리케이션은 '파일'이라는 단위로 데이터를 작성하거나 삭제 가능
- 주요 관리 기능으로는 디렉터리(폴더) 구조 제공, 액세스 관리, 고속화, 안정성 향상 등
6. 장치 드라이버
- 디스크나 NIC 등의 물리 장치용 인터페이스 제공
- 각각에 대응하는 애플리케이션을 개발하는 것은 현실적이지 못하기 때문에 커널은 장치 드라이버를 이용해서 아래에 있는 물리 장치 은폐
3.3 웹 데이터 흐름

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

- 흐름 : 웹 브라우저가 요청 발행 -> 이름 해석 -> 웹 서버가 요청 접수 -> 웹 서버가 정적/동적 컨텐츠 판단 -> 필요한 경로로 데이터 접근

- 디스크에서 프로그램을 읽어서 프로세스를 시작하고, 메모리 공간을 확보... PC와 서버에서 기본적으로 같은 동작. 시스템 콜 이용
- "http://jupb.kr"는 HTTP를 이용해 jpub.kr 서버에 접속한다.라는 의미.

- 웹 브라우저는 이 서버가 어디에 있는지 모르기 때문에 이름 해석(Name resolution)이라는 조사 진행
- 웹 서버는 HTTP 요청에 대해 적절한 파일이나 콘텐츠를 반환하는 역할
- 정적 콘텐츠 : 실시간으로 변경할 필요가 없는 데이터. (회사 로고 이미지). 데이터 갱신 빈도가 낮은 것은 디스크에 저장해서 요청 있으면 저장해둔 내용을 HTTP를 통해 사용자 웹 브라우저로 반환
- 동적 콘텐츠 : 높은 빈도로 변경되는 데이터. (사용자의 은행 잔고 정보, 날씨). 저장해두면 갱신 빈도가 높기 때문에 디스크 성능이 병목 형상의 원인 될 수 있음. 그래서 AP 서버가 HTML 파일을 동적으로 생성하고, 웹 서버는 요청을 AP 서버에게 던지고 결과 기다림
3.3.2 웹 서버부터 AP 서버까지

- 동적 콘텐츠 요청이 들어왔을 때 아직 존재하지 않는 콘텐츠를 가능한 빨리 만들어 내야 하는 AP 서버
1. 웹 서버로부터 요청 도착
2. 스레드가 요청을 받으면 자신이 계산할 수 있는지, 아니면 DB 접속이 필요한지를 판단
3. DB 접속이 필요하면 연결 풀에 액세스
4~5. DB 서버에 요청 던짐
- AP 서버에서 데이터를 모두 관리하는 것은 효율적이지 못하기 때문에, 대량의 데이터 관리 목적일 경우 DB 서버를 사용하는 것이 좋음
- DB 사용하면 : AP 서버의 스레드는 DB 서버에 질의하고, 그 결과를 HTML 등으로 정리해서 반환
- AP 서버가 DB 서버에 접속하려면 해당 데이터베이스 자체를 은폐하는 역할을 하는 드라이버가 필요
DB 서버 이외의 옵션
- 규모가 작고 갱신 빈도가 낮은 정보는 JVM(Java Virtual Machine) 내부에 캐시로 저장해 두었다가 반환하는 것이 좋음

- 규모가 큰 정적 데이터 전송 시에는 DB서버 이외에 CDN(Content Delivery Network)이라 불리는 데이터 전송 전용 서버 이용
3.3.3 AP 서버부터 DB 서버까지

- 오라클 DB인 경우, DB 서버가 SQL 언어로 된 요청을 접수하고, 데이터 액세스 방식을 결정하고, 필요한 데이터를 수집해온다
- 전체적인 흐름
1. AP 서버로부터 요청이 도착
2. 프로세스가 요청을 접수하고 캐시가 존재하는지 확인
3. 캐시에 없으면 디스크에 액세스
4. 디스크가 데이터를 반환
5. 데이터를 캐시 형태로 저장
6. 결과를 AP 서버에 반환
- DB 서버는 데이터 저장 창고. 관리 대상 데이터가 방대하기 때문에 얼마나 효율적으로 액세스하는가가 중요.
- DB 서버에서는 여러 개의 프로세스가 역할을 분담

- 요청을 SQL로 받아서 해석하거나 데이터에 액세스하는 프로세스가 있고, 메모리에 캐시로 존재하는 데이터와 디스크에 있는 데이터를 '정기적으로 동기화'하는 프로세스도 있음.,, -> 분업을 통해 처리를 병렬화해서 '처리량' 향상

- 대부분은 위의 이미지처럼 별도 저장 장치를 이용
- 저장 장치에는 다수의 디스크가 저장되어 있음. 대량의 데이터에 고속 액세스하기 위한 전용 서버
3.3.4 AP 서버부터 웹 서버까지

- DB 서버에서 돌아온 데이터 때문에 AP 서버의 요청 스레드로 결과 반환. 요청 내용을 바탕으로 가공한 후에 웹 서버로 데이터 반환
- 전체 흐름
1. DB 서버로부터 데이터가 도착
2. 스레드가 데이터를 가지고 계산 등을 한 후에 파일 데이터를 생성
3. 결과를 웹 서버로 반환
3.3.5 웹 서버부터 클라이언트 PC까지

- AP 서버에서 돌아온 데이터를 받아서 웹 서버의 httpd 프로세스가 PC의 웹브라우저로 반환
- 전체 흐름
1. AP 서버로부터 데이터 도착
2. 프로세스는 받은 데이터를 그대로 반환
3. 결과가 웹 브라우저로 반환되고 화면에 표시
- 하나의 요청에 하나의 데이터 반환.
- 일반적인 웹 페이지에서는 페이지 HTML 파일과 다수의 이미지 파일 등이 있기 때문에 복수의 요청으로 분할되어 웹 서버에 도착하고, 각 요청별로 데이터 반환
3.3.6 웹 데이터의 흐름 정리
- 각 서버의 동작은 다르지만 다음과 같은 공통점 존재
- 프로세스나 스레드가 요청을 받는다
- 도착한 요청을 파악해서 필요에 따라 별도 서버로 요청 보냄
- 도착한 요청에 대해 응답
- 3계층 시스템에서는 사용자 요청이 시발점이 되어 해당 요청이 다양한 서버로 전달됨.
- 자신이 할 수 없는 처리는 다음 서버에게 그 역할을 떠넘기기 때문에 실제로는 3계층보다 많은 계층을 이용하는 경우가 대부분
3.4 가상화
3.4.1 가상화란?
- 대량의 컴퓨터를 다루는 클라우드 환경은 가상화 기술을 기반으로 구축
- 가상화는 컴퓨터 시스템에서 물리 리소스를 추상화하는 것
3.4.2 OS도 가상화 기술의 하나

- 하드웨어를 의식하지 않고 애플리케이션을 실행할 수 있는 운영체제(Operating System)는 가상화 기술 중 하나
- OS가 등장함으로써 커널에 의해 하드웨어가 추상화되면서, 컴퓨터에 연결된 기억 장치나 네트워크를 통한 데이터 교환이 하드웨어를 의식하지 않고 이루어지고 있음
- OS의 가상 메모리를 사용해 프로세스 및 OS 커널의 메모리 공간을 분리함으로써 한 번에 여러 개의 프로그램 실행 가능
3.4.3 가상 머신
- 가상 머신 방식에는 호스트OS형과 하이퍼바이저 형이 있다.
- 호스트OS형은 가상화 소프트웨어를 설치해서 에뮬레이터하는 것으로, VMWare 등이 있음. 성능면에서 제한이 있음
- 하이퍼바이저형은 하드웨어상에서 직접 가상화 소프트웨어를 실행하고 그 위에 가상머신을 동작시키는 기술로, 서버 가상화의 대표 기술
- 하이퍼바이저형 가상화 구조에는 완전 가상화와 준가상화가 있음
- 완전 가상화는 물리 머신 상에서 동작하는 OS나 드라이버를 그대로 게스트로 이용할 수 있다는 장점이 있으나, 소프트웨어로 에뮬레이트하기 때문에 성능 저하
- 준가상화는 가상 환경용 가상 하드웨어를 소프트웨어적으로 에뮬레이션 진행.
3.4.4 컨테이너의 역사
- 컨테이너는 리소스가 격리된 프로세스로, 하나의 OS상에서 여러 개를 동시에 가동할 수 있으며, 각각 독립된 루트 파일 시스템, CPU/메모리, 프로세스 공간 등을 사용할 수 있다는 점이 가상머신(VM)과의 차이

3.4.5 도커의 등장

- 파일 시스템 이미지의 패키징과 버저닝이 가능해지고, 컨테이너 이미지를 공유할 수 있는 도커가 등장함으로써 컨테이너 기술이 주목 받음
- 애플리케이션 실행 환경을 자동 구축해주는 '도커 이미지'라는 기술을 클라우드 이외의 환경에서도 사용할 수 있게 오픈 소스로 공개
- 도커의 장점
- 컨테이너는 호스트OS와 OS 커널을 공유하므로 컨테이너 실행이나 정지 속도가 빠르다
- 호스트OS의 커널을 공유하므로 VM만 사용하는 경우와 비교해 한 대의 호스트 머신상에서 훨씬 많은 컨테이너를 실행할 수 있고, 이를 통해 리소스를 한 곳에서 쉽게 관리할 수 있음
- 도커는 라이브러리나 프레임워크 등을 도커 이미지로 묶어서 공유할 수 있는 것으로, 특정 환경에서는 재현되지만 자신의 개발 환경에서는 재현되지 않는 문제가 발생하기 어려움. 따라서, 버그를 효율적으로 수정 가능
'개발로그 > 그림으로 공부하는 IT 인프라 구조' 카테고리의 다른 글
[5장] 인프라를 지탱하는 응용 이론 (0) | 2022.11.14 |
---|---|
[4장] 인프라를 지탱하는 기본 이론 (0) | 2022.11.08 |
[2장] 서버를 열어 보자 (1) | 2022.10.14 |
[1장] 인프라 아키텍처를 살펴보자 (0) | 2022.10.13 |