CS/네트워크
[네트워크] Stateful vs Stateless
Heeyeon Choi
2024. 10. 30. 13:56
728x90
Stateful(상태 유지)
- 개념: Stateful은 서버가 클라이언트의 상태 정보를 지속적으로 유지하는 방식입니다. 클라이언트와 서버 간의 요청이 연속적인 상호작용을 통해 이루어지며, 서버는 이전 요청에 대한 정보를 기억합니다.
- 특징: 각 요청에 대한 상태 정보를 저장하고, 클라이언트와의 상태가 유지된 상태에서 다음 요청을 처리합니다. 예를 들어, 사용자가 로그인한 상태를 유지하는 것이 Stateful 방식입니다.
- 장점: 상태를 기억하기 때문에 지속적인 트랜잭션 처리가 필요한 작업에 유리합니다.
- 단점: 서버가 각 클라이언트의 상태를 관리해야 하므로 서버 자원 소모가 증가하고, 확장성에 제약이 있습니다.
예시
- FTP: 파일을 전송하는 동안 연결 상태를 유지합니다.
- 온라인 게임: 사용자 세션을 유지하며, 진행 상황을 저장합니다.
- 데이터베이스 연결: 하나의 트랜잭션이 끝날 때까지 연결 상태를 유지하여 요청을 처리합니다.
Stateless(상태 비유지)
- 개념: Stateless는 서버가 클라이언트의 상태를 전혀 저장하지 않고, 모든 요청을 독립적으로 처리하는 방식입니다. 각 요청은 이전 요청과 관계없이 처리되며, 필요한 모든 정보는 요청 자체에 포함되어야 합니다.
- 특징: 요청마다 독립적이기 때문에 서버는 각 요청에 대해 초기화된 상태로 작업을 수행하고, 처리 후에는 아무런 상태 정보를 저장하지 않습니다.
- 장점: 서버가 클라이언트의 상태를 기억할 필요가 없으므로 확장성이 뛰어나고, 서버 자원 사용이 효율적입니다. 클라우드 환경에서 유리합니다.
- 단점: 상태 정보를 매 요청에 포함해야 하므로, 상태 유지를 위해 추가적인 작업이 필요할 수 있습니다.
예시
- HTTP 프로토콜: 기본적으로 Stateless로 동작합니다. 각 요청은 독립적이며, 상태를 유지하지 않습니다.
- RESTful API: REST 아키텍처는 상태 비유지(Stateless) 원칙을 따릅니다. 클라이언트가 필요한 모든 정보를 요청에 포함해야 합니다.
Stateful vs Stateless 차이점
특징StatefulStateless
상태 관리 | 서버가 클라이언트 상태를 유지 | 서버가 클라이언트 상태를 유지하지 않음 |
요청 간 관계 | 이전 요청의 상태를 기억 | 요청 간 독립적 |
확장성 | 확장에 제약이 있을 수 있음 | 확장성 뛰어남 |
자원 소비 | 상태 유지로 인해 자원 소모가 많음 | 자원 소모가 적음 |
사용 예시 | FTP, 온라인 게임, 데이터베이스 | HTTP, RESTful API, 웹 애플리케이션 API |
결론
- Stateful 방식은 상태를 유지하는 게 중요한 트랜잭션이나 사용자 활동이 이어지는 애플리케이션에 적합합니다.
- Stateless 방식은 독립적인 요청 처리로 확장성이 중요하거나 클라우드 기반의 애플리케이션에 적합하며, RESTful API나 웹 애플리케이션 API에 많이 사용됩니다.
728x90