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

[Docker] 4일차. 35~48pg | 지속적 인티그레이션, 단위테스트, 컨테이너의 역사, Docker

D269 2023. 7. 12. 14:47
728x90

 

4일차.

 

제 1부. 도입편

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

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

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

1.3. OS(Linux) 기초 지식

1.4. 미들웨어 기초지식

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

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

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

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

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

 

1.8.1. 지속적 인티그레이션(Continuous Integration)

- 애플리케이션의 코드를 추가 및 수정할 때마다 테스트를 실행하고 확실하게 작동하는 코드를 유지하는 방법

- 소프트웨어의 품질 향상을 목적으로 고안된 개발 프로세스

- 단위 테스트 : 소프트웨어의 특정 부품에 대해 사양서에 정해진 대로 작동하는지를 확인하는 테스트

- 소프트웨어 개발이 진행되면서 단위 테스트의 수가 늘어나므로 테스트를 자동화하기 위해 Jenkins 같은 인티그레이션 툴을 사용한다.

 

1.8.2. 지속적 딜리버리

- 폭포형 : 요건 정의 > 설계 > 코딩 > 테스트

- 애자일 : 모든 기능을 한 번에 다 만들지 않고 기능을 추가할 때마다 애플리케이션을 제품 환경에 배포하고, 시스템 이용자의 피드백에 기초하여 그 다음에 개발할 기능을 결정

- 블루 그린 디플로이먼트(blue green deployment) : 클라우드 환경에서 배포방법 중 하나로, 현재 작동하고 있는 시스템(blue)과 버전업 후 시스템의 애플리케이션에 문제가 있으면 바로 현행 시스템으로 되돌리는 방법

 

- Cloud Native Computing Foundation(CNCF) : 클라우드 네이티브 컴퓨팅을 추진하는 조직

 

 

 


 

제 2장. 컨테이너 기술과 Docker의 개요

- 이 장의 목표 : 애플리케이션 개발자가 알아두어야 할 컨테이너 기술과 Docker의 개요, Docker가 작동하는 구조에 대해 설명한다.

 

2.1. 컨테이너 기술의 개요

2.1.1. 컨테이너

- 호스트 OS상에 논리적인 구획(컨테이너)을 만들고, 애플리케이션을 작동시키기 위해 필요한 라이브러리나 애플리케이션 등을 하나로 모아, 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것.

- 컨테이너는 오버헤드가 적기 때문에 가볍고 고속으로 작동한다는 점이 특징

- 컨테이너는 애플리케이션의 실행에 필요한 모듈을 컨테이너로 모을 수 있기 때문에 여러 개의 컨테이너를 조합하여 하나의 애플리케이션을 구축하는 마이크로 서비스형 애플리케이션과 친화성이 높다.

 

- 서버 가상화 기술의 이모저모

   a. 호스트형 서버 가상화 : 하드웨어 상에 베이스가 되는 호스트 OS를 설치하고, 호스트 OS에 가상화 소프트웨어를 설치한 후, 이 가상화 소프트웨어 상에서 게스트 OS를 작동시키는 기술

    ex) Oracle VM VirtualBox

    컨테이너와는 다르게 호스트 OS 상에서 다른 게스트 OS를 움직이고 있기 때문에 오버헤드가 커진다.

    (오버헤드 : 가상화를 수행하기 위해 필요한 CPU 자원, 디스크 용량, 메모리 사용량 등)

  

   b. 하이퍼바이저형 서버 가상화 : 하드웨어 상에 가상화를 전문으로 수행하는 소프트웨어인 '하이퍼바이저'를 배치하고, 하드웨어와 가상 환경을 제어한다. 

     ex) Hyper-v, XenServer

     호스트 OS 없이 하드웨어를 직접 제어하기 때문에 자원을 효율적으로 사용할 수 있음.

     가상환경마다 별도의 OS가 작동하기 때문에 가상 환경의 시작에 걸리는 오버헤드가 커진다.

    

    컨테이너 기술과 서버 가상화 기술을 비슷하지만 목적이 다르다.

