본문 바로가기
CS 지식/네트워크

[네트워크] 이메일 시스템과 프로토콜(SMTP, IMAP, POP, HTTP)

by 코딩하는 동현 2025. 4. 4.

1. 이메일 시스템

이메일 시스템은 크게 세 가지 요소로 구성된다:

  1. User Agent (UA): 이메일을 작성하고 읽는 클라이언트 프로그램 (예: Outlook, Gmail 등)
  2. Mail Server: 사용자 메일박스를 관리하고 메시지를 저장
  3. SMTP(Simple Mail Transfer Protocol): 메일 서버 간 메시지를 전송하는 프로토콜

메일 서버는 다음 두 가지 주요 구조를 가진다:

  • Mailbox: 사용자의 수신 메시지를 저장하는 공간
  • Message Queue: 전송 대기 중인 아웃고잉 메시지를 임시 저장하는 큐 즉, 메일 서버는 수신된 메시지를 저장하고, 발신 메시지를 다른 메일 서버로 전송하는 두 가지 역할을 동시에 수행한다.

이메일의 전송 과정은 다음과 같다:

  • 사용자는 User Agent를 통해 이메일을 작성하고 메일 서버에 보낸다.
  • 메일 서버는 메시지를 Outgoing Message Queue에 저장한다.
  • 이 메일 서버는 수신 측 메일 서버와 TCP 연결(port 25) 을 맺고 메시지를 전송한다.
  • 수신 메일 서버는 메시지를 수신자의 Mailbox에 저장한다.

SMTP는 클라이언트-서버 모델을 따르며, 메일 송신 측 서버가 클라이언트 역할을 한다.

이 프로토콜은 RFC 5321에 정의되어 있고, ASCII 기반의 명령과 응답으로 구성된다.

메시지는 반드시 7-bit ASCII로 전송되어야 하며, 멀티미디어 파일 전송은 첨부파일 형태로 MIME을 통해 처리한다.


2. SMTP(Simple Mail Transfer Protocol)

SMTP는 메일 서버 간 이메일을 전송하기 위한 프로토콜이다.

RFC 5321에 정의되어 있으며, 신뢰성 있는 전송을 위해 TCP를 사용한다.

포트 번호는 25번이 기본이다.

2.1 SMTP의 동작 방식

  • 클라이언트: 이메일을 보내는 측의 메일 서버 (발신 서버)
  • 서버: 이메일을 받는 측의 메일 서버 (수신 서버)

SMTP는 direct transfer 방식으로 동작하며, 세 가지 단계로 이루어진다:

  1. SMTP Handshaking (인사/연결 수립)
  2. 메시지 전송 (Command/Response 방식)
  3. 연결 종료 (Closure)

2.2 명령/응답 구조

  • 명령: ASCII 텍스트 기반
    • 예: HELO, MAIL FROM:, RCPT TO:, DATA, QUIT
  • 응답: 상태 코드 + 설명
    • 예: 250 OK, 354 Start mail input

3. 이메일 전송 시나리오 (Alice → Bob)

  1. Alice는 UA(User Agent)를 이용해 Bob에게 보낼 이메일을 작성한다. (예: bob@someschool.edu)
  2. Alice의 UA는 SMTP를 통해 작성한 메시지를 그녀의 메일 서버로 전송한다. 이 메시지는 메시지 큐에 저장된다.
  3. Alice의 메일 서버(SMTP 클라이언트)는 TCP 연결을 열어 Bob의 메일 서버에 접속한다.
  4. SMTP 명령을 통해 메시지를 전송한다.
  5. Bob의 메일 서버는 메시지를 Bob의 메일박스에 저장한다.
  6. Bob은 자신의 UA를 통해 메시지를 확인한다.


4. SMTP vs HTTP

