본문 바로가기
프로그래밍 놀이터/Settings

[Docker] 시스템과 인프라 기초 지식

by 돼지왕왕돼지 2020. 3. 19.

[Docker] 시스템과 인프라 기초 지식


-

Docker 는 앱 실행 환경을 작성 및 관리하기 위한 플랫폼이다.





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


-

클라우드의 등장으로 시스템 개발의 흐름이 크게 바뀌었다.

클라우드를 구성하는 대부분의 기술은 한 대의 물리 호스트 상에서 움직이는 시스템과는 달리 분산 환경에서 가동시키는 것이 기본이다.

인프라 엔지니어에게는 인프라 기술에 더해 앱 엔지니어와 똑같이 코드를 작성하는 스킬이 요구된다.

앱 엔지니어도 지금까지 인프라 엔지니어의 업무였던 제품 환경에 대한 베포나 테스트 등도 직접 할 수 있게 되었기 때문에 OS(커널)나 네트워크 등과 같은 인프라 기술의 기초 지식을 알아두어야 한다.




* 시스템 기반의 구성 요소


-

시스템 기반이란 앱을 가동시키기 위해 필요한 하드웨어나 OS, 미들웨어 등과 같은 인프라를 말한다.

이런 시스템 기반을 다루는 기술을 인프라 기술이라고 부른다.



-

기능 요구사항 (functional requirement) : 시스템의 기능으로서 요구되는 사항.

비기능 요구사항 (non-functional requirement) : 시스템의 성능이나 신뢰성, 확장성, 운용성, 보안 등과 같은 요구사항이다.



-

하드웨어 : 물리적인 요소로 서버 장비 본체나 데이터를 저장하기 위한 스토리지, 전원 장치 등. 넓은 의미에서는 이러한 하드웨어들을 설치하는 데이터센터의 설비(건물, 공조, 보안 설비, 소화 설비 등)도 포함된다.

네트워크 : 원격지에서 서버들을 연결하기 위한 요구사항이다. 라우터, 스위치, 방화벽 등과 같은 네트워크 장비나 그것들을 연결하기 위한 케이블 배선 등. 무선 연결시 AP 등도 필요하다.

OS(운영체제) : 하드웨어나 네트워크 장비를 제어하기 위한 기본 소프트웨어로, 하드웨어의 리소스나 프로세스를 관리한다. 클라이언트 OS 는 Windows/macOS 등이 있다. 서버 OS 는 Windows Server, Unix, Linux 등이 있다. 서버 OS 는 시스템을 고속 및 안정적으로 가동시키기 위해 필요한 기능으로 특화되어 있다.

미들웨어 : 서버 OS 상에서 서버가 특정 역할을 다하기 위한 기능을 갖고 있는 소프트웨어를 말한다.




* 클라우드와 온 프레미스


-

온프레미스 (on-premises)

    자사에서 데이터센터를 보유하고 시스템 구축부터 운용까지를 모두 수행하는 형태.

    서버나 네트워크 장비를 모두 자사에서 직접 조달하여 시스템 요구사항에 맞춰 인프라를 구축하고, 자사(또는 관련 시스템 자회사 등)에서 운용을 한다.

    하드웨어, OS, 미들웨어 모두 자사에서 구입하며, 라이선스 관리나 버전업도 자사에서 한다.

    초기 시스템 투자에 드는 비용 부담이 크며, 시스템 가동 후의 운용에 드는 비용도 시스템 이용량과 상관없이 일정 금액을 부담해야 하는 것이 특징이다.



-

퍼블릭 클라우드 (public cloud)

    인터넷을 경유하여 불특정 다수에게 제공되는 클라우드 서비스이다.

    초기 투자가 필요 없다.

    제공할 서비스에 따라 IaaS/PaaS/SaaS 등이 있다.

    시스템 기반 부분을 이용하는 서비스는 IaaS(Infrastructure As A Service) 라고 한다. IaaS 에서는 이용하고 싶은 사양으로 된 가상 머신이나 스토리지를 선택하고 이용한 시간이나 데이터 양에 따라 요금을 지불하는 형태를 취한다.



-

프라이빗 클라우드 (private cloud)

    특정 기업 그룹에게만 제공되는 클라우드 서비스이다.

    예를 들면 기업 내에서 데이터센터를 공동으로 보유하는 듯한 이미지이다.

    이용자를 한정하여 보안을 확보하기 쉬우며, 독자적인 기능이나 서비스를 추가하기 쉽다.