- 컨테이너 기술 : 애플리케이션의 실행 환경을 모음으로써 이식성을 높이고 확장성이 좋은 환경에서 작동하는 것 지향

- 가상화 기술 : 서로 다른 환경을 어떻게 효율적으로 에뮬레이트할지라는 점을 지향

 

 

2.1.2. 컨테이너 역사

1) FreeBSD Jail

- 오픈 소스 Unix인 FreeBSD의 기술

- FreeBSD 시스템을 Jail이라는 독립된 작은 구획에 가둬넣어 시스템을 분할 할 수 있다.

   (1) 특징

        ① 프로세스의 구획화 : 똑같은 Jail에서 작동하는 프로세스만 액세스할 수 있도록 프로세스를 분리한다.

        ② 네트워크의 구획화 : Jail은 하나하나에 IP 주소가 할당되어 있다. 여러 개의 주소를 할당할 수도 있다. 

        ③ 파일 시스템의 구획화 : Jail에서 사용하는 파일 시스템을 구획화함으로써 조작할 수 있는 명령이나 파일 등을 제한한다. Jail은 관리자 권한의 범위가 Jail 안으로 제한되기 때문에 시스템 관리자는 종료와 같은 시스템를 조작하는 권한을 부여하지 않고도 일반 사용자에게 관리자 권한을 부여할 수 있다.

    

2) Solaris Containers

 - 오라클의 상용 Unix인 Solaris에서 사용하는 컨테이너 기술

 - Docker가 나오기 10년 전에 등장한 기술이지만 Docker와 구조가 비슷하다.  

 (1) 기능

      Solaris 존 기능 : 하나의 OS 공간을 가상적으로 분할하여 여러 OS가 작동하고 있는 것처럼 보여주는 소프트웨어 파티셔닝 기능. 베이스가 되는 OS영역은 '글로벌 존', 구획화된 가상 존 '비 글로벌 존'

      ② Solaris 리소스 매니저 기능 : 비 글로벌 존에서 CPU나 메모리와 같은 하드웨어 리소스를 배분하는 리소스 관리 기능. 

      

3)  Linux Containers(LXC)

 - Linux 상에서 사용하는 컨테이너 환경

 - Docker에서 현재 버전에서는 사용하고 있지 않다.

 

 

2.3. Docker의 개요

- 애플리케이션의 실행에 필요한 환경을 하나의 이미지로 모아두고, 그 이미지를 사용하여 다양한 환경에서 애플리케이션 실행 환경을 구축 및 운용하기 위한 오픈소스 플랫폼

 

2.3.1. 프로그래머에게 Docker란?

- 웹 시스템 개발 시 애플리케이션을 제품 환경에서 가동시키기 위해 필요한 요소

  . 애플리케이션의 실행 모듈(프로그램 본체)

  . 미들웨어 or 라이브러리군

  . OS/네트워크 등과 같은 인프라 환경 설정

(스테이징 환경 : 지속적 딜리버리가 일어나는 시스템 개발에서 개발한 애플리케이션을 제품 환경에 전개하기 직전에 확인하는 테스트 환경)

 - 도커에서는 인프라 환경을 컨테이너로 관리한다. 애플리케이션의 실행에 필요한 모든 파일 및 디렉토리들을 컨테이너로서 모아버리는 것이다. 

- 프로그래머는 Docker를 사용하여 개발한 애플리케이션의 실행에 필요한 모든 것이 포함되어 있는 Docker 이미지를 작성한다 -> 이 이미지는 컨테이너의 바탕이 된다 -> 작성한 이미지를 바탕으로 컨테이너를 가동시킨다.

 

- 애플리케이션의 이식성(portability) : 한 번 만들면 어디서든지 움직이는 소프트웨어의 특성을 이식성이라고 한다. Docker는 이식성이 높아서 클라우드 시스템과의 친화력도 높다.

 

 

 

 

728x90
반응형