SMTP
SMTP는 Simple Mail Transfer Protocol의 약어다. 이름에서 볼 수 있듯이 메일 전송과 관련된 애플리케이션 계층의 프로토콜이다.

SMTP는 3개의 주요 요소가 있다.
사용자 에이전트(user agent), 메일 서버(mail server), SMTP 3개의 요소가 있다.
사용자 에이전트는 메일을 보내고 받을 수 있게해준다. 지메일, 네이버메일 등등..
메일 서버는 사용자 에이전트와 연결되어 있다. 메일 서버 안에는 메일 박스(mail box)가 존재해, 그 새 메일이 오면 메일 박스에 저장된다.
SMTP는 메일 서버 간 통신에 대한 규약이다. 전송계층으로는 TCP를 사용한다.
SMTP - 어떻게 메일 내용을 전달하는가?
SMTP 메시지 추적
SMTP도 예전에는 되게 어려운줄 알았는데 그냥 HTTP처럼 메시지를 어떻게 주고받을지에 대한 규약이기 때문에 간단하다.

와이어샤크를 통해 살펴본 SMTP 내용들. 빨간색이 내가 입력한 내용, 파란색이 메일서버에서 답변한 내용이다. SMTP는 지속적 TCP 연결을 사용하기 때문에 이렇게 한 연결에서 여러 개의 주고받은 내용들을 볼 수 있다.
일반적으로 "메일 보내기" 버튼을 눌렀을 때 전송되는 SMPT 메시지들이다.
MAIL FROM과 RCPT TO를 통해 송신자와 수신자의 메일주소를 명확히 했으며, DATA 부터 . 까지 값이 메일로 전송된다. 그리고 QUIT로 연결끊기
그래서 위 내용은 kimdoes2143@naver.com 사용자가 contact.conx@gmail.com 사용자에게 "MRCH new song is now available please listen in youtube or spotify thanks"를 보낸 것에 대한 SMTP 메시지가 된다.
물론 저 예시는 로컬호스트 및 MailHog를 띄워놓고 테스트한 것이기 때문에, 사용자 에이전트가 텔넷, 메일 서버는 MailHog가 되어 실제로 발송되지는 않는다.
SMTP 메시지 포맷
위에서 보면 알 수 있듯이 메일 내용 뿐 아니라 발송인, 수신인 등의 기타정보들도 필요하다. 따라서 SMTP는 몇 가지 추가적인 정보를 가지고있다.

가장 기본적인 정보가 발송인(From), 수신인(To), 제목(Subject)다. 지금은 굳이 제목을 안적어서 빈 칸으로 나타난 것이고,

DATA
354 End data with <CR><LF>.<CR><LF>
FROM: Kim <kim@test.com>
TO: Lee <lee@test.com>
Subject: Hello SMTP
Date: Tue, 08 Jul 2026 16:30:00 +0900
SMTP 메시지를 보낼 때 DATA에 몇 가지 정보를 더 추가하면 메일이 메일에 대한 정보를 담게된다.
SMTP - 어떻게 메일이 보내지는가?

