전체 목록
운영체제Hard#206

컨테이너에서 namespace와 cgroup은 어떤 역할을 하나요?

#운영체제#Container#Namespace#cgroup

답변 포인트

격리와 자원 제한의 분리를 기준으로 정의, 장점, 한계, 예시를 함께 설명해보세요.

정답 및 해설

빠른 요약

namespace는 프로세스가 보는 PID, 네트워크, 파일시스템 등을 격리하고, cgroup은 CPU와 메모리 같은 자원 사용량을 제한하고 측정합니다. 실무 예시: 운영체제 이슈는 재현이 어려운 경우가 많아 실행 흐름과 자원 소유 관계를 그림처럼 정리하면 원인 분석이 쉬워집니다.

컨테이너는 가상 머신처럼 별도 커널을 띄우는 것이 아니라, 같은 커널 위에서 프로세스를 격리하고 자원 사용량을 제한합니다. 이때 핵심이 namespacecgroup입니다.

namespace: 무엇을 볼 수 있는가

Namespace는 프로세스가 바라보는 시스템 자원의 “시야”를 분리합니다. 같은 호스트에서 실행되더라도 컨테이너 안에서는 독립된 PID, 네트워크, 파일 시스템처럼 보일 수 있습니다.

namespace격리 대상예시
PID프로세스 ID 공간컨테이너 안의 앱이 PID 1로 보임
NET네트워크 인터페이스/라우팅컨테이너별 IP, 포트
MNT마운트 포인트컨테이너별 root filesystem
UTShostname/domain컨테이너 hostname
IPC공유 메모리/세마포어프로세스 간 통신 격리
USERUID/GID 매핑컨테이너 root와 호스트 root 분리
Bash
docker run --rm alpine sh -c 'hostname && ps aux'

컨테이너 안에서 보는 프로세스 목록은 호스트 전체가 아니라 해당 PID namespace 기준입니다.

cgroup: 얼마나 쓸 수 있는가

Cgroup(control group)은 CPU, 메모리, I/O, pids 같은 자원 사용량을 제한하고 측정합니다.

Bash
docker run --memory=256m --cpus=0.5 nginx

이 설정은 nginx 컨테이너가 메모리 256MB와 CPU 0.5개 정도의 quota 안에서 동작하도록 제한합니다. 제한을 넘으면 CPU throttling이 발생하거나 OOM kill이 날 수 있습니다.

둘의 차이

Text
namespace =    
cgroup    =      

예를 들어 컨테이너는 독립된 네트워크 인터페이스를 보는 동시에(namespace), CPU는 1 core 이하로 제한될 수 있습니다(cgroup).

실무에서 주의할 점

  • 컨테이너 안에서 root여도 호스트 root와 같다고 가정하면 위험합니다. USER namespace, capability, seccomp까지 함께 봐야 합니다.
  • 메모리 제한이 낮으면 JVM/Node.js가 호스트 메모리를 기준으로 heap을 잡아 OOM이 날 수 있습니다.
  • CPU quota가 낮으면 평균 CPU 사용률이 낮아 보여도 latency가 튈 수 있습니다.
  • PID 1 프로세스는 signal 처리와 좀비 프로세스 reap 책임이 있으므로 tini 같은 init 사용을 고려합니다.

면접 답변 포인트

“namespace는 컨테이너가 보는 시스템 자원을 격리하고, cgroup은 CPU/메모리 같은 자원 사용량을 제한·계측합니다. 컨테이너는 이 둘을 조합해 프로세스 격리와 리소스 제어를 구현합니다.”라고 정리하면 됩니다.

관련 질문

같은 카테고리/태그 기준