컨테이너의 상태 (State)
01 ) 상태없음 stateless
- 이미지
읽기 전용 레이어
- 컨테이너
이미지를 컨테이너로 실행시키면 읽기쓰기 레이어인 컨테이너 레이어가 추가
- 컨테이너가 실행되면 모든 변경사항 → 컨테이너 레이어에 쌓이게 됨
- 컨테이너 삭제 → 레이어도 함께 삭제됨
⇒ 2가지 내용이 컨테이너의 상태없음 (stateless)을 의미함 ; 상태를 가지지 않는다
- 컨테이너의 상태없음 (stateless)
- 빠르고 쉽게 개수를 증가시킬 수 있음
- 다른 환경에서도 빠르게 배포할 수 있음
- 컨테니어 자체는 상태를 가지지 않지만, 이미지에 모든 상태가 기록됨
= 모든 변경 사항은 새로운 버전의 이미지로 만들어야 함

cf ) 상태를 가진다
개수가 많아질 수록
- 컨테이너가 실행되면 모든 변경사항 → 컨테이너 레이어에 쌓이게 됨
- 컨테이너 삭제 → 레이어도 함께 삭제됨
이러한 상태가 많아져서 하나하나의 경우의 수가 늘어남
즉 하나하나를 따로 관리해야할게 많아지고
서버에 변경사항을 각각 따로 적용한다 = 서버 한대 한대마다 유일한 상태를 가진다
02 ) pat & cattle
- pat → 전통적인 서버 관리 방법론
- 서버가 문제가 생김 or 서버가 종료되는 것 = 서비스 장애
- 서버의 상태를 주시하고 항상 관리해야 함 // 상태라는 것은 주로 OS나 라이브러리의 버전, 실행 중인 소프트웨어의 버전을 의미
- cattle → 컨테이너를 활용한 서버 관리 방법 = 상태가 없음
- 서버를 일종의 소모품으로 생각함 = 서버가 문제가 생김 or 서버가 종료되는 것을 가능하다 생각
- 서버를 빠르게 교체할 수 있음
- 서버의 상태를 최대한 제거함
| 기준 | Pet 방식 | Cattle 방식 |
| 방식 | 전통적, VM 방식 | 컨테이너 방식 |
| 이름 | 고유한 이름을 가짐 | 랜덤한 일련번호 생성 |
| 문제 발생 시 | 문제 해결 또는 복구 시도 | 삭제 후 새로 생성 |
| 상태 | 상태가 내부에 저장 | 상태 없음, 필요 시 외부 마운트 |
| 교체 | 교체가 어려움 | 쉽게 교체 |
| 적용 사례 | Monolithic, OnPremise | MSA, WEBAPP |
03 ) 컨테이너의 stateless 특징
* 컨테이너의 이미지는 한번 지정된 후 변경되지 않는다 -> 새로운 설정이나 패치가 필요할 경우 새로운 이미지를 만들어야 함
* 컨테이너는 언제든지 새로운 컨테이너로 대체할 수 있다
* 컨테이너는 어떤 호스트에서든 컨테이너를 실행할 수 있다
* 컨테이너는 동일한 컨테이너를 여러 개 쉽게 생성해서 트래픽에 대응할 수 있다
* 장애가 발생할 경우 새로운 컨테이너를 빠르게 시작할 수 있다
04 ) 컨테이너의 stateless 제약
* 상태가 없기 때문에 저장 및 공유가 필요한 데이터는 데이터베이스 서버 사용을 하여 외부에 저장해야 한다
* 사용자 세션 정보나 캐시 같은 정보를 캐시 서버나 쿠키를 통해 관리한다 -> 파일 or 메모리에 저장하지 x
* 동일한 요청은 항상 동일한 결과를 제공해야 한다