* 클라우드가 적합한 케이스


-

트래픽의 변동이 많은 시스템

    시스템에는 직원용 시스템(근태 관리, 회계, 인사 등)과 고객용 시스템(예약, 온라인 쇼핑, 온라인 게임의 백엔드, 동영상 배포 등)이 있다.

    직원용 시스템은 이용자가 한정되어 트래픽을 예상하기 쉽지만, 고객용 시스템의 경우는 정확한 트래픽을 예측하는 것이 극도록 어렵다.

    트래픽 양에 따라 시스템 기반의 서버 사양이나 네트워크 대역을 가늠하는 설계를 사이징(sizing)이라고 하는데, 사이징이 어려운 시스템은 트래픽 양에 따라 시스템을 단기간에 쉽게 증설시킬 수 있는 클라우드 시스템으로 구성하는 것이 좋다.



-

클라우드의 오토스케일 기능

    인프라 설계에서 가장 난이도가 높은 공정 중 하나는 사이징이다.

    잘못 계산하면 느려서 사용할 수 없는 시스템 또는 과도하게 쓸데없는 투자가 발생하는 시스템이 되어버린다.

    오토스케일 기능을 사용하면 시스템 부하에 맞춰 동적으로 서버 사양이나 스토리지 용량을 쉽게 증설시킬 수 있다.

    또한 시스템 사용량이 적을 때는 사양을 낮춤으로써 쓸데없는 시스템 투자를 줄일 수 있다.



-

재해 대책으로 해외에 백업을 구축하고 싶은 경우

    재해와 같은 리스크가 발생했을 때 업무를 중단하지 않거나, 업무가 중단된 경우라도 목표하는 복구 기간 안에 중요한 기능을 재개시켜, 사업 중단이 야기하는 리스크를 최소한으로 하기 위해 미리 준비해 두는 계획을 업무 연속성 계획(BCP)라고 한다.

    


-

서비스를 빨리 제공하고 싶은 시스템

    장비 조달에 걸리는 시간을 줄일 수 있다.

    또한 첨단 기술을 사용한 시스템이나 PoC(개념 증명:Proof of Concept) 등도 클라우드 환경이 더 적합하다.




* 온프레미스가 적합한 케이스


-

높은 가용성이 요구되는 시스템

    클라우드의 경우 시스템 가용성은 클라우드 업체가 보장하고 있다.

    클라우드의 가용성 이상이 필요한 경우에 온 프레미스가 적합하다.



-

기밀성이 높은 데이터를 다루는 시스템

    데이터 저장 장소는 클라우드 서비스 측이 정한다.

    물리적인 저장 장소를 명확히 할 필요가 있는 업무 데이터는 퍼블릭 클라우드에 저장하기 어렵다.



-

특수한 요구사항이 있는 시스템

    범용적이지 않은 디바이스나 특수한 플랫폼에서만 움직이는 시스템을 구축하거나 이전할 필요가 있는 경우, 클라우드를 이용하기 어렵다.

    


-

온 프레미스와 클라우드를 동시에 사용하는 하이브리드 클라우드에 대한 요구사항도 있다.

하이브리드 클라우드에서는 서로 다른 환경에서 앱을 작동시킬 필요가 있다.



-

AWS, Azure, 기계학습의 경우는 GCP 와 같이 적재적소에 여러 개의 클라우드를 사용하여 시스템을 구축하는 멀티 클라우드에 대한 요구도 커지고 있다.




* 시스템 기반의 구축/운용 흐름


-

시스템 구축 계획 및 요구사항 정의 단계

    시스템 구축 범위 선정

    인프라 요구사항 정의

    예산 책정

    프로젝트 체계화

    기존 시스템과의 연계

    시스템 마이그레이션 계획



-

인프라 설계 단계

    인프라 아키텍쳐 설계

    네트워크 토폴로지(망 구성 방식) 설계

    장비 선택, 조달(클라우드인 경우 서비스 선택)

    OS, 미들웨어 선택, 조달(클라우드인 경우 서비스 선택)

    시스템 운용 설계

    시스템 마이그레이션 설계



-

인프라 구축 단계

    네트워크 부설

    서버 설치

    OS 셋업

    미들웨어 셋업

    앱 및 라이브러리 설치

    테스트(네트워크 확인, 부하 테스트, 운용 테스트)

    시스템 릴리스 및 마이그레이션