항목 SMTP (Simple Mail Transfer Protocol) HTTP (HyperText Transfer Protocol)
연결 방식 Persistent 연결 Non-persistent 또는 Persistent 연결
동작 방식 Push 방식 (발신 메일 서버가 수신 메일 서버에 직접 전송) Pull 방식 (클라이언트 요청에 서버가 응답)
명령/응답 ASCII 텍스트 기반 명령과 상태 코드 응답 ASCII 텍스트 기반 명령과 상태 코드 응답
메시지 구성 헤더 + 본문, 여러 객체를 multipart로 전송 각 객체를 개별 응답 메시지로 전송
메시지 형식 7-bit ASCII만 허용 (멀티미디어 전송 시 MIME 사용) 바이너리 포함 가능 (제한 없음)
종료 방식 메시지 종료를 CRLF.CRLF 또는 Control-Z 등 특별한 구분자로 표시 Content-Length 또는 Chunked Encoding 방식 사용
사용 포트 기본 포트 25번 사용 기본 포트 80(HTTP) 또는 443(HTTPS) 사용
보안 기본적으로 없음 (TLS 등 추가 보안 계층 필요) HTTP/3는 TLS를 기본 포함 (보안 내장)

SMTP는 1980년대부터 사용된 오래된 프로토콜로, 당시 멀티미디어 데이터가 없던 시절을 반영하여 ASCII 기반으로 설계되었다. 반면 HTTP는 2015년 HTTP/2, 2020년대 HTTP/3로 발전하며, 멀티미디어, 보안, 병렬성 등을 모두 고려한 최신 프로토콜로 자리 잡고 있다.


5. 이메일 메시지 형식

이메일 메시지 자체는 SMTP 명령과는 다른 RFC 2822에 의해 정의된 문서 형식을 따른다.

이 형식은 HTML이 웹 문서를 정의하는 것과 비슷하게, 이메일 메시지의 구조를 정의한다.

5.1 헤더(Header)

  • To: 수신자
  • From: 발신자
  • Subject: 제목 이들은 모두 메시지 본문 상단의 헤더 필드에 위치하며, SMTP 명령의 MAIL FROM: 및 RCPT TO:와는 구분된다.

5.2 본문(Body)

  • 메시지 본문은 헤더 이후 빈 줄(blank line) 다음에 위치한다.
  • 기본적으로 ASCII 문자만 허용된다.
  • 멀티미디어 전송 시 MIME 형식을 사용하고 첨부파일로 포함한다.

6. 메시지 종료 방식

SMTP는 메시지의 끝을 CRLF.CRLF (줄바꿈 + 점 + 줄바꿈) 로 구분한다.

이는 메시지 본문과 다음 명령을 명확히 구분하기 위한 방식이다.


7. 메일 접근 프로토콜: IMAP, POP, HTTP

SMTP는 메일 서버 간 메시지를 전달하는 프로토콜인 반면, 사용자가 메일을 서버에서 읽기 위해 사용하는 것은 메일 접근 프로토콜이다.

  • IMAP (Internet Mail Access Protocol): 서버에 저장돼 있는 메시지를 읽고 관리 (폴더, 삭제, 상태 유지 등)
  • POP (Post Office Protocol): 메시지를 다운로드한 뒤 서버에서 삭제
  • HTTP: 웹 기반 메일 서비스 (예: Gmail, Naver Mail 등)

IMAP은 서버에서 메일을 유지하며 다기능을 제공하고, POP은 단순히 로컬로 다운로드하는 방식이다. HTTP는 웹 클라이언트를 통해 이메일을 주고받는 방식을 의미하며, 실제로는 내부에서 SMTP와 IMAP 또는 POP이 함께 동작한다.


정리

  • 이메일은 SMTP를 통해 전송되며, IMAP/POP/HTTP를 통해 수신 및 읽기 기능이 제공된다.
  • SMTP는 메일 서버 간 메시지를 전송하기 위한 push 기반 프로토콜이다.
  • 메시지는 TCP를 통해 직접 연결되어 전송되며, 클라이언트-서버 모델을 따른다.
  • 메시지 형식은 헤더 + 본문으로 구성되며, 7-bit ASCII만 허용된다.
  • SMTP와 HTTP는 둘 다 ASCII 명령/응답 구조를 따르지만, 동작 방식과 메시지 구조에 차이가 있다.
  • 이메일 전송 이후, 사용자는 IMAP, POP, 또는 HTTP를 통해 메일 서버에서 메시지를 읽을 수 있다.
반응형

댓글