![[Docker] Stateless](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYOuUf%2FbtsJuHI9h8O%2Fo1h8SKr2jAb9QVoyT947fK%2Fimg.webp)
[Docker] StatelessDevOps/Docker2024. 9. 12. 00:02
Table of Contents
Stateless
Stateless(무상태)는 시스템이나 애플리케이션이 특정 요청 간의 상태를 저장하지 않는 구조를 의미한다. 즉, 각 요청은 서로 독립적이며, 요청을 처리하는 데 있어서 이전의 요청이나 세션 정보를 참조하지 않는다.
Docker에서 Stateless는 컨테이너의 성격과 관련이 깊다. Docker 컨테이너는 애플리케이션의 실행 환경을 격리된 상태로 제공하며, Stateless 방식으로 설계된 애플리케이션을 실행하기에 적합하다.
컨테이너의 Stateless 특성
- Docker 컨테이너는 일반적으로 Stateless 특성을 가진다. 즉, 컨테이너를 중지하거나 삭제하면 그 안에서 발생한 모든 변경 사항이 사라진다.
- Stateless 애플리케이션은 상태를 컨테이너 내부에 저장하지 않으므로, Docker의 Stateless 특성에 잘 맞는다. 상태를 저장할 필요가 없기 때문에 컨테이너를 언제든지 삭제하거나 다시 시작할 수 있다.
수평적 확장
- Stateless 애플리케이션은 상태를 저장하지 않기 때문에 여러 개의 컨테이너로 쉽게 수평적 확장이 가능하다. 애플리케이션의 요청이 어느 컨테이너로 가든 상관없기 때문에 로드 밸런서를 통해 자유롭게 트래픽을 분산할 수 있다.
- 반면, Stateful 애플리케이션은 상태를 공유해야 하므로 여러 컨테이너로 확장하는 것이 어려울 수 있다.
상태 저장소와의 분리
- Stateless 애플리케이션은 데이터를 외부 저장소(예: 데이터베이스, 파일 스토리지 등)에 저장하고, 그 상태는 애플리케이션이 아닌 별도의 시스템에서 관리한다. Docker는 이와 같은 Stateless 애플리케이션을 여러 개 실행하여 높은 가용성을 유지할 수 있도록 도와준다.
컨테이너의 stateless 특징
- 컨테이너의 이미지는 한번 지정된 후 변경되지 않음(새로운 설정이나 패치가 필요할 경우 새로운 이미지를 만들어야 함).
- 컨테이너는 언제든지 새로운 컨테이너로 대체할 수 있음.
- 컨테이너는 어떤 호스트에서든 컨테이너를 실행할 수 있음.
- 컨테이너는 동일한 컨테이너를 여러개 쉽게 생성해서 트래픽에 대응할 수 있음.
- 장애가 발생한 경우 새로운 컨테이너를 빠르게 시작할 수 있음.
컨테이너의 Stateless 제약
- 데이터를 영구적으로 저장하기 위해서는 데이터베이스 사용이 필수.
- 상태가 없기 때문에 저장 및 공유가 필요한 데이터는 무조건 외부에 저장해야 함. -> 도커 볼륨 사용
- 사용자 세션 정보나 캐시 같은 정보를 캐시 서버나 쿠키를 통해 관리(파일이나 메모리에 저장하지 않아야 함).
- 동일한 요청은 항상 동일한 결과를 제공해야 함(서버마다 다른 응답을 제공하면 안됨).
- 환경 변수나 구성 파일을 통해 설정을 외부에서 주입할 수 있어야 함.
'DevOps > Docker' 카테고리의 다른 글
[Docker + SpringBoot] 스프링부트 로그 파일 남기기 (1) | 2024.10.11 |
---|---|
[Docker + SpringBoot] Docker와 SpringBoot의 타임존 동기화 (1) | 2024.10.09 |
[Docker] 이미지와 컨테이너 레이어 (0) | 2024.09.09 |
[Docker] MySQL 이미지 빌드 (1) | 2024.09.08 |
[Docker] 이미지 레지스트리 (3) | 2024.09.07 |