자유게시판

제목 메일폼에 관한 구성질문...
글쓴이 헛발이 작성시각 2010/01/15 09:17:36
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 14685   RSS
초보라서 개념을 잘 몰라 질문합니다.. 제가 생각하는 방식이 잘못되지는 않았는지 확인 하고 싶은데요...
이런 방식으로 만들어 보려고 합니다.

1. 회원테이블에 약 10,000명의 회원이 있습니다.
2. 관리자 화면에서 전체메일 보내기 버튼을 클릭하여 메일보내는 화면으로 이동합니다.
3. 제목과 내용을 작성하고 전송버튼을 클릭합니다.
4. 그러면 mail테이블에 제목과 내용을 저장하고 mail테이블의 키를 이용하여 send테이블에 10,000명의 레코드를 insert합니다.
5. 그리고 사용자 화면에는 전송완료라고 보여줍니다.

서버쪽에선 cron을 이용하여 메일보내는 페이지를 자동실행 합니다. (1분에 한번씩 자동실행)
6. send테이블에 데이터가 남아 있으면 데이터중 100건을 가져와 루프를 돕니다.
7. 루프를 돌면서 mail()함수를 이용하여 한명에게 메일을 보내고 보낸사람의 레코드를 삭제합니다.

이런방식으로 메일 보내는 것을 만들려고 하는데요.. 올바른가요? 전문 프로그래머님들께 여쭤봅니다..
 다음글 웹메이커3 운영자 데모 (11)
 이전글 [문제] include와 $this->load-&... (4)

댓글

변종원(웅파) / 2010/01/15 11:09:30 / 추천 0
db부하를 줄 수 있을 것 같습니다.
만건이라면 문제가 안되겠지만 더 커질 경우
1분에 한번씩 100건 가져오는 select 그리고 for문 돌면서 delete 100번

그리고 만건 보내는데 100분이 소요되겠고 전체메일 발송하고 100분도 안되서 또 발송을 한다면(가정)
db에 쌓여서 또 100분 동안 위의 로직을 계속 반복하겠죠.

보내는 시간대가 문제가 될 것 같습니다.
전체메일은 cron에서 1분 단위로 체크하는 것이 아니라 사람들이 잘 접속하지 않는 새벽시간에 한번 체크해서 보내는 방식으로 하고 전체메일이 아닌 검색후 몇몇에게만, 혹은 특정 등급에게만 보내는 것은 1분단위로 체크해서 보내는 방식으로 이분화 하면 부하를 줄일 수 있을 것 같네요.
헛발이 / 2010/01/15 11:29:08 / 추천 0
저도 그렇게 생각했어요... 부하가 걸릴것 같다는... ㅡ.ㅡ;;
그러면 이렇게 하면 되나요? 기초지식이 없어서리.. ㅡ.ㅡ;

1. 회원테이블에 약 10,000명의 회원이 있습니다.
2. 관리자 화면에서 전체메일 보내기 버튼을 클릭하여 메일보내는 화면으로 이동합니다.
3. 제목과 내용을 작성하고 전송버튼을 클릭합니다.
4. mail테이블에 메일의 제목과 내용을 저장합니다.
5. 그리고 사용자 화면에는 전송완료라고 보여줍니다.

서버쪽에서 cron에서 새벽1시에 1번 실행으로 설정해 두고..
6. mail테이블에 메일내용을 가져옵니다.
7. 회원테이블의 회원 10,000명의 데이터를 가져옵니다.
8. 10,000번 루프 돌면서 mail()을 이용하여 한명씩 보냅니다.
9. 완료되면 mail테이블에 메일발송이 완료 되었다고 체크 합니다.
10. 끝

이렇게 해야 하는건가요?
메일 보내는것이 이렇게 단순하다고 생각하는건 아니지만.. 전체적은 흐름을 알고 싶습니다..
변종원(웅파) / 2010/01/15 11:44:09 / 추천 0
네. 보편적으로 저도 그렇게 작업을 했습니다. 회원수 2만명.. 6만명 사이트 그리고 20만명짜리 db를 보낼때도.. ^^
헛발이 / 2010/01/15 11:51:36 / 추천 0
네 잘 알겠습니다.. 마지막 질문을 드리면요...
보통 우리가 클릭해서 페이지를 넘어 갔을때 넘어간 페이지에 10,000번의 루프를 돌면서 작업하는것이 있다면 다음페이지로 넘어가지 못하고 부라우져가 섰다가.. 완료된 다음에 부라우져 페이지가 넘어가잖아요? 멈춤현상이라고 해야 하나요?
그것이 cron을 이용하여 10,000번의 루프를도는 페이지일 경우에 별 문제는 없나요 ? 또는 10,000번 실행하다가 타임아웃 걸리거나 그렇친 않나요?
그리고 루프돌면서 10,000건을 보내면 스펨이나 그렇게 걸리거나 그렇친 않은지 모르겠어요... 그것도 괜찮은건지...
변종원(웅파) / 2010/01/15 12:47:02 / 추천 0
cron으로 돌리게 되면 쉘에서
php -q /home/serv/mail_send.php 형태로 사용하게 됩니다.
웹에서 돌리는 것이 아니라 쉘에서 실행하는 것이고 백그라운드로 돌리면 되겠죠.
php4 초기버전의 경우(정확한 연대를 기억이 안나는데) 쉘용 php를 따로 컴파일 했어야 했는데
요즘 배포판은 쉘용으로 같이 포함되어 있어서 그냥 사용하기만 하면 됩니다.
변종원(웅파) / 2010/01/15 12:50:12 / 추천 0
한국의 경우 화이트도메인(https://www.kisarbl.or.kr/)이라는 것이 있습니다. 거기에 등록하게 되면 각 포탈이나 그 화이트도메인을 참고하는 사이트에서 스팸 발신처로 인식을 하지 않습니다. (물론 스팸을 보내다 걸리면 블랙리스트에 올라가겠지만요) 일본에서 그런 역할을 하는 사이트가 있는지 찾아보시고 도메인과 ip를 등록하시면 될겁니다.