-

운용 단계

    서버 프로세스, 네트워크, 리소스, 배치 Job 모니터링

    데이터 백업 및 정기 유지보수

    OS, 미들웨어 버전 업그레이드

    앱 버전 업그레이드

    시스템 장애 시 대응

    사용자 서포트(헬프 데스크)



-

앱 개발 공정과 다르게 인프라는 운용 단계에도 리소스가 많이 필요하다.

시스템 운용에 걸리는 유지보수 기간을 가능한 한 줄이고, 시스템을 안정적으로 가동시키기 위해서는 운용 설계가 중요하다.

유지보수 수고를 줄이기 위해서는 시스템 운용에서 자동화할 수 있는 부분을 가능한 한 자동화하도록 설계한다.








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


* 서버 장비


-

CPU 

메모리

스토리지

    주로 하드와 SSD 를 사용하지만, SAN 스토리지나 Fiber Channel(FC) 하드디스크도 있다.

(돼왕 : SAN 은 Storage Area Network 로 NAS 와 비슷하지만 동시접속 가능하고, 블록 단위 접근을 제공한다. 또한 일반 Ethernet 대신 FC 를 접속 채널로 사용한다.

Fiber Channel(FC) 은 GB 이상을 지원하는 네트워크 Channel 을 애기한다.)



-

온프레미스 환경의 경우 전원 트러블에 의한 순간적 차단을 막기 위한 UPS(무정전 전원장치)나 여러 대의 서버를 관리하기 위한 KVM 스위치 등도 도입한다. ( 돼왕 : KVM 은 Keyboard Video Monitor 를 이야기한다. )



-

서버 장비의 설치에 사용하는 서버 랙은 메인터넌스를 하기 쉬운 것으로 선택한다.

서버 격납에는 19인치 렉이라 부르는 것을 많이 사용한다.

데이터센터나 기계실에 설치할 때는 바닥이 하중을 얼마나 견디는지, 랙 안에 격납할 장비의 소비 전력을 계산하여 설치 시공 및 전기 공사를 한다.

데이터센터는 공조 설비도 갖출 필요가 있다.




* 네트워크 주소


-

MAC 주소 (물리 주소/이더넷 주소)

IP 주소

    IPv4 는 32비트 주소로 IP주소 고갈 우려로 사내 네트워크에서는 프라이빗 주소를 사용하고 NAT을 설치

    IPv6 는 128비트 주소를 사용




* OSI 참조 모델과 통신 프로토콜


-

응용 계층(레이어 7) : HTTP, SMTP 등의 프로토콜

표현 계층(레이어 6) : 데이터 저장 형식, 압축, 문자 인코딩 등의 표현 양식 규정

세션 계층(레이어 5): 커넥션 확립, 데이터 전송 타이밍 등 규정

전송 계층(레이어 4) : 전송 오류의 검출이나 재전송 규정. TCP, UDP

네트워크 계층(레이어 3): IP 주소 기반 라우팅.

데이터 링크 계층(레이어 2): MAC 주소 기반 데이터 전송으로 스위치.

물리 계층(레이어 1): 물리적 및 전기적 특성 규정. 케이블이나 커넷터의 모양(RJ) 규정.




* 방화벽


-

패킷 필터형 : IP 주소를 기반으로 필터링 하는 방법. 패킷 필터링의 룰을 ACL(액세스 제어 리스트)라고 한다.

앱 게이트웨이형 : 앱 프로토콜 레벨에서 외부와의 통신을 대체 제어하는 것. 일반적으로 프록시 서버라고 부른다.




* 라우터/레이어 3 스위치


-

어떤 루트를 통해 데이터를 전송할지를 판단하기 위한 경로 선택 기능을 가지고 있다.

어떤 루트를 경유할지는 라우터에 설정된 라우팅 테이블을 바탕으로 정해지는 정적 경로(Static Route)와 라우팅 프로토콜에서 설정된 동적 경로(Dynamic Route)가 있다.



-

라우터와 거의 똑같은 기능을 갖고 있는 레이어 3 스위치는 라우팅을 하드웨어로 처리하고 있어 고속으로 작동하며, 연결할 수 있는 이더넷 포트의 수가 많아 널리 이용되고 있다.








1.3. OS(Linux) 기초 지식


-

Docker 는 Linux 의 기능을 사용한 기술이다.




* Linux


-

