AI 이미지를 생성할 때 AI 서버의 생성 시간이 오래걸리게 되어, 클라이언트 요청을 비동기로 끊었다.
이로 인해 AI 이미지가 생성되었을 때 서버 쪽에서 클라이언트로 이미지를 전송해주어야 했다.
서버 상황
- 추후 업그레이드 되겠지만 현재
t2.micro 를 쓰고 있고,이로 인해 부하가 크면 안된다.
- MVC를 사용하고 있다.
- AI 이미지 생성은 서비스의 메인 기능이므로 부하가 클 예정이다.
고려한 방법
- Polling
- 장점 : 간단하다.
- 단점 : 계속 요청이 들어오므로 부하가 크다.
- Long Polling
- 장점 : Polling보다 부하가 적다.
- 단점 : 변경이 없을 시 요청을 잡고 있으므로 스레드 낭비 문제가 발생한다.
- Web Socket
- 장점 : 양방향 통신이다.
- 단점 : 양방향은 필요없다.
- SSE
- 장점 : 단방향으로 연결이 지속되어, 서버 쪽에서 이벤트를 알려줄 수 있다.
- 단점 : Web Socket, SSE 둘 다 스레드 고갈을 유발할 수 있다.
Polling 방식은 부하를 야기하므로,
SSE를 사용해야 했다.
또한 단방향이므로 더 이상 고민할 필요가 없었다.
가장 문제는 SSE를 사용했을 때 스레드 고갈의 문제였으나,
Web Flux, 비동기 스레드, Java 21 Virtual Thread 방식으로 해결할 수 있다 판단해, 우선적으로 적용해봤다.