회원메일발송 진행 중에 사이트 이용 불가 현상

회원메일발송 진행 중에 사이트 이용 불가 현상

QA

회원메일발송 진행 중에 사이트 이용 불가 현상

답변 3

본문

관리자 모드에서 회원메일발송 기능으로 50명 정도 회원에게 메일을 보내려고 합니다.

메일은 정상적으로 발송되는 걸 확인했습니다.

 

그런데 메일이 발송되는 동안 사이트 이용이 안 되는 문제가 있습니다. 계속 로딩 상태로 나오고 사이트가 안안 뜨네요. 메일 발송이 완료된 후에야 이용이 가능해집니다.

 

혹시 메일 발송하는 동안 사이트 이용 가능한 방법이 있을까요?

 

이 질문에 댓글 쓰기 :

답변 3

메일 발송 작업이 동기 처리되어 사이트 전체의 응답이 지연되는 현상으로 보입니다.

이는 메일 발송 처리 동안 서버의 주 실행 스레드가 해당 작업에 묶여 잇어서,

다른 사용자 요청을 처리하지 못하기 때문에 그러는 것입니다.

 

개인적으론, 비동기 처리나 Ajax를 통한 백그라운드 작업 방식이어야 한다고 생각됩니다.

50명 정도가 문제가 아니라 추후 발송 건수가 늘어날 가능성을 고려하신다면,

메일 발송 로직 분리 사용이 전체의 안정/확장성을 높이는 데 필요하실 것입니다.

 

>> 따라서 해당 환경과 미래의 확장 가능성을 고려하시여 적절한 방안을 선택하시거나,

필요에 따라 여러 가지 방법을 조합하여 사용하실 것을 추천드립니다.

*비동기 처리 =

메일 발송 로직을 비동기 방식으로 전환하는 것이 가장 효과적입니다.

예로, PHP에서는 메일 발송 스크립트를 별도의 CLI 프로세스로 실행하거나,

메시지 큐(RabbitMQ, Gearman, Beanstalkd, ..)를 이용해

메일 발송 작업을 백그라운드에서 처리하도록 구성할 수 있습니다.

*Ajax를 통한 호출 분리 =

관리자 페이지에서 메일 발송 기능을 Ajax 요청으로 처리하여,

메일 발송 요청 후 즉시 페이지를 반환하고,

서버에서는 별도의 비동기 작업으로 메일 발송을 진행하는 방법도 있습니다. 

*크론 작업 스케줄링 =

만약 정기적으로 대량의 메일을 발송해야 하는 상황이라면,

발송 작업을 데이터베이스나 큐에 등록한 후, 크론을 통해 발송하도록 할 수도 있습니다. 

*서버 및 PHP 설정 최적화 =

발송이 길어질 경우 PHP의 max_execution_time이나 메모리 제한 설정 문제가 있으니,

이런 설정 조정 등의, 장시간 작업에 대비한 서버 설정을 염두하시는 것도 한 방법입니다.

 

※ 요약하자면~
일반적인 서버 환경에서는 단 50명의 회원에게 메일을 발송하는 과정에서

물리적인 요인(CPU, 메모리, 네트워크 대역폭, ..)으로

사이트 전체가 이용 불가능해지는 경우는 극히 드뭅니다.

대부분의 경우, 사이트 이용 불능 현상은 메일 발송 로직을 동기 처리하여

웹 서버의 메인 프로세스가 블로킹되는 소프트웨어적 설계가 문제입니다.

서버 사양을 더 높이시는게 방법일듯합니다.

결국 메모리 부족이나 서버 사양이 안좋을때 해당 부분이 발생합니다.

메일 발송과정중에 프로세스 부분이 얼마나 사용되는지 확인해 보셔야 할듯 한데

환경에 CPU를 과다하게 사용하게 되면 당연히 사이트는 정상적으로 작동을 안할수 밖에 없습니다.

그 부분을 체크해서 사양을 높이시던지 하셔서 서비스 하시는게 효율적일듯 보여집니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
filter #php ×
전체 15,825
© SIRSOFT
현재 페이지 제일 처음으로