Linux 커널(Kernel) : OS 의 코어가 되는 부분으로 메모리 관리, 파일 시스템, 프로세스 관리, 디바이스 제어 등 기본 기능을 갖고 있는 소프트웨어다.

Linux 배포판 : Linux 배포판에는 Linux 커널과 함께 각종 커맨드, 라이브러리, 앱 등이 포함되어 있다. 또한 Linux 커널 이외의 부분을 사용자 공간(userland)라고 하는데, 이 공간에서는 디바이스에 직접 엑세스할 수 없기 떄문에 Linux 커널을 통해 처리가 이루어진다.



-

주요 Linux 베포판은...

Debian 계열 배포판 : Debian, KNOPPIX, Ubuntu

Red Hat 계열 배포판 : Fedora, Red Hat Enterprise Linux (RHEL), CentOS, Vine Linux

Stackware 계열 배포판 : openSUSE, SUSE Linux Enterprise

기타 배포판 : Arch Linux, Gentoo Linux




* Linux 커널


-

하드웨어 제어에 관한 OS 의 핵심이 되는 기능을 말하는 것으로, C 언어나 어셈블리 언어로 쓰여 있다.



-

디바이스 관리

프로세스 관리

메모리 관리

    메모리의 물리적 용량을 초과하는 프로그램/데이터를 전개할 때는 하드디스크 같은 보조기억장치에 가상 메모리 영역을 만든다. 이 가상 메모리 영역을 스왑(swap) 이라고 한다. Linux 커널은 메모리상에 전개된 이용 빈도가 낮은 데이터를 스왑으로 보내고(스왑 아웃), 스왑상의 데이터를 메모리로 되돌리는(스왑인) 일을 한다.



-

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

쉘로는 다음과 같은 일을 할 수 있다.

    앱 실행/정지/재실행

    환경변수 관리

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

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


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



-

쉘의 종류는...

bash : 명령 이력, 디렉토리 스택, 명령 변환 기능, 명령이나 파일명의 자동보완 기능 등을 지원하는 고기능 쉘, 대부분의 linux 시스템이나 macOS 에 표준으로 탑재되어 있다.

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

tcsh : csh 을 개선한 버전으로 명령이나 파일명 등의 자동보완 기능을 갖고 있다.

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




* Linux 파일 시스템


-

앱 입장에서는 데이터가 하드에 있는지, 플래시에 있는지, 네트워크 너머 서버에 있는지 상관없이 액세스할 수 있는 방법이 있다면 편할 것이다.

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

VFS 에서는 각 디바이스를 파일로 취급한다.



-

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

ext2 : Linux OS 에서 널리 이용되던 파일 시스템

ext3 : Linux 에서 주로 사용되는 파일 시스템. Linux Kernel 2.4.16 부터 사용 가능

ext4 : ext3의 후속 저널링 파일 시스템. 확장 기능을 사용하지 않는 경우에 한해 ext3 으로 마운트 할 수 있다. 스토리지는 1EIB(엑스비바이트, TB 가 10^12, EIB 는 10^60, 즉 10^48TB) 까지 지원하며, 파일의 단편화를 방지하는 extent file writing 이라는 시스템이 도입되어 있다.

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

UnionFS : 여러 개의 디렉토리를 겹쳐서 하나의 디렉토리로 취급할 수 있는 파일 시스템. 쓰기 가능한 디렉토리와 읽기 전용 디렉토리를 겹침으로써, 읽기 전용 디렉토리의 내용을 가상적으로 변경할 수 있다. 신뢰성과 퍼포먼스를 개선한 AUFS(AnotherUnionFS)도 있다.

ISO-9660 : CD-ROM 의 파일 시스템.

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




* Linux 디렉토리 구성


-

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

모든 배포판이 이 규격을 무조건 따르지 않는다는 점도 주의하자.



-

/bin : 기본 커맨드

/boot : OS 시작에 필요한 파일, vmlinux 라는 파일이 linux 커널의 정체.

/dev : 디바이스 파일, 하드디스크, 키보드, 디바이스 파일 저장.

/etc : 설정 파일, OS, 앱 설정 파일들이 들어 있다.

/home :사용자 홈 디렉토리

/lib  : 공유 라이브러리

/mnt : 파일시스템의 마운트 포인트용 디렉토리

/media : CD/DVD-ROM 마운트 포인트

/opt : 앱 소프트웨어 패키지

