런타임노트

[Docker] 3일차. 19-34pg | Linux 커널, 미들웨어, 인프라 본문

책책책 책을 읽읍시다‼ ver.개발/[ 완벽한 IT 인프라 구축을 위한 Docker ]

[Docker] 3일차. 19-34pg | Linux 커널, 미들웨어, 인프라

D269 2023. 7. 7. 17:56
728x90

3일차.

 

제 1부. 도입편

제 1장. 시스템과 인프라 기초 지식

- 시스템 기반 : 애플리케이션을 가동시키기 위해 필요한 하드웨어나 OS/미들웨어 등과 같은 인프라.

- 이 책의 메인 주제 : Docker : 애플리케이션 실행 환경을 작성 및 관리하기 위한 플랫폼

- 제 1장에서는 Docker를 도입하기에 앞서 알아둬야 할 시스템 기반의 개요와 시스템 기반을 다루기 위해 필요한 인프라 기술의 핵심 내용에 대해 설명한다.

 

1.1. 시스템 기반의 기초 지식

1.2. 하드웨어와 네트워크 기초 지식

1.3. OS(Linux) 기초 지식

- OS의 역할 : 하드웨어나 네트워크 제어

- Docker는 Linux의 기능을 사용했기 때문에 Linux의 기초지식은 Docker를 사용하는 데 있어서 필수다.

 

1.3.1. Linux

1) Linux 커널(kernel) : OS의 코어가 되는 부분

- 메모리 관리, 프로세스 관리 등 OS로서 하드웨어나 애플리케이션 소프트웨어를 제어하기 위한 기본적 기능을 가진 소프트웨어

 

2) Linux 배포판

- 보통 Linux는 Linux 배포판이라는 형태로 패키지화되어 배포된다.

- Linux 커널, 커맨드, 라이브러리, 애플리케이션 포함

- userland(사용자 공간): Linux 커널 이외의 부분

 

1.3.2. Linux 커널

: 하드웨어 제어에 관한 OS의 핵심이 되는 기능

 

Linux 커널의 주요 기능

1) 디바이스 관리

: 하드웨어를 디바이스 드라이버라는 소프트웨어를 이용해서 제어한다.

 

2) 프로세스 관리

: Linux에서 명령을 실행할 때는 해당 프로그램 파일에 쓰여 있는 내용을 읽어 들여 메모리상에 전개한 후 메모리상의 프로그램을 실행한다.

: 이렇게 실행된 프로그램을 프로세스라고 한다.

- Linux 커널은 이러한 프로세스에 PID(Process ID)라는 식별자를 붙여 관리한다.

- 프로세스의 실행을 위해 필요한 CPU를 효율적으로 할당하는 역할을 한다.

 

3) 메모리 관리

: Linux 커널은 프로그램/데이터를 물리 메모리에 효율적으로 할당하는 역할을 갖는다.

: 실행이 끝난 프로세스가 사용하던 메모리 영역을 해제하는 것도 커널의 역할

- 스왑(swap) : 가상 메모리 영역

- 메모리에는 용량의 제한이 있어서 메모리의 물리적인 용량을 초과하는 프로그램/데이터를 전개할 때는 하드디스크와 같은 보조기억장치에 가상 메모리 영역(swap)을 만든다.

- Linux 커널은 메모리상에 전개된 이용 빈도가 낮은 데이터를 스왑으로 보내고(swap out), 스왑상의 데이터를 메모리로 되돌리는(swap in) 일을 한다.

 

/

 

- Linux 커널을 조작하기 위해서는 쉘(Shell)을 사용한다.

- 쉘이 하는 일

a. 애플리케이션 실행/정지/재실행

b. 환경변수 관리

c. 명령 이력 관리(명령 히스토리)

d. 명령 실행 결과 표시 및 파일 출력

- 쉘 스크립트 : 쉘에서 실행하고자 하는 명령을 모아서 텍스트 파일에 기술한 것.

- 쉘의 종류

a. bash : 명령 이력, 디렉토리 스택, 명령 변환 기능 등을 지원하는 고기능 쉘

b. csh : C언어와 비슷한 쉘. BSD 계열 OS에서 주로 이용

c. tcsh : csh 를 개선한 버전

d. zsh : bash와 호환성이 있는 쉘. 고속으로 작동하는 것이 특징

 

 

1.3.3. Linux 파일 시스템

- Linux 커널이 갖고 있는 중요한 기능

- 파일 시스템은 Linux에서 하드디스크나 USB 메모리, CD 등과 같은 데이터에 액세스하기 위한 장치이다.

- Linux 커널은 VFS(Virtual File System: 가상 파일 시스템)를 사용하여 데이터에 대한 투과 엑세스를 가능하게 하고 있다. 

- VFS에서는 각 디바이스를 '파일'로 취급하는 것이 특징.

 

 

- Linux에서 다루는 주요 파일 시스템

a. ext2 : Linux 운영체제에서 널리 이용되던 파일 시스템.

