기술 · 출처 기반 답변

SMTP 서버란? 정의와 기술 개요

SMTP 서버는 Simple Mail Transfer Protocol을 구현해 클라이언트와 다른 서버 사이에서 발신 이메일 메시지를 보내고, 받고, 릴레이하는 애플리케이션입니다. 디지털 우체국처럼 발신자로부터 메시지를 받아 인터넷을 통해 수신자의 메일 서버로 라우팅합니다.

동작 원리

이 과정은 메일 사용자 에이전트(MUA)가 SMTP 서버에 요청을 보내면서 시작됩니다. 서버는 HELO 또는 EHLO로 연결을 맺고, MAIL FROM으로 발신자를 식별하며, RCPT TO로 수신자를 지정하는 일련의 명령을 사용합니다. DATA 명령이 실행되면 서버는 메시지 본문과 헤더를 전송합니다. 수신자가 다른 도메인에 있으면 서버는 DNS에서 MX 레코드를 조회해 대상 서버를 찾고 그에 맞게 메시지를 릴레이합니다.

발신자에게 중요한 이유

SMTP 서버는 이메일이 올바르게 라우팅되고 수신 시스템에서 수락되도록 하는 데 매우 중요합니다. 서버를 올바르게 설정하고 SPF, DKIM 같은 인증 레코드를 함께 구성하면 메시지가 스팸으로 분류되는 것을 막을 수 있습니다. 전용 SMTP 릴레이 서비스를 사용하면 개발자는 기본 회사 메일 서버의 평판을 위험에 빠뜨리지 않고 대량의 트랜잭션 메일을 처리할 수 있습니다.

흔한 운영 실수

자주 발생하는 오류는 연결 유형에 맞지 않는 포트를 사용하는 것입니다. 포트 25는 스팸 방지를 위해 ISP가 차단하는 경우가 많고, 제출의 표준은 포트 587입니다. 또 다른 흔한 실패는 STARTTLS나 암시적 TLS를 적용하지 않아 자격 증명과 메시지 내용이 평문으로 노출되는 것입니다. 개발자는 SMTP 자격 증명을 애플리케이션 소스에 하드코딩하지 않고 환경 변수에 저장해야 합니다.

구체적인 구현 예시

Node.js 환경에서 개발자는 Nodemailer 같은 라이브러리로 SMTP 서버에 연결할 수 있습니다. smtp.sendgrid.net 같은 호스트 주소, 포트 587, 보안 인증 토큰을 제공합니다. 그러면 애플리케이션이 이메일 객체를 서버에 전달하고, 서버가 최종 목적지까지의 복잡한 라우팅과 전달을 처리합니다. SendHQ는 https://sendhq.cc/tools에서 이메일 인프라 관리를 돕는 무료 도구를 제공합니다.

릴레이와 제출의 차이

SMTP 서버는 보통 두 가지 모드로 동작합니다. 제출(submission) 서버는 최종 사용자로부터 메일을 받으며 발신자 신원을 확인하기 위해 인증을 수행합니다. 릴레이 서버는 네트워크의 서로 다른 SMTP 서버 사이에서 메일을 옮깁니다. 인증 없이 모든 출처의 메일을 받는 릴레이 서버를 오픈 릴레이라고 하며, 심각한 보안 위험이라 최신 메일 필터에서 거의 항상 차단됩니다.

팀에서 자주 묻는 질문

SMTP와 IMAP은 무엇이 다른가요?

SMTP는 발신 메일을 보내거나 릴레이하는 데만 사용됩니다. IMAP과 POP3는 서버의 메일함에서 메시지를 가져오고 관리하는 데 사용됩니다.

안전하게 발송하려면 어떤 SMTP 포트를 사용해야 하나요?

포트 587은 STARTTLS를 사용하는 메일 제출의 업계 표준입니다. 포트 465는 암시적 TLS에 사용되며, 포트 25는 주로 서버 간 릴레이용입니다.

내 SMTP 서버가 이메일을 거부하는 이유는 무엇인가요?

보통 인증 실패, 블랙리스트에 등재된 IP 주소, 발신자를 검증하는 SPF나 DKIM 같은 DNS 레코드 누락 때문에 거부됩니다.

직접 SMTP 서버를 운영할 수 있나요?

네. 다만 주요 제공업체에서 스팸으로 분류되지 않도록 IP 평판과 DNS 설정을 상당히 꾸준히 관리해야 합니다.

1차 출처