따라서 메일이 어떤 형태로 전송되는지는 알았고, 어떻게 메일 전송버튼을 눌렀을 때 수신인의 메일서버로 메일이 도달하는지를 알아보자
A가 B에게 메일을 전송한다고할 때,
1. A는 B의 메일주소와 전달할 메시지 등을 적은 후 A의 사용자 에이전트를 통해 메일전송을 시작한다.
2. 이후 A의 메일서버로 HTTP 또는 SMTP를 이용해 메일서버의 메시지 큐에 저장된다.
3. A 메일서버는 B 메일서버로 SMTP를 이용해 메일을 보내게된다. 만약 전송에 실패한 경우 메시지 큐로 다시 돌아와 일정시간 후 재전송되게된다.
4. B 메일서버에 이메일이 정상적으로 도착하면, 메일은 B의 메일박스에 저장된다.
5. 이후 B가 B의 사용자 에이전트를 통해 메일서버에 접속한 후, HTTP 도는 IMAP을 사용해 메일을 읽어들이게된다.
메일서버를 사용하는 이유
우선은 받는 쪽에서는 메일서버를 사용해야한다. 왜냐하면 메일은 24시간 언제나 올 수 있기 때문에 도착한 메일을 제대로 수신하기 위해서는 서버가 24시간 켜져있어야하고, 이는 개인PC에서는 현실적으로 불가능하기 때문이다.
보내는 쪽 역시 메일서버를 사용해야하는데, 왜냐하면 메일 서버는 스팸메일 때문에 개인PC에서의 SMTP 연결을 거의 거부하며, 이외에도 서버 주소 찾기, SMTP 연결, TCP 연결 등의 과정을 모두 개인PC가 부담하는 것보다 메일서버를 사용하는 것이 더 낫기 때문이다.
따라서 메일서버를 통해 메일서버-메일서버 간 직접적인 통신으로 메일을 주고받는다.
추가탐구 - POP3과 IMAP
HTTP야 워낙 유명한데다가 이전에 한 번 다뤘기 때문에 상관없지만, 수신측 메일서버에서 사용자 에이전츠로 메일을 가져올 때 HTTP 또는 IMAP을 사용한다고한다.
이는 SMTP가 push 프로토콜이기 때문이다.
SMTP는 데이터를 보내는쪽에서 받는 쪽으로 연결을 시작한다. 수신측에서는 사용자 에이전트가 메일서버에 메일박스에 있는 메일을 달라고 요청하는, 즉 받는 쪽에서 연결을 시작하므로 SMTP를 사용하기에는 부적절하다. 따라서 pull 프로토콜인 IMAP 또는 HTTP를 사용한다.
※보내는쪽에서 사용자 에이전트와 메일서버 사이에서 HTTP와 SMTP를 둘 다 사용한다고했는데, 이는 SMTP는 사용자 에이전트에서 작성한 내용을 메일서버로 보내는 것, HTTP는 사용자 에이전트의 내용을 메일서버에게 메일을 보낼 것을 요청하는 식으로 구동되어, push와 pull 프로토콜이 서로 다른 접근방법을 가지고 사용된다.

IMAP과 POP3도 별로 어려울 것이 없고 단지 데이터를 어떻게 전송하고 관리하는지에 따른 프로토콜이다.
POP3 - Post Office Protocol3
메일서버에서 안읽은 메일을 가져온다. 특징으로는 유저가 메일을 읽으면 이를 로컬(사용자의 PC)에 저장하고 서버에서 메일을 지운다. (요즘에는 서버 옵션에 따라 안지우는 경우도 있다.)
과거에는 항상 인터넷에 연결되어있지 않았으므로 메일을 로컬에 저장해 네트워크 비연결 상황에서도 메일을 볼 수 있게끔 이 조치를 취했다. Outlook과 같은 로컬메일 에이전트에서 주로 사용됐고, 지메일이나 네이버메일같은 웹메일에서는 잘 사용되지 않는다.
IMAP - Internet Mail Access Protocol
역시 메일서버에서 메일을 가져온다. 메일서버에서 메일을 관리하며, 사용자 에이전트 측에서는 메일서버에서 매번 메일을 읽어온다. 다중로그인 역시 가능하기 때문에 현대 웹메일에서 주로 사용된다.
'CS > 컴퓨터 네트워크' 카테고리의 다른 글
| [네트워크] P2P와 비트토렌트 프로토콜 (0) | 2026.07.10 |
|---|---|
| [네트워크] DNS란? (0) | 2026.07.08 |
| [네트워크] 애플리케이션 계층 개요 및 HTTP 프로토콜 (0) | 2026.07.06 |
| [네트워크] 지연과 패킷손실, 네트워크 계층 프로토콜 (0) | 2026.07.01 |
| [네트워크] 인터넷이란 무엇인가? (0) | 2026.06.30 |