b. ext3 : Linux에서 주로 사용되는 파일 시스템. 

c. ext4 : ext3의 후속 저널링 파일 시스템.

d. tmpfs : Unix 계열 OS에서 임시 파일을 위한 장치. /tmp 로 마운트 되는 경우가 많으며, /tmp에 저장한 파일의 실체는 메모리상에 저장되어 있기 때문에 서버를 재시작하면 파일은 모두 사라진다.

e. UnionFS : 여러 개의 디렉토리를 겹쳐서 하나의 디렉토리로 취급할 수 있는 파일.

f. ISO-9660 : 1988년에 ISO에서 표준화된 CD-ROM의 파일 시스템.

g. NFS : Unix에서 이용하는 분산 파일 시스템 및 그 프로토콜

 

 

1.3.4. Linux 디렉토리 구성

: Linux는 설치된 Linux 커널을 비롯하여 각종 커맨드나 설정 파일이 디렉토리에 배치된다.

: Linux 디렉토리 목록은 FHS(Filesystem Hierarchy Standard)라는 규격에 의해 표준화되어 있다.

 

 

 

 

1.3.5. Linux 보안 기능

(대표적인 것들만)

1) 계정에 대한 권한 설정

- Linux에서는 시스템을 이용할 수 있는 사용자 계정에 권한을 설정할 수 있다.

- 권한에는 시스템 전체를 관리할 수 있는 특권 사용자인 'root'와 그 외 일반사용자가 있다.

- 특권 사용자인 root는 시스템 종료, 파일 시스템의 마운드/어마운트, 애플리케이션 설치 같은 실행 권한을 가진다.

- 계정에는 그룹을 설정할 수도 있고, 액세스 권한을 세세하게 설정할 수 있다.

- 액세스 권한을 퍼미션(permission)이라고 한다.

 

2) 네트워크 필터링을 사용한 보안 기능

- 리눅스는 원래 네트워크를 경유하여 멀티유저가 이용하는 것을 전제로 한 OS여서 네트워크 기능이 풍부하다.

- iptables : 리눅스에 내장된 패킷 필터링 및 네트워크 주소 변환(NAT) 기능을 설정한다.

- 패킷 필터링 : 패킷이 헤더 부분을 보고 조건과 일치하면 설정한 액션을 수행하는 것. 방화벽과 같은 역할

 

3) SELinux(Security-Enhanced Linux)

- 미국 국가안전보장국이 제공하는 리눅스 커널에 강제 엑세스 제어 기능을 추가한 기능

- root 사용자는 모든 액세스가 가능해서 root사용자의 비번이 도난당하면 시스템에 치명적이다 따라서 SELinux는 프로세스마다 액세스 제한을 거는 TE(Type Enforcement)와 root도 포함한 모든 사용자에 관해 제어를 거는 롤베이스 액세스 제어(RBAC)등으로 리눅스를 제어한다.

 

 

 

 

1.4. 미들웨어 기초지식

미들웨어OS와 업무 처리를 수행하는 애플리케이션 사이에 들어가는 소프트웨어

 

1.4.1. 웹 서버/웹 애플리케이션 서버

- 웹 서버 : 클라이언트의 브라우저가 보내온 HTTP 요청을 받아, 웹 콘텐츠를 응답으로 반환하거나 다른 서버사이드 프로그램을 호출하는 기능을 갖고 있는 서버

- 대표적 웹 서버 : Apache HTTP Server, Internet Information Services, Nginx

웹 서버 이름 설명
Apache HTTP Server 오픈소스 웹 서버. 소규모 웹 사이트부터 대규모 업무 시스템까지 폭 넓게 이용됨
Internet Information Services Microsoft가 제공하는 웹 서버.
Nginx 오픈소스 웹 서버.
소비 메모리가 적으며 리버스 프록시 기능과 로드밸런서 기능도 갖고 있다.

 

1.4.2. 데이터 베이스 서버

- 시스템이 생성하는다양한 데이터를 관리하기 위한 미들웨어

- DBMS(Database Management System) 이라고도 불린다.

- 대표적 데이터 베이스 서버

데이터 베이스 서버 이름 설명
MySQL 오라클이 제공하는 오픈소스관계형 데이터베이스 관리 시스템.
세상에서 가장 많이 보급되어 있는 오픈소스 RDBMS(Relational Database Management System)
PostgreSQL 오픈소스 RDBMS. 
MySQL과 나란히 업무 시스템에서 많이 사용되는 데이터 베이스 중 하나.
Oracle Database 오라클이 개발한 상용 RDBMS.
업무시스템에서 가장 많이 사용된다.
폭 넓은 플랫폼 지원이 특징

- RDBMS (관계형 데이터베이스) : 데이터를 2차원 표 형식으로 관리하는 데이터 베이스. 데이터에 대한 조회 언어로 SQL을 채택하고 있는 것이 특징이다.

 

1) NoSQL

- RDBMS와는 다른 새로운 방식을 모두 NoSQL이라 부른다.

