대부분의 데몬에 원격에서 연결하는 것은 상당한 부하와 시간을 소비하게 됩니다. DB 의 경우에도 보통 Connection Pool 을 만들어서 커넥션 시간을 줄이고 있습니다.

지금 만들고 있는 웹메일에서 IMAP 서버에 접근할때에도 같은 문제가 발생하고 있습니다. 한번 연결할때마다 약 2초의 시간이 걸립니다. 그래서 페이지를 이동하거나, 메일 내용을 보려고 할때마다 2초 이상의 시간을 기다려야만 했습니다. PHP에서 개발하고 있어서 다른 페이지에서 IMAP 의 연결을 유지할 수 있는 방법이 없었습니다. SESSION 변수를 이용하면 될 듯 하였으나, 테스트 실패했습니다.혹시나 하고 계속 찾아보았지만 PHP에서 해결할 수 있는 방법은 없었습니다.

그렇지만, 방법이 아주 없으면 글을 적지도 않았겠지요. IMAP 연결을 유지하려면 IMAP Proxy 를 사용하면 됩니다. 데비안 리눅스의 경우, apt-get install imapproxy 라고 입력하면 바로 설치되어 실행까지 됩니다. 기본적으로 로컬에 IMAP 이 있다고 가정하고 있으며, 1143 포트를 열고 있습니다. 개발자는 imap_open 함수를 사용할때 localhost:1143 으로 접근하면 됩니다. PHP 뿐만 아니라 다른 환경에서도 적용할 수 있어서 괜찮은 방법인 것 같습니다.

이렇게 구현을 하고 보니, 페이지 이동시 2~3 초 걸리던 것이, 거의 즉시 화면이 전환되었습니다.
상용 웹메일에서는 이것을 어떻게 해결하고 있는지 궁금하군요.

웹메일서버를 만들고 있습니다. OS는 Debian Linux 기반에 Postfix, Dovecot, MySQL 등을 사용하고 있습니다. 웹은 PHP로 개발중입니다. MySQL 로 도메인과 계정 연동도 끝났고, 스팸 및 바이러스도 걸러집니다. 남은 부분은 PHP로 웹UI 를 개발하는 것입니다.

간단하게 메일 목록을 가져오는 부분을 구현하였고, 메시지를 보여주는 부분을 구현중입니다. 메일목록을 가져오기 위해서 imap_fetch_overview 함수를 사용하고 있는데, 당장은 목록을 보여주는데 문제는 없지만, 더 많은 정보를 보여주고자 할때, 정보 부족으로 보여줄수 없게 됩니다. 예를 들어서 보낸사람의 이메일 주소를 표시하고 싶어도 그렇게 할 수가 없습니다. 그래서, 더 많은 정보를 가져올 수 있는 함수를 찾아보니, imap_headerinfo 가 있더군요.

일단, 메시지 보여주는 부분을 구현하고, 목록 부분도 imap_headerinfo 를 이용해서 다시 구현하려고 합니다. 메시지를 보여주는 부분에서도 처리해야 할 일들이 많군요. 처음에 개발하려고 할때는 만만하게 봤었는데, 뒤져봐야할 문서들이 많습니다. ^^ 한큐에 설치할 수 있는 설치프로그램까지 만들었습니다. 어느정도 완성되려면 1,2달 정도 걸릴 듯 합니다.

+ Recent posts