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)에서 필수적인 기능입니다.
•
개발자들은 각기 다른 환경에서의 동작을 격리하여 애플리케이션을 개발하고 테스트할 수 있습니다.
•
다양한 운영 체제 환경을 하나의 호스트에서 구현할 수 있어, 개발 환경과 배포 환경의 일관성을 유지할 수 있습니다.