/proc : 커널이나 프로세스에 관한 정보

/root : root 용 홈 디렉토리

/sbin : 시스템 관리용 마운트

/srv : 시스템 고유의 데이터

/tmp : 임시 디렉토리

/usr : 각종 프로그램이나 커널 소스를 놓아두는 디렉토리

/var : 로그나 메일 등 가변적인 파일을 놓아두는 디렉토리




* Linux 보안 기능


-

계정에 대한 권한 설정

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

    root 는 시스템의 종료나 파일 시스템의 마운트/언마운트, 앱의 설치와 같은 실행 권한을 가지며, 시스템 전체를 관리할 수 있다.

    시스템 계정을 작성할 수도 있다. 시스템 계정은 특정 프로세스를 작동시키기 위한 계정이다. 이는 보통 로그인 할 수 없도록 해둔다.

    계정에는 그룹을 설정할 수 있다. Linux 의 파일이나 디렉토리에 대한 엑세스 권한을 계정 및 그룹별로 세세하게 설정할 수 있다. 이러한 엑세스 권한을 퍼미션이라고 한다.



-

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

    iptables 는 linux 에 내장된 패킷 필터링 및 네트워크 주소 변환(NAT) 기능을 설정하는 기능이다.

    패킷 필터링은 패킷의 헤더 부분을 보고 조건과 일치하면 설정한 액션(전송, 파기, 주소 수정 등)을 수행하는 것이다.



-

SELinux ( Security-Enhanced Linux)

    Linux 커널에 강제 엑세스 제어 기능을 추가한 기능이다.

    퍼미션에는 오너, 그룹, 기타에 대해 각각 읽기, 쓰기, 실행 허가를 설정할 수 있다.

    하지만 root 사용자는 이러한 퍼미션과 상관없이 모든 액세스가 가능하기 때문에 root 사용자의 비밀번호가 도난당하면 시스템에 치명적인 영향을 끼치는 결점이 있다.

    SELinux 는 보안 대상에 따라 HTTP/FTP 와 같은 프로세스마다 엑세스 제한을 거는 Type Enforcement(TE)root 도 포함한 모든 사용자에 관해 제어를 거는 롤베이스 엑세스 제어(RBAC) 등으로 Linux 를 제어한다.

    이로써 root 사용자에게 권한이 집중되는 것을 막음으로써 보안성이 높은 시스템을 구축할 수 있다.








1.4. 미들웨어 기초 지식


-

미들웨어란 OS 와 업무 처리를 수행하는 앱 사이에 들어가는 소프트웨어를 말한다.

OS 가 갖고 있는 기능을 확장한 것, 앱에서 사용하는 공통 기능을 제공하는 것, 각종 서버 기능을 제공하는 것 등 목적과 용도에 따라 폭넓은 종류가 이용되고 있다.




* 웹 서버/웹 앱 서버


-

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


Apache HTTP Server

Internet Information Services ( MS )

Nginx : 소비 메모리가 적으며 리버스 프록시 기능과 로드밸런서 기능도 갖고 있다.




*  데이터베이스 서버


-

MySQL

PostgreSQL

Oracle Database



-

NoSQL

    RDBMS 와는 다른 새로운 방식을 통틀어 일컫는 말이다.

    병렬분산처리나 유연한 스키마 설정 등이 특징으로, 주요 방식으로는 KVS(Key-Value Store)나 도큐먼트 지향 DB, XML DB 등이 있다.

    대량의 데이터 축적이나 병렬 처리에 뛰어나다.


Redis : 메모리상에 KVS 를 구축할 수 있는 NoSQL. 예상치 목한 전원 차단이 있으면 데이터가 손실될 수 있다.

MongoDB : 도큐먼트라는 구조적 데이터를 콜렉션으로 관리하는 NoSQL.

Apache Cassandra : 하나의 Key 에 대해 여러 개의 칼럼을 가지고, 관계형 테이블에 가까운 데이터 구조를 갖는 NoSQL.





* 시스템 감시 툴


-

Zabbix

Datadog

Mackerel





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


* 인프라 구성 관리


-

인프라를 구성하는 하드웨어, 네트워크, OS, 미들웨어, 앱의 구성 정보를 관리하고 적절한 상태로 유지하는 작업을 말한다.

온 프레미스 환경에서는 장비뿐만 아니라 OS, 미들웨어 등의 구성 요소 변경은 물론, 퍼포먼스 튜닝 등도 진행한다. 따라서 인프라 환경의 규모가 크면 클수록 부하도 커진다.

