[CORE-008][중급] 가상머신과 컨테이너 알맞게 고르기 > IT 기술 공유

본문 바로가기
사이트 내 전체검색

IT 기술 공유

[CORE-008][중급] 가상머신과 컨테이너 알맞게 고르기

페이지 정보

profile_image
작성자 기술팀장
댓글 0건 조회 155회 작성일 26-09-03 02:33

본문

[이번 수업]
한 컴퓨터에서 여러 실행 환경을 만드는 가상화, 가상머신(VM), 컨테이너를 비교합니다. 이름이 비슷해도 무엇을 나누고 공유하는지가 다릅니다.

[선수지식]
CORE-003의 CPU·메모리·저장장치, CORE-006의 프로세스, CORE-007의 운영체제와 애플리케이션 경계를 알아야 합니다.

[학습목표]
1. 가상머신과 컨테이너의 격리 구조를 설명한다.
2. 이미지·컨테이너·볼륨의 역할을 구분한다.
3. 업무 요구에 맞는 실행 환경을 고른다.

[핵심개념]
가상화(Virtualization)는 물리 자원을 논리적인 여러 환경으로 나누는 기술입니다. 하이퍼바이저(Hypervisor)는 CPU·메모리·저장장치 같은 가상 하드웨어를 제공하고, 가상머신은 그 위에 게스트 운영체제와 애플리케이션을 실행합니다. VM마다 커널이 있어 서로 다른 운영체제를 함께 쓰거나 더 강한 격리 경계가 필요할 때 알맞지만, 운영체제만큼의 저장 공간·메모리와 시작 시간이 필요합니다.

컨테이너는 애플리케이션과 필요한 파일을 격리된 프로세스로 실행합니다. 같은 호스트의 컨테이너는 호스트 운영체제 커널을 공유하므로 VM보다 보통 가볍고 빠르게 시작합니다. 따라서 컨테이너는 작은 VM이 아닙니다. Windows·macOS의 Docker Desktop에서 Linux 컨테이너를 실행할 때는 내부 Linux VM이 커널을 제공합니다.

이미지(Image)는 컨테이너를 만드는 읽기 전용 틀이며 파일·라이브러리·설정을 계층으로 담습니다. 컨테이너는 이미지의 실행 인스턴스입니다. 컨테이너를 지우면 기록 가능한 계층의 변경도 사라질 수 있으므로 보존할 데이터는 볼륨(Volume, 실행 수명과 분리된 저장소)에 둡니다. 레지스트리는 이미지를 저장하고 배포합니다.

선택은 유행보다 경계를 기준으로 합니다. 다른 커널이나 운영체제가 필요하고 격리 요구가 높으면 VM을 우선 검토합니다. 같은 커널에서 동일한 환경을 빠르게 배포·확장하려면 컨테이너가 유리합니다. 실제 서비스에서는 VM 안에서 여러 컨테이너를 실행해 두 장점을 함께 쓰기도 합니다.

[따라하기]
다음은 요구사항을 선택 기준으로 바꾸는 작은 예제입니다. `choose_runtime.py`로 저장합니다.

```python
from dataclasses import dataclass

@dataclass(frozen=True)
class Workload:
    name: str
    different_kernel: bool
    high_isolation: bool
    fast_scale: bool

def choose(workload):
    if workload.different_kernel or workload.high_isolation:
        return "가상머신 우선 검토"
    if workload.fast_scale:
        return "컨테이너 우선 검토"
    return "두 방식 모두 비교"

items = [
    Workload("다른 운영체제 시험", True, False, False),
    Workload("동일 OS 웹 서비스", False, False, True),
    Workload("일반 개발 환경", False, False, False),
]

for item in items:
    print(f"{item.name}: {choose(item)}")
```

Windows PowerShell에서는 `py choose_runtime.py`, macOS·Linux에서는 `python3 choose_runtime.py`를 실행합니다. 예상 결과입니다.

```text
다른 운영체제 시험: 가상머신 우선 검토
동일 OS 웹 서비스: 컨테이너 우선 검토
일반 개발 환경: 두 방식 모두 비교
```

이 결과는 시작점입니다. 실제 선택에는 비용, 성능, 운영 도구, 팀 경험, 규정도 함께 검토합니다.

[흔한 실수]
- 컨테이너마다 독립된 커널이 있다고 생각한다.
- 이미지를 실행 중인 컨테이너와 같은 것으로 본다.
- 컨테이너 내부에만 중요한 데이터를 저장한다.
- 개발에서 동작한 이미지를 검증 없이 운영에 배포한다.
- VM이나 컨테이너가 완전한 보안 경계라고 믿는다.

[보안 주의]
격리는 위험을 줄이지만 취약점을 없애지 않습니다. 하이퍼바이저·호스트·게스트·런타임·이미지를 업데이트하고 관리 인터페이스 접근을 제한합니다. 컨테이너는 비루트 사용자, 읽기 전용 파일 시스템, 필요한 기능과 자원 제한을 적용합니다. 비밀값을 이미지에 넣거나 호스트 소켓·넓은 디렉터리를 마운트하지 않습니다. 출처와 다이제스트를 확인한 최소 이미지를 사용하고 취약점을 검사합니다. 실습은 본인 소유 로컬 환경에서만 합니다.

[직접 해볼 과제]
위 목록에 `신뢰하지 않는 파일 분석`과 `빠른 테스트 작업 20개`를 추가하세요. 선택 결과를 확인하고 격리·속도·비용 중 어떤 기준이 결정에 영향을 주었는지 한 줄씩 씁니다.

[확인문제]
1. VM과 컨테이너가 운영체제 커널을 사용하는 방식은 어떻게 다른가요?
2. 컨테이너 삭제 뒤에도 남아야 하는 데이터는 어디에 두나요?
3. VM 안에서 컨테이너를 함께 사용하는 이유는 무엇인가요?

[다음 학습]
다음 CS-008에서는 재귀와 분할정복을 배웁니다.

[공식 참고 자료]
- Docker 개요: https://docs.docker.com/get-started/docker-overview/
- OCI 런타임 표준: https://specs.opencontainers.org/runtime-spec/
- NIST 가상화 보안 지침: https://csrc.nist.gov/pubs/sp/800/125/final
- NIST 컨테이너 보안 지침: https://csrc.nist.gov/pubs/sp/800/190/final

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

접속자집계

오늘
1,720
어제
5,103
최대
16,772
전체
772,774
Copyright © 소유하신 도메인. All rights reserved.