- 병렬 분산 처리나 유연한 스키마 설정이 특징

- 대량의 데이터 축적이나 병렬처리에 뛰어기 때문에 다수의 사용자 액세스를 처리할 필요가 있는 온라인 시스템 등에서 널리 이용한다.

- 대표 NoSQL : Redis, MongoDB, Apache Cassandra

 

 

1.4.3. 시스템 감시 툴

- 시스템이 릴리스 되면 안정적으로 가동시키기 위해 감시해야 한다.

- 일반적인 시스템에서는 시스템 감시 툴로 감시한다.

- 시스템 감시 툴 : 시스템의 감시 대상인 서버나 장비의 상태를 감시하여 미리 설정한 경계 값을 초과한 경우에 정해진 액션을 실행하는 것.

- 대표 시스템 감시 툴 : Zabbix(자빅스), Datadog, Mackerel(매커럴)

 

 

 

 

1.5. 인프라 구성 관리 기초 지식

Docker를 이해하는 데 있어서 알아두어야 할 인프라 구성 관리의 개요

 

1.5.1. 인프라 구성 관리

- 인프라를 구성하는 하드웨어, 네트워크, OS, 미들웨어, 애플리케이션의 구성 정보를 관리하고 적절한 상태로 유지하는 작업

- 온프레미스 환경의 경우 일단 구축한 것을 유지보수하면서 오래 사용하는 것이 일반적

- 클라우드는 가상 환경을 기반으로 하기 때문에 인프라 구축에서 물리적인 제약이 없어져 온프레미스에서는 어려웠던 서버나 네트워크를 구축하거나 구축한 것을 바로 파기할 수 있다.

- 따라서 인프라의 변경 이력을 관리하는 것이 아닌, 현재 작동하고 있는 인프라의 상태를 관리하면 되도록 바뀌었다,

-> Immutable Infrastructure

 

 

1.6. 코드를 사용한 구성 관리

- 온프레미스는 물리 서버나 네트워크 장비를 데이터 센터나 기계실 등에 설치 -> 이런 장비는 셋업을 해야 사용할 수 있다.

- 클라우드는 키팅과 같은 공정은 필요 없지만 인스턴스의 셋업 공정은 필요하다.

 

- 여러 대의 서버를 수작업으로 하면 작업 실수가 생기기 마련이다 -> 인프라 구성 관리가 불충분하면 제품환경에서 가동 중인 인프라의 설계서나 서버의 파라미터 시트가 실제 설정 값과 달라서 작동하지 않는 경우가 있다.

-> 최근에는 프로그램 코드에 적혀 있는 내용대로 자동으로 설정을 해주는 장치는 도입하는 것이 일반적.

* 파라미터 시트 : 버전 정보와 설정 항목의 설정 값이 쓰여 있는 것. 애플리케이션 개발의 '상세 설계서'와 '프로그램 설계서'에 해당

 

- 실제 운용 중 구성 변경이 있을 때 서버 상태를 적절히 관리하지 않으면 인프라 전체가 블랙박스화 된다.

- 인프라의 구성 정보를 코드로 관리하면 개발에서의 소스코드 관리와 똑같이 관리할 수 있다. 또 소스코드로 구성을 가시화할 수 있어서 인적 실수를 배제할 수 있다.

- Infrastructure as Code : 인프라의 구성을 코드로 관리해 가는 것.

- Docker에서는 Dockerfile에 인프라의 구성정보를 기술한다.

 

 

1.7. 대표적인 인프라 구성 관리 툴

 

1.7.1. OS의 시작을 자동화하는 툴(Bootstrapping)

: 서버 OS를 설치하거나 가상화 툴을 설치 및 설정하는 작업을 자동화하기 위한 툴

 

1.7.2. OS나 미들웨어의 설정을 자동화하는 툴(Configuration)

: 미들웨어의 설치나 버전 관리, Unix 계열 OS의 /etc 아래에 있는 OS나 미들웨어의 설정 파일, OS의 방화벽 기능의 설정 등 보안과 관련된 설정을 자동화하기 위한 툴

 

1.7.3. 여러 서버의 관리를 자동화하는 툴(Orchestration)

: 대규모 시스템은 여러 대의 서버로 구축되는데, 이런 분산 환경의 서버들을 관리하기 위한 툴

: 그 중에 컨테이너 오케스트레이션의 표준인 'Kubernetes' 는 컨테이너 가상 환경에 있어서 여러 컨테이너를 통합 관리하는 툴

- Kubernetes : 그리스어로 조타수 라는 뜻. Docker의 이미지 캐릭터인 컨테이너를 실은 고래의 키를 잡듯이 여러 컨테이너를 효율적으로 관리할 수 있다.

 

 

 

1.8. 지속적 인티그레이션 / 지속적 딜리버리

- 테스트가 끝난 안전한 애플리케이션을 제품 환경으로 제공하기 위한 기초 지식 설명

 

 

 

 

 

 

 

728x90
반응형