클라우드 시스템에서는 물리적인 제약이 줄어든다. 한 번 구축한 인프라는 변경하지 않고 파기한 후 새로운 것을 구축하면 된다.





* 코드를 사용한 구성 관리


-

일반적인 인프라 구축에서는 인프라 방식 설계서를 토대로 서버나 네트워크 장비의 파라미터 시트(버전과 설정 항목의 설정 값이 쓰여 있는 문서)를 작성하고, 그것을 바탕으로 인프라 장비를 셋업했었다.

최근에는 프로그램 코드에 적혀 있는 내용대로 자동으로 설정을 해주는 장치를 도입하여 그 프로그램을 누가 실행해도 똑같은 상태의 인프라 환경을 구축할 수 있는 환경을 도입하는 것이 일반적이다.

그리고 이 코드를 유지보수하며 소스코드 관리까지 더하고 있다.

이런 것을 Infrastructure as Code라고 한다.



-

Docker 에서는 Dockerfile 이라는 파일에 인프라의 구성 정보를 기술할 수 있다.

Dockerfile 을 작성하면 컨테이너의 바탕이 되는 Docker 이미지를 생성할 수 있다.




* 대표적인 인프라 구성 관리 툴


-

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

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

    Red Hat 계열 배포판에서 이용하는 KickStart 나 로컬 PC 에 가상환경을 만들기 위한 Vagrant 등이 있다.



-

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

    DB 서버, 웹 서버, 감시 에이전트 등과 같은 미들웨어의 설치나 버전 관리, Unix 계열 OS 의 /etc 아래에 있는 OS 나 미들웨어 설정 파일이나 OS 의 방화벽 기능의 설정 등 보안과 관련된 설정을 자동화하기 위한 툴이다.

    Chef, Ansible, Puppet, Itamae 등이 있다.



-

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

    분산 환경의 서버들을 관리하는 툴로, 컨테이너 오케스트레이션의 사실상 표준(de facto standard)인 Kubernetes 는 컨테이너 가상 환경에 있어서 여러 컨테이너를 통합 관리하는 툴이다.

    Kunernetes 는 그리스어로 배의 키잡이(조타수}라는 뜻이다.




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


-

지속적 인티그레이션

    앱 코드를 추가 및 수정할 때마다 테스트를 실행하고 확실하게 작동하는 코드를 유지하는 방법을 지속적 인티그레이션(CI, Continuous Integration)이라고 한다.

    단위 테스트가 늘어나면서 이런 테스트를 자동화하기 위해 Jenkins 같은 인티그레이션 툴을 사용한다.

    하지만 단위 테스트가 끝난 모듈이 다른 환경에서도 똑같이 작동한다는 보장이 없다.

    앱을 실행하려면 OS 의 설정이나 네트워크 주소, 영구 데이터의 저장 장소, 앱 실행 계정 권한 등 인프라 환경에 의존하는 부분이 많다.

    이러한 인프라 구성에 관한 부분을 코드로 관리하면 좋다.



-

지속적 딜리버리

    모든 기능을 한 번에 다 만드는 것이 아니라 기능을 추가할 때마다 앱을 배포하고, 시스템 이용자의 피드백에 기초하여 그 다음에 개발할 기능을 결정한다는 애자일 스타일이 좋다.



-

클라우드 환경에 대한 배포는 블루 그린 디플로이먼트라는 방법을 사용하는 경우도 있다.

현재 작동하고 있는 시스템(블루)과 버전업 후의 시스템(그린)을 동시에 작동시킨 상태에서 시스템을 전환하여, 만일 버전업 후 시스템 앱에 문제가 있으면 바로 현행 시스템으로 되돌리는 방법이다.



-

Cloud Native Computing Foundation

    CNCF 는 클라우드 네이티브 컴퓨팅을 추진하는 조직이다.

    컨테이너 오케스틀이션 툴 Kubernetes, 모니터링 툴 Prometheus, 로그 수집 하는 Fluetnd, 컨테이너 런타임인 container, rkt, 서비스 디스커버리인 CoreDNS, RPC 프레임워크인 gRPC 등 16개의 프로젝트를 관리하고 있다.

    CNCF 는 프로젝트를 Inception, Incubating, Graduated 의 성숙도 단계로 분류하고 있다.




댓글0