플러팅 AI/Flask Server

# Flask-SocketIO에서 `connected_clients` 상태 관리 문제 해결

Solo.dev 2024. 11. 30. 02:30

# Flask-SocketIO에서 `connected_clients` 상태 관리 문제 해결

## 문제
- Flask-SocketIO에서 클라이언트 연결 상태를 관리하는 `connected_clients`가 업로드 요청 이후 비워지는 문제가 발생.
- 멀티프로세스 환경에서 상태 동기화가 이루어지지 않아 발생한 것으로 추정.

## 원인 분석
1. **멀티프로세스 환경**: `ProcessPoolExecutor`로 인해 각 워커가 독립된 메모리 공간을 사용.
3. **상태 공유 문제**: 전역 상태(`connected_clients`)가 워커 간 동기화되지 않음.
로 추정 


## 해결 방안
### 1. 멀티스레드 전환
- `async_mode='threading'`으로 설정하여 단일 프로세스에서 상태를 공유.(이 방법은 안됨 멀티 프로세스 사용해야함) 

### 2. Redis 통합
- Flask-SocketIO와 Redis를 연동해 상태 동기화. ( 워커 1로 테스트 해보고 안되면 Redis 사용하자) 

### 3. 상태 관리 개선
- `connected_clients`를 Redis에 저장해 모든 워커에서 접근 가능하도록 수정.

## 결론
- 멀티프로세스 환경에서 상태 동기화 문제를 해결하려면 Redis를 사용하는 것이 권장.
- 단순한 상태 관리가 필요하면 멀티스레드 전환으로 해결 가능.