먼저 도커에 앞서, 마이크로 서비스를 이해하고 들어가자.
모놀리식 아키텍처 : 전통적인 아키텍처로 기존에 사용하던 서비스 방법 마이크로 서비스 이전의 방식
특징:
1) 서비스가 하나의 애플리케이션으로 돌아감.
2) 기존의 개발 방식을 통해 개발 및 배포
3) 하나의 서비스 또는 애플리케이션이 하나의 거대한 아키텍처
4) 다양한 기능을 동작하는 서비스를 서버에서 실행하여 서비스함.
단점:
1) 기존의 애플리케이션을 그대로 복제 및 로드밸런싱, 불필요한 서비스까지 모두 복제
2) 종속적인 라이브러리 충돌, 각 기능의 라이브러리 업데이트 관리가 어려움, 각각의 기능이 서로 다른 기능을 제공하여 버전의 종속성이 필요한 경우가 존재
3) 조금만 수정해도 전체 빌드 및 배포 요구
이러한 모놀리식 아키텍처의 대안으로 마이크로서비스 아키텍처가 등장했다. 마이크로서비스는 애플리케이션의 각각의 기능을 분리하여 개발 및 관리를 한다.
장점:
1) 서비스 단위 빠른 개발 -> 개발자가 특정 비즈니스 로직에 대해서만 집중 개발
2) 배포 용이
3) 서비스 단위 고효율 저비용 Scale-Out 구조 : 서비스 단위로 스케일링이 가능하여 불필요한 서비스는 줄이고 더 많은 자원이 필요한 서비스는 확장
하지만, 분산 시스템 환경에서 트랜잭션 보장, 테스트, 배포, 관리가 복잡하다. 이러한 문제를 해결하기 위해 Docker를 이해하자.
Docker란 Go언어로 작성된 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다.
그렇다면 컨테이너란?
컨테이너가 실행되고 있는 호스트 OS를 그대로 사용하면서 프로세스를 격리해 독립된 환경을 만드는 기술이다.
즉, 도커는 각 환경을 격리해 하드웨어를 효율적으로 활용하는 기술이다.
컨테이너를 알기에 앞서 가상화라는 개념을 이해해야 하는데, 가상화란 하나의 실물 컴퓨팅 자원을 마치 여러 개인 것처럼 가상으로 쪼개서 사용하거나, 여러 개의 실물 컴퓨팅 자원을 묶어서 하나의 자원인 것처럼 사용하는 것이다.
쉽게 말해, 하이퍼바이저를 통해 CPU, GPU, 메모리, 스토리지 공간, 네트워크 대역폭 등과 같은 호스트 시스템의 리소스를 추상화하여 수신한 리소스 요청에 따라 시스템에서 실행하는 다수의 VM(Virtual Machine)에 이 리소스를 동적으로 할당하는 것이다.
그렇다면 여기서 또, 하이퍼바이저란 무엇이냐? VM과 하드웨어간의 명령을 처리하는 인터페이스이다. 앞서 설명한 리소스들을 논리적으로 가상화하는 기술인 것이다. 쉽게 말하면 VM위에 올라간 OS들의 명령을 하드웨어가 이해할 수 있도록 하나의 명령어로 번역해주고 반대로 OS에게 하드웨어 리소르를 나눠주는 중재 역할을 하는것이다.
이러한 가상화의 종류로 가상머신(VM)과 컨테이너(Container)가 존재하는 것이다.
가상머신 : 하이퍼바이저를 통한 리소스 전체를 가상화하는 방식컨테이너 : OS 수준에서 프로세스를 컨테이너 형태로 격리하는 방식
가상머신과 컨테이너의 차이점은 다음 그림을 보면 알 수 있다. 먼저, 가상머신은 하이퍼바이저를 이용하기 때문에 각각의 GuestOS들은 하이퍼바이저에 의해 관리되고 시스템 자원을 할당받게 된다. 하지만, 각각의 독립적인 가상머신이 오버헤드가 크고 항상 하이퍼바이저를 거쳐야 하기 때문에 속도 저하의 문제가 생기고 이미지 배포할 때 크기가 너무 커질 수 있다.
그에 비해 컨테이너는 가상의 OS를 만드는 것이 아니라 OS를 공유하며 필요한 프로세스만 따로 격리하는 것이므로 오버헤드가 적다. 따로 거치는 중개역할이 없기 때문에 속도도 빠르다. 하지만, 컨테이너 위에서 다른 OS를 실행할 수 없다. 대신 격리시킬 애플리케이션과 파일, 라이브러리 등을 포함하기 때문에 이미지가 작아 배포할 때 편리하다는 장점이 있다.
즉, Docker의 장점으로
1) 각 애플리케이션이 독립성을 가져 OS, 컨테이너 간 충돌 X
2) 배포가 유용함.
3) 확장성이 좋음.
등이 있다.
도커 이미지(Docker Image) : 컨테이너를 실행할 수 있는 실행파일, 설정 값들의 집합으로 더 이상 의존성 파일을 컴파일하거나 이것저것 설치할 필요가 없는 상태의 파일을 의미
도커 컨테이너(Docker Container) : 이미지를 실행한 상태로 응용프로그램의 종속성과 함께 응용프로그램 자체를 패키징 Or 캡슐화하여 격리된 공간에서 프로세스를 동작하는 기술
'애플리케이션 보안' 카테고리의 다른 글
칼리리눅스를 통한 도커실습2( 로드밸런싱 ) (0) | 2024.06.01 |
---|---|
Kali Linux를 통한 Docker 실습 (0) | 2024.06.01 |
DIRB, NIKTO, Burp suite란? (0) | 2024.04.04 |