Infra & AWS

[Infra] Container 개념

Accept 2024. 1. 27. 20:37

 

### 예시 : 웹 애플리케이션 호스팅

 

#### 컨테이너 설정 :

**Node.js 앱 1** : 회원가입, 사용자 인증을 관리하는 웹 서비스이며, 사용자 데이터를 관리하는 데이터베이스와 통신한다.

**Node.js 앱 2** : 앱 1과 독립적으로 작동하는 상태 관리 및 메시징 서비스를 제공할 수 있다. 예를 들어, 실시간으로 사용자 간 메시지를 교환하는 기능을 담당할 수 있다.

 

#### 실행 흐름 :

1. **프로세스 격리** : 앱 1과 앱 2는 각각 독립적인 프로세스로 실행된다. 이는 두 애플리케이션이 서로의 작업에 영향을 주지 않는다는 것을 의미한다.

 

2. **리눅스 커널** : 컨테이너는 호스트 시스템의 리눅스 커널과 동일한 커널을 공유하지만, 각기 다른 네임스페이스와 cgroups를 사용하여 격리된다. 이것은 컨테이너가 필요한 자원(예: CPU, 메모리)에 접근할 수 있게 하면서도 서로 충돌하지 않도록 한다.

 

3. **하드웨어 자원 공유** : 모든 컨테이너는 같은 하드웨어 자원을 공유한다. 이는 실제 물리적 서버나 클라우드 기반의 가상 서버일 수 있으며, CPU, 메모리, 네트워크 인터페이스 등의 자원을 컨테이너 간에 분배한다.

 

4. **파일 시스템(저장소)**: 각 컨테이너는 자체 파일 시스템을 가진다. 이는 앱 1과 앱 2가 각각 자신의 소스 코드와 종속성(dependencies)을 가지고 있음을 의미한다. 컨테이너화된 애플리케이션은 그 자체로 완전하며, 호스트 시스템의 다른 부분과는 독립적으로 실행된다.

 

#### 실제 작동 : 사용자가 웹 브라우저를 통해 앱 1에 회원가입을 요청하면, 앱 1의 컨테이너는 이를 처리하고 데이터베이스에 사용자 정보를 저장한다. 동시에 다른 사용자가 앱 2를 통해 메시지를 보낼 수 있으며, 앱 2는 이를 즉시 다른 사용자에게 전달한다. 이 모든 과정은 동일한 서버에서 동시에 일어나지만, 각 애플리케이션은 서로 격리되어 있어 하나의 애플리케이션이 다른 애플리케이션의 작동에 지장을 주지 않는다.

 

이러한 구조 덕분에 개발자는 애플리케이션을 빠르게 배포하고, 필요에 따라 확장하거나 업데이트할 수 있다. 컨테이너 기술은 이처럼 복잡한 웹 서비스를 관리하고 운영하는 데 큰 유연성과 효율성을 제공한다.