Search

Linux Namespace

Linux Namespace
리눅스 네임스페이스는 프로세스를 실행할 때 시스템의 리소스를 분리해서 실행할 수 있도록 도와주는 기능입니다.
한 시스템의 프로세스들은 기본적으로 시스템의 리소스들을 공유해서 실행됩니다. 이를 단일 네임스페이스라고 생각해볼 수 있습니다.
실제로 리눅스에서는 1번 프로세스(init)에 할당되어있는 네임스페이스들을 자식 프로세스들이 모두 공유해서 사용하는 구조로 이루어져있습니다.

리눅스에서 지원하는 네임스페이스 종류

Cgroup 네임스페이스(cgorup)
IPC 네임스페이스(ipc)
네트워크 네임스페이스(network)
마운트 네임스페이스(mnt)
PID 네임스페이스(pid)
UTS 네임스페이스(user)
사용자 네임스페이스(uts)
시간 네임스페이스(time)

Linux Namespace 사용하는 이유

1. 프로세스 격리

여러 프로세스가 각자 다른 namespace에 존재하면, 서로의 자원에 영향을 미치지 않고 독립적으로 동작할 수 있습니다.
이는 보안, 격리된 실행 환경을 만드는 데 유용합니다. 예를 들어, 컨테이너화된 애플리케이션은 다른 애플리케이션과 리소스를 공유하지 않으며 독립적으로 실행됩니다.

2. 리소스 분리

각 namespace는 자원(네트워크, 파일 시스템 등)을 격리하여, 하나의 시스템 내에서 여러 환경을 독립적으로 운영할 수 있게 해줍니다.
예를 들어, 컨테이너각각의 네트워크, 파일 시스템, 심지어 IP 주소도 독립적으로 가질 수 있어 다른 컨테이너와 완전 격리된 환경을 유지할 수 있습니다.

3. 보안성 강화

각 namespace는 자원을 격리하므로, 한 프로세스가 다른 프로세스의 자원에 접근할 수 없게 합니다.
컨테이너 기반 시스템에서는 격리된 환경을 만들어 외부 공격이나 악성 프로세스가 시스템 전반에 영향을 미치지 않도록 보호합니다.

4. 개발 및 배포 환경의 유연성

Linux Namespace는 컨테이너화된 환경(예: Docker, Kubernetes)에서 필수적인 기능입니다.
개발자들은 각기 다른 환경에서의 동작을 격리하여 애플리케이션을 개발하고 테스트할 수 있습니다.
다양한 운영 체제 환경을 하나의 호스트에서 구현할 수 있어, 개발 환경과 배포 환경의 일관성을 유지할 수 있습니다.